Homepage Wiki Forum Buy

PWM

Aus GNUBLIN

Schwierigkeitsgrad Voraussetzung Gnublin Familie
Gnublin logo easy.png Kommandozeile, PWM Wissen Alle

Inhaltsverzeichnis


Puls-Weiten-Modulation bietet eine Möglichkeit für verschiedene Gebiete. Einsatzgebiete sind: Analoge Spannungen erzeugen, Digitale Verstärker, Servo-Ansteuerung, etc. Wie eine PWM funktioniert, lesen Sie am besten in Wikipedia [1] nach.


Die Schnittstellen der einzelnen GNUBLIN Bauformen und deren Position können hier angesehen werden.

PWM mit gnublin-pwm

Für eine komfortable Ansteuerung der PWM Schnittstelle existiert das Programm gnublin-pwm. Ein Beispielaufruf sieht folgendermaßen aus:

gnublin-pwm -v 0x400


Der Wert nach -v bestimmt den Duty-Cycle der PWM-Schnittstelle, wobei 0x000 einem Duty-Cycle von 0% entspricht und 0xfff 100% Duty-Cycle.

Falls die Grundfrequenz von 1400Hz zu hoch sein sollte kann man auch einen Clock-Divider einschalten. Dies geschieht mit folgendem Befehl:

gnublin-pwm -c <Divider>

Wobei Divider folgende Werte annehmen kann:

1    (Clock-Teiler aus)
2    (Halbe Clock)
4    (Viertel Clock)
8    (Achtel Clock)


PWM per Konsole Debian

In der neuesten Version der Debian Distribution (20.2.13) liegt der PWM Treiber in einer überarbeiteten Version vor:

Modul laden (falls nicht in Kernel integriert):

modprobe lpc313x_pwm

Der 12-Bit PWM Wert wird als Folge von drei Hexadezimalzeichen an das Device-File lpc313x_pwm geschickt:

echo fff > /dev/lpc313x_pwm

Dieses Kommando bewirkt einen Duty-Cycle von annähernd 100%

Falls die Frequenz von 1400 Hz zu hoch sein sollte für bestimmte Anwendungen, so kann man nun auch einen Clock-Teiler einstellen:

echo clk1 > /dev/lpc313x_pwm (Clock-Teiler aus) echo clk2 > /dev/lpc313x_pwm (Halbe Clock) echo clk3 > /dev/lpc313x_pwm (Viertel Clock) echo clk4 > /dev/lpc313x_pwm (Achtel Clock)


PWM per Konsole ELDK

Der 12-Bit PWM Wert wird als Folge von zwei Byte geschickt:

root@armv5te:~# echo <lowbyte> <highbyte> > /dev/lpc313x_pwm


PWM mit Python und ELDK

Die PWM Demo fuer Gnublin LPC3131 ist im Ordner /root/examples (Debian) oder im Ordner /home/root zu finden und nennt sich pwm.py

Python Modul für bequeme Verwendung des PWM Ausgangs:

import time

def d2s(v):
    ''' v is between 0 and 4095 '''
    b0 = v & 0xff
    b1 = (v & 0xfff) >> 8
    return chr(b0) + chr(b1)

def pwm_raw(v):
    if v < 0 or v > 4095:
        print "v is out of range"
        return
    p = open("/dev/lpc313x_pwm", "wb")
    s = d2s(v)
    p.write(s)
    p.flush()
    p.close()

def pwm(r):
   '''Set PWM output to 0.0% <= r <= 100.0%'''
   v = int( r/100.0 * 4095 )
   pwm_raw(v)

if __name__ == "__main__":
    pwm(50)


Auf dem Gnublin Shell Prompt nun folgende Eingaben machen (bzw. wird die Standard GNUBLIN SD-Karte verwendet, kann dieser Schritt übersprungen werden.)


root@armv5te:~# python Python 2.6.6 (r266:84292, May 20 2011, 22:44:14) [GCC 4.5.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import pwm >>> pwm.pwm_raw(1000) [lpc313x pwm debug message] pwm to 1000 (24%)

Pwm1.JPG

>>> pwm.pwm(50)
[lpc313x pwm debug message] pwm to 2047 (49%)

Pwm2.JPG

>>> pwm.pwm(1)
[lpc313x pwm debug message] pwm to 40 (0%)

Pwm3.JPG

>>> pwm.pwm(99)
[lpc313x pwm debug message] pwm to 4054 (98%)

Pwm4.JPG

Wird PWM als Modul verwendet, so kann man es mit folgendem Befehl am Ende wieder entfernen.:

root@armv5te:~# rmmod lpc313x_pwm
[lpc313x pwm] cleanup
In anderen Sprachen