Ich kaufte eine Raspeltorte und dachte, ich könnte ein neues Hobby finden, das ich während des Lockdowns drinnen machen kann. Ich dachte, wenn ich den Motor steuern könnte, wäre er später in Experimenten nützlich, also kaufte ich zusammen einen Schrittmotor, also werde ich versuchen, ihn zu steuern. Es ist interessant, es nur mit konstanter Geschwindigkeit zu drehen, aber ich wollte jede Übung machen können. Kenntnisse über elektrische und elektronische Schaltkreise Ich habe bei fast Null angefangen, aber ich konnte es leicht tun, weil es im Internet viele Informationen gab. Ich weiß das wirklich zu schätzen. Es scheint, dass es auf verschiedene Arten gesteuert werden kann, aber ich möchte die Methode vorstellen, die ich am einfachsten fand.
Unten finden Sie eine Liste der verwendeten Hardware.
Erstens ist die grundlegende Drehung mit konstanter Geschwindigkeit. Verwenden Sie RpiMotorLib, eine Himbeer-Pi-Python-Motorbibliothek auf GitHub. Es scheint, dass Sie nicht nur Schrittmotoren, sondern auch Gleichstrommotoren und Servomotoren steuern können. Sie können es vom Terminal mit sudo pip install rpimotorlib
installieren.
Verdrahten Sie die Bibliothek nach der Installation gemäß Sehr höfliches Tutorial und kopieren Sie den Code und fügen Sie ihn ein, um den Motor zu drehen. Ich werde. Ich verdrahtete wie folgt (Entschuldigung für die handgezeichnete Rohzeichnung).
Die Bildauflösung ist schlecht und schwer zu erkennen, die Verkabelung ist jedoch wie in der folgenden Tabelle gezeigt.
Raspeye GPIO | Treiber | Motor- |
---|---|---|
17 | IN1 | - |
18 | IN2 | - |
27 | IN3 | - |
22 | IN4 | - |
- | OUT1 | A- |
- | OUT2 | B- |
- | OUT3 | A+ |
- | OUT4 | B+ |
Die Hauptfunktion ist motor_run (GpioPins, wait, step, ccwise, verbose, steptype, initdelay)
. Die Erklärung jedes Arguments ist wie folgt.
Wenn Sie beispielsweise 5 Hz gegen den Uhrzeigersinn mit einer Drehzahl von 0,5 Hz im Halbschrittmodus drehen möchten, lautet der Code wie folgt. Es ist sehr einfach.
python
import time
import RPi.GPIO as GPIO
from RpiMotorLib import RpiMotorLib
GpioPins = [17, 18, 27, 22] #GPIO-Pin. IN1 von links, IN2, IN3,Pin zur Verbindung mit IN4.
f = 0.5 #Drehzahl[Hz]
Rev = 5 #5 mal drehen
s_angle = 1.8 #Schrittwinkel[deg]
wait = (1/f)*(s_angle/360)/2 #Zeit zwischen den Impulsen. Hälfte-Teilen Sie für den Schrittmodus durch 2
#Geben Sie dem Motor den Namen und geben Sie den Motortyp an (Nema oder 28BYJ).
mymotortest = RpiMotorLib.BYJMotor('MyMotorOne', 'Nema')
#Maine. Argumente sind GPIO-Pin, Warten, Anzahl der Schritte, Rückwärtsdrehung, ausführlich, Schrittmodus, erste Verzögerung von links[ms]
mymotortest.motor_run(GpioPins, wait, Rev*50, True, False, 'half', 0.05)
#Zum Schluss die Stifte aufräumen
GPIO.cleanup()
angenehm!
Da ich es drehen konnte, denke ich, dass ich je nach Code jede Übung machen kann. Ich möchte den Motor willkürlich bewegen lassen. Nehmen wir als Beispiel eine sinusförmige Nickbewegung.
7 in 1 Schritt.Da es sich um 2 ° dreht, ist die Amplitudewait
Kann nur einen positiven Wert annehmen, also einen absoluten Wertccwise
Zu'True'
Alles was Sie tun müssen, ist zu bestehen.
Der Code lautet wie folgt.
python
GpioPins = [17, 18, 27, 22]
T = 2 # Period [s]
N_period = 2 # No. of periods
amp = 72
unit_angle = 7.2
s_angle = 1.8 # [deg]
N = int(4*amp/unit_angle)
theta = amp*sin(np.linspace(0, 2*pi, N)) # Angle time history [deg]
dt = T/len(theta) # time-step [s]
omega = np.gradient(theta, dt)/360 # [Hz]
omega_pos = abs(omega)
pm = omega < 0 # boolean for CW/CCW
wait = (1/omega_pos)*(s_angle/360)/2
mymotortest = RpiMotorLib.BYJMotor, 'MyMotorOne', 'Nema')
time.sleep(0.002)
for _ in np.arange(N_period):
for k in np.arange(N):
mymotortest.motor_run(GpioPins, wait[k], 1, pm[k], False, "half", 0)
GPIO.cleanup()
erledigt!
Recommended Posts