Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro steuert 2 servos unabhängig. wie????
Also habe mal ne Frag wie man einen Servo steuert weiß ich, aber wie man 2 Servos unabhängig von einander steuert versteh ich nicht.
Habe mal ein Programm geschrieben, bei dem, wenn ich einen bestimmten Taster drücke der Servo 1 angesteuert wird und wenn ich einen anderen bestimmten Taster drücke soll der Servo 2 in eine andere Richtung drehen.
#include "asuro.h"
int main (void)
{
Init();
StatusLED(GREEN);
while(1) {
if (PollSwitch()==1) {
BackLED (OFF,ON);
Sleep(18); // Impuls Wert ca. 18-54, Mitte ca.36
BackLED (OFF,OFF);
Sleep(255); // Pause Sleep(20*36-winkel)
Sleep(255);
Sleep(210-18);}
else if (PollSwitch()==16) {
BackLED (ON,OFF);
Sleep(54);
BackLED (OFF,OFF);
Sleep(255);
Sleep(255);
Sleep(210-18);}
else {BackLED(OFF,OFF);}
}
return 0;
}
nur das will nicht so wie ich will. Es drehen sich immer beide Sevos.
Kann mir irgendjemand sagen wo mein Fehler ist???
Danke im vorraus.
Gruß Lars
Keine garantie... und auch nicht fertig. Weil ich wenig zeit habe. Ist aber der (ein) richtige weg zur Rome. ;)
Hier mache ich nur einer loop wo beiden servo's unabhangig an oder aus gepulst werden. Jeder wiederholung geht tickzahler auf 0 und startet es neue servo pulsen.
...
unsigned int minimum_puls=18;
unsigned int winkel1, winkel2; /* 0-36 */
unsigned int pulselange1, pulslange2;
unsigend int wiederholung_zahl=720; /* anzahl ticks servo puls wiederholung, abhangig von Sleep-taktfrequenz */
unsigned char servo1=0, servo2=0; /* puls status: hoch oder niedrig */
unsigned int tickzahler=0; /* inkrementiert jede Sleep tick */
/* Init(); und so ... */
pulselange1=winkel1+minimum_puls;
pulselange2=winkel2+minimum_puls;
Backleds(OFF,OFF);
while (1) {
/* irgendwie ein neue wert fur winkel1 und winkel2 bekommen, dammit es kein schlau wird, muss aber nicht */
/* winkel1=etwas_neues; */
/* winkel2=etwas_neues; */
/* pulslangen auch erneuen */
pulselange1=winkel1+minimum_puls;
pulselange2=winkel2+minimum_puls;
if (tickzahler<=pulslange1) {servo1=1;} else {servo1=0;}
if (tickzahler<=pulslange2) {servo2=1;} else {servo2=0;}
if (tickzahler>= wiederholung_zahl)
{tickzahler=0;}
else { tickzahler++; }
Sleep(1); /* minimale resolution der pulslange */
BackLED(servo1,servo2);
} /* ende der servo puls
...
habe den code so übernommen und halt durch int main void return und init erweitert, dass problem die servos drehen einfach immer weiter aber in gegesätzliche richtungen. wie kann ich das ändern???
](*,) Ich habe die winkel variabelen nicht mit werten initialisiert.
unsigned int winkel1=4, winkel2=25; /* eigene winkeln aufgeben, zwisschen 0-36 */
Vielleicht sind die minimum_puls und wiederholung_zahl nicht korrekt. Versuch es mal mit wiederholung_zahl=1440, und minimum_puls ein bisschen mehr oder weniger.
hallo, das problem ist weiterhin das sie immer weiter drehen halt in gegenzätzliche richtung. Ich versteh eins so wie so nicht wo ist der Taster im programm, auf dem sein komando sich ein servo drehen soll??? (pollswitch1=servo1 pollswitch6=servo2)?????
Den taster abfrage hab ich nicht in meinem code-vorschlag implementiert. Das lasse ich an ihn uber. In mein code-vorschlag könnte man den winkeln neu einstellen mit ein selbgeschrieben funktion (etwas neues) auf diesen stelle:
/* irgendwie ein neue wert fur winkel1 und winkel2 bekommen, dammit es kein schlau wird, muss aber nicht */
/* winkel1=etwas_neues; */
/* winkel2=etwas_neues; */
Aber Pollswitch hat auch ein Sleep anrufen im code ( Sleep(10) ), deshalb kan es den Pulsgeneration stören und falsche bewegungen machen. Ich empfehle eine andere art von winkel einstellung zu betrachten. Ich habe bis jetzt keine idee wie du das machen soll.
also mein problem ist halt ich hab den asuro erst seit ein paar wochen und bin im programieren nicht wirklich gut. ich brauche halt nur ein programm bei dem ich mit einem bestimmten taster(pollswitch) einen bestimmten servo ansteuere, wie mach ich das?????
Hallo
Als kleiner Tip:
Die BackLEDs eignen sich doch nicht so gut wie gedacht zur Ansteuerung von Servis. Wenn eine BackLED blinkt bekommt die andere auch einen geringen Stromimpuls die den anderen Servo beeinflusst. Außerdem sind die BackLEDS auch nicht störungsfrei wenn die Motoren laufen.
Gruß Thund3r
ich würds über die status-led ansteuern!!!!!
gruß josua
wie viele servos kann ich dadrüber ansteuern 2(rot, grün) oder 3(rot, grün, orange)???? Aber schonmal danke für den hinweis
gruß lars
Hallo
Über die StatusLED kannst du 2 Servos ansteuern. Rot und Grün (jeweils die äußersten Anschlüsse der StatusLED) Orange ist ja nur Grün und und Rot gleichzeitig angeschaltet.
Gruß Thund3r
Danke, das heißt dann 2x über StatusLED, 1x über BackLED und 1x über FrontLED, aber wie bekommen manche da 5 Servos dran ich komm irgendwie nur auf 4?????
Gruß Lars
Das sind doch 2 BackLEDS!?!
@Valen ja, da sind wir wieder bei meiner anfangsfrage, ich hab ja versucht mit dem einen taster die eine BackLED(Servo1) anzusteuern und mit einem anderen taster die andere BackLED(Servo2). Aber das hat ja nicht funktioniert, es haben dich immer beide Servos gedreht?????
Ich habe kein 2 servo's. deshalb kann ich das nicht testen. Meiner vorschlag war rein theoretisch.
Vielleicht ist dein problem von elektronische art. Wo genau habst du den servo pwm leitungen and den leds geschaltet. An dem anode oder kathode?
ich hab die led`s ausgetauscht gegen nen metalldraht und an den Metall draht die PWM Kabel gelötet. Hät ich die LED`s drin lassen sollen???
rein theoretisch kann man über die back-leds 2 servos ansteuern, aber in der praxis ist es schwierig, wegen den störungen! vielleicht könnte man durch hardwareveränderungen an back-leds und odometrie die störungen vermindern!
gruß josua
Welches loch habst du die draht eingelötet?
Die leds sind dioden. Das wurde das signal von einer servo abschirmen von den andere wen die servo's an den anode seite der led verbunden sind. Und ein lichtgeber ist immer praktisch als zustandangeber. Wieso habst du es draus gelötet?
ich hab die led`s ausgetauscht gegen nen metalldraht und an den Metall draht die PWM Kabel gelötet. Hät ich die LED`s drin lassen sollen???
Das war keine gute Idee, eine Led ist ein Verbraucher, also z.B.
ein Widerstand. Ein Draht ist aber ein Kurzschluss! Nehme den
Draht wieder raus und schließe den Servo nur an einer Seite an.
Welche kann ich jetzt nicht sagen, ich habe keinen Asuro und
auch keinen Schaltplan vom Asuro. Also an die Seite die zum
Prozessor geht.
Gruß Richard
ich hab das wie folgt gemacht der strom geht über out- und out+ und die pwm hier grün hab ich an nen bügel gelötet(im Foto)
@Richard danke, wusste ich nicht werd sie wieder rausnehmen. ich hatte halt gedacht der servo würde hier den platz als verbraucher einnehmen.
Gruß Lars
@Richard danke, wusste ich nicht werd sie wieder rausnehmen. ich hatte halt gedacht der servo würde hier den platz als verbraucher einnehmen.
Gruß Lars
Stimmt ja auch aber wenn DU ne Drahtbrücke nimmst fällt über den
Draht ja nix ab für den Servo als Verbraucher.....
Gruß Richard
Hallo
Du kannst einen 5ten Servo über die Infrarotschnittstelle schalten lassen^^
Gruß Thund3r
Und wenn du den beiden kurzschlussen (die led erganzung) entfernt habst, auch noch einer and den PD7 pin, das sind die odometrie beleuchtungs leds. Diese haben aber keine funtcion dammit sie an/ausgeschaltet werden. Das muss du selbst schreiben. Und das odometrie/ticks zahlen geht naturlich nicht mehr.
Aber nun den frage. Was macht deine kleine asuro mit soviel servos?
hatte vor einen greifarm zu bauen oder ähnliches. dafür sollter er 4 bis 5 besitzen.
für einen greifarm würde sich meiner meinung nach auch eine porterweiterung anbieten, da musst du nicht auf alle anderen funktionen des asuros verzichten!
gruß josua
Hallo
Porterweiterung ist nicht notwendig es geht auch ohne das man irgendwas am Asuro verändern muss:
http://www.youtube.com/watch?v=byIxVQU6Ug0
http://www.youtube.com/watch?v=zVLRwRaELbo
http://www.youtube.com/watch?v=yaCXaw_Lf14
https://www.roboternetz.de/phpBB2/viewtopic.php?p=501550#501550
https://www.roboternetz.de/phpBB2/viewtopic.php?p=503267#503267
Gruß Thund3r
klar is beides möglich, aber ich finde in dem fall die porterweiterung sinnvoll!!! muss jeder selbst entscheiden!
gruß josua
also kann mir irgendjemand erklären wie ich die servos mit hilfe von 2 BackLED´s unabhängig voneinander steuern kann. manche schaffen es ja... nur ich halt nicht. Hilfe!!!!!!!!!!
Gruß Lars
Hallo
Die Back LEDs sind nicht all zu gut da es vorkommt das beide LEDs Impulse bekommen obwohl nur eine leuchtet. Am besten nur ein Servo mit einer BackLED ansteuert und den andern Servo über die Front LED oder StatusLED (2 Anschlüsse möglich)
Gruß Thund3r
ja is mir klar es gibt aber auch welche die mit 5 servos also beide BackLed`s nen greifarm gebaut haben ohne porterweiterung?? wie geht das dann???
Hallo
1.FrontLED
2.StatusLED Red
3.StatusLED Green
4.BackLED
5. IR Schnittstelle
Ich hatte auch einen mit 2 BackLEDs gebaut gehabt das klappte aber nur mit einem meiner 3 Asuros.
Gruß Thund3r
Ir schnittstelle????
Programm???
gruß lars
also kann mir irgendjemand erklären wie ich die servos mit hilfe von 2 BackLED´s unabhängig voneinander steuern kann. manche schaffen es ja... nur ich halt nicht. Hilfe!!!!!!!!!!
Gruß Lars
Die backleds wieder zuruck einbauen. Die diode funktionalität ist wichtig fur das abschirmen der 2 signalen.
die 2 backled´s sind eingebaut, funzt trotzdem nicht. Meine Frage ist halt nur wie ich die IR-Schnittstelle ansteuere????
Gruß lars
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.