Verbinden Sie verschiedene Motoren mit Ihrem SBC

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 Klasse Dc_Motor stellt den Gleichstrommotor dar, der von einer PWM mit 50 Hz gesteuert wird. Wie man sieht, müssen einige Parameter bereitgestellt werden, wie zum Beispiel die Versorgungsspannung und der Kv-Konstantsowie den zu verwendenden Pin. Im Gegenzug 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 )

2. Servomotoren

Der Servomotor verwendet einen einzigen Steuerstift, um den Drehwinkel eines Motors zu steuern.

 Der Code der Klasse Servo_Motor:

 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 )

3. Schrittmotoren

Um einen Schrittmotor anzuschließen, folgen wir einem Schema ähnlich dem in der Abbildung:

Der Klassencode Stepper_Motor ist im Grunde eine Zustandsmaschine, die die oben gezeigte Tabelle implementiert.

 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 Schritt( 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 )

Wenn Ihnen dieser Inhalt gefallen hat, können Sie uns weiter folgen Twitter, YouTube, Facebook or LinkedIn um über solche Inhalte auf dem Laufenden zu bleiben.

Want Möchten Sie mehr über GPS/RTK erfahren?

1. Unser Engineering-Team wird sich mit Ihnen in Verbindung setzen, um alle Fragen zu klären
2. Wir halten Sie über Werbeaktionen und neue Produktveröffentlichungen auf dem Laufenden
3. Sie werden von uns nur hören, wenn wir Import habenant Neuigkeiten, wir werden Ihre E-Mails nicht spammen