Good to Know Database

Raspbian Wheezy: GPIO-Pin in Python als PWM-Ausgang programmieren


Die GPIO-Pins des Raspberry Pi's können als einfache Eingänge und Ausgänge genutzt werden. Des Weiteren kann man mit Python auf den GPIO-Pins auch ein PWM-Signal ausgeben. Bei der hier verwendeten PWM-Funktionalität wird das PWM-Signal durch die Software erzeugt. Dazu wird für jedes PWM-Signal ein eigener Thread gestartet, welcher das gewünschte Signal generiert und auf dem GPIO-Pin ausgibt.

Nachdem das folgende Python-Skript aufgerufen wurde, wird der festgelegte GPIO-Pin als Ausgang definiert. Mittels GPIO.PWM wird ein neues Objekt für die PWM-Generierung erzeugt. Dabei wird neben dem GPIO-Pin auch gleich die Frequenz des PWM-Signals angegeben. Mit der Methode start kann man das Pulsbreitenverhältnis festlegen und die Signalgenerierung starten. In diesem Beispiel wird nach dem Start des Python-Skripts für 10 Sekunden ein Rechtecksignal mit 1 Hz und einerm Duty Cycle von 50% erzeugt. Danach wird der Duty Cycle mit der Methode ChangeDutyCycle auf 10% geändert und das neue Signal ebenfalls für 10 Sekungen ausgegeben. Zum Schluss wird für 10 Sekunden die Frequenz des PWM-Signals auf 10 Hz erhöht. Bevor das Programm beendet wird, wird über stop die Signalgenerierung beendet. Die Ausführung des Skripts können Sie jederzeit mit der Tastenkombination Strg+C beenden. Dadurch werden auch die Einstellungen für den GPIO-Pin wieder zurückgesetzt.

Für das folgende Python-Skript erstellen Sie mit einem Editor die Datei pwm_output.py.

pi@raspberrypi ~ $ vi pwm_output.py

Fügen Sie in diese Datei den folgenden Python-Code ein und speichern die Datei ab.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#
# Creation:    27.08.2013
# Last Update: 07.04.2015
#
# Copyright (c) 2013-2015 by Georg Kainzbauer <http://www.gtkdb.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#

# import required modules
import RPi.GPIO as GPIO
import time

# define GPIO pin for PWM
GPIOPin = 25

# main function
def main():
  try:
    # use GPIO pin numbering convention
    GPIO.setmode(GPIO.BCM)

    # set up GPIO pin for output
    GPIO.setup(GPIOPin, GPIO.OUT)

    # create object for PWM at 1 Hz
    p = GPIO.PWM(GPIOPin, 1.0)

    # start PWM with 50% duty cycle
    p.start(50.0)

    # wait 10000ms
    time.sleep(10.0)

    # change duty cycle to 10%
    p.ChangeDutyCycle(10.0)

    # wait 10000ms
    time.sleep(10.0)

    # change frequency to 10 Hz
    p.ChangeFrequency(10.0)

    # wait 10000ms
    time.sleep(10.0)

    # stop PWM output
    p.stop()

    # reset GPIO settings
    GPIO.cleanup()

  # reset GPIO settings if user pressed Ctrl+C
  except KeyboardInterrupt:
    print("Execution stopped by user")
    GPIO.cleanup()

if __name__ == '__main__':
  main()

Nachdem Sie Das Python-Skript erstellt haben, ändern Sie die Rechte der Datei.

pi@raspberrypi ~ $ chmod 0755 pwm_output.py

Jetzt können Sie das Python-Skript wie folgt ausführen.

pi@raspberrypi ~ $ sudo ./pwm_output.py

Weiterführende Artikel

Raspbian Wheezy: GPIO-Pin in Python als Eingang programmieren
Raspbian Wheezy: GPIO-Pin in Python als Ausgang programmieren


Dieser Eintrag wurde am 27.08.2013 erstellt und zuletzt am 25.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_31_2307.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer