In diesem Tutorial erfahren Sie, wie Sie die gängigsten Motortypen an den anschließen SBC. Außerdem zeigen wir Ihnen anhand einiger Beispiele, wie Sie damit umgehen. Die gängigsten Motortypen sind:
- Gleichstrommotoren sind billig und einfach zu steuern, es wird nur ein Leistungsausgang benötigt und dieser kann mit einem PWM-Signal aktiviert werden.
- Servomotoren ähneln Gleichstrommotoren, enthalten jedoch eine kleine Elektronik und ein internes Potentiometer, um einen geschlossenen Regelkreis zu bilden, mit dem der Drehwinkel gesteuert werden kann. Die Ansteuerung erfolgt ebenfalls per PWM, allerdings ist in diesem Fall das Ansteuersignal leistungsarm und die Endstufe im Stellmotor selbst integriert.
- Schrittmotoren haben mehrere Wicklungen und erfordern eine zu steuernde Sequenz, bieten dafür aber eine hohe Präzision, da sie bei jedem Umpolen ihrer Wicklungen Schritt für Schritt vorrücken.
1. Gleichstrommotoren
Um einen Gleichstrommotor zu steuern, schließen wir ihn an den SBC an, wie im folgenden Diagramm dargestellt:
Wir müssen einige Parameter unseres Motors kennen, insbesondere die Beziehung zwischen angelegter Spannung und Motordrehzahl oder Kv.
Die Dc_Motor-Klasse stellt den DC-Motor dar, der von einem PWM bei 50 Hz gesteuert wird. Wie zu sehen ist, müssen einige Parameter angegeben werden, wie die Versorgungsspannung und die Kv-Konstante, sowie der zu verwendende Pin. Dafür erhalten wir zwei Funktionen: set_voltage und set_speed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Klasse Gleichspannungs Motor: FREQ_Hz = 50 def __init__( selbst, pin, vm, kv ): selbst.vm = vm selbst.kv = kv selbst.Stift = Stift selbst.Zweifel = SBC.Dout() selbst.Zweifel.set_pwm( selbst.Stift, selbst.FREQ_Hz, 0 ) selbst.set_spannung( 0 ) def set_spannung( selbst, v ): pulse_percent_on = 100 *v/selbst.vm selbst.Zweifel.set_pwm( selbst.Stift, selbst.FREQ_Hz, 100-puls_percent_on ) def Geschwindigkeit einstellen( selbst, Drehzahl ): selbst.set_voltage (rpm/selbst.kv) |
Ein Anwendungsbeispiel wäre folgendes:
>>> Importzeit
>>> sbc_mtr importieren
>>> motor = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> print( "Spannungsregelung" )
Spannungsregelung
>>> motor.set_voltage( 6 )
>>> time.sleep( 1 )
>>> motor.set_voltage( 0 )
>>> print( "Geschwindigkeitsregelung" )
Drehzahlregelung
>>> motor.set_speed( 100 )
>>> time.sleep( 1 )
>>> motor.set_speed( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Klasse Servomotor: FREQ_Hz = 50 DUTY_MIN_ms = 0.5 DUTY_MAX_ms = 2.5 def __init__( selbst, Stift ): selbst.Stift = Stift selbst.Zweifel = SBC.Dout() selbst.Zweifel.set_pwm( selbst.Stift, selbst.FREQ_Hz, 0 ) def set_angle( selbst, angle_deg ): duty_ms = selbst.DUTY_MIN_ms + (selbst.DUTY_MAX_ms-selbst.DUTY_MIN_ms)*angle_deg/ 180 puls_percent_on = selbst.FREQ_Hz*Pflicht_ms/ 10 selbst.Zweifel.set_pwm( selbst.Stift, selbst.FREQ_Hz, 100-puls_percent_on ) |
Und ein Anwendungsbeispiel:
>>> Importzeit
>>> sbc_mtr importieren
>>> motor = sbc_mtr.Servo_Motor( "DOUT3" )
>>> print( "Winkel auf 90 Grad setzen" )
Winkel auf 90 Grad einstellen
>>> motor.set_angle( 90 )
>>> time.sleep( 1 )
>>> print( "Winkel auf 0 Grad setzen" )
Winkel auf 0 Grad einstellen
>>> motor.set_angle( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | Klasse Schrittmotor: def __init__( selbst, Stifte ): selbst.Stifte = Stifte selbst.Zweifel = SBC.Dout() selbst.Zustand = 0 selbst.Schritte = 0 selbst.dir = 1 selbst.Timer = Maschine.Timer( -1 ) def Step( selbst, Richtung ): if( selbst.Zustand == 0 ): selbst.Zweifel.schreiben( selbst.Stifte[0], 1 ) selbst.Zweifel.schreiben( selbst.Stifte[1], 1 ) selbst.Zweifel.schreiben( selbst.Stifte[2], 0 ) selbst.Zweifel.schreiben( selbst.Stifte[3], 0 ) elif( selbst.Zustand == 1 ): selbst.Zweifel.schreiben( selbst.Stifte[0], 0 ) selbst.Zweifel.schreiben( selbst.Stifte[1], 1 ) selbst.Zweifel.schreiben( selbst.Stifte[2], 1 ) selbst.Zweifel.schreiben( selbst.Stifte[3], 0 ) elif( selbst.Zustand == 2 ): selbst.Zweifel.schreiben( selbst.Stifte[0], 0 ) selbst.Zweifel.schreiben( selbst.Stifte[1], 0 ) selbst.Zweifel.schreiben( selbst.Stifte[2], 1 ) selbst.Zweifel.schreiben( selbst.Stifte[3], 1 ) elif( selbst.Zustand == 3 ): selbst.Zweifel.schreiben( selbst.Stifte[0], 1 ) selbst.Zweifel.schreiben( selbst.Stifte[1], 0 ) selbst.Zweifel.schreiben( selbst.Stifte[2], 0 ) selbst.Zweifel.schreiben( selbst.Stifte[3], 1 ) selbst.Schritte += Richtung selbst.Zustand = (selbst.Zustand + Richtung) & 0x03 def Geschwindigkeit einstellen( selbst, Schritte_s, Richtung ): if( Schritte_s und Richtung): selbst.Timer.init( zeitraum=int(1000 /steps_s), Modus=Maschine.Timer.PERIODISCH, Rückruf=Lambda tmr: selbst.Schritt (Richtung) ) sonst: selbst.Timer.deinit() |
Abschließend ein Anwendungsbeispiel:
>>> Importzeit
>>> sbc_mtr importieren
>>> motor = sbc_mtr.Stepper_Motor ( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> print( "Schritt für Schritt" )
Schritt für Schritt
>>> für i im Bereich ( 100 ):
... motor.step( 1 )
... time.sleep_ms( 10 )
>>> print( "Fortlaufend" )
Kontinuierlich
>>> motor.set_speed( 100, -1 )
>>> time.sleep( 1 )
>>> motor.set_speed( 0, 0 )