- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: RP6 Servo Ansteuerung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76

    RP6 Servo Ansteuerung

    Hey,
    ich habe den RP6 bekommen und habe so die grundsachen schon kapirt aber weil nur rumfahren nen bissel langweilig is will ich jetzt einen servo ansteuern. ich habe schon foren darüber gesehen aber habs Leider nicht hinbekommen da wollte ich mal fragen ob ihr mir das mal für dummies erklären können^^
    lg
    Christian

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo Christian,

    das ist hier im Forum schon sooo oft und einfach erklärt worden, geh 'mal zuerst auf die Suche!

    Ergebnisse z.B.:

    Grundwissen zu Servos im Wiki:
    https://www.roboternetz.de/wissen/index.php/Servos

    Langer Thread zur Servoansteuerung mit dem RP6:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=34407

    RP6Base: Library für 8 Servos:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=45180

    RP6Control: Library für 8 Servos:
    https://www.roboternetz.de/phpBB2/viewtopic.php?t=45223

    Gruß Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    26.12.2008
    Beiträge
    30
    hatte vor kurzem das gleiche problem... wenn du den Servo an ADC0 oder ADC1 anschließen willst dann mach es so:

    1 : Rotes Kabel (Spannungsversorgung+, VDD)

    2 : Schwarzes Kabel (Spannungsversorgung-, GND)

    3 : Weißes Kabel (Impuls)

    und jetzt kannste z.B. des als Code verwenden:

    is en leicht veränderter code von radbruch:

    Code:
     // Servoansteuerung mit sleep(), Servoimpuls an ADC0, 2 Positionen 10.1.09 mic
    
    #include "RP6RobotBaseLib.h"
    
    uint8_t i;
    
    int main(void)
    {
       initRobotBase();   // initialisieren
       DDRA |= 1;         // Datenrichtung Port A Bit 0 (das ist ADC0) auf Ausgang
    
       while(true)
       {
          for(i=0;i<100; i++) // 100 mal Impuls für Position 1 senden
          {
             PORTA |= 1;
             sleep(2);
             PORTA &= ~1;
             sleep(200-2);
          }
    	  for(i=0;i<100; i++) // 100 mal Impuls für Position 2 senden
          {
             PORTA |= 1;
             sleep(12);
             PORTA &= ~1;
             sleep(200-12);
          }
          for(i=0;i<100; i++) // 100 mal Impuls für Position 3 senden
          {
             PORTA |= 1;
             sleep(20);
             PORTA &= ~1;
             sleep(200-20);
          }
    	  for(i=0;i<100; i++) // 100 mal Impuls für Position 4 senden
          {
             PORTA |= 1;
             sleep(12);
             PORTA &= ~1;
             sleep(200-12);
          }
       }
       return(0);
    }

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    26.05.2012
    Beiträge
    15
    Ich hätte da mal eine Frage ,
    ich habe mir vor kurzem auch einen rp6 gekauft
    das grundsätzliche hab ich auch schon verstanden ,
    jetzt möchte ich aber einen externen Motor mit dem RP6 steuern ,
    des wäre nett wenn mir einer erklären könnte wo ich die Kabel auf dem Mainboard anlöten muss und wie man das dann programmiert...

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hier ging's vor 3 Jahren mal um Servos!
    Gruß
    Dirk

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76
    cool danke muss ich muss doch die "RP6RobotBaseLib.h" datei ändern oder ?

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Nein, die Library muss nicht geändert werden. Es wird (blockierend) die Sleep()-Funktion verwendet.
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76
    OK ich habs hinbekommen =D>
    wäre aber cool wenn er von limks nach rechts dreht und dan wieder zurück macht er aber ihrgent wie ned
    Code:
    #include "RP6RobotBaseLib.h" // The RP6 Robot Base Library.
    // Defines:
    #define SERVO_OUT SDA // PINC1 XBUS Pin 12
    
    
    // Servo movement limits (depending on servo type):
    #define LEFT_TOUCH 10//550 // Left servo touch
    #define RIGHT_TOUCH 10 // Right servo touch [max. 255]
    #define PULSE_ADJUST 10
    #define PULSE_REPETITION 18 // Pulse repetition frequency
    //Variablen
    int richtung=0; //0=rechts; 1=links
    int speed=10;
    /*****************************************************************************/
    // Functions:
    
    /**
    * INIT SERVO
    *
    * Call this once before using the servo task.
    *
    */
    void initSERVO(void)
    {
    DDRC |= SERVO_OUT; // SERVO_OUT -> OUTPUT
    PORTC &= ~SERVO_OUT; // SERVO_OUT -> LO
    startStopwatch1(); // Needed for 20ms pulse repetition
    }
    void pulseSERVO(uint8_t position)
    {
    cli();
    PORTC |= SERVO_OUT; // SERVO_OUT -> HI (pulse start)
    delayCycles(LEFT_TOUCH);
    while (position--) 
    {
    delayCycles(PULSE_ADJUST);
    }
    PORTC &= ~SERVO_OUT; // SERVO_OUT -> LO (pulse end)
    sei();
    }
    void task_SERVO(void)
    {static uint8_t pos;
    if (getStopwatch1() > PULSE_REPETITION) { // Pulse every ~20ms
    if(richtung==0) pos=pos+speed;
    else pos=pos-speed;
    if (pos > RIGHT_TOUCH) {richtung = 1;} //nach links drechen
    if (pos < LEFT_TOUCH) {richtung = 0;} //nach rechts drehen
    
    pulseSERVO(pos);
    setStopwatch1(0);
    }
    }
    
    /*****************************************************************************/
    // Main function - The program starts here:
    
    int main(void)
    {
    initRobotBase();
    powerON();//anschalten
    startStopwatch1();
    setLEDs(0b111111); // Turn all LEDs on
    mSleep(500); // delay 500ms
    setLEDs(0b000000); // All LEDs off
    
    initSERVO();
    
    while(true)
    {
    task_SERVO();
    task_RP6System();
    
    }
    return 0;
    }

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76
    schon gut fehler gerunden sry

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    24.01.2009
    Beiträge
    76
    Hey eine frage hätte ich noch wie kann ich den servo in eine bestimte position stehlen? also z.b das wen ich den rp6 starte des der servo automatich in die mittel stellung fährt?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress