-         

Ergebnis 1 bis 5 von 5

Thema: unterschiedliches motorenverhalten

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344

    unterschiedliches motorenverhalten

    Anzeige

    ich verstehe es nicht:

    zwei programme, hier färt der asuro geradeaus:
    Code:
    #include "asuro.h"  // bitte die neue Datei benutzen 
                        // asuro.h und asuro.c vom 31.03.05 
    
    #define aus MotorDir(BREAK,BREAK) 
    #define go {MotorSpeed(150,150);MotorDir(FWD,FWD);} 
    #define backturn { MotorSpeed(150,250);MotorDir(RWD,RWD);Msleep(1000);} 
    
    /************************************************************************************* 
    
      ASURO discovers your apartment 
    
      program made by stochri july, 2005 
    
    *************************************************************************************/ 
    
    int speed() 
    { 
       int rightspeed,leftspeed; 
       int leftold,rightold; 
    
       Encoder_Set(0,0);      // reset encoder 
    
    
       leftold=encoder[LEFT]; 
       rightold=encoder[RIGHT]; 
       Msleep(300); 
       leftspeed=encoder[LEFT]-leftold; 
       rightspeed=encoder[RIGHT]-rightold; 
    
       //SerWrite("  speed Left,Right ",19); 
       //PrintInt(leftspeed); 
       //PrintInt(rightspeed); 
       return leftspeed+rightspeed; 
    } 
    
    int main(void) 
    { 
       int n,v,nullspeed; 
    
       Init(); 
       Encoder_Init(); 
       StatusLED(OFF); 
       SerWrite("\n\rASURO OK\n\r",8); 
    
       go; 
       Msleep(500); 
    
       nullspeed=speed()-10; 
    
       while(1) 
       { 
          v=speed(); 
          SerWrite("\n\r speed ",9); 
          PrintInt(v); 
    
          if(v<nullspeed) 
          { 
             backturn; 
             go; 
             Msleep(500); 
          } 
    
       } 
       return 0; 
    }
    das zweite (jetzt das richige), hier zieht er beim vorwärtsfahren nach rechts:
    Code:
    /**************************************************************************
     *
     * File Name:   kollisiontest.c
     * Project  :   ASURO
     *
     * Description: Kollisionstest mit Hilfe der Tastensensoren
     *
     * Ver.     Date         Author               Comments
     * -------  ----------   -----------------    -----------------------------
     * 1.0      10.09.2005   Peter                initial build
     * 1.1      08.01.2006   Peter                2x PollSwitch + Vergleich, 
                                                  anstelle 8x PollSwitch
     * 
     * benoetigt die modifizierte Asuro Bibliothek 'asuro.c' 
     * von waste, stochri und andun. Zu finden bei www.roboternetz.de
     */
    /***************************************************************************
     *                                                                         *
     *   This program is free software; you can redistribute it and/or modify  *
     *   it under the terms of the GNU General Public License as published by  *
     *   the Free Software Foundation; either version 2 of the License, or     *
     *   any later version.                                                    *
     ***************************************************************************/
    
    #include "asuro.h"
    
    /* Um eventuelle Unterschiede zwischen linken und rechtem Motor auszugleichen 
     * definieren wir 2 Werte für fullspedd links und rechts
     */
    #define FULL_L 125    /* Fullspeed linker Motot */
    #define FULL_R 125    /* Fullspeed rechter Motor */
    
    /* Motor vorwärts */
    void MotorFwd(void)
    {
      MotorDir(FWD,FWD);
      MotorSpeed(FULL_L,FULL_R);
    }
    
    /* Motor rückwärts */
    void MotorRwd(void)
    {
      MotorDir(RWD,RWD);
      MotorSpeed(FULL_L,FULL_R);
    }
    
    /* Motor rückwärts Links */
    void MotorRwdL(void)
    {
      MotorDir(RWD,RWD);
      MotorSpeed(FULL_L,0);
    }
    
    /* Motor rückwärts Rechts */
    void MotorRwdR(void)
    {
      MotorDir(RWD,RWD);
      MotorSpeed(0, FULL_R);
    }
    
    /* Motor stop */
    void MotorStop(void)
    {
      MotorSpeed(0,0);
    }
    
    int main(void)
    {
      unsigned char t1, t2;
    
    SerWrite("\n\r  kollision_wiki_2007_02_19 ",29); // wer bin ich
      Init();
      while(1)
      {
        t1 = PollSwitch();
        t2 = PollSwitch();
        if(t1 == 0 && t2 == 0)         /* keine Taste */
        {
          MotorFwd();          /* vorwärts fahren */
          FrontLED(ON);
          BackLED(OFF,OFF);
        }
        else if (t1 && t2 && t1 == t2)
        {
          MotorStop();
          if(t1 & 0x07) /* Tasten links gedrückt? */
          {
            MotorRwdL();       /* Rückwärtskurve links fahren */
            FrontLED(OFF);
            BackLED(ON,OFF);
          }
          if (t1 & 0x38) /* Tasten rechts gedrückt? */
          {
            MotorRwdR();       /* Rückwärtskurve rechts fahren */
            FrontLED(OFF);
            BackLED(OFF,ON);
          }
          Msleep(1000);        /* 1 Sekunde fahren */
        }
      }
      return 0;
    }
    woran kann das liegen?
    gruß inka

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.07.2004
    Ort
    Nürnberg
    Alter
    36
    Beiträge
    186
    Hi,
    tschuldigung ist das nicht 2mal ein und das selbe Prog?
    Hab das jetzt 3mal gelesen und finde keinen Unterschied! Also sollte dein Asuro auch beidesmal das gleiche machen!
    Wenn du des erste wieder draufspielst dann fährt er wohl wieder geradeaus?
    Ich bin keine Signatur ich mach hier nur sauber

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    hast recht, die typische kopierfalle

    habs geändert...

    edit: ja, nachdem wiederholten flashen des ersten progs fährt er wieder geradeaus. Ich meine es ist ja nicht so, dass er eine scharfe rechtskurve fährt, man merks aber schon...
    gruß inka

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.07.2004
    Ort
    Nürnberg
    Alter
    36
    Beiträge
    186
    Hi,
    aha jetzt. Also wenn ich das richtig sehe dann ist der wesentliche Unterschied das des zweite Prog ohne den Encoder für den weg läuft, und das führt zu dem Bogen, da zwei baugleiche Motoren nie exakt gleich laufen! Also der eine macht halt bei 5V von mir aus 50 u/min und der andere macht bei gleicher Spannung 51 u/min und so entsteht dann dein Bogen;
    musst halt den Encoder noch reinschmeißen dann müsste es gehen!
    Viel Erfolg
    Ich bin keine Signatur ich mach hier nur sauber

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.344
    hi allerseits,
    so weit klar. Ich habe jetzt stochris "kleines geheimnis" um das einlesen und auswerten der taster ergänzt (wird nocht nicht ausgewertet) und probeweise um ein paar defines ergänzt:
    Code:
    #include "asuro.h"  // bitte die neue Datei benutzen 
                        // asuro.h und asuro.c vom 31.03.05 
    
    #define aus MotorDir(BREAK,BREAK) 
    #define go {MotorSpeed(150,150);MotorDir(FWD,FWD);} 
    #define back { MotorSpeed(150,150);MotorDir(RWD,RWD);Msleep(1000);}
    #define backturn { MotorSpeed(150,250);MotorDir(RWD,RWD);Msleep(1000);} 
    #define backleft { MotorSpeed(150,250);MotorDir(RWD,RWD);Msleep(1000);} 
    #define backright { MotorSpeed(250,150);MotorDir(RWD,RWD);Msleep(1000);}
    #define stop { MotorSpeed(0,0);}
    
    /************************************************************************************* 
    
      ASURO discovers your apartment 
    
      program made by stochri july, 2005 
    
    *************************************************************************************/ 
    
    int speed() 
    { 
       int rightspeed,leftspeed; 
       int leftold,rightold; 
    
       Encoder_Set(0,0);      // reset encoder 
    
    
       leftold=encoder[LEFT]; 
       rightold=encoder[RIGHT]; 
       Msleep(300); 
       leftspeed=encoder[LEFT]-leftold; 
       rightspeed=encoder[RIGHT]-rightold; 
    
       //SerWrite("  speed Left,Right ",19); 
       //PrintInt(leftspeed); 
       //PrintInt(rightspeed); 
       return leftspeed+rightspeed; 
    } 
    
    int main(void) 
    { 
       int v,nullspeed, sw, sw0, sw1, sw2; 
    
       Init(); 
       Encoder_Init(); 
       StatusLED(OFF); 
       SerWrite("\n\rASURO OK\n\r",8); 
    
       go; 
       Msleep(500); 
    
       nullspeed=speed()-10; 
    
       while(1) 
       { 
    	sw0=PollSwitch(); // Schalter einlesen und für eine Runde speichern
    	sw1=PollSwitch();
    	sw2=PollSwitch();
    	if ((sw0==sw1) && (sw0==sw2)) sw=sw0; else sw=0;
    
          v=speed(); 
          SerWrite("\n\r speed ",9); 
          PrintInt(v); 
    
          if(v<nullspeed) 
          { 
            backturn;
    		 go;
             Msleep(500); 
          } 
    
       } 
       return 0; 
    }
    wenn ich das programm starte, macht der asuro einen leichten rechtsbogen, beim "stochri pur" aber nicht. Wieso???
    gruß inka

Berechtigungen

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