avr直接驱动步进电机源码(只需要一片L298即可)
 
- UID
- 1023230
|

avr直接驱动步进电机源码(只需要一片L298即可)
大学参加竞赛的时候弄的avr直接驱动步进电机的程序,特点是成本低,缺点是不能细分.噪声比较大.不过,够用就好,没必要在自行车上镶钻石.
源码如下:
#include<mega16.h>
#include<delay.h>
#define a PORTA.2
#define b PORTA.3
#define c PORTA.0
#define d PORTA.1
void delay(unsigned char t)
{
for(;t>0;t--)
delay_us(300);
}
void runsleft(unsigned char t) //单相驱动 left
{
a=0;b=0;c=1;d=0;
delay(t);
a=1;b=0;c=0;d=0;
delay(t);
a=0;b=0;c=0;d=1;
delay(t);
a=0;b=1;c=0;d=0;
delay(t);
}
void runsright(unsigned char t) //单相驱动 left
{
a=1;b=0;c=0;d=0;
delay(t);
a=0;b=0;c=1;d=0;
delay(t);
a=0;b=1;c=0;d=0;
delay(t);
a=0;b=0;c=0;d=1;
delay(t);
}
void rundright(unsigned char t)//双相驱动 right
{
a=0;b=1;c=1;d=0;
delay(t);
a=0;b=1;c=0;d=1;
delay(t);
a=1;b=0;c=0;d=1;
delay(t);
a=1;b=0;c=1;d=0;
delay(t);
}
void rundleft(unsigned char t)//双相驱动 left
{
a=0;b=1;c=0;d=1;
delay(t);
a=0;b=1;c=1;d=0;
delay(t);
a=1;b=0;c=1;d=0;
delay(t);
a=1;b=0;c=0;d=1;
delay(t);
}
void main()
{
unsigned int n;
DDRA=0XFF;
while(1)
{
for(n=0;n<200;n++)
runsleft(10);
a=b=c=d=0;
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
for(n=0;n<200;n++)
runsright(10);
a=b=c=d=0;
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
for(n=0;n<200;n++)
rundleft(10);
a=b=c=d=0;
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
for(n=0;n<200;n++)
rundright(10);
a=b=c=d=0;
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
}
} |
|
|
|
|
|