Quellcode für schrittmotor

"""Modul zur Steuerung des Pumpen-Schrittmotors.

Das Modul schrittmotor.py verwendet die **RpiMotorLib** Bibliothek als Grundlage 
und ermöglicht es den Schrittmotor der Spritzenpumpe anzusteuern. Mit der 
Bibliothek **RPi.GPIO** werden die GPIO-Pins für Richtung (GPIO22), Schritte 
(GPIO17) und Aktivierung (GPIO27) konfiguriert.

Note: 
    Mehr Informationen zur Bibliothek **RpiMotorLib** sind unter: 
    https://github.com/gavinlyonsrepo/RpiMotorLib zu finden.
"""

import RPi.GPIO as GPIO
from RpiMotorLib import RpiMotorLib
import time


[Doku]class Spritzenpumpe():
[Doku] def __init__(self, grundeinstellungen): """Wird aufgerufen, wenn ein Spritzenpumpe-Objekt erzeugt wird. Grundeinstellungen wie Pin-Konfiguration und Timingparameter werden ausgelesen und in lokale Variabeln gespeichert. Der Konstruktor konfiguriert außerdem den Eingangs-Pin des Endschalters, welcher auslöst wenn sich der Inhalt des Spritzenkolbens dem Ende neigt. Args: grundeinstellungen (dict): Aus dem Config-File eingelesene Grundeinstellungen des Roboters. """ print("Initialisiere Spritzenpumpe ...") # Pinkonfiguration einlesen self.richtungs_pin = int(grundeinstellungen ['gpio_motor_richtung']) self.schritt_pin = int(grundeinstellungen['gpio_motor_schritte']) self.aktivierungs_pin = int( grundeinstellungen ['gpio_motor_aktivierung']) # LOW to enable self.endschalter_pin = int(grundeinstellungen['gpio_pumpe_endschalter']) self.nachfuellschritte = int( grundeinstellungen['pumpe_nachfuell_schritte']) self.schrittverzoegerung = float( grundeinstellungen['pumpe_schritt_delay']) # GPIO Mode auf BCM setzten GPIO.setmode(GPIO.BCM) # Aktivierungspin als Ausgang setzten GPIO.setup(self.aktivierungs_pin, GPIO.OUT) # Motor Aktivierungspin auf HIGH setzten (Deaktivierung) GPIO.output(self.aktivierungs_pin, GPIO.HIGH) # RpiMotorLib objekt erzeugen self.schrittmotor = RpiMotorLib.A4988Nema( self.richtungs_pin, self.schritt_pin, (-1, -1, -1), "DRV8825") # Ensschalter der Spritzenpumpe als Eingang konfigurieren und Pull-Up # Widerstand aktivieren GPIO.setup(self.endschalter_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
[Doku] def motor_bewegen(self, drehrichtung, schrittanzahl, verzoegerung): """Verstellt den Servo in die gewünschte Position. Note: Der verbaute Schrittmotortreiber **DRV8825** ist hardwaremäßig so konfigueriert das ein Schritt in weiterere 32 Microsteps unterteilt wird. Args: drehrichtung (bool): ``True`` lässt den Schrittmotor im Uhrzeigersinn und ``False`` gegen den Uhrzeigersinn drehen. schrittanzahl (int): Anzahl der Mikroschritte die der Motor fahren soll. verzoegerung (int): Verzögerung zwischen den einzelnen Schritten in Sekunden. Wirkt sich auf die Rotationsgeschwindigkeit aus. Raises: Schmeisst eine Exception, wenn während er Ansteuerung des Schrittmotors ein Fehler auftritt. """ try: # Den Aktivierungspin (EN) auf LOW ziehen um den Motor zu aktivieren GPIO.output(self.aktivierungs_pin, GPIO.LOW) # Schritte fahren self.schrittmotor.motor_go( drehrichtung, "Full", schrittanzahl, verzoegerung, False, 0.05) # Motorbestromung abschalten, da nichts gehalten werden muss. time.sleep(0.1) GPIO.output(self.aktivierungs_pin, GPIO.HIGH) except: print("Fehler bei der Ansteuerung des Schrittmotors!")
[Doku] def status_endschalter(self): """Liest den Status des Endschalters der Spritzenpumpe aus. Returns: bool: Gibt ``True`` zurück, wenn Enschalter offen sonst ``False``. """ if GPIO.input(self.endschalter_pin): return True else: return False
[Doku] def spritze_aufziehen(self): """Zieht die Spritzenpumpe zur Wiederbefüllung mit Lösungsmittel auf. Note: Zu fahrende Schritte sind in den Grundeinstellungen als ``pumpe_nachfuell_schritte`` festgelegt. """ print("Spritzenpumpe wird aufgezogen.") self.motor_bewegen(False, self.nachfuellschritte, self.schrittverzoegerung)