Hallo oberallgeier,
erst mal danke für deine Unterstützung. Ich versuche jetzt mal das ganze Projekt noch etwas besser zu erklären:
Das Förderband wird aus den bereits erwähnten 5 Segmenten bestehen, wobei jedes Segment von einem Servo angetrieben werden soll. Jedes Segment wiederum besteht aus 6 mit Zahnrädern verbundenen PVC Rohren, die als Förderwalzen dienen. Ziel ist es alle Servos die je ein Segment antreiben mit gleicher Geschwindigkeit laufen zu lassen und gemeinsam an und auszuschalten.
Die Servos die ich jetzt bei Amazon gekauft habe haben folgende Daten:
Andoer SpringRC SM-S4315R.
Spezifikationen:
Geschwindigkeit: 0,14s/60°-0,16s/60° (4.8V - 6V)
Drehmoment: 14,8 kg.cm - 15,4 kg.cm (4.8V - 6V)
Ich hoffe das reicht an Informationen.
Die Geschwindigkeit ist, wie schon gesagt, nicht gerade berauschend aber das Drehmoment von 13kg.cm scheint ausreichend zu sein. Bei Tests mit einem einzelnen Servo, der sauber läuft, habe ich überprüft, dass dieser Servo ein Segment gut antreiben kann. Von daher passen die Servos von den Parameters so schon einigermaßen, eventuelle Alternativen sollten aber zumindest nicht nicht wesentlich schwächer sein.
Die Schaltung sieht in etwa so aus: https://drive.google.com/open?id=1iO...s_tBFDWDGi783v
Im Schaltplan wird veranschaulicht, wie der Adapter die Stromversorgung zu den Servos durchschaltet. Das Signal wird so wie es sich ja eigentlich gehört direkt vom Board zum Servo durchgeschaltet. Der Ground der Servos ist auch mit dem Board verbunden aber auch gleichzeitig mit der Stromversorgung für die Servos (da intern der Ground der einzelnen Pins eh zusammengeschlossen ist, reicht es an dieser Stelle den GRND von einem einzelnen Pin mit der Stromversorgung zu verbinden). Und der Pluspol der Servos ist vom Board isoliert und nur mit dem Netzteil verbunden.
Das es sich bei der Stromversorgung von den Servos um ein Laborschaltnetzteil handelt, das den Verbrauch misst, kann man sehen, dass jeder Servo ca. 1.5A zieht. Das Netzteil hat Spielraum bis 20A, so dass die Servos von hier ausreichend mit Strom versorgt werden sollten.
Alle Servos werden auf dem Beaglebone auf die gleiche Art und Weise angesprochen. Beispielsweise wird jeder Servo für insgesamt 50 Sekunden angeschaltet, nach jeweils 10 Sekunden wird ein weiterer Servo zu oder abgeschaltet. Hier mal der Auszug vom wesentlichen:
‹q1, q2, q3, q4 = Queue(), Queue(), Queue(), Queue() Thread(target=wrapper, args=(set_motion, (1, 0,50), q1)).start()
Thread(target=wrapper, args=(set_motion, (2, 10,60), q2)).start()
Thread(target=wrapper, args=(set_motion, (3, 20,70), q3)).start()
Thread(target=wrapper, args=(set_motion, (4, 30,80), q4)).start()
Das ganze läuft über eine Schleife:
while(rc_get_state()!=EXITING){
if ((time_diff < predefined_end_time) && (time_diff >= predefined_start_time)) {
rc_send_servo_pulse_normalized(servo, servo_pos);
rc_usleep(1000000/frequency_hz);
}
else if ((time_diff > predefined_end_time)) {
printf("Count value : %i\n",count_val);
rc_set_state(EXITING);
break;
}
end_seconds = time(NULL);
time_diff = difftime(end_seconds,start_seconds);
}
rc_cleanup();
Das Problem ist aber, dass die Servos trotz gleichen Steuerbefehls sich unterschiedlich verhalten. So richtig flüssig läuft es eigentlich nie, sie ruckeln immer, bzw. halten kurz (<0.1s) und laufen dann wieder an. Insbesondere wenn ich einen Servo hinzu schalte oder abschalte kann sich das Bild drastisch ändern. Obwohl die Servos die ganze Zeit mit konstanter Drehzahl gleichmäßig laufen sollten drehen die Servos im nachfolgenden Beispiel erst super langsam um dann, wenn alle vier anspringen, richtig Gas zu geben und dann wieder in Lethargie zurück zu fallen wenn ich wieder einen Servo ausschalte. Aber selbst wenn vier Servos laufen sieht die Bewegung noch nicht richtig aus...
<span style="font-size:12.0pt;font-family:"Times New Roman",serif">https://drive.google.com/open?id=1FD...Fm7yTHsin1a55r
Lesezeichen