PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Digitaler Servo ansteuern?



Kilu
12.10.2016, 22:48
Guten Tag,

ich habe eine Frage bzgl. der Ansteuerung von Servo Motoren. Vorab hier mein verwendeter Code.

#include <Servo.h>

Servo rightleft;

int right = 2;
int left = 3;
int right_state;
int left_state;
int servo_val;

void setup()
{
Serial.begin(9600);
pinMode(right, INPUT);
pinMode(left, INPUT);
rightleft.attach(6);
servo_val = rightleft.read();
}

void loop()
{
right_state = digitalRead(right);
left_state = digitalRead(left);

if(right_state == HIGH)
{
rightleft.write(servo_val - 1);
delay(14);
servo_val = rightleft.read();
Serial.println("Right HIGH");
}

if(left_state == HIGH)
{
rightleft.write(servo_val + 1);
delay(14);
servo_val = rightleft.read();
Serial.println("Left HIGH");
}
}


Das funktioniert alles wunderbar bei einem Analog Servo AS3103 PG. Jetzt wollte ich einen größeren Servo ((DS3115) der digital ist anschließen. Dieser habe ich mit dem + Pol an eine 6 Volt Spannungsquelle verdrahtet. Die Massen von Arduino und externen Spannungsquelle sind miteinander verbunden.

Der Servo reagiert aber absolut auf keine Betätigung meiner beiden Buttons. Das einzige was er macht ist dass er im ca. Sekundentakt von links nach rechts stottert.

Woran kann das liegen?

Vielen Dank schon mal.

i_make_it
13.10.2016, 06:23
Genug Strom vorhanden?

Digitalservos regeln deutlich schneller als die 50Hz von Analogservos.
Damit sind sie kräftiger. Bei gleicher Spannung muß da natürlich der Strom größer sein.
Ich mußte letzte Woche bei 5,5V, 3A am Netzteil einstellen Damit nichts stotterte.
Kann aber auch sein, das dein Servo die Vorgabe in kürzeren Abständen als 20ms erwartet.
Es gibt Modelle die wollen alle 4ms ein Signal. Da mußt Du mal im Datenblatt sehen was Dein Servo haben will.

Wenn ich mal schnell google:
http://www.thanksbuyer.com/ds3115-15kg-metal-gear-large-torque-digital-servo-for-car-boat-model-robot-35918
Control parameters:
- Working voltage: 5-7.4V
- Working frequency: 50-330HZ
- Operating angle: 180 degree
- Rotating direction: CCW
- Control system: pluse width

Kann sein das die Steuerimpulse etwas zu langsam sind.
Oft wird nicht von steigender Flanke bis zur nächsten steigenden Flanke 20ms eingehalten =50Hz.
Sondern es wird zwichen zwei Steuerimpulsen eine 20ms Pause gemacht. damit ist die resultierende Frequenz kleiner 50Hz.
Wenn dein Servo mit 50-330Hz funktioniert, kann es sein das das erzeugte Signal auserhalb seiner Spezifikation ist und nur rund einmal pro Sekunde das Timing so ist, das er kurz hintereinander beide Endlagen erkennt und sich entsprechend verhällt.

nikolaus10
13.10.2016, 10:01
Hallo

Ein grosser Kondensator in der Versorgungsleitung des Servos hilft auch.

73