- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Balancieren auf 1 Rad / Entfleuchen auf 2 Rädern

  1. #11
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    Anzeige

    Praxistest und DIY Projekte
    ich glaube auch, die bremse funktioniert besser wenn motorspeed recht hoch ist. könnte aber auch sein dass in der asuro.c schon etwas entsprechendes programmiert ist.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.12.2006
    Ort
    Eberbach
    Beiträge
    199
    Zitat Zitat von damaltor
    ich glaube auch, die bremse funktioniert besser wenn motorspeed recht hoch ist.
    ich auch, deshalb ja meine Frage.

    könnte aber auch sein dass in der asuro.c schon etwas entsprechendes programmiert ist.
    Leider nein, hier der Abschnitt aus motor.c der neuesten Asurolib 270rc2:
    Code:
    ...
    inline void MotorSpeed (
      unsigned char left_speed,
      unsigned char right_speed)
    {
      OCR1A = left_speed;
      OCR1B = right_speed;
    }
    ...
    inline void MotorDir (
      unsigned char left_dir,
      unsigned char right_dir)
    {
      PORTD = (PORTD &~ ((1 << PD4) | (1 << PD5))) | left_dir;
      PORTB = (PORTB &~ ((1 << PB4) | (1 << PB5))) | right_dir;
    }
    ...
    Ich denke, daß für eine maximale Bremswirkung bei BREAK der entsprechende Wert für MotorSpeed auf 255 gesetzt werden sollte ...
    Code:
    ...
      \par  Arbeitsweise:
      Ueber die Parameter werden die Port-Pin's zu den H-Bruecken beider Motoren so\n
      gesetzt, dass die jeweils 4 beteiligten Transitoren einer Bruecke den Strom\n
      durch die Motoren entweder 
      - FWD vorwaerts durchleiten
      - RWD rueckwaerts durchleiten
      - BREAK den Motor kurzschliessen (Bremswirkung)
      - FREE oder von der Stromversorgung trennen (Motor laeuft aus)
    ...
    Last, but not least, noch eine Frage zur Begrifflichkeit
    Warum heißt das eigentlich BREAK und nicht BRAKE? (dt. bremsen = engl. to brake)
    Gruß, Hermann.
    myIrAsuro.Bild hier  

  3. #13
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    hrhr... da hab ich schon oft drüber nachgedacht... ich denke mal das lag daran dass jemand nicht genug drüber nachgedacht hat.

    vielleicht sollte man einfach mal einen feldversuch starten, den asuro mit 255 fahren zu laseen, dann free, brake mit 0 und brake mit 255 nacheinander testen und sehn wie er stehenbleibt...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.12.2006
    Ort
    Eberbach
    Beiträge
    199

    Ups!

    Hallo,
    Zitat Zitat von damaltor
    vielleicht sollte man einfach mal einen feldversuch starten, den asuro mit 255 fahren zu laseen, dann free, brake mit 0 und brake mit 255 nacheinander testen und sehn wie er stehenbleibt...
    habe den Test eben mit dem folgenden Programm durchgeführt, mit für mich unerwartetem Ergebnis:
    Code:
    #include <asuro.h>
    
    #define K1 (1<<5)
    #define K2 (1<<4)
    #define K3 (1<<3)
    #define K4 (1<<2)
    #define K5 (1<<1)
    #define K6 (1<<0)
    
    uint8_t getSwitch(void);
    
    int main(void)
    {
      uint8_t sw1;
    
      Init();
    
      sw1 = getSwitch();
    
      Msleep(1000);
    
      MotorDir(FWD,FWD);
      MotorSpeed(255,255);
    
      Msleep(1500);
    
      switch (sw1) 
      {
        case K1: MotorDir(BREAK,BREAK);
                 MotorSpeed(0,255);
                 break;
        case K2: MotorDir(FREE,BREAK);
                 MotorSpeed(0,255);
                 break;
        case K3: MotorDir(FREE,BREAK);
                 MotorSpeed(0,0);
                 break;
    
        case K4: MotorDir(BREAK,BREAK);
                 MotorSpeed(255,0);
                 break;
        case K5: MotorDir(BREAK,FREE);
                 MotorSpeed(255,0);
                 break;
        case K6: MotorDir(BREAK,FREE);
                 MotorSpeed(0,0);
                 break;
        
        default:
                 MotorDir(BREAK,BREAK);
      }
    
      while (1);
    
      return 0;
    }
    
    uint8_t getSwitch(void)
    {
      uint8_t t1, t2, t3;
    
      while (1)
      {
        t1 = PollSwitch();
        t2 = PollSwitch();
    
        if ((t1==t2) && t1)
          break;
    
        Msleep(50);
      }
    
      while (1)
      {
        t2 = PollSwitch();
        t3 = PollSwitch();
    
        if ((t2==t3) && !t2)
          break;
    
        Msleep(50);
      }
    
      return t1;
    }
    BREAK mit Speed=0 verhält sich genauso wie BREAK mit Speed=255!

    Dies habe ich mit Robertor, dem Asuro meines Sohnes, getestet, der eine Endgeschwindigkeit von 1,8m/s hat.

    Bei Tastern K1 und K4 (BREAK,BREAK) mit Speed=(0,255)/(255,0) rutscht der Asuro einfach geradeaus.

    In allen anderen Fällen fährt er beim Abbremsen noch eine Kurve nach links oder rechts.

    Ich vermute, daß BREAK mit Speed=0 deshalb genauso bremst, wie mit Speed=255, da PWM nur auf den unteren Teil der H-Brücke wirkt, der Motor aber im oberen Teil der H-Brücke kurzgeschlossen wird, wo PWM gar keinen Einfluß hat ...
    Gruß, Hermann.
    myIrAsuro.Bild hier  

  5. #15
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    hmm... eigenartiges ding. aber gut, die werte sollten also gleich sein und dann bremst er. sollte das mal wichtig sein, ist das schonmal gut zu wissen
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    01.02.2007
    Ort
    Ashausen
    Alter
    65
    Beiträge
    64
    Hallo Hermann,

    es freut mich, dass Du mein Programm ausprobiert hast - und vor allem, dass es selbst im Zug funktioniert hat. Mir war auch wichtig ein paar Möglichkeiten zu zeigen, wie man ohne ständiges Neucompilieren eines Programmes Werte ändern kann. Darum auch die Möglichkeit, die Parameter mittels Terminalprogramm eingegben zu könne.

    Mit der Infratotschnittstelle hast Du mich natürlich voll erwischt - sie ist aber mittels Edit-Button nun tatsächlich tot

    Noch etwas zu dem BREAK Befehl für die Motoren. Ich denke, die Entwickler der Software meinen eigentlich BRAKE. Aber da lief gerade dieser komische Werbespot im Fernsehen - Have a break, have a ... (worum ging es da eigentlich) und so Wurde aus der Bremse eine Pause....

    Aber im Ernst: Wenn die Motoren kurzgeschlossen werden, dann wird, sobald sie sich drehen, eine Spannung indiziert, die der Drehbewegung entgegenwirkt. Darum ist es schon sinnvoll, auch im Stand diesen Befehl zu verwenden, wenn sich ein Rad möglichste nicht drehen soll. Probier es aus: Nimm einen Motor, schließ ihn kurz und drehe ihn mit der Hand. Du wirst mehr Kraft brauchen, als wenn der Motor nicht kurzgeschlossen ist.

    Schönes Restosterwochenende noch... und ja, wir kommen wohl um die Regelungstechnik nicht herum....

    Gruß,

    _HP_

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen