-         

Ergebnis 1 bis 8 von 8

Thema: Versuche Servo zu verstehen.

  1. #1

    Versuche Servo zu verstehen.

    Anzeige

    Code:
    #include <avr/io.h>
    #include <stdint.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    
    #ifndef F_CPU
    #define F_CPU 4000000
    #endif
    
    
    int main(void)
    {
    	cli(); //interrupts aus
    	uint8_t i;
    	TCCR1A |= (1<<WGM11)|(1<<COM1A1)|(1<<COM1A0); //9-Bit PWM, Invertierend
    	TCCR1B = (1<<CS12);    //Prescaler 256
    
    	DDRD |= (1<<PD7);
    	PORTD |= ( 1 << PD7 ); //pullup
    
    	sei();
    
    	while(1)
    	{
    		
    	
    		
    		OCR1A = 500;
    		
    	}
    
    }
    Hallo,

    nachdem ich heute einige tutorials gemacht habe, und ein LCD an dem STK 500 zum laufen gebracht habe, habe ich mich daran gemacht ein Servo anzuschliessen, und versucht es sich zum bewegen zu ermuntern. Leider ist das einzige was passiert ein müdes zucken, was nicht wirklich dolle ist.

    Ich habe ein Atmega 32 mit 4 mhz interner clock, und ein hitec hs-300 standard Servo (Analog, Datenblatt kann ich leider keines finden)
    Ich nutze 9 Bit PWM, Invertierend und prescaler 256.

    Das Servo hat 0,15 s Stellzeit (Was auch immer das bedeutet)
    Der Puls wird mit meinen Einstellungen alle 16,3 ms gesendet.

    Ich habe bereits verstanden, dass mein Counter und mein Vergleichswert
    OCR1A beeinflussen, wielange ein high anliegt.
    Leider verstehe ich nicht, wie ich die Vergleichswerte berechnen. Ich habe einfach mal 500 gewählt, und alles was passiert, ist dass der Servo im Uhrzeigersinn vor sich hinruckelt mit minimalen Bewegungen.
    Manchmal bewegt er sich auch gar nicht.

    Ich hoffe mir kann jemand weiterhelfen, denn ich habe jetzt schon stunden damit verbracht da rumzuprobieren.

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.183
    OC1A ist auf PD5 oder hast du auf PD5 was anderes. Wenn du den Port7 auf Ausgang stellst dann setzt du nicht den PullUp sondern das Port7 auf high.

    Meinte auf PD7 was anderes.

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hallo mcnanuk,

    in diesem Thread ...
    http://www.roboternetz.de/phpBB2/viewtopic.php?t=34407
    ... für den RP6 gibt es einige Varianten, ein Servo in C anzusprechen.

    Angefangen von einer vollständig blockierenden Lösung (Impuls wird durch Delays bei gesperrten Interrupts erzeugt) über eine Lösung mit Timer-overflow bis hin zu einer PWM-Lösung ist alles drin.

    Da kannst du bestimmt was anpassen!

    Gruß Dirk

  4. #4
    @hubert: muss OCR1A auf PD5 sein ? Mein Servo hat doch ein gelbes Kabel, sozusagen das Signalkabel, und das habe ich mittels eines Steckers auf PD7 gelegt ? kann das dann gar nicht funktionieren ?
    Woher weiss ich denn sowas, dass OCR1A auf PD5 ist ?

    @ Dirk: danke, ich werde mir die ösungen anschauen. Thread ist gebookmarked...

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Woher weiss ich denn sowas, dass OCR1A auf PD5 ist ?
    OC1A! Aus dem Datenblatt deines Prozessors!

    Gruß Dirk

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Hi, mcnanuk

    Zitat Zitat von mcnanuk
    ...Woher weiss ich denn sowas, dass OCR1A auf PD5 ist ? ...
    das komplette Datenblatt ist zu haben bei:
    http://www.atmel.com/dyn/resources/p...ts/doc2486.pdf

    ... und das Blatt mit der Pindefinition ist beispielsweise hier als attmnt. Da siehst Du den OC1A auf Pin 15
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken mega8_167.jpg  
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von Hessibaby
    Registriert seit
    20.11.2003
    Ort
    Gelsenkirchen
    Alter
    65
    Beiträge
    1.597
    Der Steuerimpuls muß alle 20ms wiederholt werden. Die Impulslänge ist 1-2 ms, wobei 1ms maximaler linker Ausschlag, 1,5ms Neutralstellung und 2ms maximaler rechter Ausschlag darstellt.
    Wenn Du die 20ms nicht einigermaßen genau einhälst zappelt das Servo rum.
    Gruß

    Planung ersetzt Zufall durch Irrtum

    Gruß aus dem Ruhrgebiet Hartmut

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Hi, Ihr,
    Zitat Zitat von Hessibaby
    Der Steuerimpuls muß alle 20ms wiederholt werden. Die Impulslänge ist ... Wenn Du die 20ms nicht einigermaßen genau einhälst zappelt das Servo rum.
    Gruß
    Servo zappelt beispielsweise auch, wenn die Impulslänge falsch ist, wenn die Versorgungsspannung zu klein ist oder wenn z.B. eine Strombegrenzung (zu kleines Netzteil, zu kleiner Akku oder wie ich es gemacht hatte - blos am tiny-port angeschlossen ) den erforderlichen Strom nicht bereitstellt.
    Siehe auch meine früheren Probleme (mit zwei kleinen Schaltbildern im Code) unter
    http://www.roboternetz.de/phpBB2/zei...751&highlight=
    Viele Grüße, viel Erfolg
    Ciao sagt der JoeamBerg

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •