Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: Beispielkonfiguration einer Pulsweitenmodulation (PWM) Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 2.02.2019 11:43)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station
' ============================================================================
' 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

Bisherige Antworten: