Ich versuche, zwei Servos gleichzeitig mit Arduino UNO und Arduino Motor Shield zu steuern. Meine Servos sind so modifiziert, dass sie mit ständiger Bewegung arbeiten können.
Wenn ich die erste Bestellung myservoP.write(180);
(volle Geschwindigkeit) sende , funktioniert es gut; Wenn ich jedoch versuche, meinem Servo zu befehlen, die Richtung zu ändern ( myservoP.write(0);
), stürzt mein Arduino sofort ab und wird zurückgesetzt.
Zuerst denke ich, dass es ein Problem mit der Stromversorgung sein könnte, aber nachdem ich es mit meinem Programm (unten aufgeführt) getestet habe, beginne ich zu denken, dass es ein Problem mit dem Puffer oder dem Speicher ist. Ohne Verzögerungen stürzt der Arduino nach etwa 10 Iterationen ab. Mit Verzögerung (10) stürzt es nach etwa 90 Iterationen ab. Mit der Verzögerung (20) kann Arduino einen vollständigen Zyklus fünfmal von Anfang bis Ende wiederholen. Beim 6. Versuch stürzte es erneut ab.
Hier ist mein Code:
#include <Servo.h>
Servo myservoL;
Servo myservoP;
int i;
void setup()
{
delay(2000);
myservoL.attach(9); // attaches the servo on pin 9 to the servo object
myservoP.attach(10); // attaches the servo on pin 10 to the servo object
Serial.begin(9600);
}
void loop()
{
for(i=180; i>=0; i--)
{
delay(20);
Serial.println(i);
myservoP.write(i);
myservoL.write(i);
}
for(i=0; i<=190; i++)
{
delay(20);
Serial.println(i);
myservoP.write(i);
myservoL.write(i);
}
Antworten:
Wenn der Arduino nicht zurückgesetzt wird, wenn die Servos nicht angeschlossen sind, ist es wahrscheinlich, dass die Servos viel Strom ziehen und die Batteriespannung so stark abfällt, dass der Arduino zurückgesetzt wird.
Versuchen Sie, zwei separate Akkus zu verwenden: einen zur Stromversorgung des Arduino und einen zur Stromversorgung der Motoren (stellen Sie sicher, dass die Erdung der beiden Akkus miteinander verbunden ist).
quelle
Ergänzung zu Nates Antwort: Wenn Sie eine Batterie sowohl für die Motoren als auch für das Arduino behalten möchten, sollten Sie den von den Servos aufgenommenen Strom durch eine Art Rücklauf begrenzen, bevor Sie die Richtung ändern, z. B. halbe Geschwindigkeit nach 20 ms, 0 U / min danach weitere 20 ms, bevor die Richtung geändert wird. Wenn Sie die Richtung beider Motoren gleichzeitig ändern, sollten Sie einen um beispielsweise 20 ms verzögern, um den Spitzenstrom weiter zu reduzieren.
Bevor Sie dies tun, können Sie die Spannung der Arduino-Versorgung überwachen, vorzugsweise mit einem auf "Single" eingestellten Oszilloskop, das eine Neigung von ~ 4,5 V nach unten auslöst. Das sollte Ihnen sagen, ob die Versorgung des Arduino abfällt, wenn die Motoren die Richtung ändern.
quelle
Versuchen Sie, die Verzögerungszeit auf 5000 statt auf 20 zu erhöhen, damit die Servos genügend Zeit benötigen, um die Drehung abzuschließen:
quelle