Ich habe einen Gerätetreiber für den Beaglebone Black geschrieben, der einfach meinen 28BJY-48 Schrittmotor dreht, der durch eine ULN2003A Karte verbunden ist. Alles funktioniert gut, der Motor dreht sich, aber ich habe gefunden, dass msleep(1)
notwendig ist, nachdem jeder Pin auf HOCH geschaltet ist, damit der Motor das Signal "einfangen" kann. Wenn ich die Schleife ohne Schlafzeit laufen lasse, passiert nichts mit dem Motor.Beaglebone Black GPIO Steuerung läuft Schrittmotor sehr langsam. Wie kann ich die Geschwindigkeit verbessern?
Was ich versuche zu tun ist die Motordrehzahl zu beschleunigen.
Meine Logik ist, dass das Signal zu schnell ist, damit der Motor reagiert. Ich weiß, dass das Signal gesendet wird, weil die LEDs in Reihe mit den Motorspulen aufleuchten.
Ich habe das Datenblatt und die Anweisungen von Elegoo found here for referene gelesen.
Zum besseren Verständnis habe ich den Schaltplan angehängt:
ich folgende GPIOs von P8 als Kontrollen zugeordnet haben:
GPIO11 - IN1 - BLUE wire (coil 4)
GPIO12 - IN2 - PINK wire (coil 3)
GPIO15 - IN3 - YELLOW wire (coil 2)
GPIO16 - IN4 - ORANGE wire (coil 1)
Die Art und Weise habe ich die GPIOs bin Steuerung durch ist mit ioremap()
. Hier
ist der Teil des Codes, der den Motor steuert:
static ssize_t motor_rotate(int i) { //0 rotates right, 1 rotates left
int c = 0;
motor_stop();
while(c < 2000)
{
*gpio_dataout_addr |= PIN11;
//msleep(1);
*gpio_dataout_addr &= (0xFFFFFFFF^PIN16);
*gpio_dataout_addr |= PIN12;
//msleep(1);
*gpio_dataout_addr &= (0xFFFFFFFF^PIN11);
*gpio_dataout_addr |= PIN15;
//msleep(1);
*gpio_dataout_addr &= (0xFFFFFFFF^PIN12);
*gpio_dataout_addr |= PIN16;
//msleep(1);
*gpio_dataout_addr &= (0xFFFFFFFF^PIN15);
c++;
}
motor_stop();
return 0;
}
static ssize_t motor_stop(void){
*gpio_dataout_addr &= (0xFFFFFFFF^(PIN11 | PIN12 | PIN15 | PIN16));
return 0;
}
ich meinen Motor auf eine 5V-Stromversorgung unabhängig von der BeagleBone angeschlossen haben. Jede Hilfe oder Hinweise in die richtige Richtung sind willkommen.
Nebenbei, gibt es eine Möglichkeit, gleichzeitig 2 Pins auf LOW und 2 auf HIGH zu setzen? Mein Code setzt einen Pin auf einen niedrigen Wert, bevor ein anderer Wert gesetzt wird. Ich würde gerne wissen, ob ich beides in einem Schritt tun könnte. Ich kann das nicht herausfinden.