- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: Servo soll verschiedene Winkeln ausführen.

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.06.2012
    Beiträge
    12

    Servo soll verschiedene Winkeln ausführen.

    Anzeige

    E-Bike
    Hallo Leute,

    ich habe mal eine Frage. Wenn ich 1-3 Servos bewegen möchte, d.h. der Servo soll sich z.B. 30° dann 70° und danach 50° etc. drehen. Wie muss ich das denn dann programmieren? kann mir jemand ein Tip geben oder vielleicht ein Beispielcode zeigen? ich wäre ihm/ihr sehr dankbar.


    gruß Jobo

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    26.06.2012
    Beiträge
    12
    kann mir hier keiner helfen?

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Hallo,
    mein Tipp: http://www.rn-wissen.de/index.php/Servos

    Sonst die Suche benutzen oder durch m-wissen lesen

    Viel Erfolg

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.687
    ... 1-3 Servos bewegen ... ein Tip geben oder vielleicht ein Beispielcode ...
    Hi Jobo,

    ich bin nicht sicher, dass Dir der Servoabschnitt aus dem RNWi ssen doll helfen wird. Interessant wäre es noch zu wissen, welchen Controller Du benutzt und wie schnell der getaktet ist.

    Für diese Aufgabe - mehrere Servos auf unterschiedliche Werte setzen - gibt es aber eine Menge von Beispielen.

    Eine ziemlich simple Möglichkeit wäre diese Soft-PWM (dieses Beispiel ist eine modifizierte, leider auf die Schnelle nicht getestete Variante) deren Orignal auf meinem WALL R zur Steuerung des Lenkservos läuft. Umgebung ist ein mega168/328 - 20 MHz. Meine Lösung basiert auf einem 50 µs-Timer-Interrupt, der bei mir für alle möglichen zeitgesteuerten Aufgaben und zum Messen der Bordzeit verwendet wird. Mit diesem Beispiel kannst Du einen Servo auf 10 verschiedene Positionen fahren - die aber nicht beliebig wählbar sind. Vielleicht hilfts.

    Code:
    // Definiere ein paar Variablen:
    // . . . . . .
    //
    volatile int16_t Iservo; // Counter für 20 ms-Periode
                                    //
    volatile int16_t Isvs1, Isvs2, ... // Stellwert (Pulslänge) für Servo1, ~2 ...
                                    //
    // ---- und danach Timerinitialisierung
    // ============================================================================== =
    // ===  Initialisierung fuer Timer2 mega168
     void TC2TMR_init(void)         // Init Tmr/Cntr 2, 8-Bit auf 20 kHz = 50 µs
     {                         //
        TCCR2A |= (1<<WGM21);       // Timer im CTC-Mode, Top=OCR2A   doc S 157
        TCCR2B |= (1<<CS21);        // Prescaler 1/8 / Clock <- CPU   doc S 158
        OCR2A   = 124;              // Preset 125 für 50µs bei 20Mhz  
        TIMSK2 |= (1<<OCIE2A);      // Tmr/Cntr2 CompareA interrupt enabled
     }                              //
    // ============================================================================== =
    // Vor dem Aufruf der Timerinitialisierung sollten die Variablen
    // Iservo, Isvs1 etc. auf Null gesetzt werden.
    //
     
    // ---- und ISR zur Servosteuerung
    // ============================================================================== =
    // ===  Nicht unterbrechbare ISR für timer2 ===================================== =
    // Routine zählt hoch im Takt 20 kHz = 50 µs.   
     ISR(TIMER2_COMPA_vect)         // Vektor 7
     {                              //
    // - - - - - - - - - - - - - - -
    // Es folgt die Servoroutine. Servo wird mit der/den Variablen Isvs1... gesteuert:
      if (Iservo < 400)             //Servo-Timer läuft von 1 .. 400
      {                             // 400 * 0,050 ms => 20 ms.
      Iservo ++;                    //
        if (Iservo == Isvs1)        // Wenn Servozeitcounter Iservo gleich Isvs1
          PORTB &= ~(1<<PB2);       //  Servopin1 ausschalten
        if (Iservo == Isvs2)        // Wenn Servozeitcounter Iservo gleich Isvs2
          PORTB &= ~(1<<PB3);       //  Servopin2 ausschalten
      }                             //
      else                          // Servo-Timer hat Ende=400 erreicht, daher
      {                             //
        Iservo  = 0;                // Servotimer zurückstellen auf Null und
        PORTB |= (1<<PB2);          // ... Servopin1 einschalten für nächste Rampe
        PORTB |= (1<<PB3);          // ... Servopin2 einschalten für nächste Rampe
      }                             //
     }                              //
    // ============================================================================== =
    
    // Die Werte Isvs1, Isvs2 ... werden im Main oder einer passenden Routine gesetzt
    //   ACHTUNG: beim Arbeiten mit Isvs1, Isvs2 etc. vor und hinterher cli(); /sei/();
    //   um Pannen beim zweibittigen Zugriff zu vermeiden.
    Viel Erfolg und schreib auch, obs so läuft oder ob Du inzwischen etwas Anderes gefunden hast.

    Nachtrag (hatte es irrtümlich gelöscht): in diesem Beitrag findest Du ein Lösungsbeispiel für mehrere Servos - aber in Bas com.
    Geändert von oberallgeier (27.07.2012 um 19:39 Uhr)
    Ciao sagt der JoeamBerg

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    26.06.2012
    Beiträge
    12
    Hallo danke erst mal für die antworten.
    Also ich benutze einen Atmega128 mit Atmel Studio6. Taktung liegt bei 7372800Hz und will es in C programmieren.
    ich guck mir mal eure Tipps an und schreib euch dann mein Erfolg.

    gruß

Ähnliche Themen

  1. Welchen Servo soll ich nehmen???
    Von bimbo385 im Forum Mechanik
    Antworten: 12
    Letzter Beitrag: 12.03.2009, 17:05
  2. Antworten: 4
    Letzter Beitrag: 26.09.2006, 21:09
  3. servo tut nicht, was er soll
    Von Goblin im Forum Motoren
    Antworten: 12
    Letzter Beitrag: 08.05.2005, 22:35
  4. Java: Abschließende Methode ausführen
    Von MJA im Forum Software, Algorithmen und KI
    Antworten: 1
    Letzter Beitrag: 15.04.2005, 21:13
  5. .bat Dateien ausführen
    Von pc-freak im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 15.12.2004, 13:00

Berechtigungen

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

12V Akku bauen