Hallo habe den Roboter von AATIS nachgebaut. Bis jetzt ging alles super.
der Roboter steuert Schrittmotoren super. Nun wolte ich aber DC Motoren ansteuern und wenn ich die anschließe dann wechseln die schnell von einer Richtigung zur anderen hin und her. Wenn ich den Microcontroller runter mache und ein High Signal an den Eingang des L293D anlege dann dreht der Motor normal in eine Richtung so wie ich das eigendlich möchte.
Da hab ich mir gedacht das liegt ja dan wohl an dem Programm.
So da ich kein Plan davon habe wie und was ich da in dem Programm ändern muss, wolte ich fragen ob mir jemand da weiter helfen kann.
Möchte gerne die Demo 2 so das ich DC Motoren ansteuen kann + Geschwindigkeit ändern. Vorwärts und Rückwärts.
Demo 2
Code:/* Titel: Linienverfolgungsprogramm Funktion: Roboter startet bei kurzem Druck auf Hindernissensoren und versucht, einer stark reflektierenden Linie auf dem Boden zu folgen. Beim Start muss sich der Sensor auf dieser Linie befinden; der Bereich außerhalb der Linie darf nur sehr wenig reflektieren. Autor: Gunther May, DL3ABQ Datum: 01/2004 Prozessor: AT90S8535/ATMega8535 Lizenz: GNU Public License (gpl.txt) */ #include <io.h> #include "..\lib\mydefs.h" #include "..\lib\stepper.h" #include "..\lib\sensor.h" #define myspeed 40 //Verzögerung zwischen den Schritten int main(void) { unsigned char gndval; sens_initwall(); sens_initgnd(); while (sens_getwall()==0); stepper_on(); while(1) //Endlosschleife { gndval=sens_getgnd(); switch(gndval) { case 0: //ganz auf der Linie { stepper_go(FORWARD,1,myspeed); //einen Schritt vorwärts sens_setLED(0,0); sens_setLED(1,0); break; } case 1: //links von der Linie weg { stepper_go(RIGHT,1,myspeed); //einen Schritt vorwärts sens_setLED(0,1); sens_setLED(1,0); break; } case 2: //rechts von der Linie weg { stepper_go(LEFT,1,myspeed); //einen Schritt vorwärts sens_setLED(0,0); sens_setLED(1,1); break; } case 3: //ganz von der Linie weg { //Fehler! Roboter befindet sich außerhalb des Linienbereiches stepper_go(BACK,1,myspeed); sens_setLED(0,1); sens_setLED(1,1); break; } } } return 0; }
hier die Unterprogramme
Code:/* Titel: Schrittmotor-Routinen für AATiS-Roboter Autor: Gunther May, DL3ABQ Datum: 7/2002 Prozessor: AT90S8535/ATMega8535 Lizenz: GNU Public License (gpl.txt) */ #ifndef STEPPER_H #define STEPPER_H /* ** hier Motortyp auswählen */ #define BIPOLAR //#define UNIPOLAR /* ** Motorport auswählen */ #define STEPPER_PORT PORTC #define STEPPER_DDR DDRC #define FORWARD 0 #define BACK 1 #define RIGHT 2 #define LEFT 3 #define RIGHTANGLE 8 /* ** Funktions-Prototypen */ //Schrittmotoren in Haltepostition bringen extern void stepper_on(void); //Schrittmotoren komplett abschalten extern void stepper_off(void); //in Richtung <dir> <steps> Schritte mit einer Schrittverzögerung von <del> gehen extern void stepper_go(unsigned char dir, unsigned short steps, unsigned char del); #endif //STEPPER_H
so des ist allesCode:/* Titel: Schrittmotor-Routinen für AATiS-Roboter Autor: Gunther May, DL3ABQ Datum: 7/2002 Prozessor: AT90S8535/ATMega8535 Lizenz: GNU Public License (gpl.txt) */ #include <io.h> #include "stepper.h" /* ** Schrittmuster in Abhängigkeit vom Motortyp festlegen */ #ifdef BIPOLAR #define STEPPARTS 4 const unsigned char step_pat[4][STEPPARTS] = {{255-(5+5*16), 255-(9+6*16), 255-(10+10*16), 255-(6+9*16)}, {255-(6+9*16), 255-(10+10*16), 255-(9+6*16), 255-(5+5*16)}, {255-(5+5*16), 255-(6+6*16), 255-(10+10*16), 255-(9+9*16)}, {255-(5+5*16), 255-(9+9*16), 255-(10+10*16), 255-(6+6*16)}}; #endif #ifdef UNIPOLAR #define STEPPARTS 8 const unsigned char step_pat[4][STEPPARTS] = {{255-(1+(1+8)*16), 255-(1+2+8*16), 255-(2+(4+8)*16), 255-(2+4+4*16), 255-(4+(2+4)*16), 255-(4+8+2*16), 255-(8+(1+2)*16), 255-(8+1+1*16)}, {255-(1+8+1*16), 255-(8+(1+2)*16), 255-(4+8+2*16), 255-(4+(2+4)*16), 255-(2+4+4*16), 255-(2+(4+8)*16), 255-(1+2+8*16), 255-(1+(8+1)*16)}, {255-(1+8+(1+8)*16), 255-(8+8*16), 255-(4+8+(4+8)*16), 255-(4+4*16), 255-(2+4+(2+4)*16), 255-(2+2*16), 255-(1+2+(1+2)*16), 255-(1+1*16)}, {255-(1+1*16), 255-(1+2+(1+2)*16), 255-(2+2*16), 255-(2+4+(2+4)*16), 255-(4+4*16), 255-(4+8+(4+8)*16), 255-(8+8*16), 255-(8+1+(8+1)*16)}}; #endif /* ** Funktions-Deklarationen */ volatile unsigned char dummy; //für Delay-Funktion void stepdelay(unsigned char del) { unsigned char i,k,l; dummy=17; for(i=0; i<del; i++) { for(k=0; k<2; k++) { for(l=0; l<255; l++) { dummy++; } } } } void stepper_on() { outp(0xFF, STEPPER_DDR); /* all port bits as output */ outp(0x11, STEPPER_PORT); }/*stepper_on*/ void stepper_off() { outp(0xFF, STEPPER_DDR); /* all port bits as output */ outp(0xFF, STEPPER_PORT); }/*stepper_off*/ void stepper_go(unsigned char dir, unsigned short steps, unsigned char del) { unsigned short i; unsigned char k; outp(0xFF, STEPPER_DDR); /* all port bits as output */ for(i=0; i<steps; i++) { for(k=0; k<STEPPARTS; k++) { outp(step_pat[dir][k], STEPPER_PORT); stepdelay(del); } } }/*stepper_go*/
könnt aber auch die ganzen demos auf der seite http://dl3abq.jufu.org/dl.html downloaden
please help me [-o<







Zitieren

Lesezeichen