PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ATmega 8535 + L293d + DC Motoren



Lame
20.06.2005, 10:29
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


/*
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

/*
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





/*
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*/


so des ist alles


könnt aber auch die ganzen demos auf der seite http://dl3abq.jufu.org/dl.html downloaden


please help me [-o<

24.06.2005, 06:21
Hallo ? jemand da ?

Hat keiner nen Plan wie man DC Motoren ansteuert.

Könnte mir jemand sagen was ich schreiben muss um ein Port anzusteuern (1/0).