Wie kann man die Impulsbreite eines Servomotors bestimmen?

Ich habe vor kurzem angefangen, mit einem Arduino UNO R3-Kit herumzuspielen, das ich vor einiger Zeit gekauft habe, und ich war so begeistert, dass ich beschlossen habe, einen Roboterarm zu bauen.

Dieser Roboterarm, den ich auf Thingiverse gefunden habe, benötigt 4 Servomotoren. Ich habe einige billige SG90-Motoren von Amazon bekommen. Da diese Servos einen ziemlich großen Strom benötigen, um zu laufen, werde ich ein externes Netzteil verwenden, um sie gleichzeitig mit Strom zu versorgen, und einen PCA9685 16-Kanal-Servocontroller.

Nun ... Ich bin zu dem Schluss gekommen, dass die Position eines Servomotorhorns mit Pulsweitenmodulation (PWM) bei 50 Hz gewählt werden kann, wobei 1 ms Pulsbreiten 0 ° und 2 ms 180 ° entsprechen, gemäß dem Datenblatt meines SG90-Servos.

Ich habe jedoch gesehen, dass, da mein Motor eher billig ist, es sein könnte, dass die Servopositionen einer etwas anderen Impulsbreite aus dem Datenblatt entsprechen könnten.

Wie kann ich mit Arduino sicher feststellen, welche Pulsbreite 0° und 180° entspricht?

Wenn ich eine Impulsbreite senden würde, die niedriger als diejenige ist, die 0 ° entspricht, würde dies den Motor beschädigen?

Vielen Dank!

#Andrea Angella, Servo-PWM-Impulsbreiten-Sachen sind für Arduino und Rpi gleich. Vielleicht finden Sie das allgemeine Wissen und die Tricks in meinen Antworten auf die folgenden Fragen und Antworten zu RpiSE nützlich: (1) Wie kann Rpi einen Servomotor mit einem GPIO-Pin im PWM-Modus bewegen? - RpiSE, gestellt vor 1 Jahr, 11 Monate aktiv vor 1 Jahr vor 2k Mal angesehen, raspberrypi.stackexchange.com/questions/98467/… , / to Continue, ...
/ cont'd, ... (2) RPi4B PCA9685 PWM zur Steuerung vieler Servos - RpiSE, gestellt vor 1 Jahr, 7 Monaten aktiv vor 1 Jahr, 2 Monaten 587 Mal angesehen, raspberrypi.stackexchange.com/questions/102269/… , (3) Wie verwendet man Rpi-Python-GPIO-Pins im PWM-Ausgangsmodus, um PWM-Signale zu erzeugen? - RpiSE, gestellt vor 2 Monaten aktiv vor 25 Tagen 128 Mal angesehen, raspberrypi.stackexchange.com/questions/120452/… . Beifall.

Antworten (2)

Wie kann ich mit Arduino sicher feststellen, welche Pulsbreite 0° und 180° entspricht?

Sie können nicht. Zunächst einmal hat kein Hobby-Servo, auch kein teures, einen exakten 180°-Weg. Billigservos haben es fast garantiert anders. Außerdem hängt einige billige Servoelektronik von der Frequenz ab, sodass die 0-Position bei 60 Hz von 0 bei 65 Hz abweichen kann.

Wenn ich eine Impulsbreite senden würde, die niedriger ist als diejenige, die 0 ° entspricht, würde dies den Motor beschädigen?

Es sollte nicht, zumindest nicht sofort. Aber höchstwahrscheinlich wird das Servo versuchen, dorthin zu gelangen, wobei es einen ziemlich hohen Stallstrom zieht und sich aufheizt.

Um Ihre beiden Fragen zu beantworten, müssen Sie die minimalen und maximalen Arbeitszyklen für jedes Servo einzeln kalibrieren. Es gibt eine gute Beschreibung dieses Verfahrens auf der Adafruit-Website. Wenn Sie Kalibrierungsdaten haben, können Sie den Steuerbefehl für jedes Servo proportional skalieren, um in die gewünschte Position zu gelangen.

Konsultieren Sie im Zweifelsfall das Datenblatt.

0 Grad = 1,5 ms
-90 Grad = 1 ms
+90 Grad = 2 ms

Haben Sie den Fehler % bei einer Frequenz von 50 Hz gemeldet? Aktuelle Fehler anzeigen. Der Fehler kann berechnet oder als Offset und/oder Verstärkung klassifiziert werden , abhängig von Komponententoleranzen (nicht spezifiziert).