Verständnisfrage PWM mit AVR

#7772754
Lesenswert?

Hallo,

ich benötige für eine Antriebssteuerung ein 6,5 kHz PWM Signal, welches ich mit einer Duty-Auflösung von 12 Bit erzeugen möchte.

Nun habe ich schon einiges gelesen, dass man das mit einem Timer machen könnte. Allerdings komme ich mit diesem ganzen Kram um den "Prescaler" nicht klar. Könnte mir das mal jemand erklären ? Danke

Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht klar.

Wolfgang

#7772758
Lesenswert?

Wolfgang schrieb:

Hallo,

ich benötige für eine Antriebssteuerung ein 6,5 kHz PWM Signal, welches ich mit einer Duty-Auflösung von 12 Bit erzeugen möchte.

Dafür braucht man 26MHz Takt. Das können nur die Xmega oder ggf. die noch neueren AVRs, welche bis zu 32 MHz schaffen.

Nun habe ich schon einiges gelesen, dass man das mit einem Timer machen könnte. Allerdings komme ich mit diesem ganzen Kram um den "Prescaler" nicht klar. Könnte mir das mal jemand erklären ?

Was soll man da groß erklären? Stell den Timer korrekt ein und gut. Soviele Register gibt es da nicht.

Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht klar.

Dort liegt also das Problem. Naja, dann wird es schwierig. Welchen AVR willst du denn benutzen? Am Ende ist es einfacher, die drei Registereinstellungen dir zu geben als den Kram im Detail zu erklären.

(Firma: Funkenflug Industries) #7772760
Lesenswert?

Da kann man glücklicherweise gleich ein X dranmachen, mit einem Standard-AVR geht das nicht, Du brauchst einen, bei dem ein Zähler über eine PLL getaktet werden kann.

Für 12 Bit brauchst Du 4096*6500Hz=26,624MHz. Der Standard-AVR kann nur 16Mhz, heißt bei 12 Bit wären nur 3,906kHz möglich, bei 11 Bit 7,8125kHz.

Frag mich jetzt bitte nicht, welche AVRs eine PLL haben. Ich weiß, daß es welche gibt, die dann glaube ich 64Mhz schaffen - aber aus dem Kopf weiß ich nicht welche das sind.

Und dann lerne die Datenblätter zu lesen. Der Teil über die Zähler und ihre extrem vielseitigen Möglichkeiten ist lang, den wird Dir keiner erklären wollen. Da bin ich wahrscheinlich schneller, wenn ich Dir einfach selbst den Code dafür schreiben würde.

#7772776
Lesenswert?

Hallo, Falk B. schrieb im Beitrag #7772758:

Dafür braucht man 26MHz Takt. Das können nur die Xmega oder ggf. die noch neueren AVRs, welche bis zu 32 MHz schaffen.

Verstehe ich nicht ? Warum diese hohe Taktrate für 6,5 kHz ?

Falk B. schrieb:

Dort liegt also das Problem. Naja, dann wird es schwierig. Welchen AVR willst du denn benutzen? Am Ende ist es einfacher, die drei Registereinstellungen dir zu geben als den Kram im Detail zu erklären.

eigentlich hatte ich mit einem kleinen ATTiny412 geliebäugelt. Mehr als 3 Pins benötige ich nicht. Einen als Eingang, und zwei Ausgänge - einer davon das PWM Signal.

Wolfgang

#7772820
Lesenswert?

Wolfgang schrieb:

Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht klar.

Ohne Erfahrung im Englisch-Lesen ist das schwierig. Technisches Englisch ist einerseits zwar erheblich einfacher als z. B. Shakespeare- oder Sun-Englisch, aber andererseits oft nicht 100%ig sprachlich korrekt und didaktisch gut, sodass man es nur versteht, wenn man einen Teil davon bereits kennt. Wenn man z. B. weiß, was manche Timer in manchen µPs grundsätzlich so alles können, ist es einfach – wenn man so was aus vielen Datenblättern erst lernen muss, ist es schwierig. Datenblätter sind halt keine Lehrbücher.

Je nachdem, wie alt du bist, kann es sich lohnen, dein Englisch zu verbessern. Es geht IMHO nichts über Lese-Erfahrung. Irgendwann liest du es fast wie Deutsch, aber bis dahin dauert es eben.

(Firma: Jasinski) #7772959
Lesenswert?

Es ist leider wieder einmal eine sinnlose Diskussion, die von vielen nur noch unnötig befeuert wird – denn sie ähnelt dem Versuch, jemandem, der nicht alphabetisiert ist und auch nicht gewillt ist, diesen Zustand bei sich zu ändern, zu erklären, was ein Sonett ist und wie man ein schreiben könnte.

#7772977
Lesenswert?

Wolfgang schrieb:

Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht klar.

Wenn Du von AVR abweichen kannst/willst, würde ich Dir ein RP2040 Pico-Board zur Umsetzung empfehlen. Das ist günstig, hat die passende Hardware und es findet sich bestimmt eine deutsche Beschreibung der Arduino-IDE, mit der das einfach umzusetzen ist. Ggf. ein Übersetzungsprogramm verwenden.

#7772989
Lesenswert?

Wolfgang schrieb:

ich benötige für eine Antriebssteuerung ein 6,5 kHz PWM Signal, welches ich mit einer Duty-Auflösung von 12 Bit erzeugen möchte.

Woher kommen diese beiden Zahlen? Schon bei 11 Bit dürfte keiner mehr 2 Schritte unterscheiden können.

Man kann außerdem eine PWM zyklisch umschalten, die Trägheit filtert das eh raus. Ich hab so mal noch 3 Bits hinzugefügt.

Beitrag #7773016 wurde von einem Moderator gelöscht.
#7773021
Lesenswert?

Wolfgang schrieb:

ich benötige für eine Antriebssteuerung ein 6,5 kHz PWM Signal, welches ich mit einer Duty-Auflösung von 12 Bit erzeugen möchte.

Man könnte den ATtiny24 nehmen, der geht offiziell bis 20MHz. Für ein Einzelmuster läuft der auch mit 26MHz, man kann ja VCC auf 5,5V stellen, so als Reserve. Er hat einen 16 Bit Timer, der die 12 Bit PWM erzeugen kann. Mit DIL14 Gehäuse auch relativ klein. Wenn Bedarf besteht, kann ich die Software beisteuern, ist ja praktisch nix. Dazu müßte ich aber wissen, das der Eingang und der 2. Ausgang machen sollen.

#7773030
Lesenswert?

Falk B. schrieb:

Was ist das denn wieder für eine unsinnige Aussage?

Nö. Damit ist gesagt, daß zu einer korrekten Spezifikation auch immer die Angabe der Toleranz gehört. Z.B. auf Netzteilen steht ja nicht aus Langeweile 47-63Hz drauf. Daß diverse Edelbastler mit dem Begriff Toleranz nicht anzufangen wissen, war mir natürlich klar.

Falk B. schrieb:

Davon war nie die Rede! Es geht nicht um PC Lüfter!

Ist es jetzt sogar schon verboten, Beispiele zu nennen?

#7773063
Lesenswert?

Wolfgang schrieb:

Allerdings komme ich mit diesem ganzen Kram um den "Prescaler" nicht klar. Könnte mir das mal jemand erklären ? Danke

Leider komme ich auch mit diesen ganzen englischen Anleitungen nicht klar.

Wolfgang

Hallo,

mit einem 20MHz getakteten ATmega/AVR mit 16 Bit Timer, kommt man für 6,5kHz auf eine Auflösung von 1537 Abstufungen, also etwas mehr wie 10Bit.

Wenn du auch mit 4883Hz leben kannst, sind 12Bit möglich.

Das Grundprinzip ist immer gleich. https://forum.arduino.cc/t/arduin-timer0-timer1/498801/5

Alle Werte kannste vorwärts und rückwärts rechnen bis du deine Einstellung gefunden hast und den passenden Controller dazu.

Beitrag #7773071 wurde von einem Moderator gelöscht.
#7773208
Lesenswert?

Hallo,

eine Anmerkung zu den besagten 26,6MHz MCU Takt die im Thread auftauchen. Damit sind die 6,5kHz mit 12Bit nur im Fast-PWM Mode möglich, wenn man sich auf ältere Controller Typen wie ATmega328P oder ATtiny24 o.ä. bezieht. Allerdings erzeugt der Fast-PWM Mode mit Compare Value 0 einen Nadelimpuls. Nimmt man einen anderen glitch free PWM Mode benötigt man die doppelte MCU Taktfrequenz für das gleiche Ziel. Praktisch nicht machbar.

Neuere AVRs mit ihren TCA, TCB u.ä. Timertypen schaffen mit 26,6MHz nur 11Bit Auflösung. Wenn es wirklich unbedingt 12Bit sein müssen, benötigt es einen mit PLL für den Timer.

(Firma: Funkenflug Industries) #7773361
Lesenswert?

Allerdings erzeugt der Fast-PWM Mode mit Compare Value 0 einen Nadelimpuls.

Man kann den PWM-Generator invertiert betreiben wenn ich mich recht erinnere. Dann verlagert sich der Nadelimpuls an das obere Ende, d.h. man erreicht kein Dauer-Ein wenn man den Ausgang dafür nicht umschaltet. Alternativ kann man auch bei Sollwert 0 einfach den Pin abschalten, dann ist der Nadelimpuls weg.

Kommt halt drauf an, welcher Regelbereich gefordert wird. Wenn man bei 12 Bit z.B. 2048+-2000 möchte, interessiert dieser Nadelimpuls nicht weil die Regelung gar nicht bis auf auf Null herunterläuft.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren