12-V-Schrittmotor funktioniert nicht - vibriert, dreht sich aber nicht

Ich arbeite an einem Projekt und leider funktioniert mein Gleichstrommotor nicht. Ich habe es so verkabelt , verwende einen brandneuen Motor (SP BN2A in diesem Dokument, ich habe ihn von einem Bidet gespült, das ich zu Hause hatte) und versorge das gesamte System mit einer Gleichstromversorgung, damit ich die Spannung genau steuern kann Raspberry Pi als Controller und mit folgendem Code:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

enable_pin = 5
coil_A_1_pin = 26
coil_A_2_pin = 19
coil_B_1_pin = 6
coil_B_2_pin = 13

GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)

GPIO.output(enable_pin, 1)

def forward(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 1, 0)
    time.sleep(delay)
    setStep(0, 1, 1, 0)
    time.sleep(delay)
    setStep(0, 1, 0, 1)
    time.sleep(delay)
    setStep(1, 0, 0, 1)
    time.sleep(delay)

def backwards(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 0, 1)
    time.sleep(delay)
    setStep(0, 1, 0, 1)
    time.sleep(delay)
    setStep(0, 1, 1, 0)
    time.sleep(delay)
    setStep(1, 0, 1, 0)
    time.sleep(delay)


def setStep(w1, w2, w3, w4):
  GPIO.output(coil_A_1_pin, w1)
  GPIO.output(coil_A_2_pin, w2)
  GPIO.output(coil_B_1_pin, w3)
  GPIO.output(coil_B_2_pin, w4)

while True:
  delay = raw_input("Delay between steps (milliseconds)?")
  steps = raw_input("How many steps forward? ")
  forward(int(delay) / 1000.0, int(steps))
  steps = raw_input("How many steps backwards? ")
  backwards(int(delay) / 1000.0, int(steps))

Der Motor vibriert und erwärmt sich, wenn ich das System einschalte und den Code ausführe, dreht sich aber nicht. Welcher Teil meines Systems ist falsch? Ist es die Hardware des Motors, die Verkabelung, der Code, die Stromversorgung oder etwas anderes?

Danke, jede Hilfe ist willkommen.

Breadboard-Grafiken ... wirklich ... geht nicht dorthin
Wie würdest du es vorziehen, wenn ich es formatiere? Es ist keine große Sache, ich kann es in 5 Minuten wiederholen ... Ich bin neu in dieser EE-Sache, also bin ich mir nicht sicher, was Standards und solche Sachen angeht
@NeonCop Das Hinzufügen eines Schaltplans zu Ihrer Frage wäre am besten - Sie haben uns einen Schaltplan gezeigt, der nicht dasselbe ist.
@AndrewMorton Gibt es eine Software, die Sie empfehlen würden? Auch wie würde ich einen Raspberry Pi oder einen Bewegungssensor in den Schaltplan einfügen, es ist nicht so einfach wie ein Motor oder eine Batterie.
Im Frageneditor gibt es eine Schaltfläche, mit der Sie einen Schaltplan erstellen können. Für ein RPi müssen Sie nur die Verbindungen zu/von ihm angeben. Oder Sie können Bleistift und Papier verwenden und Ihrer Frage ein Foto hinzufügen, aber das ist nicht die bevorzugte Methode.
Es könnte dies sein: electronic.stackexchange.com/questions/108686/… und bitte beachten Sie, dass der Betrieb mit einer mickrigen 9-Volt-Batterie (wie in Ihrem Cartoon gezeigt) auch nicht funktioniert.
Ich bin kein Raspberry-Typ, aber ich stelle fest, dass Ihre Vorwärts- und Rückwärtsfunktionen Int für Argumente haben. Bedeutet dies, dass Ihre Verzögerung auf Null gekürzt wird?
@Andyaka Das ist eine kluge Idee, aber ich denke tatsächlich, dass der L293D speziell für die Spannung meines Motors (12 V) ausgelegt ist, also denke ich nicht, dass es ein Problem ist, wenn die Spannung zu niedrig ist. Außerdem hat meine Batterie tatsächlich 12 V. Ich verwende ein Gleichstromnetzteil.
@JohnBirckhead du hast recht, die Eingabe, nach der es fragt, ist in ms, und da ich normalerweise zwischen 1 und 5 gehe, könnte es sein, dass es auf 0 gesetzt wird. Würde das den Motor nicht einfach kontinuierlich drehen lassen?
Denken Sie bei einem Schrittmotor daran, dass die Rotormasse eine Trägheit hat. Sie müssen die Masse beschleunigen, indem Sie ein ausreichendes Drehmoment aufbringen, um die Trägheit zu überwinden und den Motor in Bewegung zu setzen, und dann muss genügend Zeit vorhanden sein, um ihn in die nächste Position zu bringen. Wenn Sie zu schnell treten, bewegen Sie sich nur leicht und fallen zurück in die ursprüngliche Position, was zu dem beschriebenen Symptom führen würde. Wenn Sie in Ihrem Code einen Wert größer als 1000 eingeben, haben Sie eine Schrittzeit von einer Sekunde, und der Motor bewegt sich (wenn auch langsam), wenn dies Ihr Problem ist.

Antworten (1)

Endlich verstanden! Ich habe den unipolaren Motor durch einen bipolaren ersetzt, und das ganze System funktionierte perfekt, so wie es ist! Um den unipolaren Motor zu verwenden, ist es notwendig, einen Motortreiber-IC speziell für den unipolaren Motor zu verwenden, und der L293D erfüllt diese Aufgabe nicht.