- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 55

Thema: Zwei 550er Motoren mit RP6 ansteuern (Help)

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2009
    Ort
    8052 Graz
    Alter
    49
    Beiträge
    18

    Motoren gehn jetzt aber Programm hab ich noch Probleme

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo
    So die Motoren gehn jetzt ,hab die Fahrtenrgler über ADC0-ADC1 angeschlossen.
    Aber leider drehn sich die räder gegengesätzt, aber wie schon gesagt ich bin absolut neu was das alles betrieft. Kann mir wehr helfen mit dem Programm

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2009
    Ort
    8052 Graz
    Alter
    49
    Beiträge
    18

    Re: Motoren gehn jetzt aber Programm hab ich noch Probleme

    ]Hallo
    So die Motoren gehn jetzt ,hab die Fahrtenrgler über ADC0-ADC1 angeschlossen.
    Aber leider drehn sich die räder gegengesätzt, aber wie schon gesagt ich bin absolut neu was das alles betrieft. Kann mir wehr helfen mit dem Programm.


    }
    Code:
    #include "RP6RobotBaseLib.h" 
    
    uint8_t i; 
    
    int main(void) 
    { 
       initRobotBase();    
       DDRA |= 1;
       DDRA |= 2;          
    
       while(true) 
       { 
          for(i=1;i<100; i++) 
          
          { 
             PORTA |= 1; 
             sleep(20); 
             PORTA &= ~1; 
             sleep(10-1);
             PORTA |= 2;
             sleep(20);
             PORTA &= ~2;
             sleep(10-2);
    
          } 
       } 
       return(0); 
    }

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Aber leider drehn sich die räder gegengesätzt,...
    Vorschlag: Einen Motor umpolen?

    Gruß Dirk

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2009
    Ort
    8052 Graz
    Alter
    49
    Beiträge
    18
    Hallo
    Ich habe jetzt mal den Motor umgepolt, aber damit ist das Problem leider nur halb behoben, weil der Roboter ja auch mal rückwärts fahren soll.
    Ich hab schon viele Sachen an dem Programm Code geändert. Gibts da nicht eine andere Möglichkeit (Programm Code) um vorwärts, rückwärts links und rechts zu Fahren, hab echt schon viele Sachen versucht aber leider ist der Erfolg ausgeblieben, leider. Als kompletter Anfänger ist das nicht ganz so einfach und die Programme für den RP6 sind halte auch alle so geschrieben das der Antrieb über den normalen Ausgang geht ,und die was im Roboternetz Forum zu finden sind, sind so geschrieben, dass sie Servos Ansteuern und den Programm Code den ich da habe von mic geht echt super aber nur in eine Richtung.

  5. #15
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    ...den Programm Code den ich da habe von mic geht echt super ...
    Ähm, Einspruch, SO geht das eher gar nicht. Mein Code ist hier mehr schlecht als recht kopiert. Damit erzeugst du nur irgendwelchen Impulsmüll den der Regler nicht interpretieren kann. Auch mit der einfachen Sleep()-Ansteuerung muss man sich an das Timeing der Servos halten:

    Code:
             PORTA |= 1; 
             sleep(5); 
             PORTA &= ~1; 
             PORTA |= 2; 
             sleep(15); 
             PORTA &= ~2; 
             sleep(180);
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Hey,

    also wie du sicher schon irgendwo gelesen hast (falls nicht dann geh hier hin: Servo) wird der servo über die länge des impulses an seine position dirigiert

    bei motoren wird es normal über die spannung gemacht, der fahrtenregler übernimmt das aber für dich...

    beim servo sind 1ms länge = linker anschlag (oder rechts kA) und 2 ms der andere

    bei 1,5 ms steht er in der mitte

    bei motoren ist es so, dass der motor bei 1,5 ms stillsteht, alles was drüber (bis maximal 2ms) ist ist vorwärts (oder rückwärts kA; je näher an 2 desto schneller) und alles was drunter ist bis minimal 1 ms ist rückwärts (vgl. drüber)

    versuchs also mal so:

    Code:
    #include "RP6RobotBaseLib.h" 
    
    int main(void) 
    { 
       initRobotBase();    
       DDRA |= 1; 
       DDRA |= 2;
       int x = 12;      // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand
    
       while(true) 
       { 
             PORTA |= 1; 
             sleep(x); 
             PORTA &= ~1; 
             PORTA |= 2; 
             sleep(30-x); 
             PORTA &= ~2; 
             sleep(170); 
       } 
       return(0); 
    }
    ach ja, ich hab mal die for-schleife raus, die war ja unnötig xD

    LG Pr0gm4n

  7. #17
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi Paolo,

    da hast du ja jetzt ne Menge Möglichkeiten, die Fahrtregler anzusteuern.
    Hier kommt noch eine:

    Wenn du meine RP6BaseServoLib für 8 Servos aus diesem Beitrag:
    https://www.roboternetz.de/phpBB2/ze...ag.php?t=45180
    ... nehmen willst, dann hier eine Demo dafür zur Ansteuerung eines Fahrtreglers an der Status LED 1:
    Code:
    /* 
     * ****************************************************************************
     * RP6 ROBOT SYSTEM - ROBOT BASE TESTS
     * ****************************************************************************
     * Test: Servo Test 2
     * Author(s): Dirk
     * ****************************************************************************
     * Description:
     * This is a small test for the RP6 Base Servo Library for the RP6 ROBOT BASE.
     *
     * COMMENT: It is a good idea to use a separate power supply for the servos!
     *
     * Servo connections:
     *         SERVO1 -> Status LED 1 (SL1)		SERVO5 -> Status LED 5 (SL5)
     *         SERVO2 -> Status LED 2 (SL2)		SERVO6 -> Status LED 6 (SL6)
     *         SERVO3 -> Status LED 3 (SL3)		SERVO7 -> PC0 (I2C bus: SCL)
     *         SERVO4 -> Status LED 4 (SL4)		SERVO8 -> PC1 (I2C bus: SDA)
     *   If you want to use the RP6 bumpers in your program, you should not
     *   connect Servos to SL3 and SL6.
     *   It is not possible to use the I2C bus, if Servos are connected to SCL
     *   and/or SDA. Instead of SCL/SDA you could use ADC0/ADC1 for servo 7/8,
     *   if you want to use the I2C bus.
     *
     * ############################################################################
     * The Robot does NOT move in this example! You can simply put it on a table
     * next to your PC and you should connect it to the PC via the USB Interface!
     * ############################################################################
     * ****************************************************************************
     */
    
    /*****************************************************************************/
    // Includes:
    
    #include "RP6BaseServoLib.h" 			// The RP6 Base Servo Library.
    
    /*****************************************************************************/
    // Defines:
    
    #define MOTOR_FORWARD_FULL	RIGHT_TOUCH
    #define MOTOR_FORWARD_HALF	(MIDDLE_POSITION / 2 + MIDDLE_POSITION)
    #define MOTOR_STOP			MIDDLE_POSITION
    #define MOTOR_BACK_HALF		(MIDDLE_POSITION / 2)
    #define MOTOR_BACK_FULL		0
    
    /*****************************************************************************/
    // Variables:
    
    uint16_t pos = 0;
    
    /*****************************************************************************/
    // Functions:
    
    /*****************************************************************************/
    // Main function - The program starts here:
    
    int main(void)
    {
    	initRobotBase(); // Always call this first! The Processor will not work
    					 // correctly otherwise.
    					 
    	// ---------------------------------------
    	// Write messages to the Serial Interface:
    	writeString_P("\n\n   _______________________\n");
    	writeString_P("   \\| RP6  ROBOT SYSTEM |/\n");
    	writeString_P("    \\_-_-_-_-_-_-_-_-_-_/\n\n");
    
    	writeString_P("################\n");
    	writeString_P("<<RP6     Base>>\n");
    	writeString_P(" Servo - Test 2 \n");
    	writeString_P("  Version 1.00  \n");
    	writeString_P("################\n\n");
    	mSleep(2500);
    
    	setLEDs(0b111111); // Turn all LEDs on
    	mSleep(500);       // delay 500ms
    
    	// Initialize the servo lib for use of only servo 1:
    	initSERVO(SERVO1);
    
    	startStopwatch2();					// Used for the demo
    	
    	pos = 2;							// Start with motor stopped
    	servo1_position = MOTOR_STOP;
    	
    	while(true)  
    	{
    // ---------------------------------------------------------------------
    // The demo code for positioning a drive controller (servo 1):
    		if (getStopwatch2() > 5000) {	// Change position every ~5s
    			if (pos == 0) {
    			servo1_position = MOTOR_BACK_FULL;}
    			if (pos == 1) {
    			servo1_position = MOTOR_BACK_HALF;}
    			if (pos == 2) {
    			servo1_position = MOTOR_STOP;}
    			if (pos == 3) {
    			servo1_position = MOTOR_FORWARD_HALF;}
    			if (pos == 4) {
    			servo1_position = MOTOR_FORWARD_FULL;}
    			if (pos == 5) {
    			servo1_position = MOTOR_FORWARD_HALF;}
    			if (pos == 6) {
    			servo1_position = MOTOR_STOP;}
    			if (pos == 7) {
    			servo1_position = MOTOR_BACK_HALF;}
    			
    			pos++;
    			if (pos > 7) {pos = 0;}
    			setStopwatch2(0);
    		}
    // ---------------------------------------------------------------------
    
    		task_SERVO();					// The main servo task
    		task_RP6System();
    	}
    	return 0;
    }
    
    /******************************************************************************
     * Additional info
     * ****************************************************************************
     * Changelog:
     * - v. 1.0 (initial release) 08.03.2009 by Dirk
     *
     * ****************************************************************************
     */
    
    /*****************************************************************************/
    Die Änderungen für 2 Fahrtregler an ADC0/1 im Programm und in der Lib sind einfach und werden in der Lib beschrieben.

    Die Demo steuert den Motor von Stop auf halbe Kraft vorwärts, volle Kraft vorwärts, wieder halbe Kraft, Stop, halbe Kraft rückwärts, volle Kraft rückwärts, usw. Jede Stellung wird 5 Sekunden gehalten.

    Gruß Dirk

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Hi,

    also Dirk, ich erkenn da nen kleinen fehler:

    Code:
     #define MOTOR_FORWARD_HALF   (MIDDLE_POSITION / 2 + MIDDLE_POSITION)
    ich nehm mal an die defines stehen für zeiten...

    da MIDDLE_POSITION ja 1,5 ms sind gäbe MOTOR_FORWARD_HALF ja dann 1,5/2 + 1,5 = 2,25

    der impuls darf aber bloß 2 ms lang sein, also warum machst du's so und nicht über (MIDDLE_POSITION - 1)/2 + (MIDDLE_POSITION - 1) ?

    (oder hab ich mich getäuscht und middle_position ist bei dir nur 0,5 ms und du addest jedes mal unabhänig vom wert eine ms? ich hab die lib leider ned vorliegen, ich hol se mir gleich und guck nochmal nach :-D)

    LG Pr0gm4n

  9. #19
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi Pr0gm4n,

    Danke für den Hinweis!
    Bei meinen Libs nehme ich immer Werte für die Servoposition von 0 (linker Anschlag) bis Maximum, z.B. 254 (rechter Anschlag).
    MIDDLE_POSITION (= MOTOR_STOP) ist dann 127 und RIGHT_TOUCH (= MOTOR_FORWARD_FULL) ist 254.

    Dann ist MOTOR_FORWARD_HALF = 127 / 2 + 127 = 191 (3/4 Servoweg).
    MOTOR_BACK_HALF = 127 / 2 = 64 (1/4 Servoweg).

    Aber du hast Recht: Wahrscheinlich wird der Fahrtregler keine lineare Abhängigkeit der Motorgeschwindigkeit von der Impulslänge haben, so dass man die halben Geschwindigkeiten noch "eichen" müßte.

    Gruß Dirk

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Hi,

    doch, der fahrtenregler hat da eine lineare abhängigkeit, zwar nicht von motorgeschwindigkeit und impulslänge sondern von stromfluss ~ (impulslänge - 1ms)

    LG Pr0gm4n

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen