-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Servo machen nicht das, was sie sollen!

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.01.2009
    Beiträge
    14

    Servo machen nicht das, was sie sollen!

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,

    ich arbeite momentan an einem Projekt, bei dem Ich Servos ansteuern muss.
    Ich versuche es mit folgendem Code, der einen Servo ansteuern soll:
    Code:
    #define F_CPU 8000000L
    #include <avr/io.h>
    #inlcude <util/delay.h>
    
    void delay_ms(unsigned int ms)
    {
         while(ms--)
              _delay_ms(1);
    }
    
    int main(void)
    {
         DDRB |= (1<<PB0);  //Servo an PB0
         while(1)
         {
              PORTB |= (1<<PB0);
              delay_ms(2);
              PORTB &= ~(1<<PB0);
              delay_ms(15);
         }
    }
    Die Servos wurden, wie im Elektor-Schaltungsheft 07 beschrieben, modifieziert.

    Aber die Servos drehen nicht, sonder bewegen sich nur ganz langsam oder gar nicht.

    Gruß Pommestuete
    Hey Hoh, letz program

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    06.07.2007
    Alter
    30
    Beiträge
    81
    Was hast du genau an ihnen verändert?
    Funktioniert ein "unveränderter" Servo?
    Kannst du das Servosignal mit nem Oszi anschauen?
    MFG

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von vohopri
    Registriert seit
    11.09.2004
    Ort
    südlich der Alpen
    Beiträge
    1.708
    Hallo tüte,

    mixxers Vorschlag ist richtig: es geht darummöglichst einfach zu unterscheiden, ob du den Fehler auf der Servoseite oder auf der MC Seite suchen sollst.

    Genau genommen ist ein Oszi nicht nötig, ein SoftwareOszi reicht da locker aus:



    Damit siehst du genau, womit die Servos gefüttert werden. Ein kleines Programm reicht aus, um zu zeigen, was am Linein Eingang der Soundkarte anliegt. In meinem Beispiel werden die Servosignale von 2 Kanälen gezeigt.

    grüsse,
    Hannes

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    08.01.2009
    Beiträge
    14
    ob ein normaler servo funktioniert:
    Nein, er lässt sich nicht stellen.
    Er bewegt sich nicht oder schlägt voll aus!
    Hey Hoh, letz program

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    06.07.2007
    Alter
    30
    Beiträge
    81
    Mit deinem Programm ist auch der Impuls 2ms - das heist voller Ausschlag. Wenn du ihn auf 1,5ms stellst (Pause dann 20ms-1,5ms) dann sollte der Servo auf Mittelstellung fahren!
    MFG Mixxer

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Sowohl mit einer wie auch mit zwei Millisekunden Wartezeit funktioniert mein Billigservo mit dem an Port A0 angepassten Programm:
    Code:
    // #define F_CPU 8000000L
    #include <avr/io.h>
    #include <util/delay.h>
    
    void delay_ms(unsigned int ms)
    {
         while(ms--)
              _delay_ms(1);
    }
    
    int main(void)
    {
         DDRA |= (1<<PA0);  //Servo an PA0
         while(1)
         {
              PORTA |= (1<<PA0);
              delay_ms(2);
              PORTA &= ~(1<<PA0);
              delay_ms(15);
         }
    }
    Stimmt denn die Taktfrequenz? Mein RP6 läuft mit Sicherheit mit 8 MHz.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    21.05.2008
    Ort
    Oststeinbek
    Alter
    28
    Beiträge
    607
    Versuch mal das zweite delay auf 18ms zu stellen, vielleicht hilfts was.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    08.01.2009
    Beiträge
    14
    Super, des mit den 18ms Funktioniert!
    Aber mein Problem ist jetzt, wie ich 2 Servos mit Timern verwenden kann, da der ablauf ja nur einen Servo steuert.
    Ich hab nen Atmega16 mit 5MHz.

    Ach ja: Vorher warens 8.
    Hey Hoh, letz program

  9. #9
    Erfahrener Benutzer Robotik Einstein Avatar von vohopri
    Registriert seit
    11.09.2004
    Ort
    südlich der Alpen
    Beiträge
    1.708
    Hallo Tüte,

    alles zusammen in eine Schleife: Erst das eine Servo ansteuern, dann das andere Servo am anderen Port. Die Pause wieder so ergänzen, dass eine Runde 20ms dauert.

    grüsse,
    Hannes

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    08.01.2009
    Beiträge
    14
    so inteliigent bin ich auch schon, aber ich will eigentlich ne "intelligenz" in meiner main-schleife machen.
    Da hab ich "keine" Zeit mehr, mich um die Servos zu kümmern.
    Hey Hoh, letz program

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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