Einstieg in die Regelungstechnik mit Python

Fachbuch von Hans-Werner Philippsen

Schrittmotor-Beispiel

Mit einem MicroPython-Programm können die Schrittfolgen für einen Schrittmotor sehr einfach erzeugt werden. Die Halbschritte 1 bis 8 zeigt das nachfolgende Bild, wobei die Bitkombinationen für das Ein- und Ausschalten sowie Umpolen der beiden Motorwicklungen stehen.

Das nachfolgende Programm wurde für das Pyboard D entworfen und zeigt die Nutzung der GPIO-Pins. Die GPIO-Ausgänge können nicht direkt mit einem Motor verbunden werden, sondern schalten Halbbrücken-Chips, wie z.B. den L293D. Beim Zweiphasenbetrieb werden beide Wicklungen bestromt.

# stepper PYBOARD
# The MIT License (MIT)
# Copyright (c) 2019 Hans - Werner Philippsen
from machine import Pin
import time
delay = 0.01
A1=Pin('X1',Pin.OUT) # Zuweisung der GPIO-Pins
A2=Pin('X2',Pin.OUT)
B1=Pin('X3',Pin.OUT)
B2=Pin('X4',Pin.OUT)
EN=Pin('X5',Pin.OUT)

def forwardStepH():  # Halbschritt alle Schrittpositionen
    setStepper(0, 1, 0, 1)
    setStepper(0, 0, 0, 1)
    setStepper(1, 0, 0, 1)
    setStepper(1, 0, 0, 0)
    setStepper(1, 0, 1, 0)
    setStepper(0, 0, 1, 0)
    setStepper(0, 1, 1, 0)
    setStepper(0, 1, 0, 0)
def backwardStep():     # Vollschritt Zweiphasen
    setStepper(1, 0, 0, 1)
    setStepper(0, 1, 0, 1)
    setStepper(0, 1, 1, 0)
    setStepper(1, 0, 1, 0)
def forwardStep():     # Vollschritt Einphasen
    setStepper(0, 0, 0, 1)
    setStepper(1, 0, 0, 0)
    setStepper(0, 0, 1, 0)
    setStepper(0, 1, 0, 0)

def setStepper(in1, in2, in3, in4):
    A1.value(in1)
    A2.value(in2)
    B1.value(in3)
    B2.value(in4)
    time.sleep(delay)

def Stopp():
    A1.value(0)
    A2.value(0)
    B1.value(0)
    B2.value(0)

# Wechsel Halbschritt, Vollschritt (Einphasen, Zweiphasen)
k = 256
try:
    while True:
        EN.value(1)
        print('vorwaerts Vollschritt Einphasen')
        for i in range(k):
            forwardStep()

        print('rueckwaerts Vollschritt Zweiphasen')
        for i in range(k):
            backwardStep()

        print('vorwaerts Halbschritt')
        for i in range(k):
            forwardStepH()

finally:
    Stopp()

Theme von Anders Norén