PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe zur DC Motor Ansteuerung



Lame
29.06.2005, 14:05
Hallo habe ein Roboter mit dem ATmega8535 gebaut und möchte nun DC Motoren anteuern. Habe schon ein fertiges Programm mit den dazu gehörigen Unterprogrammen. Eins davon ist dies
/*
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.

Habe mal den Link wo alle Programme zusammen sind. Das Programm das ich benötige wäre Demo2.
Hier der Link http://dl3abq.jufu.org/dl.html

kann sich das bitte jamand mal anschauen. Muss das unbedingt hin bekommen.



Lame

RCO
29.06.2005, 18:59
Also ich hab nicht den Überblick im Programm, aber im Titel steht ja schonmal, dass es eine Schrittmotorroutine ist, und wenn du sagst, dass bei diesem Programm der Motor von der einen in die andere Drehrichtung springt, so würde es das nur bestätigen.

Das Programm ist daher für DC-Motoren völlig ungeeignet. Was genau ist denn jetzt deine Frage? Ein Programm zur Ansteuerung von DC-Motoren?

Einfach mal im Forum unter PWM suchen.

Lame
30.06.2005, 15:22
Habe es hin bekommen das waren die Werte bei den STEPPARTS wo man änder muste. :-k

nun läuft alles