Forum: Mikrocontroller und Digitale Elektronik STM32 Preload Dutycycle aktivieren


von RH (Gast)


Lesenswert?

Hallo,

an einem Timer des STM32F429 möchte ich gerne ein PWM Signal ausgeben, 
dessen Pulsweite ich ständig ändere. Im Datenblatt zu den Timern des µC 
habe ich bereits gelsen, dass man das Ändern des Dutycycles auf das Ende 
jeder Periode über ein Auto Preload register aktivieren kann.

Ich finde jedoch im ganzen HAL und STM32 reference Manual-Wahnsinn nicht 
das Register, über dem sich das Auto-Preload register des CCR eines 
Timers aktiveren lässt. Weiß jemand hier eventuell wo ich suchen muss 
oder, ob sich sowas eventuell auch in CubeMX direkt konfigurieren lässt?

VG

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

"The TIMx_CCRx registers can be programmed with or without preload 
registers using the OCxPE bit in the TIMx_CCMRx register."

Im CCMR register:

"Bit 3OC1PE: Output Compare 1 preload enable
0: Preload register on TIMx_CCR1 disabled. TIMx_CCR1 can be written at 
anytime, the new value is taken in account immediately.
1: Preload register on TIMx_CCR1 enabled. Read/Write operations access 
the preload register. TIMx_CCR1 preload value is loaded in the active 
register at each update event."

Einfach nur nach "preload" suchen...

von Johnny B. (johnnyb)


Lesenswert?

__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, motor_pwm);

von RH (Gast)


Lesenswert?

Ha stimmt, hätte ich auch selber drauf kommen können! Danke trotzdem...

Johnny B. schrieb:
> __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, motor_pwm);

Updated das Makro automatisch am ende des Zyklus? Muss dafür nicht 
trotzdem irgendwo das Preload-Register aktiviert werden?

von Johnny B. (johnnyb)


Lesenswert?

RH schrieb:
> Ha stimmt, hätte ich auch selber drauf kommen können! Danke trotzdem...
>
> Johnny B. schrieb:
>> __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, motor_pwm);
>
> Updated das Makro automatisch am ende des Zyklus? Muss dafür nicht
> trotzdem irgendwo das Preload-Register aktiviert werden?

Sicher bin ich nicht, aber so wie ich es verstehe ist das 
Compare-Register in das Du reinschreibst immer dasselbe, egal ob mit 
preload oder ohne.

Wenn preload abgeschaltet ist/wird...
 __HAL_TIM_DISABLE_OCxPRELOAD(_HANDLE_, _CHANNEL_)
dann wird das CCR Register wohl sofort beschrieben wenn man es mit 
__HAL_TIM_SET_COMPARE beschreibt

und wenn preload eingeschaltet ist/wird...
__HAL_TIM_ENABLE_OCxPRELOAD(_HANDLE_, _CHANNEL_)
dann wird das CCR Register nach Aufruf von __HAL_TIM_SET_COMPARE wohl 
erst beim erreichen eines neuen Zyklus übernommen.

von Guest (Gast)


Lesenswert?

Du kannst auch den DMA nutzen um die DC des PWM zu ändern. Dem DMA 
kannst du ein Array mit verschiedenen DC übergeben und nach jeder 
Periode updatet er das Register.

von Genderkorrekter Sprachwissenschaftler (Gast)


Lesenswert?

TIMx->CCMRx |= TIM_CCMRx_OCxPE;

von RH (Gast)


Lesenswert?

Genderkorrekter Sprachwissenschaftler schrieb:
> TIMx->CCMRx |= TIM_CCMRx_OCxPE;

Habe ich gerade auch im Datenblatt des STM32 gefunden! Default ist, dass 
das Preload-Register ausgeschaltet ist.

von Genderkorrekter Sprachwissenschaftler (Gast)


Lesenswert?

RH schrieb:
> Habe ich gerade auch im Datenblatt des STM32 gefunden! Default ist, dass
> das Preload-Register ausgeschaltet ist.

Und im Gegensatz zu dieser HAL Kacke nur eine Codezeile.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.