- 3D-Druck Einstieg und Tipps         
Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 41

Thema: RP6 Linienfolger

  1. #31
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    Die Drehrichtungen der Antriebe kann man mit setMotorDir() aus der Library RP6RobotBaseLib.c festlegen:

    Code:
    /**
     * Sets the rotation direction of both motors.
     *
     * DO NOT CHANGE THE DIRECTION OF THE MOTORS WHILE THEY
     * ARE RUNNING AT HIGH SPEEDS!!! 
     * It will not instantly damage the motors/gears, but they will  
     * wear out much faster if you do it at high speeds - better wait 
     * until speed has slowed down - and change direction AFTER this.
     *
     * -------------------------------------------------------------
     * IT IS A BETTER IDEA NOT TO USE THIS FUNCTION AT ALL!
     * Use moveAtSpeed together with task_motionControl instead.
     * YOU CAN NOT USE setMotorPower AND setMotorDir WHEN YOU USE 
     * task_motionControl!  This will not work!
     * -------------------------------------------------------------
     *
     * task_motionControl also ensures that the direction is changed
     * slowly and only after the motors have stopped!
     *
     * Example:
     *          // DO NOT perform these commands directly after each
     *			// other in your programs - this is just a LIST of possible
     *			// combinations:
     *			setMotorDir(FWD,FWD); // Move forwards
     *			setMotorDir(BWD,FWD); // Rotate right
     *			setMotorDir(FWD,BWD); // Rotate left
     *			setMotorDir(BWD,BWD); // Move backwards
     *
     */
    void setMotorDir(uint8_t left_dir, uint8_t right_dir)
    {
    	mleft_dir = left_dir;
    	mright_dir = right_dir;
    	mleft_des_dir = left_dir;
    	mright_des_dir = right_dir;
    	if(left_dir)
    		PORTC |= DIR_L;
    	else
    		PORTC &= ~DIR_L;
    	if(right_dir)
    		PORTC |= DIR_R;
    	else
    		PORTC &= ~DIR_R;
    }
    Wie beschrieben sollten die Drehrichtungen nicht bei Vollgas umgeschaltet werden!

    Gruß

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

  2. #32
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2013
    Beiträge
    8
    könntest du mir anhand dem Programm welches ich gesendet habe, aufzeigen? lg

  3. #33
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hi EK9,

    sorry, aber da wirst du selber ran müssen. In dem Forum wird keiner für dich den Code umschreiben
    Schau mal in die Anleitung und in die Beispielprogramme. Dort findest du viele Beispiele und Erklärungen zu den ganzen Funktionen, auch zu setMotorDir() usw.

    Ist gar nicht so schwer, und durch ausprobieren lernst du mehr als durch ablesen.
    Wenns dann scheitert, hilft dir hier sicherlich jeder herauszufinden, warum!

  4. #34
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2013
    Beiträge
    8
    habe schon ein paar sachen ausprobiert und mit den beispielprogrammen wurde ich auch nicht fündig

  5. #35
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Die Funktion setMotorDir() kannst du dir - wie schon von Radbruch gezeigt - in der RP6RobotBaseLib.c ansehen, wie sie verwendet wird z.B. in RP6Base_SELFTEST.c
    Dort findet sich z.B. setMotorDir(FWD,FWD); ... wobei FWD wiederum in der RP6RobotBaseLib.h definiert ist, ebenso wie eine Zeile tiefer der Rückwärtsgang...
    Einfach mal selber suchen und lesen... und nicht andere suchen lassen... so lernt man nichts.

    Gruß Rolf
    Sind Sie auch ambivalent?

  6. #36
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2013
    Beiträge
    8
    Möchte den Arexx vom Start an rückwärts laufen lassen und nicht umschalten

  7. #37
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2013
    Beiträge
    8
    Danke euch, bin leider noch nicht der Prof beim RP6. setMotorDir(BWD,BWD);

    komme aus dem staunen kaum raus das es nur nach dem einfügen dieses Satzes funkioniert.

  8. #38
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Aha! ok.. man muss auch nicht Prof sein um mit dem RP6 was zu machen.. lesen, lernen und umsetzen hilft meist schon.

    Die Erklärung dazu: Mit SetMotorDir setzt man "eiskalt" die Drehrichtung der Ketten/Motoren wobei der Befehl eben direkt und schlagartig in die Hardware greift. Es gibt noch andere Befehle für den Motor, die z.B auch verhindern das man sich mit dem SetMotorDir das Getriebe schrottet - indem Anfahr- und Bremsrampen vor einem Richtungswechsel genutzt werden. Da Du nun schon mal was in den Quellcodes gefunden hast, sollte es dir nicht schwer fallen, z.B. alle Textstellen mit "Motor" zu suchen und durchzuarbeiten. Usw. usw. usw... Learning by doing.
    Gruß Rolf
    Geändert von RolfD (18.11.2013 um 00:56 Uhr)
    Sind Sie auch ambivalent?

  9. #39
    Neuer Benutzer Öfters hier
    Registriert seit
    26.10.2013
    Beiträge
    8
    Guten Abend, kann mir jemand diese einzelnen Instruktionen erklären, was diese heissen?



    void setMotorPWM(uint8_t power_links, uint8_t power_rechts)
    {
    extern uint8_t mleft_ptmp, mright_ptmp;

    if(power_links > 210) power_links = 210;
    if(power_rechts > 210) power_rechts = 210;
    mleft_power=mleft_ptmp=power_links;
    mright_power=mright_ptmp=power_rechts;

    OCR1BL = power_links;
    OCR1AL = power_rechts;

    if(power_links || power_rechts)
    TCCR1A = (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1);
    else
    TCCR1A = 0;

  10. #40
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Es ist mir völlig unklar, warum du dich bei der umfangreichen RP6-Library ausgerechnet auf diese Funktion stürzt anstatt die Library anhand ihrer einzelnen Demoprogramme zu erkunden. Der RP6 ist so komplex, da wirst du nicht weit kommen, wenn du nicht etwas Eigeninitiative entwickelst.

    Kurz zur Funktion setMotorPWM(). Sie dient dazu die PWM-Werte für die Antriebe direkt zu setzen und die entsprechenden Variablen der Library anzupassen:

    Die erste Hälfte stellt den Bezug zu den in der Library verwendeten Variablen her, begrenzt die PWM-Werte auf den in der Lib verwendeten und in dieser Timerbetriebsart durch das ICRA-Register gesetzten Maximalwert von 210 und lädt schließlich die Libraryvariablen mit den geänderten Werten. Im zweiten Teil der Funktion werden die Compare-Register der beiden Seiten mit dem PWM-Wert geladen und der Timer aktiviert, wenn die PWM-Werte dies erfordern.

    Gruß

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

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests