- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: RP6 Servo Problem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2013
    Beiträge
    9

    RP6 Servo Problem

    Anzeige

    E-Bike
    Hallo Community,

    ich habe vor einiger Zeit den RP6 bekommen, bin jedoch noch ein kompletter Neuling auf dem Gebiet.
    Jedoch kenne ich mich mit den Grundfähigkeiten einigermaßen aus, und bin auch dabei eigene Programme zu schreiben.
    Seit neuem Besitze ich einen Servo, den ich gerne anbringen und einbinden möchte.

    Ich habe seit langer Zeit das Forum durchforstet und habe mir sämtliche Themen im Community-Bereich, sowie im RN-Wissen-Bereich durchgelesen. Doch ich werde nicht so richtig schlau aus den Themen, deshalb schonmal vorab: Entschuldigt, dass ich es nicht sofort verstehe, und einen eigenen Thread eröffne.

    Meine Frage ist die. In einem Thread fand ich diese kleine Demo zur Ansteuerung eines Servos und wollte diese einmal zum testen ausprobieren.

    Jedoch werde ich aus dem Programm nicht schlau, wie ich den Servo am RP6 montieren muss, sprich welche Ports ich belegen muss.
    Ich habe einen Servo von Modelcraft mit einem Orangem-, Rotem- und Braunemkabel.

    Ich hoffe ihr könnt mir helfen und ärgert euch nicht so über die doofen Fragen eines Neulings
    Danke im Voraus.

    Ps. Ich hoffe ihr verzeiht mir wenn etwas im Code unten nicht so gut lesbar ist oder so, ich mache es das erste Mal

    Code:
    #include "RP6RobotBaseLib.h" 	// The RP6 Robot Base Library.
    								// Always needs to be included!
    
    /*****************************************************************************/
    // Defines:
    
    // RP6 Base Servo Connection:
    #define SERVO_OUT			SDA			// PINC1  XBUS Pin 12
    
    // Servo movement limits (depending on servo type):
    #define LEFT_TOUCH			550			// Left servo touch
    #define RIGHT_TOUCH			254			// Right servo touch [max. 255]
    #define PULSE_ADJUST 		4
    #define PULSE_REPETITION	19			// Pulse repetition frequency
    
    /*****************************************************************************/
    // 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
    }
    
    /**
     * PULSE SERVO
     *
     * This is the servo pulse generation. This function
     * must be called every 20ms (pulse repetition).
     *
     * position = 0           : Left touch
     * position = RIGHT_TOUCH : Right touch
     *
     * ATTENTION: ! This function is BLOCKING all other activities for about 1   !
     *            ! to 2ms (depending on the value of position)!!!               !
     *            ! If you generate a pulse every 20ms 5-10% of the processor's  !
     *            ! calculating time is wasted by this kind of pulse generation. !
     *            ! If this is a problem for the rest of your program, you       !
     *            ! cannot use this method.                                      !
     *            ! You will need an interrupt-based solution instead.           !
     *            
     */
    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();
    }
    
    /**
     * SERVO TASK
     *
     * This is the servo demo task.
     * The positioning demo shows the servo lever rapidly
     * moving to the left touch, then slowly moving to
     * the right touch and so on ...
     *
     */
    void task_SERVO(void)
    {static uint8_t pos;
    	if (getStopwatch1() > PULSE_REPETITION) { // Pulse every ~20ms
    		pulseSERVO(pos);				// Servo pulse [1..2ms]
    // ---------------------------------------------------------------------
    // Your test code for positioning the servo here:
    		if (getStopwatch2() > 48) {	// Change position every ~50ms
    			pos++;						// Next position to the right
    			if (pos > RIGHT_TOUCH) {pos = 0;} // pos: 0..RIGHT_TOUCH
    			setStopwatch2(0);
    		}
    // ---------------------------------------------------------------------
    		setStopwatch1(0);
    	}
    }
    
    /*****************************************************************************/
    // Main function - The program starts here:
    
    int main(void)
    {
    	initRobotBase(); // Always call this first! The Processor will not work
    	board_init();				 // correctly otherwise.
    					 
    
    	mSleep(2500);
    
    	setLEDs(0b111111); // Turn all LEDs on
    	mSleep(500);       // delay 500ms
    	setLEDs(0b000000); // All LEDs off
    
    	initSERVO();
    	startStopwatch2();					// Used for the demo task
    	
    	while(true)  
    	{
    		task_SERVO();
    		task_RP6System();
    	}
    	return 0;
    }
    
    /******************************************************************************
     * Additional info
     * ****************************************************************************
     * Changelog:
     * - v. 1.0 (initial release) 03.10.2007 by D. Ottensmeyer
     *
     * ****************************************************************************
     */
    
    /*****************************************************************************/

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi Arjen98,
    Jedoch werde ich aus dem Programm nicht schlau, wie ich den Servo am RP6 montieren muss, sprich welche Ports ich belegen muss. Ich habe einen Servo von Modelcraft mit einem Orangem-, Rotem- und Braunemkabel.
    In der Demo wird der Impuls an SDA ausgegeben,- in der Zeile:
    #define SERVO_OUT SDA // PINC1 XBUS Pin 12
    ... kann man das lesen.
    SDA ist am XBUS-Stecker der Pin 12.

    Das Servo müßte man dann so anschließen (am XBUS-Stecker):
    Braun --- GND --- Pins 1,2 oder 14
    Rot --- +5V --- Pins 3 oder 5
    Orange --- Impuls --- Pin 12

    Das solltest du aber nur zu Testzwecken so machen. Wenn du mal mehr als 1 Servo anschliessen willst, must du die Stromversorgung (+5V, GND) auf der Hauptplatine des RP6v2 (Link!) anschliessen und du kannst dann z.B. auch die RP6Base Library für 8 Servos nutzen. Es gibt auch noch andere Programme zum Ansteuern von Servos mit dem RP6.
    Gruß
    Dirk

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2013
    Beiträge
    9
    Vielen vielen dank Dirk.
    Endlich hab ich es richtig verstanden und es funktioniert.
    Ich werde in der nächsten zeit einmal ein Programm versuchen zu Schreiben für den Servo.
    Wenn ich fragen hab kann ich mich ja zum Glück hier melden.
    Danke für die Hilfe

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    11.01.2014
    Beiträge
    6
    Hallo,
    da ich im Moment an Nahezu dem selben Problem bastle und schon eine Sicherung durchgehauen habe, wollte ich fragen, wo ich den die von euch verwendete Pin Nummerierung für den XBUS nachlesen kann?

    Danke

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    schon mal mit dem Handbuch probiert ? in meinem Handbuch finde ich die Xbus1 Belegung auf Seite 28
    Gruß TrainMen

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    11.01.2014
    Beiträge
    6
    Tatsächlich... Danke
    Habe es gestern durchgesucht aber irgendwie muss ich es übersehen haben... Sorry aber Danke

Ähnliche Themen

  1. Servo Modelcraft Standard-Servo RS 2, problem
    Von Technik_Amateur im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 12.09.2013, 13:25
  2. RP6 Servo Ansteuerung
    Von Robotoni im Forum Robby RP6
    Antworten: 109
    Letzter Beitrag: 04.04.2011, 17:50
  3. RP6 Servo Ansteuerung
    Von RP6-Besitzer im Forum Robby RP6
    Antworten: 13
    Letzter Beitrag: 18.10.2010, 17:03
  4. RP6 Servo ansteuern
    Von RP6-Besitzer im Forum Robby RP6
    Antworten: 8
    Letzter Beitrag: 11.10.2010, 20:26
  5. Servo Problem --> Servo zuckt beim Einschalten vom AVR
    Von goof1980 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 05.11.2008, 22:20

Stichworte

Berechtigungen

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

LiFePO4 Speicher Test