- 3D-Druck Einstieg und Tipps         
Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 55

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

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

    Powerstation Test
    Hallo
    Danke für eure Hilfe ,ich werde mich gleich mal an die Sache ran schmeissen ,meine vorherigen versuche waren ja nicht so gut von mir ,mein Robi ist mir mit quietschenden Reifen davon ich dachte echt er haut mit der Terassentür ab, aber sie hat ihn doch noch gebremst ,und ab jetzt muss ich wohl ein klein wenig aufpassen.

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

    solltest den robby vlt. nächstes mal so hinstellen dass seine reifen den boden ned berühren xD

    LG Pr0gm4n

  3. #23
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2009
    Ort
    8052 Graz
    Alter
    49
    Beiträge
    18
    Hallo
    Danke für die ganzen Tipps ,Dirk mit deinem Demo Programm komme ich leider noch nicht ganz klar. Ich habe da immer wieder Fehler Meldungen wenn ich da die ADC1 u. ADC2 einfüge, irgentwas mach ich da falsch, bin ja der volle Anfänger.
    Ich hab da noch eine Frage, bei dem Programm mit dem ich gerade experimentiere ist zwar ganz gut zum testen aber leider ist es sehr schwer die Räder untereinander einzustellen, ADC1 u. ADC0 sind doch zwei seperate Ein und Eusgänge? Warum ändert es z.b die Geschwindigkeit an ADC1 wenn ich an ADC0 was ändere? oder anderst herum.


    Ich hab auch bei dem code schon alles geändert, aber ich komm da nicht wirklich weiter ,ich habe auch die Werte wo das x steht geändert aber sobald ich bei irgent einen was ändere dreht sich das eine schneller und das andere langsamer was ja ok wäre wens nicht zu schnell wäre dann hab ich es geschafft dass ich es langsamer kriege aber dafür geht das andere garnicht mehr oder zu schnell oder wieder anderst rum das ist der jammer echt, ich dachte immer wenn ich eine Seite eingestellt habe dann bleibt das so und sobald ich mich dann an das andere Rad mache verändere ich automatisch das andere wieder mit was habe ich den falsch verstanden?.

    Code:
    #include "RP6RobotBaseLib.h" 
    
    int main(void) 
    { 
       initRobotBase();    
       DDRA |= 1; 
       DDRA |= 2; 
       int x = 15;      // 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); 
    }

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

    das iss doch der code den ich geschrieben hab oder?

    im prinzip solltest du verstehen, der code macht im moment folgendes:

    -init
    -dann DDRA-bits 0 und 1 auf ausgang setzen

    dann macht er nen 1,5 ms impuls an Pin PA0, dann nen 1,5ms impuls an PA1 und dann wartet er 17ms, dann fängt er wieder mit 1,5ms impuls an PA0 an...

    sollte schon klappen denk ich ;D

    wenn nich, dann beschreib doch mal was er macht xD

    also der code hier iss natürlich nur zum geradeausfahren gedacht, er sollte, so meine hoffnung das eigentlich auch tun...

    hast du die pins auch ja richtig angeschlossen?

    hast du zufällig nen servo da damit dus damit schnell überprüfen könntest?

    wenns mit dem servo geht, dann wird dein fahrtenregler entweder anders angesteuert oder er ist kaputt xD

    LG Pr0gm4n

  5. #25
    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

    Wenn ich mit deinem Programm ein normales Servo ansteuere stellt es sich brav auf eine Position, allerdings nicht auf die Mitte. Möglicherweise ist die Auflösung mit der sleep()-Funktion einfach nicht fein genug um den Nullpunkt der Regler zu treffen.

    Warum ändert es z.b die Geschwindigkeit an ADC1 wenn ich an ADC0 was ändere?
    Das geht vielleicht in die selbe Richtung. Ein Impulszyklus dauert die Summe der einzelnen Sleep()s und ist vielleicht nicht genau genug 20 ms lang. Möglicherweise reagiert der Regler darauf unerwartet.

    Ich würde zu einer etwas kompfortableren Impulserzeugung via ISR raten, allerdings ist das zusammen mit der RP6-Library nicht ganz einfach.

    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!

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

    danke dass dus getestet hast ;D

    also bei mir sind grad die akkus leer, sonst hätt ich grade auch nochmal schnell was getestet, ich glaub ich bastel morgen mal mein netzteil an den robby ran, hab selber keine fahrtests z.z. xD

    naja, mal schaun was meine Servos bei x= 10 x= 15 und x=20 so zusammenfahren xD

    LG Pr0gm4n

  7. #27
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Code:
    #include "RP6RobotBaseLib.h"
    
    int main(void)
    {
       initRobotBase();
       DDRA |= 1;
       DDRA |= 2;
       int x;      // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand
    	char i;
    	
       while(true)
       {
    		x = 15;
    		for(i=0; i<50; i++)
    		{
    		      PORTA |= 1;
    	         sleep(x);
    	         PORTA &= ~1;
    	         PORTA |= 2;
    	         sleep(30-x);
    	         PORTA &= ~2;
    	         sleep(170);
    		}
    		x = 10;
    		for(i=0; i<50; i++)
    		{
    		      PORTA |= 1;
    	         sleep(x);
    	         PORTA &= ~1;
    	         PORTA |= 2;
    	         sleep(30-x);
    	         PORTA &= ~2;
    	         sleep(170);
    		}
    		x = 20;
    		for(i=0; i<75; i++)
    		{
    		      PORTA |= 1;
    	         sleep(x);
    	         PORTA &= ~1;
    	         PORTA |= 2;
    	         sleep(30-x);
    	         PORTA &= ~2;
    	         sleep(170);
    		}
       }
       return(0);
    }
    Der RP6 macht dann aber nichts mehr außer Servos ansteuern...
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #28
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2009
    Ort
    8052 Graz
    Alter
    49
    Beiträge
    18
    Hallo u. danke für eure Mühe. Also wenn ich es so lasse x=10, x=15, x=20 dann fährt er vor stoppt dann und dann zurück. Das ist schon echt super nur leider viel zu schnell - also Vollgas. Ich habe unten noch eine Zeile hinzugefügt, weil beim Ende der Schleife ist er ohne Stop gleich wieder in die andere Richtung und das ist nicht gut für die Motoren bei Vollgas.
    Ich weiss nicht ob ich es richtig gemacht habe, aber so stoppt er kurz und fährt dann weiter. Sowie ich es jetzt habe ist es echt super für eine Richtung, aber wie schaffe ich es jetzt, dass er es so macht wie oben beschrieben - vor Stop und dann zurück, weil wenn ich es jetzt so lasse und nur den letzten Wert ändere also x=20, dann fängt er wieder an zu spinnen, d.h. vor geht er super
    auch mit der Geschwindigkeit passt es zusammen sowie ich es bräuchte, aber zurück nur zu schnell, ruckartig, garnicht oder nur eine Seite.
    Code:
    #include "RP6RobotBaseLib.h" 
    
    int main(void) 
    { 
       initRobotBase(); 
       DDRA |= 1; 
       DDRA |= 2; 
       int x;      // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand 
       char i; 
        
       while(true) 
       { 
          x =13; 
          for(i=0; i<50; i++) 
          { 
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170); 
          } 
          x = 15; 
          for(i=0; i<50; i++) 
          { 
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170); 
          } 
          x = 13; 
          for(i=0; i<50; i++) 
          { 
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170); 
          }
          x = 15; 
          for(i=0; i<50; i++) 
          { 
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170);  
       }
               } 
       return(0); 
    }

  9. #29
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2009
    Ort
    8052 Graz
    Alter
    49
    Beiträge
    18
    Hab es jetzt doch noch geschafft und es geht super, aber ich könnt Hilfe bei der Feineinstellung gebrauchen. Wie kann ich mir jetzt ausrechnen, dass ich auch links u. rechts fahren kann. Welche Werte muss ich wo verändern. Leider bin ich echt der volle Anfänger und bin euch für eure Hilfe SEHR dankbar, denn ohne euch wär ich aufgeschmissen.
    Hab zuerst wieder viel zu viel verändert und deshalb hat es nicht gleich geklappt. Vielleicht wäre ja auch einer so nett von euch mir mit dem Einfügen der Programierung für die Pumpers zu helfen.
    Damit er wenn er wo anstösst die Richtung wechselt. Das wäre super Nett - Danke euch schon mal im Voraus für eure Hilfe!.
    Code:
    #include "RP6RobotBaseLib.h" 
    
    int main(void) 
    { 
       initRobotBase(); 
       DDRA |= 1; 
       DDRA |= 2; 
       int x;      // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand 
       char i; 
        
       while(true) 
       { 
          x =13; 
          for(i=0; i<50; i++) 
          { 
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170); 
          } 
          x = 15; 
          for(i=0; i<50; i++) 
          { 
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170); 
          } 
          x = 20; 
          for(i=0; i<50; i++) 
          { 
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170); 
          }
          x = 15; 
          for(i=0; i<50; i++) 
          { 
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170);  
       }
               } 
       return(0); 
    }

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

    zu deim problem kann ich dir heut nachmittag nochmal helfen, muss jetz weg, nacher guck ichs mir nochmal an *sry 4 now*

    aber meine kurze frage:

    Code:
    #include "RP6RobotBaseLib.h" 
    
    int main(void) 
    { 
       initRobotBase();    
       DDRA |= 1; 
       DDRA |= 2; 
       int x = 15;      // 10<=x<=20; wenn x >15 in die eine richtung, x<15 in die andre, x=15 stillstand 
       int i = 0;
    
       while(true) 
       { 
       if(i<100)
       {
                 x=15;
             PORTA |= 1; 
             sleep(x); 
             PORTA &= ~1; 
             PORTA |= 2; 
             sleep(30-x); 
             PORTA &= ~2; 
             sleep(170); 
       }
       if((i>100)&&(i<200))
       {
                             x=20;
             PORTA |= 1; 
             sleep(x); 
             PORTA &= ~1; 
             PORTA |= 2; 
             sleep(30-x); 
             PORTA &= ~2; 
             sleep(170);                  
       }
       if(i>200)
       {
                 x=10;
             PORTA |= 1; 
             sleep(x); 
             PORTA &= ~1; 
             PORTA |= 2; 
             sleep(30-x); 
             PORTA &= ~2; 
             sleep(170);         
       }
       i++;       
       } 
       return(0); 
    }
    das hab ich compiliert und reingeladen, die Servos haben keinen muks gemacht...

    radbruch könntest du mein hexfile vlt. schnell testen?

    LG Pr0gm4n
    Angehängte Dateien Angehängte Dateien

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress