STM32 Preload Dutycycle aktivieren

Gast #6110645
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
Persönliche Seite #6110654
"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...
Gast #6110716
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?
#6110785
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.
Gast #6110806
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.