PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo am asuro



Razzorhead
25.07.2009, 23:23
Hi leute,

Ich will nur mal etwas mit einem/zwei servo(s) rumspielen, und hab hier irgendwo gelesen das man einen am asuro anschließen könnte.

Da wo Con1/2 ist soweit ich weiss.
Also wie funktioniert das genau? Und wie kann ich ihn dann ansteuern?

Gruß
Raz

021aet04
25.07.2009, 23:36
Wo du die Servos anschließt ist prinzipiell egal. Man schließt die Servos aber auf einen Anschluss mit Hardware PWM, sonst muss man mit Software PWM arbeiten. Du benötigst eine PWM mit ca 20ms und einen Puls zwischen 1 und 2 ms (Position).

Razzorhead
26.07.2009, 00:09
Hätte ich soviel ahnung hätte ich schon gewusst wo ichs anschließ und wie ichs ansteuer, hab ich aber nicht.
Ich will ja nicht mein ganzen asuro auseinandernehmen, und auch möglichst nicht die anderen funktionen beeinträchtigen, deswegen frag ich hier ja wie ich ihn am besten wo anschließ...
Will ja keins von beiden kaputt machen O:)

Raz

radbruch
26.07.2009, 00:21
Hallo

Hardware-PWM ist für Servos nicht wirklich ideal:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=48204

Ich würde die Servos an den LEDs anschliessen (Front, Status oder Back), mit Einschränkungen wäre auch ein Anschluss an den Linien- oder Odosensoren (oder gar am Tastenpin ;) möglich. Ansteuerung dann per Software-PWM, je nach Anwendung blockierend oder per ISR:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=44146

Gruß

mic

Razzorhead
26.07.2009, 12:05
Aber wo schließ ich den PWM an? Wenn er software seitig ist garnicht oder wie?
Er muss doch an irgend ein IO pin vom mega8 oder nicht?

Gruß
raz

radbruch
26.07.2009, 12:36
Hallo


Ich würde die Servos an den LEDs anschliessen... meint selbstverständlich den PWM-Anschluss des Servos. Spannungsversorgung für die Servos kommt an Bat+/Bat- (oder externe Versorgung).

Ein Beispiel: Anschluss an den Back-LEDs

Die PWM-Leitung des Servos kommt an den gemeinsamen Punkt von T11, D15, R18 und PC1(Pin 24) für links, T12, D16, R20 und PC0 (23) für rechts. Hier (und an Vcc/GND) könnte man (isolierte) Drähtchen anlöten deren Enden man in die Servostecker stecken könnte (verzinnen). Das Programm dafür:

// Servoansteuerung mit Sleep() an BackLEDs (blockierend) 6.7.09 mic

// Der drehbereich meiner Servos lag hier zwischen 15 und 90. Die Werte gelten
// für eine 36kHz-Library. Bei Verwendung der orginalen 72kHz-Lib muss man die
// Zeiten oder die Sleep()-Aufrufe verdoppeln!

// (nicht getestet!)

#include "asuro.h"

int main(void) {

Init();
StatusLED(YELLOW);
while (1){
BackLED(ON,OFF); // Impuls Servo 1 on
Sleep(15);
// Sleep(15); // 72kHz
BackLED(OFF,ON); // Impuls Servo1 off, Servo2 on
Sleep(90);
// Sleep(90); // 72kHz
BackLED(OFF,OFF); // Impuls Servo2 off, auf 20ms warten
Sleep(255);Sleep(255);Sleep(255);
//Sleep(255);Sleep(255);Sleep(255); // 72kHz
}
return(0); // wird nie erreicht!
}

ich hoffe das funktioniert so halbwegs, ich kann es im Moment nicht selbst testen.

Gruß

mic

Razzorhead
26.07.2009, 22:51
Das funktioniert ja schonmal gut!
Aber wie steuer ich den servo nun exakt`? Und am besten natürlich ohne asuro lib. Weil nun geht er ja einfach bis zum anschlag (auch ohne while schleife..)
Ich hab das teil nun an der rechten back led.

Ein problem gibts aber noch: der servo kann sich um maximal 180° drehen( war son billiger, kann wohl keine 360°...). Beim Anschlaten fährt er bis zum anschlag, danach fährt er zurück aber nicht ganz! er bleibt nen cm vor dem ende stehn.


Raz

021aet04
26.07.2009, 23:04
Servos haben normalerweiße einen Bereich von 180° (Billig und Teuer). Wenn du ihn ständig drehen willst musst du ihn "hacken".

Razzorhead
27.07.2009, 00:19
Ja das hab ich auch gerade gelesen ^^.
naja trozdem dreht sic hmein servo nicht ganz zurück zum anschlag :/
Bin immernoch bei den obenstehenden problem/frage

Raz

021aet04
27.07.2009, 08:29
Steht im Code von Mic. Du musst die Werte im Sleep verändern. Die Werte, indem steht Sleep(15) bzw Sleep(90). Wenn du den Wert auf 53 erhöhst sollte er ungefähr in der Mitte stehen

Razzorhead
27.07.2009, 19:56
Ich hab ja schon mit den werten rumgespielt.
Das ganze ist etwas komisch.
Es bewegt sich völlig unregelmäßig.
Zb ich starte den flash-vorgang(!)-> Das teil geht bis zum anschlag-> Ich mach asuro wieder aus es geht zurück.

Asuro nach dem flashen wieder an-> er geht zum anschlag-> ich mach aus er geht zurück.

Asuro wieder an->Nichts passiert. (Das bleibt so).
Ich dreh den servo selbst nen stück-> Asuro an , Nichts passiert-> Asuro aus-> Er geht zurück auf ausgangsposition.
Auch wenn ich die LED blinken lasse, passiert garnichts ab den 2. start (Manchmal nichtmal direkt nachm flashen).
Das problem war mit verschiedenen Codes (von mir selbst, und mic's). Und mit C und Bascom.
Als ob die Impulse willkürlich sind und nichtmal was mit den sleep werten zu tun haben (er geht immer bis zum anschlag, und immer bis zur ausgangsposition zurück).

Das verwirrt mich schon etwas :-k

Raz

golfkrieg
02.08.2009, 18:39
Die PWM-Leitung des Servos kommt an den gemeinsamen Punkt von T11, D15, R18 und PC1(Pin 24) für links, T12, D16, R20 und PC0 (23) für rechts. Hier (und an Vcc/GND) könnte man (isolierte) Drähtchen anlöten deren Enden man in die Servostecker stecken könnte (verzinnen).



Könntest du das eventuell etwas genauer erklären vielleicht ein Bild wo man es sieht kann mir leider nicht genau vorstellen wo ich das ganze anbringen soll.

Vielen Dank im Vorraus...

Gruss

oberallgeier
02.08.2009, 19:05
... Es bewegt sich völlig unregelmäßig ...Ein nicht ganz unüblicher Fehler ist eine ungenügende Spannungsversorgung des Servos. Versuche (vielleicht) mal Vcc und GND NUR für den Servo aus einer getrennten Quelle mit 5V ... 6V bzw. nach Servospezifikation zu nehmen. Ich setze ja voraus, dass Du mic´s Hinweis oben zum Servoanschluss schon befolgt hast.

Viel Erfolg.

Razzorhead
03.08.2009, 14:28
Mit der unregelmäßigen bewegung meine ich nicht er hält mal da mal da. Sondern wie beschrieben manchmal bewegt er sich (bis zum anschlag, bis zur ausgangsposition), und manchmal ebend nicht!

Aber er bewegt sich nicht schrittweise, nur entweder oder!

Spannung hat er genug, genauso wie der controller, beides ist an ein netzteil und ich hab auch alles so gemacht wie hier beschrieben, denke nicht das dort ein fehler ist.
Naja bald kommt mein USBAVR lab und dann werd ich wohl eine extra schaltung für servos machen mit einem eigenen controller ^^.

@golfkrieg: wenn du einen asuro hast und du dir die beschriftung anschaust weisst du wo alles hingehört.


LG Raz

golfkrieg
03.08.2009, 15:00
@Razzorhead: Habe einen Asuro ich weiß nur nicht genau wo der gemeinsame Punkt von
Punkt von T11, D15, R18 und PC1(Pin 24) sein soll.

Sorry stell mich ein bißchen blöd dran](*,)

radbruch
03.08.2009, 16:41
Hallo

Der "gemeinsame Punkt" ist quasi die Leiterbahn zwischen den genannten Bauteilen. Die Signalleitung des Servos kannst du dort anschliessen wo es am einfachsten ist, z.B. direkt auf den Pin der BackLED, oder an die (blankgekratzte) Leiterbahn oder den Pin des IC-Sockels. Wobei der Pin des Sockels am wenigsten Wärmeempfindlich wäre, also geringstes Risiko beim Löten bestehen würde (vor dem Löten alle ICs entfernen!). Wichtig bei dieser Anzapftechnik ist, dass die orginalen Bauteile des asuro drin bleiben (und teilweise auch noch funktionieren).

Jetzt alles klar?

Gruß

mic

golfkrieg
04.08.2009, 10:58
Ja vielen Dank. Den Servo hab ich bestellt wird wohl die Tage kommen dann werd ich mich mal an die Arbeit machen. Bin mal gespannt ob es funzt.

Danke nochmal.

Gruss

Thund3r
03.01.2010, 23:48
Hallo

Vielleicht etwas spät aber schau dir mal meine Variante zum Anschluss von Servo Motoren an den Asuro an.
Ich hab die Servos an die LEDs angeschlossen.
So kann ich bis zu 5steuern ohne auf Sensorfunktionen verzichten zu müssen. Beispiel: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=51874

Gruß Thund3r

oliver123
04.05.2011, 15:17
Hallo Radbruch,

ich wollte fragen, wo genau am Asuro der gemeinsame Punkt von T12,D16,R20 und PC0 (23) ist?
Ich suche nun schon eine Weile, find aber nichts!
Vielen Dank!

LG

radbruch
04.05.2011, 16:58
Hallo

Wie weiter oben schon beschrieben ist das kein echter "Punkt", es ist vielmehr an allen Pins das selbe Signal. Beste Stelle zum Anzapfen des Signals wäre deshalb Pin 23 (PC0) am Mega8-Sockel für die rechte BackLed, bzw. Pin 24 (PC1) für die Linke (Mega8 vor dem Löten rausziehen!).

Wenn man zusätzlich den PD7 auf Ausgang/Low setzt, blinkt die entsprechende BackLED mit dem an PC0/1 erzeugten Servosignal.

Gruß

mic

https://www.roboternetz.de/community/showthread.php?53073-Pin-PC0

oliver123
06.05.2011, 17:29
Ich habe die PWM-Leitung jetzt an PC0 gelötet und die BackLED ausgelötet, aber es passiert nichts, wenn ich den asuro einschalte. ich versuche das ganze mit folgendem programm:
#include "asuro.h"

int main()
{
int j=0;
Init();
while (1 == 1)
{
for (j=0;j<70;j++)
{
StatusLED (RED);
BackLED (OFF,ON);
Msleep (1);
BackLED (OFF,OFF);
Msleep (100);
}
for (j=0;j<70;j++)
{
StatusLED (YELLOW);
BackLED (OFF,ON);
Msleep (2);
BackLED (OFF,OFF);
Msleep (100);
}

}
}

eingentlich sollte der servo doch nun alle 7 sekunden von der einen extrem stellung in die andere fahren?!
habt ihr eine Idee woran das liegt, dass er nichts tut?
Vielen Dank!
LG

ich habe jetzt mal mit dem multimeter die spannung zwischen ic0 und masse gemessen, hier erhalte ich immer 7s lang 0,07V und 7s lang 0,11V, also müsste sich der servo doch bewegen?!

radbruch
06.05.2011, 17:47
Die BackLED hätte auch drin bleiben können, sie stört bei der Servoansteuerung nicht. Je nach Doku sollte der Servoimpuls zwischen 0,5 und zwei Millisekunden lang sein. Meine Billigservos lagen immer bei etwa 0,5 bis 1,5ms. Der Impuls sollte alle 20ms wiederholt werden. Für eine Impulslänge von 1ms mit einer 36kHz-Library würden sich dann folgende Sleep()-Parameter aufdrängen:

Sleep(36) als Impulslänge
Msleep(19) als Pause

50 Impulse würden dann 1 Sekunde dauern.

Zum Testen einer Position kann man das Servo von Hand vorsichtig auf die jeweiligen Endpositionen drehen und dann mit dem Impuls ansteuern:
http://www.youtube.com/watch?v=CaVxa6zH2bI

oliver123
06.05.2011, 18:06
danke für deine schnelle hilfe!
ich habe deine pausen eingebaut in mein programm, aber der servo bewegt sich trotzdem nicht. -.-
ich habe die pwm leitung an der abgerundeten seite von d16 (rechte BackLED) auf der asuro platine eingelötet und die versorgung des servo erfolgt über ein externes batterie paket mit 4,5V. habe ich hier irgendeinen fehler gemacht?
danke im voraus!

Valen
06.05.2011, 18:22
danke für deine schnelle hilfe!
ich habe deine pausen eingebaut in mein programm, aber der servo bewegt sich trotzdem nicht. -.-
ich habe die pwm leitung an der abgerundeten seite von d16 (rechte BackLED) auf der asuro platine eingelötet und die versorgung des servo erfolgt über ein externes batterie paket mit 4,5V. habe ich hier irgendeinen fehler gemacht?
danke im voraus!Ich furche schjon. Die abgeflachte seite ist der Negatife seite der Diode (Kathode). Dort is schon den spannung einge volt niedriger. Den andere seite ist gerade mit PC0 verbunden.

oliver123
06.05.2011, 18:32
aber ich muss doch das signal des ic's an der positiven seite abgreifen (abgerundet), dort habe ich die leitung ja im moment angeschlossen. die flache seite ist doch an masse angeschlossen?

Valen
06.05.2011, 20:39
aber ich muss doch das signal des ic's an der positiven seite abgreifen (abgerundet), dort habe ich die leitung ja im moment angeschlossen. die flache seite ist doch an masse angeschlossen?Ok, wir haben ein Sprachverwirrung hier. Den runde seite einer Diode ist sicher den 'positive' seite. Den flache Seite ist der 'minus'. Aber in diesem Asuro fall sind die Kathoden der Backled dioden (der negatife beinchen) nicht zu masse, sondern sie sind mit die Widerstanden R19/R21 verbunden der gesamt an Atmega8 pin PD7 verbunden sind, und auch R22 womit der Odometrie LEDs gespeist wird. Schau mal das Schaltungsbild an in dem bauanleitung.

oliver123
07.05.2011, 17:52
aber wo sollte ich dann die pwm leitung des servos anschließen?
direkt am sockel habe ich es schon, und dort hat es irgendwie auch nicht funktioniert!
mein programm, mit dem ich den servo ansteuere ist schon in ordnung, oder?

Valen
07.05.2011, 17:54
aber wo sollte ich dann die pwm leitung des servos anschließen?
direkt am sockel habe ich es schon, und dort hat es irgendwie auch nicht funktioniert!
mein programm, mit dem ich den servo ansteuere ist schon in ordnung, oder?Ob dein Programm in Ordnung ist weise ich nicht. Deine Änderungen im Bericht 23 haben wir bis jetzt noch nicht gesehen.

oliver123
07.05.2011, 19:54
also ich kann glückerweise verkünden, dass es jetzt funktionier :)
ich habe die pwm leitung an die abgerundete seite von dem steckplatzLED16 gelötet und ein kabel an den von der abgeflachten seite der LED16 (also vom steckplatz) an den minuspol des batteriepacks, welches den servo versorgt gelötet und es FUNTIONIERT!
nur würde ich jetzt gerne erfahren warum es funktioniert? den auf die lösung kam ich jetzt eher zufällig!
vielen dank!

Valen
07.05.2011, 20:52
also ich kann glückerweise verkünden, dass es jetzt funktionier :)
ich habe die pwm leitung an die abgerundete seite von dem steckplatzLED16 gelötet und ein kabel an den von der abgeflachten seite der LED16 (also vom steckplatz) an den minuspol des batteriepacks, welches den servo versorgt gelötet und es FUNTIONIERT!
nur würde ich jetzt gerne erfahren warum es funktioniert? den auf die lösung kam ich jetzt eher zufällig!
vielen dank!Den Minus-pol von batteriepacks sollen immer zusammen verbunden werden, sonnst haben sie keine gemeinsame Masse-spannung. Aber, nochmals, die abgeflachte seite der LEDs D15,D16 sind NICHT am Masse von Asuro verbunden, deshalb sollen sie auch nicht am masse der zusätzliche Batteriepack verbunden werden. Was wurde passieren wann du die Odometrie LEDs anschaltest? Dan geht pin PD7 auf High, und wird den minus pol von deine zusätzliche batterie auch auf dieses Potenzial aufgeheben. Und dan ist die Plus pol der Batterie wieder zu hoch (10 volt oder höher?)

oliver123
08.05.2011, 01:09
was bedeutet das jetzt konkret für mich? soll ich das kabel von dem minus anschluss der LED wieder von dem minus pol des zusätzlichen batteriepack (4,5V) weglöten?

Valen
08.05.2011, 01:51
Ja, es gibt genug Masse stellen am Asuro Platine wo du die negativ pol der Batterie anlöten kannst. (Schaltbild bitte ein mal anschauen!!!) Zbs. die 2 Löcher neben R17 (Linksseite, neben den H-Brücke Transistoren und Dioden) oder einer der vorne Beinchen der Tastern (4-eckige Lötstellen). Die Batterie-minus zwischen D16 und R21 anlöten kann etwas ab-rauchen lassen, oder zum merkwürdige Schaltverhalten leiten.