ATmega32U4 - Schaltungen - PWM

  • Hallo,


    wollte in diesem Beitrag mal ein paar Möglichkeiten vom Atemga32U4 näher bringen, da er bei vielen Schaltungen bei denen er zum Einsatz kommen könnte vernachlässigt wird. Der Controller kann bequem über das kostenlose Tool Flip programmiert werden. Es wird kein ISP Programmer benötigt.


    1. 16-Bit PWM
    Über Timer/Counter1 können 3 PWM Ausgänge angesteuert werden. Im folgenden Beispiel wird die PWM mit 16-Bit konfiguriert. Durch die 16Mhz wird bei 16-Bit eine Frequenz von 122Hz erreicht. Als Taktgeber wird ein 16Mhz Quarz verwendet. Der Interne Clockdiv wird auf 0 gesetzt.


    Berechnung der PWM Frequenz:


    fpwm = Clock/(2xVorteilerxTimertopwert) --> 16 Mhz/(2x1x65535) = ca. 122 Hz


    Über das Register ICR1 wird der Timertopwert vorgegeben.



    Das angehängte Oszibild zeigt die PWM gemessen am Ausgang PB7.


    2. 12-Bit PWM
    Über Timer/Counter1 können 3 PWM Ausgänge angesteuert werden. Über Timer/Counter3 wird 1 PWM Ausgang angesteuert. Im folgenden Beispiel wird die PWM mit 12-Bit konfiguriert. Durch die 16Mhz wird bei 12-Bit eine Frequenz von ca. 244Hz erreicht. Der Vorteiler vom Timer wird mit 8 konfiguriert. Als Taktgeber wird ein 16Mhz Quarz verwendet. Der Interne Clockdiv wird auf 0 gesetzt.



    Stellvertretend für die 4 konfigurierten PWM Ausgänge, habe ich an PC6 gemessen.


    3. 8-Bit PWM (Phasen und Frequenz korrekter PWM Modus)


    In diesem Beispiel wird der Timer4 verwendet. Es handelt sich um einen 10-Bit High-Speed Timer.
    Die Auflösung wird hier über das Register OCR4C festgelegt. Der Timer hat insgesamt 6 PWM Ausgänge, wobei diese immer paarweise anzusehen (Komplementär) sind.



    Auf diesem Oszibild ist stellvertretend der Ausgang PB5 und PB6 enthalten.



    Soweit so gut erstmal.


    Gruß Flo

  • 4. IR Dimmer - Timer0 als PWM und Timer1 im CTC Modus


    IR-Sensor: Shapr GP2Y0A21YK0F an PF0
    PWM-Signal: PB7


    Bei einer Entfernung von weniger als 20cm zum IR Sensor wird die Helligkeit erhöht, bei einer Entfernung von ca. 21cm bis 40cm wird die Helligkeit gesenkt. Es wird eine PWM Auflösung von 8-Bit verwendet. Die PWM Frequenz beträgt 122Hz.



    Für die Funktion des Programms sind die include Files im Anhang notwendig.


    Gruß Flo

  • 5. 8-Bit PWM (Phasen und Frequenz korrekter PWM Modus) und externer Fehlererkennung


    Dieses Beispiel nimmt das Beispiel unter 3. als Grundlage. Ergänzt wird das ganze durch eine Fehlererkennung.
    Beim PIn PD0 wird der interne Pullup Widerstand aktiviert.
    Die Fehlererkennung wird so konfiguriert, dass eine fallende Flanke am Pin PDO (INT0) einen Interrupt auslöst.
    Wird die Pegeländerung an INT0 erkannt, so werden die Compare Register gelöscht, die PWM wird gestoppt.
    Zusätzlich kann wie im Beispiel gezeigt eine Interruptroutine ausgelöst werden. Im Beispiel schaltet diese den Ausgang PD1 ein.


  • Hallo SoCo,


    ja der Controller kann über Flip direkt angesprochen bzw. geflasht werden. Wenn man den Controller ansteckt wird nach einem Treiber gefragt, dieser wird bei Flip aber mitgeliefert. Er muss nur noch ausgewählt werden und dann wird der Controller erkannt.
    Über die Buttons HWB und Reset kann zwischen Applikation und Programmierung gewechselt werden.


    Ich selber nutze eine ähnliche Konstellation wie hier abgebildet. Will man das SMD löten umgehen, gibt es aber auch die ein oder andere Alternative. Beispielhaft hierfür nenne ich mal Teensy. Nachdem man dann eine Adapterplatine hat, kann man leicht auf Lochraster oder auch Steckbrett den wenigen Rest, der noch benötigt wird aufbauen. Eine ISP Schnittstelle wird in der Regel nicht benötigt, da die Fuses direkt über den Programmcode verändert werden können. Neben dem bekannten Clockdiv8 gibt es auch Möglichkeiten den Takt mit anderen Vorteilern zu teilen.


    Gruß Florian