PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro steuert 2 servos unabhängig. wie????



lars_94
21.05.2010, 17:32
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

Valen
21.05.2010, 18:30
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


...

lars_94
21.05.2010, 19:36
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???

Valen
21.05.2010, 22:17
](*,) Ich habe die winkel variabelen nicht mit werten initialisiert.


unsigned int winkel1=4, winkel2=25; /* eigene winkeln aufgeben, zwisschen 0-36 */

Valen
21.05.2010, 22:24
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.

lars_94
22.05.2010, 09:33
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)?????

Valen
22.05.2010, 12:21
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.

lars_94
22.05.2010, 18:41
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?????

Thund3r
22.05.2010, 20:21
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

josua
23.05.2010, 12:49
ich würds über die status-led ansteuern!!!!!

gruß josua

lars_94
23.05.2010, 17:02
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

Thund3r
24.05.2010, 01:56
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

lars_94
24.05.2010, 11:21
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

Valen
24.05.2010, 11:23
Das sind doch 2 BackLEDS!?!

lars_94
24.05.2010, 12:33
@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?????

Valen
24.05.2010, 12:39
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?

lars_94
24.05.2010, 12:43
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???

josua
24.05.2010, 12:45
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

Valen
24.05.2010, 12:58
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?

Richard
24.05.2010, 13:05
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

lars_94
24.05.2010, 13:12
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)

lars_94
24.05.2010, 13:14
@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
24.05.2010, 13:22
@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

lars_94
24.05.2010, 13:27
ja stimmt,
gruß lars

Thund3r
24.05.2010, 14:01
Hallo

Du kannst einen 5ten Servo über die Infrarotschnittstelle schalten lassen^^

Gruß Thund3r

Valen
24.05.2010, 14:21
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?

lars_94
24.05.2010, 14:38
hatte vor einen greifarm zu bauen oder ähnliches. dafür sollter er 4 bis 5 besitzen.

josua
25.05.2010, 10:36
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

Thund3r
25.05.2010, 13:09
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

josua
26.05.2010, 22:12
klar is beides möglich, aber ich finde in dem fall die porterweiterung sinnvoll!!! muss jeder selbst entscheiden!

gruß josua

lars_94
01.06.2010, 15:58
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

Thund3r
01.06.2010, 16:15
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

lars_94
01.06.2010, 16:17
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???

Thund3r
01.06.2010, 16:24
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

lars_94
01.06.2010, 16:26
Ir schnittstelle????
Programm???
gruß lars

Valen
01.06.2010, 17:36
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.

lars_94
01.06.2010, 17:44
die 2 backled´s sind eingebaut, funzt trotzdem nicht. Meine Frage ist halt nur wie ich die IR-Schnittstelle ansteuere????
Gruß lars