Code:
/*
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*/
Wenn ich hier in der 5 letzten Zeile das [k] durch ein [i] ersetze dann läuft der Roboter schon mal gerade aus und springt nicht von einer Drehung zur anderen. So nun muss er sich nur noch drehen können.
Lesezeichen