![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' ============================================================================ ' Das zweite Timer/PWM-Modul fĂŒr eigene Pulsweitenmodulation (PWM) verwenden ' In OCBASIC 1.12a_e1 auf der Open-Maxi von Dietmar Harlos am 02. Februar 2019 ' ============================================================================ ' Was eine Pulsweitenmodulation (PWM) ist, wird in der Bedienungsanleitung der ' Open-Macro und Open-Maxi erklĂ€rt: ' http://om.dharlos.de/doku_omax/html/COMPILED.HTM#pulsweitenmodulation__pwm_ ' Die Open-Maxi bietet zwei Timer/PWM-Module namens TPM1 und TPM2. Das erste ' Modul besitzt 6 KanĂ€le und das zweite 2 KanĂ€le. StandardmĂ€Ăig wird das ' zweite Timer/PWM-Modul verwendet, um DA[1] und DA[2] zu erzeugen. Es handelt ' sich dabei um die beiden Digital-Analog-AusgĂ€nge der Open-Maxi, die ein ' Ausgangssignal per PWM mit einer Frequenz von 2441,40625 Hz und 8 Bit ' Auflösung generieren. Bei der Original-C-Control lag die PWM-Frequenz fix ' bei 1953,125 Hz. ' GrundsĂ€tzlich muĂ man sich bei der Planung eines PWM-Signals darĂŒber ' Gedanken machen, wie groĂ die PWM-Frequenz sein soll und mit welcher ' Werteauflösung (in wievielen Stufen) das TastverhĂ€ltnis verĂ€nderbar sein ' soll. Denn diese beiden Parameter beeinflussen sich gegenseitig. Siehe ' folgende Formel: ' PWM-Frequenz = Timertakt / Werteauflösung ' Der Timertakt ("TPM clock input") kann auf der Open-Maxi am sinnvollsten aus ' dem Bustakt von 20 MHz und Teilung durch 1, 2, 4, 8, 16, 32, 64 oder 128 ' erzeugt werden. Es sind also maximal 20 MHz Timertakt möglich und bei ' Teilung durch den gröĂten Wert 128 immerhin noch 156,25 kHz. Im Open-Maxi- ' Betriebssystem wird standardmĂ€Ăig eine Teilung durch 32 verwendet. Der ' Timertakt ist dann 625 kHz. Bei der Original-C-Control lag dieser fix bei ' 500 kHz. ' Beispiele: Wenn der Timertakt 20 MHz und die Werteauflösung 10 Bit betragen ' sollen, ergibt sich eine PWM-Frequenz von 20e6/1024 = 19531,25 Hz, oder rund ' 19,5 kHz. Bei 8 Bit Auflösung ergeben sich 20e6/256 = 78125 Hz, oder 78,125 ' kHz. ' Wird ein Timer/PWM-Modul auf PWM konfiguriert, wirkt sich das auf alle ' KanĂ€le des Moduls aus. Zwar könnte ein Kanal auf PWM und der andere ' beispielsweise auf "Input Capture" konfiguriert werden, das macht in der ' Regel aber wenig Sinn. Da das erste Timer/PWM-Modul vom Betriebssystem ' bereits fĂŒr viele Features genutzt wird, bietet es sich daher an, das ' zweite Modul fĂŒr PWM zu verwenden. Jeder der beiden KanĂ€le lĂ€Ăt sich ' unabhĂ€ngig voneinander steuern und generiert ein Ausgangssignal am ' entsprechenden Ausgangspin. Die PWM-Frequenz und die Werteauflösung sind ' aber natĂŒrlich bei beiden KanĂ€len gleich. ' Im Forum gibt es ein Demoprogramm, das zeigt, wie die beiden Timer/PWM- ' Module fĂŒr 8 Servo-Ports umkonfiguriert werden können. Auch das wird per ' PWM realisiert. ' Siehe auch Kapitel 10 "Timer/PWM (S08TPMV2)" im Data Sheet zum MC9S08AW60- ' Mikrocontroller: ' https://www.nxp.com/docs/en/data-sheet/MC9S08AW60.pdf ' --- Definitionen fĂŒr das System -------------------------------------------- INCLUDE "omax.def" 'Definitionen fĂŒr die Open-Maxi ' --- Definitionen des Anwenders --------------------------------------------- DIM a,b,c BYTE 'einige Variablen definieren ' --- Das Hauptprogramm ------------------------------------------------------ inittpm2 'TPM2-Modul fĂŒr eigene PWM konfigurieren WHILE TRUE 'Endlosschleife da0=512 'DA[1] setzen da1=512 'DA[2] setzen PAUSE 50 '1 Sekunde Pause da0=2 'DA[1] setzen da1=1022 'DA[2] setzen PAUSE 50 '1 Sekunde Pause da0=1022 'DA[1] setzen da1=2 'DA[2] setzen PAUSE 50 '1 Sekunde Pause WEND End2Host=ON 'Nach Programmende in den Host-Modus END 'Programmende, Neustart mit der Enter-Taste ' --- Subroutinen ------------------------------------------------------------ ' Das TPM2-Modul fĂŒr eine PWM von 19,5 kHz bei 10 Bit Auflösung konfigurieren ' DA[1] liegt an TPM2CH0 ' DA[2] liegt an TPM2CH1 PROCEDURE inittpm2 INLASM ! mov #%00001000,TPM2SC 'TPM clock input = 20e6/1 = 20 MHz ! ldhx #1023 'Timer 2 Counter Modulo Registers (TPMxMODH:TPMxMODL) ! sthx TPM2MODH 'von 0 bis inklusive 1023 zĂ€hlen (also Modulo 1024) - (kein 100% duty cycle) ! lda #%00101000 '"Edge-aligned PWM, High-true pulses" - PWM-Frequenz: 20e6/1/1024 = 19,53125 kHz ! sta TPM2C0SC 'Timer 2 Channel 0 Status and Control Register ! sta TPM2C1SC 'Timer 2 Channel 1 Status and Control Register ! rts END PROCEDURE ' --- Programmende ---------------------------------------------------------- ![]() Passender Link: Bedienungsanleitung zur Open-Macro und Open-Maxi Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |