Forum: Mikrocontroller und Digitale Elektronik STM32 Timer Frequenzgenerator


von Diode (Gast)


Lesenswert?

Hallo
Normalerweise wird ein frequenzgenerator im PWM modus mit 50% duty 
generiert. Das problem welches ich dabei habe: Bei einer 
frequenzänderung müssen sowohl das comperatorregister sowie der preload 
wert angepasst werden. Da ich fix 50% duty benötige daher die frage wie 
ich dies effizienter machen könnte. Meine Idee war Up/Down count modus 
wobei beispielsweise während upcount Output 1 ansonsten 0. Leider sehe 
ich nicht wie ich dieses signal vom counter generieren lassen kann...

von Einstein (Gast)


Lesenswert?

Diode schrieb:
> Hallo
> Normalerweise wird ein frequenzgenerator im PWM modus mit 50% duty
> generiert. Das problem welches ich dabei habe: Bei einer
> frequenzänderung müssen sowohl das comperatorregister sowie der preload
> wert angepasst werden. Da ich fix 50% duty benötige daher die frage wie
> ich dies effizienter machen könnte. Meine Idee war Up/Down count modus
> wobei beispielsweise während upcount Output 1 ansonsten 0. Leider sehe
> ich nicht wie ich dieses signal vom counter generieren lassen kann...

kannst du deine Problematik genauer schildern?
Mit so wenig Informationen bekommst du hier nichts!

von Christian J. (Gast)


Lesenswert?

Diode schrieb:
> Das problem welches ich dabei habe: Bei einer
> frequenzänderung müssen sowohl das comperatorregister sowie der preload
> wert angepasst werden.

Und wo ist da das Problem? Sowohl der Compare Reload als auch der ARR 
Reload erzeugen Interrupts und die Berechnung des neuen Compare ist eine 
einzige /2 Teiler Operation.

Wenn der Int fired lädst du die Preloads neu und beim nächsten Durchlauf 
spielen die ihre Werte ein bis sie wieder geändert werden.

Sehe da kein Problem....

von Diode (Gast)


Lesenswert?

Nun die Idee ist, dass ich direkt per DMA die Frequenz update (also DMA 
direkt ins register).
Duty soll immer 50% sein. Wenn ich nun 2 Register, (wobei das eine mit 
dem Wert und das andere mit dem Wert/2), sehe ich nicht wie dies durch 
DMA gehen soll.

von Hermann S. (diphtong)


Lesenswert?

Servus,

treibe mit einem STM32 eine Induktionsheizung an. Steuerung rein über 
die Frequenz. Da ich ein symmetrisches PWM Signal (Timer1 CH1 + CH1N) 
benötige, brauche ich auch immer 50 % Dutycycle. ARR kann ich variabel 
mit einem Encoder einstellen.

Ich teile im Programm einfach ARR/2, das ist dann der Wert für das CCR 
Register.

Ganz einfach eigentlich...

Gruß

von Diode (Gast)


Lesenswert?

Einstein schrieb:
> kannst du deine Problematik genauer schildern?

Klar, Gegeben:
Variable im Ram an der Adresse A

Gesucht:
Ständig updatende Frequenz am pin des STM mit 50% Duty welche 
countclk/(2*variablenwert an der Adresse A) entspricht.

Weitere einschränkungen:
Dies soll möglichst ohne aktive beteiligung der CPU erfolgen (abgesehen 
von setup).

von Bauform B. (bauformb)


Lesenswert?

Vielleicht geht es so: Man nehme einen Timer, der runter zählt und bei 
einem festen Wert (z.B. 1) per Output Compare den Pin toggelt. Das gibt 
zwar nur die halbe Frequenz, aber man müsste nur das Preload Register 
ändern.

von Christian J. (Gast)


Lesenswert?

Diode schrieb:
> Nun die Idee ist, dass ich direkt per DMA die Frequenz update (also DMA
> direkt ins register).

Ich bin dann mal raus... ein Timer Steuerregister per DMA zu füllen ist 
mir noch nie untergekommen, zudem da der Sinn zu hinterfragen ist, ob 
die DMA nicht schneller nachfüllt als der Timer seinen Überlauf hat. Es 
sei denn er löst dann einen Request aus. Und da drin kann man ja ARR/2 
unterbringen.

Und das ist auch alles.

von Diode (Gast)


Lesenswert?

Christian J. schrieb:
> zudem da der Sinn zu hinterfragen ist, ob die DMA nicht schneller
> nachfüllt als der Timer seinen Überlauf hat.

Genau dass soll der Sinn der Sache sein, also Periode ständig anpassen 
(auch innerhalb der periode). Voraussetzung ist, dass die comperatoren 
auf >= oder <= achten und nicht nur auf =. sonnst fliegt mir das 
ordentlich um die Ohren. Nun dass bei einer frequenzänderung während der 
Periode der Duty von 50% abweicht ist eine logische folge und ok.
Was mir etwas sorgen macht ist wenn ein update dazu führen könnte dass 2 
pulse während einer Periode generiert würden.

von Christian J. (Gast)


Lesenswert?

Diode schrieb:

> Genau dass soll der Sinn der Sache sein, also Periode ständig anpassen
> (auch innerhalb der periode). Voraussetzung ist, dass die comperatoren
> auf >= oder <= achten und nicht nur auf =. sonnst fliegt mir das
> ordentlich um die Ohren.

Ich glaube hier will einfach jemand veralbern oder reden um zu reden.
Bin raus, dem Rest weiterhin viel Spass.

von m.n. (Gast)


Lesenswert?

Diode schrieb:
> Was mir etwas sorgen macht ist wenn ein update dazu führen könnte dass 2
> pulse während einer Periode generiert würden.

Kein Problem. Dafür gibt es den Turbo-Modus, der bis zu 256 
Impulse/Periode liefert. Man braucht nur den passenden Timer dazu.

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.