Forum: Mikrocontroller und Digitale Elektronik STM32: variable PWM - prescaler und counter


von Frank B. (fbergemann)


Lesenswert?

Hat jemand eine Referenz (Dokumentation/Diskussion) für eine PWM, die 
sich über die Zeit ändert (d.h. nachgeführt wird)?

Wenn der counter-Bereich ausgereizt ist oder zu klein wird, als dass man 
die on/off Phasen ausreichend genau einstellen kann, dann muss man den 
prescaler ändern. Aber das wiederum bedeutet, dass man auch den counter 
anpassen muss. Damit wiederum müssen zwei Register geändert werden, 
aber ohne, das es dabei zu Sprüngen kommt. Und generell gibt's eine 
Überlappung der Einstell-Möglichkeiten für die Frequenz über prescaler 
und counter. Da ist die Frage, ab wann man den prescaler heranziehen 
sollte.

Das muss ja ein Standard-Problem sein, das irgendwo schon ausführlich 
diskutiert wurde. Kann da jemand auf Literatur oder eine passende 
Internet-Seite verweisen? (vielleicht gibt's da sogar hier lokal etwas 
weiterführendes?)

- Danke!

von Herzrasen (Gast)


Lesenswert?

Bahnhof?

von Benedikt S. (Gast)


Lesenswert?

Die großen stms hab doch 32 counter. Reicht das nicht (in dem Fall 
einfach keinen prescaler nehmen und die clock auf 100 MHz stellen) ?

Wenn du die frequenz so stark ändern willst dann musst du den prescaler 
ändern hilft nix.

von Benedikt S. (Gast)


Lesenswert?

Ich meine natürlich 32 bit counter der stm32h743 hat sogar hight 
resolution pwm outputs mit delay Stufen.

https://www.st.com/resource/en/application_note/dm00121475-hrtim-cookbook-stmicroelectronics.pdf

Hilft dir das?

von Frank B. (fbergemann)


Lesenswert?

> Die großen stms hab doch 32 counter.
> Reicht das nicht (in dem Fall einfach keinen prescaler nehmen
> und die clock auf 100 MHz stellen) ?

Der Wald und die Bäume. Ja, in meinem konkreten Fall kann ich das 
machen.

> Wenn du die frequenz so stark ändern willst
> dann musst du den prescaler ändern hilft nix.

Ich habe gerade reingesehen in 
https://www.st.com/resource/en/reference_manual/dm00224583-stm32f76xxx-and-stm32f77xxx-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf, 
25.4.1 TIM1/TIM8 control register 1 (TIMx_CR1).

Falls ich doch mal auf einen 16 Bit counter zurückgreifen müsste: 
ermöglicht TIMx_CR1:UDIS (erst #1, dann #0) die simultane Übernahme von 
SC und ARR - wenn man beide updaten muss?

> 
https://www.st.com/resource/en/application_note/dm00121475-hrtim-cookbook-stmicroelectronics.pdf

Danke! - das sehe ich mir an.

: Bearbeitet durch User
von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Frank B. schrieb:
> Falls ich doch mal auf einen 16 Bit counter zurückgreifen müsste:
> ermöglicht TIMx_CR1:UDIS (erst #1, dann #0) die simultane Übernahme von
> SC und ARR - wenn man beide updaten muss?

25.4.11     TIM1/TIM8     prescaler     (TIMx_PSC)
The counter clock frequency (CK_CNT) is equal to fCK_PSC / (PSC[15:0] + 
1).PSC contains the value to be loaded in the active prescaler register 
at each update event...

Die Übernahme der neuen Werte erfolgt doch sowieso erst wenn das nächste 
Update ansteht und nicht sofort. Wenn du zu den Zeitpunkt erst einen 
Teil der Reg. verändert hast, hast du halt verloren. Timing ist alles:-)

von Phantomix X. (phantomix)


Lesenswert?

Irgend W. schrieb:
> Die Übernahme der neuen Werte erfolgt doch sowieso erst wenn das nächste
> Update ansteht und nicht sofort. Wenn du zu den Zeitpunkt erst einen
> Teil der Reg. verändert hast, hast du halt verloren. Timing ist alles:-)

Danke. Die Möglichkeit, das beim Update übernehmen zu lassen wollt ich 
auch schon vorschlagen. Hab vor gefühlt 8 Jahren das mal für ein Projekt 
gebraucht ("Sendersuchlauf" über PWM um die 600 kHz)

Man könnte auch einen hochpriorisierten Interrupt nehmen der beim 
Update-Event kommt und dann für das nächste Update die Werte richtig 
setzt. Den Interrupt lässt man natürlich nicht dauerhaft an sondern 
benutzt ihn als "one-shot" falls man die Werte aktualisieren muss.

von Frank B. (fbergemann)


Lesenswert?

Den Hinweis mit dem one-shot Interrupt werde ich mir merken -> Danke!

Aber keiner hat bestätigt, ob TIMx_CR1:UDIS auch eine Option ist, um die 
Übernahme von neuen Werten für prescaler und counter gleichzeitig 
durchführen zu lassen(?)

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.