ASM
-
PWM - Messung
Tastverhältnis von einem PWM-Signal messen.
Version 1 mit ATiny2313
Testprogramm um zu demonstrieren, wie man mit einem ATiny-Prozossor das Tastverhältnis eines PWM-Signal messen kann.
Da mit Absicht ein kleiner Prozessor (ATtiny2313) gewählt wurde, können die Ergebnise nur via RS232 - Schnittstelle ausgegeben werden.
Für eine Ausgabe auf dem LCD reicht der Arbeitsspeicher vom Prozessor nicht aus.
Das besonderer hierbei ist, dass jedes einzelnes PWM-Verhältnis berechnet wird.
Abb. 1.1 - Schaltplan PWM-Tastverhältnismessung mit ATTiny 2313.... todo... hier kommt die Projektbeschreibung rein, um mit den Atmel Prozessoren ein PWM-Signal zu messen
Version 2 mit ATmega 168
PWM-Tastverhältniswandlung zu 0-5V (0-10V)Für die 2.Variante wurde eine Leiterplatte entworfen (s. u.).
Wegen den größeren Rersourcen dieses Prozessors könnnen jetzt gleichzeitig die Ausgaben auf LCD und RS232 gewählt werden.
Desweiteren kann der Messwert wieder analog ausgegeben werden.
Die DA-Wandlung erfolgt mit einem R2R-Netzwerk und optionalen Verstärker um das Ausgangssignal in den Bereich von 0-10V zu konvertieren.Anforderung:
Ein PWM-Signal mit einer Frequenz von 1kHz soll gemessen werden und das Tastverhältnis soll dann als analogen Spannungswert von 0-10 V ausgegeben werden.
Realisierung:
- PWM-Messung:
Für die PWM-Messung wird der ICP-Interupt (Input Capture Interrupt) verwendet, da hier sehr einfach ohne große Prozessorlast die die Signaldauer der High und Low-Pegel ermittelt werden kann. - Berechnung Tastverhältnisses:
Die eigentliche Berechnung erfolgt dann in einer Assembler-Routine. Für die Berechnung wird nur die Nachkommastelle mit einer Ganzzahldivision berechnet.
Für die Nachkommastelle werden 12 Bit verwendet, dies hat dann eine theoretische Auflösung von 0.0241% zur Folge.
Um eine einfache und schnelle dez-ASCCI Wandlung sicherzustellen wird jedoch mit gerundeten Bit-Werten für die Nachkommastellen gerechnet. Dadurch verschlechtert sich die Genauigkeit welche eigentlich möglich wäre.
Deshalb kommt man nur auf folgende Werte:
Auflösung: 0,01 %
Genauigkeit: 0,1% +- 1 Digit (geschätzt, die genaue Fehlerrechnung müsste man noch durchführen) - Funktionstests:
Getestet wurde das ganze mit einem PWM-Signal mit einer Grundfrequenz von 230 Hz und mit einer Timer-Frequenz von 1 MHz für die ICP Einheit.
Die Ausgabe der Messwerte erfolgt im folgenden Format:
H=1056,L=3152 ==> PWM: 25.10% // kosntantes Eingangsignal
H=1058,L=3157 ==> PWM: 25.10%
H=1058,L=3154 ==> PWM: 25.07%
H=1057,L=3154 ==> PWM: 25.10%
H=1057,L=3154 ==> PWM: 25.10%
...
und mal mit verändertem Tastverhältnis:
H=2525,L=1682 ==> PWM: 60.26% // PWM läuft hoch
H=2540,L=1667 ==> PWM: 60.36%
H=2472,L=1659 ==> PWM: 61.40%
H=2606,L=1592 ==> PWM: 63.11%
H=2656,L=1543 ==> PWM: 64.18%
H=2720,L=1491 ==> PWM: 66.14%
H=2709,L=1411 ==> PWM: 68.51% - DA-Wandlung mittels R2R-Netzwerk:
Hier werden 2 Schieberegister ( 74HC595), in denen der 16-Bit PWM-Messwert (obwohl die Messung nur mit 12Bit erfolgt) via SPI-Schnittstelle rein geschoben wird, verwendet.Verwendetet Pins:- SER - MOSI PB3 : serielle Daten für das Schieberegister
- SCK - SCK PB5 : Taktsignal für das Schieberegister
- SCL - Reset : Master Reset (MR) vom Schieberegister (low aktiv)
- SS_RCK- RCK PB2 : Takt für das Speicher Latch (positive Flanke übernimmt den Wert vom Schieberegister)
- G - Enable PD2 : Output Enable Eingang (low aktiv)
.... todo... hier kommt die Projektbeschreibung rein, um mit den Atmel Prozessoren ein PWM-Signal zu messen und entsprechend des Tastverhälnisses als analoge Spannungssignal von 0-5V (bzw. 0-10V) auszugeben.
Hinweis zu Codevision:
- Für die Anpassung an ATMEGA 168 wurde der Word-Zugriff für das ICR1-Register in der mega168.h hinzugefügt:
#define ICR1 (*(unsigned int *) 0x86) // 16 bit access insert by aw
Vorab mal die EAGLE-3D Ansichten von der fertigen Leiterplatte.
Abb.2.1 Leiterplatte PWM zu Analog-Wandlung - Bestückungsseite
Abb. 2.2 Leiterplatte PWM zu Analog-Wandlung -Leiterbahnseite(letzte Änderung 31.12.2011)
- PWM-Messung: