Zitat von Richard
Auf die Gefahr hin dass ich als Klugsch...er dastehe. Ich möchte nicht, dass der Kollege KK als Anfänger, der Servos steuern möchte, ungenau oder falsch informiert wird.Zitat von Ceos
Servos werden durch PWM angesteuert. Die RC-Fuzzies übertragen ihre Informationen zwischen Steuerung und Empfänger in PPM, ABER daraus macht dann der RC-Empfänger für den Servo ne PWM. Korrekt wird ein Servo mit PWM angesteuert - obwohl es meist auch mit konstanten Pausen zwischen den Pulsen sosolala funktioniert.
Kurz. PWM hat variable Pulse und variable Pausen bei konstanter Periodenlänge. Die Information liegt genaugenommen im Puls. PPM hat konstante Pulse und variable Pausen, also eine variable Periodenlänge, die Information liegt in der Pause.
Ciao sagt der JoeamBerg
Danke für die Antworten.
Da gefragt wurde mit welcher SPrache ich programmiere und wie die Hardware aussieht.
Programmiersprache: C (Benutze als Programm AVR Studio)
Hardware: STK500 mit einem Atmega48-20PU dort hatte ich dann vor einfach die Ports über ein Flachbandkabel auf die Platine zu bringen und dann an PD6 die Signalleitung vom Servo anklemmen. Was mir auch eingefallen ist. Es ist nicht notwendig das ich den Motor über den Poti regeln kann. Noch lieber wäre mir eine Möglichkeit das PWM Signal direkt am PC Live zu ändern das macht das ganze eventuell etwas einfacher da ich nicht auf die Werte vom Poti angewiesen bin.
Brauche ich dafür Software? Was für ein Signal muss ich am Ausgang ausgeben wenn ich 2ms Pulsbreite Bei periodendauer von 20ms haben will.
(Ich habe den Schaltplan mal drangehangen damit nicht jeder auf den Link muss)
Danke![]()
Hallo
Unter den vielen möglichen Ansteuerarten für Servos drängt sich dies nahezu auf: Impulserzeugung mit dem ADC-Interrupt.
Dazu wird der ADC im Freerunnig-Modus gestartet, dessen Prescaler bildet zusammen mit dem Systemtakt die kleinste Zeiteinheit für die Servoimpulsbildung. In der ADC-ISR werden klassisch (wie im RN-Wiki beschrieben) die Aufrufe der ISR gezählt und die Impulse ausgegeben.
Wirklich trickreich wird es jedoch, wenn man das an einem analogen Pin macht, denn dann kann man in der Impulspause am selben Pin eine Spannung messen und so ein Poti oder einen Taster auswerten. So funktioniert übrigends auch der Servo-Sensor:
https://www.roboternetz.de/community...g-Servo-Sensor
Oder mein Tiny-CD-Racer. Hier werden die Servos zusammen mit Fotodioden am selben Pin betrieben:
http://www.youtube.com/watch?v=XTYzLqgKMLM
https://www.roboternetz.de/community...l=1#post364346
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Und am PC? Ein Poti am PC?Zitat von KrosseKrabbe
Der Empfang von Daten vom PC und das Umsetzen dieser Daten zu entsprechenden Ansteuerwerten im Controller ist nicht so simpel. Auch nicht schwer, aber vermutlich erstmal deutlich aufwendiger als Poti auslesen und den Wert im Controller weiter verrechnen.
Ciao sagt der JoeamBerg
Im Prizip brauchst Du nur die entsprechenden PWM Werte für rechts,links, mitte per z.B. Hyperterm oder ähnlich zum µC senden und in das PWM Register schreiben.
Es gibt auch PC Programme mit denen eine Fernsteuerung simuliert werden kann oder man greift auf z.B. so etwas zurück http://www.shop.robotikhardware.de/s...a9ce059e8c6063
Gruß RichardCode:'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 $regfile = "2313def.dat" Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 'as an option you can use TIMER1 'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1 'we use 2 Servos with 10 uS resolution(steps) 'we must configure the port pins used to act as output Config Portb = Output 'finally we must turn on the global interrupt Enable Interrupts 'the servo() array is created automatic. You can used it to set the 'time the servo must be on Servo(1) = 10 '10 times 10 = 100 uS on 'Servo(2) = 20 '20 times 10 = 200 uS on Do Loop Dim I As Byte Do For I = 0 To 100 Servo(1) = I Waitms 1000 Next For I = 100 To 0 Step -1 ' Servo(1) = I Waitms 1000 Next Loop End
Geändert von Richard (11.10.2011 um 15:10 Uhr)
Lesezeichen