Wenn du die Elektronik aus dem Servo nimmst (nur den Motor drin lassen)und nur dem Motor direkt anschließt dann läuft das Servo nur wenn Strom drauf ist.
Wenn es in die andere Richtung drehen soll dann musst du einfach die Pole umdrehen.
Moin Jungs!
Ich bin gerade dabei mir meinen ersten Roboter zusammen zu löten.
Er soll erstmal nicht viel können, einfach nur mal rumfahren und Hindernissen ausweichen reicht (wobei das erst später realisiert werden soll).
Herzstück ist ein Mega16, welcher mit Bascom gefüttert wird.
Der Roboter ist 160x100mm groß, und wiegt inkl. Akku derzeit nichtmal 200gr.
Antreiben sollen ihn zwei gehackte Servos, die ich noch in der Bastelkiste hatte.
Nun hab ich die Servos gerade offen auf dem OP-Tisch liegen und wundere mich, warum das Poti in der Neutralposition hackt und einen Widerstandswert von 0Ohm hat, hab ich noch nie erlebt! Nun hab ich erstmal zwei 3,3kOhm Widerstände als Spannungsteiler eingebaut und an den Mega16 angeschlossen und o wunder: Sie drehen sich^^
Nun meine Frage: Wie bekomme ich es hin, dass die Servos auch mal aufhören zu drehen? Bislang drehen sie immer unendlich in eine Richtung, mal schnell mal langsam, aber ich bekomms nicht hin, dass sie nichts tun?! Könnt ihr mir helfen?
Wenn du die Elektronik aus dem Servo nimmst (nur den Motor drin lassen)und nur dem Motor direkt anschließt dann läuft das Servo nur wenn Strom drauf ist.
Wenn es in die andere Richtung drehen soll dann musst du einfach die Pole umdrehen.
Die Original-Servoelektronik ist noch drin.
Mein Problem ist jetzt, dass sich das Servo sofort dreht, wenn Spannung auf dem Board ist, obwohl es das eigentlich nicht sollte.
Der Code:
Wenn ich den ganzen Servo-Müll rausschmeiße, dann dreht es sich nicht, also schließe ich daraus, dass es zu 100% an der Software liegt?!Code:'erstes Bascom-Programm für Roboter $regfile "m16def.dat" $crystal = 8000000 Config Portd.6 = Output Config Portd.7 = Output Config Portb.2 = Output Config Pind.5 = Input Config Pind.4 = Input Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 Config Lcd = 16 * 2 Config Servos = 2 , Servo1 = Portd.6 , Servo2 = Portd.7 , Reload = 10 Enable Interrupts 'Interrupts für Servo erforderlich! Taster1 Alias Pind.5 Taster2 Alias Pind.4 Led_gruen Alias Portb.2 'hier dreht sich das Servo! Portd.6 = 0 ' hier dreht es sich immernoch?! Cursor Off Cls Locate 1 , 1 Lcd "# RobiRobo 1.0 #" Waitms 500 Led_gruen = 1 Wait 1 Servo(1) = 100 Cls Locate 2 , 1 Lcd "Servo 1 an" Wait 60 Portd.6 = 0 Cls Locate 2 , 1 Lcd "Servo 1 aus" End
Bei einem anderen gehackten Servo ist das gleiche Problem, hier ist auch noch das Poti drinne, aber wenn man am Poti dreht ändert sich komischerweise garnichts?
Ich würde es so machen: Servo an Spannung (Plus und Minus halt, 5V), und die Signalleitung vom Servo an einen PWM-Ausgang.
Servos _können_, wenn sie gar keine PWM bekommen, unkontrolliert laufen, darum musst du ihnen per PWM eine Vorgabe liefern (deswegen darf man bei RC-Anlagen auch z.B. nie den Empfänger vor dem Sender einschalten, das kann die Servos beschädigen).
Potis stellst du am besten auf Mitte, misst sie und ersetzt die dann durch passende Widerstände (es _geht_ auch mit Poti, aber dann ist es schwer, sie wirklich ruhig zu stellen).
So funktioniert es bestens.
Der Trick ist dann nur noch, das passende PWM-Signal zu den Widerständen zu erzeugen, bei dem das Servo auch stehenbleibt.
Normalerweise schmeisst man die ganze Elektronik raus und benutzt ne Doppel-H-Brücke ( L293 ) um 2 Servos zu betreiben.
Es gibt zwei Möglichkeiten, Servos zu hacken:Zitat von Maxi P.
A) Elektronik drinlassen.
Dabei wird - wie Du es wohl gemacht hast, die Servo-Mittelstellung durch einen Spannungsteiler simuliert. Im Servo muss noch der Drehwinkel-Anschlag entfernt werden. JETZT kannst Du mit einer üblichen Servo-PWM den Motor steuern. Du kennst das übliche PWM-Signal für Servos? Etwa 50 mal pro Sekunde kommt ein Signal mit Pegel high, etwa +5V gegen GND des Servo (jaaa- Servo-GND und Controller-GND müssen verbunden sein) von etwa 0,5 bis 1,5 ms Länge. Bei Deinem Spannungsteiler wird der Servo dann bei rund 1 ms Signallänge ziemlich langsam drehen, sollte eigentlich sogar stillstehen, bei weniger dreht er in eine Richtung, bei einem längeren Signal dreht er in die andere Richtung.
Vorteil: Du brauchst für die Ansteuerung eines Servos nur einen Controllerpin.
Nachteil: nach meiner Erfahrung lebt die Elektronik nicht wirklich lange . . . . die ist wohl nach wirtschaftllichen Gesichtspunkten meist ziemlich knapp ausgelegt. Ausserdem ist man an die Stellgeschwindigkeit der Drehzahleinstellung von 50 Hz gebunden - das war bei mir für eine schnelle und gute Regelung viel zu langsam. Bei einer 8-Bit-PWM hast Du nur 127 Werte zum Steuern einer Richtung (langt aber doch wohl immer).
B) Elektronik ausbauen
und den Motor so betreiben, wie eben ein Gleichstrommotor betrieben wird. (Dass dies der Normalfall sei, halte ich eher für ein Gerücht.) Dabei werden übliche Motorbrücken-ICs eingesetzt, die mit 2 oder drei Pinnen je Motor vom Controller gesteuert werden.
Vorteil: Die PWM kann so schnell sein, wie Du willst - na ja, wie Du als richtig empfindest oder berechnest. 10, eher 20 kHz ist da nicht zu viel, siehe diesen Thread. Theoretisch kann man dann mit ein paar Kilohertz die Drehzahl nachstellen/regeln. Es wird die volle Bitbreite der PWM zum Stellen in eine Richtung ausgenutzt = doppelte Auflösung wie bei A).
Nachteil: Es werden pro Motor zwei, meist drei Pinne für die Drehzahlstellung benötigt.
Meine Lösung sieht aus wie im Bild unten (Mikroservo vom C für fünf Flocken): keine Elektronik, auch mal zwei Getriebestufen übersprungen (ein Rad ausgebaut) - und das gibt dann statt 1 Ups eine Drehzahl von 8 Ups. UND eine mikroskopisch kleine Drehzahlmessung mit Gabellichtschranke.
................Bild hier
Ciao sagt der JoeamBerg
Lesezeichen