- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 40

Thema: linker Antrieb klemmt + Base stürzt ab

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied Avatar von I♥ROBOTIC
    Registriert seit
    15.03.2010
    Ort
    Fürstenstein
    Alter
    28
    Beiträge
    112
    ich hab die akkus immer einzeln geladen nur 1 mal mit einem 9,8V ladegerät, das aber tatsächlich nur mit 7,2 V lädt..

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von I♥ROBOTIC
    Registriert seit
    15.03.2010
    Ort
    Fürstenstein
    Alter
    28
    Beiträge
    112
    woran könnte es liegen, dass der RP6 beim anstecken des RC-empfängers im Reset gehalten wird (wenn das so ist ) oder bricht die spannung nur so stark ein ??


    MFG Julian

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    40
    Beiträge
    1.516
    woran könnte es liegen, dass der RP6 beim anstecken des RC-empfängers im Reset gehalten wird

    Da musst Du schon etwas mehr Infos liefern. Was ist wo und wie angeschlossen? Funktioniert der RC Empfänger für sich alleine? Hast Du ein Multimeter? Falls ja miss die Stromaufnahme... usw.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von I♥ROBOTIC
    Registriert seit
    15.03.2010
    Ort
    Fürstenstein
    Alter
    28
    Beiträge
    112
    -.- das problem hat sich erledigt, der stecker war falsch angeschlossen, wahrscheinlich haben meine eltern wieder versucht meine Bastelecke aufzuräumen und haben aus versehen dabei den RC-empfänger abgesteckt und wieder falsch angesteckt... naja also dieses Problem ist gelöst, werde nun nochmal das Programm untersuchen


    MfG Julian

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    lol.. und der Hund hats Hausaufgabenheft gefressen
    Sind Sie auch ambivalent?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied Avatar von I♥ROBOTIC
    Registriert seit
    15.03.2010
    Ort
    Fürstenstein
    Alter
    28
    Beiträge
    112
    ist schon nem freund passiert xD jaja ist doch jetzt eh egal wer das war


    ich hab jetzt das problem, dass nur mein rechter entrieb rückwärts fährt, wenn ich forwärts gas gebe. wenn ich zu mehr als 1,2 sek vollgas gebe bekomm ich dauernd 0xf8 raus... an dem setMotorPower(300-xxx) kann es nicht liegen, die zeile hab ich schon testweise rausgenommen, keine veränderung...
    ich hab mein altes linienfolgeprogramm nochmal ausgegraben, es funktioniert fast einwandfrei, keine errors, das einzige was nicht so läuft wie es soll ist: der RP6 fährt nur rückwärts ! auch wenn ich vorher changeDirection(FWD); oder setMotorDir(FWD,FWD); aufrufe...


    hier mal die ganzen programme bzw. die teile aus den master/slave Libs/progs die ich eingefügt habe:


    RC-Programm:
    Code:
    #include "RP6ControlLib.h"
    #include "RP6I2CmasterTWI.h"    
    #include "RP6Control_I2CMasterLib.h"
    
    void I2C_requestedDataReady(uint8_t dataRequestID) 
    { 
       checkRP6Status(dataRequestID); 
    } 
    
    void I2C_transmissionError(uint8_t errorState) 
    { 
       writeString_P("\nI2C ERROR - TWI STATE: 0x"); 
       writeInteger(errorState, HEX); 
       writeChar('\n'); 
    }
    
    volatile uint16_t speed=0;
    volatile uint16_t dir=0;
    volatile uint16_t speedcount=0;
    volatile uint16_t dircount=0;
    
    ISR(TIMER1_COMPA_vect)
    {
        if (PINA & ADC5)
        {
            speedcount++;
        }
        else 
        {
            if (speedcount > 0)
            {
                speed=speedcount;
            }
            speedcount=0;
        }
        
        
        if (PINA & ADC3)
        {
            dircount++;
        }
        else 
        {
            if (dircount > 0)
            {
                dir=dircount;
            }
            dircount=0;
        }
    }
    
    void initRC(void)
    {
        TCCR1A = (0 << WGM11) | (0 << WGM10) | (0 << COM1A0) | (0 << COM1A1);    // CTC-Mode4, ohne OCR-Pin
        TCCR1B = (0 << WGM13) | (1 << WGM12) | (0 << CS12)  | (1 << CS11) | (0 << CS10); // CTC und prescaler /8
        TIMSK |= (1 << OCIE1A);                                         // Interrupt ein
        OCR1A  = 20; // 100kHz?
        
        DDRA &= ~ADC5;
        PORTA &= ~ADC5; 
        DDRA &= ~ADC3;
        PORTA &= ~ADC3; 
    }
    
    int main(void)
    {
        initRP6Control();
        initLCD();
        initRC();
        
        startStopwatch1();
        
        mSleep(1000);
        
        I2CTWI_initMaster(100);  
        I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady); 
        I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
    
        uint16_t speed1 = 0, dir1 = 0;
        
    while(1)
    {
        cli(); // Interrupts verbieten
        speed1=speed;
        dir1=dir;
        sei(); // Interrupts wieder zulassen
        
        
        if (speed1 < 150 && speed1 > 140)
        {
            if (dir1 > 180){ setMotorDir(BWD,FWD); setMotorPower(150,150); }
            if (dir1 < 120){ setMotorDir(FWD,BWD); setMotorPower(150,150); }
        }
        
        if (speed1 < 140) 
        { 
            setMotorDir(BWD, BWD); 
            if(dir1 < 140){ setMotorPower((300-speed1),(300-speed1)-dir1); }
            if(dir1 > 150){ setMotorPower((300-speed1)-(300-dir1),(300-speed1)); }
            if(dir1 < 150 && dir1 > 140) { setMotorPower(300-speed1, 300-speed1); }
        }
        
        if (speed1 > 150) 
        {
            setMotorDir(FWD, FWD); 
            if(dir1 < 140){ setMotorPower(speed1,speed1-dir1); }
            if(dir1 > 150){ setMotorPower(speed1-(300-dir1), speed1); }
            if(dir1 < 150 && dir1 > 140) { setMotorPower(speed1, speed1); }
        }
        
        if(adcLSL < 500 || adcLSR < 500) { PORTA |= ADC7; }                // Scheinwerfer an
        if(adcLSL > 500 && adcLSR > 500) { PORTA &= ~ADC7; }            // Scheinwerfer aus
        
        task_checkINT0(); 
        task_I2CTWI();
    }
        return 0;
    }
    setMotorDir und setMotorPower in der Control master lib:
    Code:
    void setMotorPower(uint8_t PWR_left, uint8_t PWR_right)
    {
        if(PWR_left > 210) PWR_left = 210;
        if(PWR_right > 210) PWR_right = 210;
        I2CTWI_transmit4Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_MOTOR_PWR, PWR_left, PWR_right );
        while(I2CTWI_isBusy() || TWI_operation != I2CTWI_NO_OPERATION) task_I2CTWI();
    }
    
    
    void setMotorDir(uint8_t dir_left, uint8_t dir_right)
    {
        I2CTWI_transmit4Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_MOTOR_DIR, dir_left, dir_right);
        while(I2CTWI_isBusy() || TWI_operation != I2CTWI_NO_OPERATION) task_I2CTWI();
    }

    die beiden funktionen im Base slave prog:
    Code:
    #define CMD_SET_MOTOR_PWR    13
    #define CMD_SET_MOTOR_DIR    14
    
    
    
    ....
    
    
    //einfügung in die switch-case funktion:
    
    
    case CMD_SET_MOTOR_PWR: setMotorPower(param1,param2); break;
    case CMD_SET_MOTOR_DIR: setMotorDir(param1,param2); break;
    wenns hilft hier noch das Linienfolgeprogramm, das ja bis auf die rückwärtsfahrt funktioniert:
    Code:
    #include "RP6ControlLib.h"
    #include "RP6ControlServoLib.h"     
    #include "RP6I2CmasterTWI.h"    
    #include "RP6Control_I2CMasterLib.h"
    
    void I2C_requestedDataReady(uint8_t dataRequestID) 
    { 
       checkRP6Status(dataRequestID); 
    } 
    
    void I2C_transmissionError(uint8_t errorState) 
    { 
       showScreenLCD("I2C ERROR: 0x",""); 
       writeIntegerLCD(errorState, HEX);  
    }
    
    int main(void) 
    { 
        initRP6Control();
        initLCD();
        
        mSleep(500);
        
        I2CTWI_initMaster(100);  
        I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady); 
        I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
        
        setMotorDir(FWD,FWD);
        
        while(1) 
        { 
            if (adcLSL > adcLSR) 
            {  
                setMotorPower(100,50);
            } 
            else 
            { 
                setMotorPower(50,100);
            } 
        task_checkINT0(); 
        task_I2CTWI();
        getAllSensors();
        } 
        return(0); 
    }
    wo könnte der fehler sein -.- hab langsam keine lust mehr i-was mit meinem RP6 zu machen da fast nie was geht...


    MfG Julian

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

    Wie SlyD schon schreibt, diese Funktionen sind im orginalen Base-Slaveprogamm nicht vorhanden:

    #define CMD_SET_MOTOR_PWR 13
    #define CMD_SET_MOTOR_DIR 14

    Wichtig ist, dass beide Funktionen die Motorparameter libkonform ändern sonst klappt es nicht mit dem task_motionControl() in der Slave-Hauptschleife. Hier eine von mir geschriebene Funktion um die Motoren direkt anzusteuern im direkten Vergleich zum setMotorPower() aus der RP6RobotBaseLib:
    Code:
    // Achtung! Die PWM-Werte werden hier OHNE Rampe verändert!
    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;
    }
    
    void setMotorPower(uint8_t left_power, uint8_t right_power)
    {
    	if(left_power > 210) left_power = 210;
    	if(right_power > 210) right_power = 210;
    	mright_power = right_power;
    	mleft_power = left_power;
    }
    Vielleicht hilfts?

    Gruß

    mic

    [Edit]
    Ach, das steht ja auch in der Beschreibung von setMotorPower():
    * -------------------------------------------------------------
    * 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!
    * -------------------------------------------------------------
    http://translate.google.de/translate...+will+not+work!
    Geändert von radbruch (18.05.2011 um 13:45 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. LCD an RP6-Base
    Von radbruch im Forum Robby RP6
    Antworten: 5
    Letzter Beitrag: 09.11.2010, 21:11
  2. Zusammenspiel der BASE und M32 Control
    Von inka im Forum Robby RP6
    Antworten: 5
    Letzter Beitrag: 01.09.2010, 12:04
  3. bascom und ATTINY 85 PB0 klemmt
    Von kolisson im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 12.05.2009, 02:33
  4. RP6 Robot Base Hardware
    Von Dirk im Forum Robby RP6
    Antworten: 27
    Letzter Beitrag: 19.10.2007, 17:00
  5. Uart zwischen zwei Megas klemmt - - wieder einmal
    Von Murus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 06.05.2007, 16:12

Stichworte

Berechtigungen

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

Labornetzteil AliExpress