www.openedv.com
您好,欢迎您!    会员注册 | 登入 
公告:欢迎访问www.openedv.com开源电子网,开源共享共同进步,祝您新年快乐,万事如意!
设为首页 | 加入收藏
论坛首页 » AVR单片机 前往: 
我的AVR资料[程序篇] avr直接驱动步进电机(只需要一片L298即可)(源码14)
发表人 内容
[Down] [Up]
[楼主位] 正点原子


等级:NO
注册时间:
2010/12/02 10:41
文章: 8089
来自: 湖南
在线

        大学参加竞赛的时候弄的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);  
 }   
 
}


这篇文章被编辑了 1 次. 最近一次更新是在 2010/12/22 00:34


我的淘宝小店:http://shop62103354.taobao.com
[加为好友] 回复 引用回复
 
前往: 

Powered by ALIENTEK工作室 © 粤ICP备12000418号-1