|
|
前往: |
| 我的AVR资料[程序篇] avr直接驱动步进电机(只需要一片L298即可)(源码14) |
| 发表人 | 内容 | |
|---|---|---|
| 2010/12/22 00:34 |
|
|
|
[楼主位] 正点原子
等级:
注册时间:![]() 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 |
||
|
||
|
|
||
|
| 前往: |