Forum: Mikrocontroller und Digitale Elektronik STM32 Timer Frequenzgenerator


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
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. (Firma: privat) (christianj)


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....

: Bearbeitet durch User
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. (Firma: privat) (christianj)


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. (Firma: privat) (christianj)


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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.