- 12V Akku mit 280 Ah bauen         
Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 55

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

  1. #31
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Anzeige

    E-Bike
    Hallo Paolo,
    ... ,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, ...
    Die Änderungen für Fahrtregler an ADC0/1 sind echt nicht so schlimm:

    In der RP6BaseServoLib.h änderst du die 4 Zeilen:
    Code:
    #define SERVO7_PULSE_ON		(PORTC |= SCL)		// PC0
    #define SERVO7_PULSE_OFF	(PORTC &= ~SCL)
    #define SERVO8_PULSE_ON		(PORTC |= SDA)		// PC1
    #define SERVO8_PULSE_OFF	(PORTC &= ~SDA)
    ... in:
    Code:
    #define SERVO7_PULSE_ON		(PORTA |= ADC0)		// PA0
    #define SERVO7_PULSE_OFF	(PORTA &= ~ADC0)
    #define SERVO8_PULSE_ON		(PORTA |= ADC1)		// PA1
    #define SERVO8_PULSE_OFF	(PORTA &= ~ADC1)
    Und in der RP6BaseServoLib.c änderst du die 2 Zeilen:
    Code:
    if (servos & SERVO7) {DDRC |= SCL; PORTC &= ~SCL;}
    if (servos & SERVO8) {DDRC |= SDA; PORTC &= ~SDA;}
    ... in:
    Code:
    if (servos & SERVO7) {DDRA |= ADC0; PORTA &= ~ADC0;}
    if (servos & SERVO8) {DDRA |= ADC1; PORTA &= ~ADC1;}
    Meine Demo vom 8.3. in diesem Thread schreibst du so um (der Rest der Demo bleibt gleich!):
    Code:
    	// Initialize the servo lib for use of Servos 7, 8:
    	initSERVO(SERVO7 | SERVO8);
    
    	startStopwatch2();					// Used for the demo
    	
    	pos = 2;							// Start with motor 
    
    stopped
    	servo7_position = MOTOR_STOP;
    	servo8_position = MOTOR_STOP;
    	
    	while(true)  
    	{
    // ---------------------------------------------------------------------
    // The demo code for positioning a drive controller (servo 1):
    		if (getStopwatch2() > 5000) {	// Change position every ~5s
    			if (pos == 0) {
    			servo7_position = MOTOR_BACK_FULL;
    			servo8_position = MOTOR_BACK_FULL;}
    			if (pos == 1) {
    			servo7_position = MOTOR_BACK_HALF;
    			servo8_position = MOTOR_BACK_HALF;}
    			if (pos == 2) {
    			servo7_position = MOTOR_STOP;
    			servo8_position = MOTOR_STOP;}
    			if (pos == 3) {
    			servo7_position = MOTOR_FORWARD_HALF;
    			servo8_position = MOTOR_FORWARD_HALF;}
    			if (pos == 4) {
    			servo7_position = MOTOR_FORWARD_FULL;
    			servo8_position = MOTOR_FORWARD_FULL;}
    			if (pos == 5) {
    			servo7_position = MOTOR_FORWARD_HALF;
    			servo8_position = MOTOR_FORWARD_HALF;}
    			if (pos == 6) {
    			servo7_position = MOTOR_STOP;
    			servo8_position = MOTOR_STOP;}
    			if (pos == 7) {
    			servo7_position = MOTOR_BACK_HALF;
    			servo8_position = MOTOR_BACK_HALF;}
    			
    			pos++;
    			if (pos > 7) {pos = 0;}
    			setStopwatch2(0);
    		}
    // ---------------------------------------------------------------------
    Viel Erfolg!

    Gruß Dirk

  2. #32
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    So, ich hab mal n paar mins hier dran rumgebastelt:

    Code:
    #include "RP6RobotBaseLib.h" //Code by Pr0gm4n© v1.0 Fahrtenregler/Servos an ADC0 und ADC1
    
    void vorwaerts(int geschwindigkeit, int zeit)//geschwindigkeit zwischen 0 und 5, bei 0 = stillstand; zeit in ms
    {
         if(geschwindigkeit > 5)geschwindigkeit = 5;
         if(geschwindigkeit < 0)geschwindigkeit = 0;
         int x = 15+geschwindigkeit;
         int i;
         for(i=0;i<(zeit/20);i++)
         {
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170);
         }
    }
    
    void rueckwaerts(int geschwindigkeit, int zeit)//geschwindigkeit zwischen 1 und 5; zeit in ms
    {
         if(geschwindigkeit > 5)geschwindigkeit = 5;
         if(geschwindigkeit < 1)geschwindigkeit = 1;
         int x = 15-geschwindigkeit;
         int i;
         for(i=0;i<(zeit/20);i++)
         {
                PORTA |= 1; 
                sleep(x); 
                PORTA &= ~1; 
                PORTA |= 2; 
                sleep(30-x); 
                PORTA &= ~2; 
                sleep(170);
         }
    }
    
    void initMotoren()
    {
         DDRA |=3;
    }
    
    
    int main(void) 
    { 
       initRobotBase(); 
       initMotoren();
    
       while(true) 
       { 
         vorwaerts(2, 1000);
         vorwaerts(0, 100);
         rueckwaerts(2, 1000);
         vorwaerts(0, 100);
       } 
       return(0); 
    }
    alles was in der while-schleife ist darfst du verändern, da kannst du auch einstellen dass er andre sachen machen soll...

    für links- / rechtskurven solltest du lieber erstmal versuchen den code wirklich zu verstehen, erst dann kannst du dich an sowas wagen....

    es wird dir dann zwar recht leicht fallen aber dennoch solltest du das hier erstmal verstehen...

    man könnte auch eine funktion schreiben die nur den einen motor vor-/rückwärts fahren lässt, damit kann man auch direkt drehen...

    LG Pr0gm4n

    EDIT: ÄÄh dirk, warum hast du 2x gepostet?

    EDIT2: https://www.roboternetz.de/phpBB2/vi...=430502#430502 bitte nich vergessen xD (den beitrag von mir, v.a. radbruch)

  3. #33
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    ÄÄh dirk, warum hast du 2x gepostet?
    Nach dem 1. Posten kam bei mir: "Seite kann nicht angezeigt werden".
    Da dachte ich, es hat nicht geklappt und habe nochmal gesendet.

    Den 2. Beitrag konnte ich dann nicht mehr löschen: Du warst schneller!

    Gruß Dirk

  4. #34
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Hehe, naja nich so schlimm, radbruch kann das ja erledigen sofern er lust hat xD

    ich würd sagen [/offtopic]

    hat schon jemand getestet?

    mein robby frisst grade iwie nix mit servos....


    LG Pr0gm4n

  5. #35
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2009
    Ort
    8052 Graz
    Alter
    49
    Beiträge
    18
    Hallo
    Danke für eure Hilfe ,leider stehe ich vor einem neuen Problem.
    Die Fahrtenregler reagieren nach dem abstecken der seperaten Akkus für die Fahrtenregler anderst als da wo ich das Programm draufgespielt habe.
    Wenn ich nur die Akkus vom RP6 heraus nehme und dann wieder einlege geht alles normal nur sobald ich die Akkus von den Fahrtenregler nehme beginnt die einstellerei von neuem denn er fährt nur noch mit Vollgas, ruckeln und stops.
    Kann das sein dass das mit dem internen Speicher der Fahrtenregler zusammen hängt?.
    Ich denke dass die nicht für das geeignet sind.

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

    also ich weiss zwar nicht was die für nen internen speicher haben sollen xD, aber steckst du die akkus um während der rp6 an iss oder wenn er aus iss?

    LG Pr0gm4n

    ps: wenn bei an, versuchs mal bei aus xD

  7. #37
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2009
    Ort
    8052 Graz
    Alter
    49
    Beiträge
    18
    Die RC-Fahrtregler haben einen internen Speicher damit sie die Einstellungen der Lenkung im Fahrzeug behalten damit man an der Fernsteuerung nicht ständig nachstellen muss usw.
    Und wenn ich jetzt an dem Programm das du mir gegeben hast probiere bis die Geschwindigkeit passt so wie ich es bräuchte speichert das Ding irgendwie die vorherigen Versuche so das wenn ich ihm dann den Strom nehme nix mehr stimmt.
    Keine Ahnung wie das geht ich weiss nur dass er speichert ,ich habe mir jetzt schnell einen besorgt der das nochnicht macht und versuche es noch mal.
    Ich habe es so und so versucht mit dem Strom

  8. #38
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Möglicherweise wird die Impulsdauer beim Einschalten der Fahrtenregler als Mitteimpuls gespeichert. Zuerst Fernbedienung einschalten (=Programm im RP6 starten und Impulse für Mitte/Drehzahl 0 senden), dann das Modell einschalten (=die Fahrtenregler).
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

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

    das könnte schon eher sein @ radbruch.

    ich hab schon einiges gemacht im rc-bereich und von wegen speichern des vorherigen impulses, das stimmt nich.

    bei der rc funke isses so dass die alle 20ms ja wieder den impuls schickt egal ob verändert oder nicht

    der empfänger schickt dann auch den impuls genau so raus und wieder egal ob verändert oder nicht

    der fahrtenregler bekommt normal alle 20ms den impuls und muss so NICHTS speichern. die fahrtenregler sind eig bloß ne schaltung, die aus dem eingehenden impuls ne analoge spannung machen, mehr ned

    die haben dabei auch keinen internen speicher xD

    LG Pr0gm4n

    ps: der fahrtenregler hängt schon mit an dem akku der motoren oder?

    mach das mal so dann rp6 ein, programm starten, akkus an motoren und fahrtenregler anschließen

    dann sollte es gehen
    bzw. die motoren kriegen ja über den fahrtenregler strom xD

    EDIT: radbruch kannst du das hier plz mal testen? https://www.roboternetz.de/phpBB2/vi...=430502#430502

    ich such grad den fehler und bin ned sicher ob mein Programmer noch ordentlich eingerichtet iss --> das hexfile wär fürn arsch, ob ich doch iwo nen fehler gemacht hab beim code oder ob er bei übertragung mist gebaut hat... DANKE!

  10. #40
    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
    der fahrtenregler bekommt normal alle 20ms den impuls und muss so NICHTS speichern. die fahrtenregler sind eig bloß ne schaltung, die aus dem eingehenden impuls ne analoge spannung machen, mehr ned
    Das stimmt ja wohl offensichtlich nicht wie man aus dem oben beschriebenen schliesen kann. Wenn es so einfach wäre, würde es ja nach dem Akkuwechsel funktionieren.

    Ich kenne das eigentlich von Spielekonsolen. Wenn man hier beim Einschalten den Joystick nicht in Nullstellung hat stimmt die Steuerung im Spiel nicht weil die Joysticks beim Start kalibriert werden. Servos und Fahrtenregler haben wohl eine ähnliche Funktion um sich den verschiedenen (Mitte-)Impulslängen der Fernbedienungen anzupassen.

    [offtopic@Pr0gm4n]
    radbruch kannst du das hier plz mal testen?
    Ich besitze genau einen RP6 der in mein aktuelles Projekt integriert ist. Jedesmal wenn ich "mal kurz was testen soll" muss ich alles abbauen und die Testbedingungen nachstellen, dein Programm laden und eben testen. Das mache ich gerne wenn ich das Gefühl habe, es hilft entscheidend weiter. Im konkreten Fall ist es aber "nur" eine kleine Variation eines weiter oben geposteten Codes, ohne große und grundlegende Änderung. Das solltest du selbst auch ohne Hilfe zum Laufen bringen können.
    [/offtopic]

    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 6 ErsteErste ... 23456 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress