首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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);   
}   


}
the king of nerds
返回列表