Forum: Mikrocontroller und Digitale Elektronik PWM Generator bauen


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 Ingo L. (corrtexx)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
ich würde gern auf Basis eines STM32F0 einen PWM-Generator bauen. Dieser 
hat leider nur 16 Bit Timer. Aber dafür hat er auch einen 16 Bit 
Prescaler. Jetzt soll das Ding Frequenzen im Bereich 1-20kHz mit 1Hz 
Auflösung (kleinstes Increment) besitzen. Jetzt Frage ich mich, wie man 
also den Zählumfang und den Prescaler sinnvoll miteinander verheiratet. 
So wie ich das sehe, läuft der µC zu langsam um den gewünschten Bereich 
ab zu decken, denn:
1/((1/19999)-(1/20000)) = 399,98MHz. Was also tun? Ich steh grad etwas 
auf dem Schlauch :(

von M. K. (sylaina)


Bewertung
0 lesenswert
nicht lesenswert
Ingo L. schrieb:
> Was also tun? Ich steh grad etwas
> auf dem Schlauch :(

Einen Schritt zur Seite machen ;)

Ne, mal im Ernst. Was genau hast du da gerechnet? Du hast also eine 16 
bit PWM. Deren Frequenz soll variable von 1 Hz bis 20 kHz einstellbar 
sein. Am schnellsten muss du also bei 20 kHz sein.
Die nötige Timer-Frequenz ergibt sich hier zu

Und ja, du hast recht: Mit deinem Wunschcontroller wird das ganz schön 
knapp. Auf der anderen Seite: Wozu braucht man einen 20 kHz PWM mit 
einer 16 Bit Auflösung? Ich bin sicher keine Referenz und hab auch 
sicher bei weitem noch nicht alles gesehen/gehört usw. aber, 
insbesondere bei hohen Frequenzen der PWM ist mir bisher noch nichts 
über den Weg gelaufen, dass dabei mehr als 12 Bit hatte. Und 12 Bit sind 
ja auch schon ordentlich.

von Ingo L. (corrtexx)


Bewertung
1 lesenswert
nicht lesenswert
Ich habe max. 16Bit. Daraus resultierend, wie du schon angemerkt hast, 
würde ich für 20kHz@16Bit 1,xyGHz benötigen. Deswegen wird ja der 
Zählumfang an die Frequenz angepasst (Top-Wert). Damit ist der Topwert 
für 20kHz@48MHz => 2400 Incremente (genau 2399+1). Allerdings würde ich 
für 19999Hz 2400,1 Incremente benötigen. Geht also nicht. Also rechne 
ich mit aus, mit welcher Frequenz dieser Schritt möglich ist => 
399,98MHz.

von Falk B. (falk)


Bewertung
1 lesenswert
nicht lesenswert
@ Ingo Less (corrtexx)

>ich würde gern auf Basis eines STM32F0 einen PWM-Generator bauen. Dieser
>hat leider nur 16 Bit Timer.

Reicht das nicht?

> Aber dafür hat er auch einen 16 Bit
>Prescaler. Jetzt soll das Ding Frequenzen im Bereich 1-20kHz mit 1Hz
>Auflösung (kleinstes Increment) besitzen.

Vergiss es.

>also den Zählumfang und den Prescaler sinnvoll miteinander verheiratet.
>So wie ich das sehe, läuft der µC zu langsam um den gewünschten Bereich
>ab zu decken, denn:
>1/((1/19999)-(1/20000)) = 399,98MHz.

Ob die Rechnung stimmt? Differenzen und Summen und so. Trotzdem ist die 
Schlußfolgerung richtig. Du schaffst bei 20kHz keine 1Hz 
Frequenzauflöung. Brauchst du die WIRKLICH? Oder ist das einfach nur so 
gesagt, weil es gut klingt?

Für 1 Hz Frequenzauflösung brauchst du einen DDS-IC.

> Was also tun?

Die unsinnige Anforderung nach 1 Hz Auflösung bei hohen Frequenzen 
fallen lassen.

Beispielrechnung.

Bei 100MHz Timertakt hat man bei 20 kHz

100 MHz / 20 kHz = 5000 Schritte pro PWM-Zyklus, das sind ~12 Bit 
Auflösung.

Wenn man 5001 Schritte einstellt, sind es

100 MHz / 5001 = 19,996 kHz.

Man hat hier also ~4 Hz Auflösung. In Richtung niedriger Frequenzen wird 
diese besser, bei 10kHz hat man schon 1Hz Schrittweite, bei 1khz hat man 
100.000 Takte / PWM Zyklung (~17 Bit Auflösung) bzw. 0,01 Hz 
Schrittweite.

Ich würde einfach bei höheren Frequenzen mit 5 oder 10 Hz Schrittweite 
arbeiten und gut, bei kleineren halt mit weniger.

von Ingo L. (corrtexx)


Bewertung
0 lesenswert
nicht lesenswert
Das sehe ich auch so Falk.

> Brauchst du die WIRKLICH?
Nein, es ist ein Bastellprojekt, bei dem ich die Spezifikationen selber 
definiere. Denkbar wären durchaus auch 10Hz Schritte bei >10kHz. Hinzu 
kommt der Umstand, dass der Tastgrad in 0,1% Schritten verstellbar sein 
soll. Wobei ich jetzt schon sehe, dass 1% ausreichen sind und 0,1% nicht 
umsetzbar. Der Fehler sollte aber die 1% auch nicht übersteigen, tun sie 
ja aber auch nicht, so wie ich das sehe. Im Prinzip ist das hier gerade 
die Vorplanung

von m.n. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Was Du bislang beschreibst ist ein Frequenzgenerator. Wie soll denn das 
min.-max. Tastverhältnis der PWM sein?
Höhere Auflösung bietet ein schneller STM32F4xx, der ggf. mit 200 MHz 
bzw. 5 ns Auflösung läuft.

von Pandur S. (jetztnicht)


Bewertung
-3 lesenswert
nicht lesenswert
> Nein, es ist ein Bastellprojekt, bei dem ich die Spezifikationen selber
definiere. Denkbar wären durchaus auch 10Hz Schritte bei >10kHz. Hinzu
kommt der Umstand, dass der Tastgrad in 0,1% Schritten verstellbar sein
soll. Wobei ich jetzt schon sehe, dass 1% ausreichen sind und 0,1% nicht
umsetzbar. Der Fehler sollte aber die 1% auch nicht übersteigen, tun sie
ja aber auch nicht, so wie ich das sehe. Im Prinzip ist das hier gerade
die Vorplanung


Bestehend aus akademischen Fürzen. 1Hz Aufloesung, 0.1% Tastgrad 
Ausloesung 1% Fehler...

... Flupp in die Tonne.

von M. K. (sylaina)


Bewertung
0 lesenswert
nicht lesenswert
Sabberlott W. schrieb:
> Bestehend aus akademischen Fürzen. 1Hz Aufloesung, 0.1% Tastgrad
> Ausloesung 1% Fehler...
>
> ... Flupp in die Tonne.

War das jetzt wirklich notwendig?

Ingo L. schrieb:
> Nein, es ist ein Bastellprojekt, bei dem ich die Spezifikationen selber
> definiere. Denkbar wären durchaus auch 10Hz Schritte bei >10kHz.

Dann würde ich es auch genau so umsetzen. Sollte dann mit einem STM32F0 
so kein Problem mehr darstellen. Was solls denn genau werden? Nur ein 
PWM-Generator oder doch, wie m.n. schon schrieb, etwas Richtung 
Frequenzgenerator?

von Ingo L. (corrtexx)


Bewertung
0 lesenswert
nicht lesenswert
m.n. schrieb:
> Wie soll denn das
> min.-max. Tastverhältnis der PWM sein?
0...100%

Sabberlott W. schrieb:
> Bestehend aus akademischen Fürzen. 1Hz Aufloesung, 0.1% Tastgrad
> Ausloesung 1% Fehler...
>
> ... Flupp in die Tonne.
Unnötig

M. K. schrieb:
> Was solls denn genau werden? Nur ein
> PWM-Generator oder doch, wie m.n. schon schrieb, etwas Richtung
> Frequenzgenerator?
Ein PWM-Generator mit 1-20kHz, Frequenzeinstellbereich so klein wie 
möglich, Tastgrad 0...100%.

m.n. schrieb:
> Was Du bislang beschreibst ist ein Frequenzgenerator.
Ich sehe da keinen Unterschied. Mein PWM Generator bekommt allerdings 
einen Ausgang, der direkt zum Ansteuern von IGBT oder MOSFETs geeignet 
ist (Treiber).

: Bearbeitet durch User
von M. K. (sylaina)


Bewertung
0 lesenswert
nicht lesenswert
Ingo L. schrieb:
> m.n. schrieb:
>> Was Du bislang beschreibst ist ein Frequenzgenerator.
> Ich sehe da keinen Unterschied. Mein PWM Generator bekommt allerdings
> einen Ausgang, der direkt zum Ansteuern von IGBT oder MOSFETs geeignet
> ist (Treiber).

Ich denke m.n. wollte hierbei darauf abzielen, ob du vielleicht einen 
Frequenzgenerator bauen möchtest, der mehr als nur einen Rechteck 
ausgeben kann ;)

von Ingo L. (corrtexx)


Bewertung
0 lesenswert
nicht lesenswert
M. K. schrieb:
> Ich denke m.n. wollte hierbei darauf abzielen, ob du vielleicht einen
> Frequenzgenerator bauen möchtest, der mehr als nur einen Rechteck
> ausgeben kann ;)
Achso... Nein. Sonst hätte ich tatsächlich ein DDS-IC verwendet. Die 
sind ja im Allgemeinen sehr umgänglich was deren Ansteuerung betrifft.

von Sebastian S. (amateur)


Bewertung
0 lesenswert
nicht lesenswert
Vielleicht ist eine analoge Lösung sinnvoller.
Ein sauberer Sägezahn bzw. ein sauberes Dreieck, plus einem flotten 
Komparator und die Sache sollte gegessen sein.
Je nach Aufbau (Signalqualität) sollte dieser Bereich machbar sein.

Ich kenne ja den STM32 nicht, kann man denn nicht mit den Vorteilern 
"spielen" und die Frequenzen in zwei oder mehr Bereichen generieren?
Allerdings ist es dann mit Inkrementen von 1,000000000 Hz vorbei. Würde 
mich wundern, wenn so etwas überhaupt machbar wäre.

Wie so oft gilt auch hier: Sch** Mathematik!
Die Zahlen 1 bis 20000 hinschreiben ist ja kein Problem. Einen glatten 
Teiler für 19997 hinzukriegen ist ätzend.

von m.n. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ingo L. schrieb:
> Ein PWM-Generator mit 1-20kHz, Frequenzeinstellbereich so klein wie
> möglich, Tastgrad 0...100%.

Na ja, für 0% und 100% reicht ein Umschalter plus ein Stück Kabel ;-)

Ingo L. schrieb:
> m.n. schrieb:
>> Was Du bislang beschreibst ist ein Frequenzgenerator.
> Ich sehe da keinen Unterschied.

Oh, dann denk noch mal drüber nach.
Für den AVRs habe ich ein paar Schaltungen/Programme 
(http://mino-elektronik.de/Generator/takte_impulse.htm) die allesamt mit 
8 bzw. 16 Bit Timern auskommen und lange Perioden ereugen können. Die 2. 
Schaltung bietet einstellbare Perioden- und einstellbare Impulsdauer 
jeweils per RS232. Das Prinzip läßt sich auch auf einen STM32 
übertragen.

Ich sehe gerade, daß ich exakt vor einem Jahr ein Programm dazu 
vorgstellt habe: Beitrag "Re: Frequenz Erzeugung mit avr"

von Thomas E. (picalic)


Bewertung
0 lesenswert
nicht lesenswert
Sebastian S. schrieb:
> Vielleicht ist eine analoge Lösung sinnvoller.
> Ein sauberer Sägezahn bzw. ein sauberes Dreieck, plus einem flotten
> Komparator und die Sache sollte gegessen sein.
> Je nach Aufbau (Signalqualität) sollte dieser Bereich machbar sein.

Na, dann bau das erstmal, mit der hier spezifizierten Genauigkeit. Viel 
Spass!

von Sebastian S. (amateur)


Bewertung
0 lesenswert
nicht lesenswert
@Thomas
Ein Dreieck oder Sägezahn mit 20 KHz sollte sich sehr sauber generieren 
lassen. Sowohl was die Frequenz (Quarzstabil) als auch den Pegel 
(Referenzqualität) betrifft. Old School.

Die heutigen Komparatoren arbeiten stabil bis weit in den 
Megaherzbereich.

Das Ausgangssignal ist ja per Definition digital.

Die super-speziellen und kaum bezahlbaren Bauteile kannst Du also in der 
Schublade lassen. Natürlich reicht Dein altes Steckbrett dafür nicht 
aus. Ein bissel mehr als drei Bauteile werden es auch.

von Mampf F. (mampf) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Ingo L. schrieb:
> dass der Tastgrad in 0,1% Schritten verstellbar sein
> soll.

Na also! Von 0% bis 100% sind dann 1000 Schritte notwendig ... Es reicht 
eine 10Bit PWM ;-)

Das als Basis verwenden, den Rest außenrum rechnen und anhand der 
Ergebnisse, die Spezifikation schreiben :)

von Ingo L. (corrtexx)


Bewertung
0 lesenswert
nicht lesenswert
Mampf F. schrieb:
> Das als Basis verwenden, den Rest außenrum rechnen und anhand der
> Ergebnisse, die Spezifikation schreiben :)
Ich stöppsel das mal aufn Steckbrett und gucke was bei raus kommt ;)

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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