步进电机的控制,附程序和原理图,请帮我看看哪里错了,谢谢!
原理图(其中晶振电容改为20p)http://cache.amobbs.com/bbs_upload782111/files_4/armok0176506.jpg
步进电机为两相六线
程序:(修改双龙提供的)
#include <avr/io.h>
#define uchar unsigned char
#define uint unsigned int
uchar np;
//步进电机运行数据表
const uchar motortb[]={0xfa,0xf6,0xf5,0xf9};
void delay(uchar t)// 每步延时的子程序
{
uchar i;
uint j;
for (i=0;i<t;i++)
for (j=0;j<900;j++);
}
void a_step(uchar d,uchar t) //步进电机走一步d=0 正转d=1 反转 t 越大走得越慢
{
if (d&0x01)
{
if (np==0)
np=3;
else np--;
}
else
{
if (np==3)
np=0;
else np++;
}
PORTC=motortb;
delay(t);
}
void a_turn(uchar d,uchar t)// 步进电机走一圈
{
uchar i;
for (i=0;i<96;i++)
a_step(d,t);
}
void main(void)
{
DDRC=0x0f;
PORTC=0xf5;
np=2;
while (1)
a_turn(1,1);
}
写完程序后用avr studio 4.12 bulid 生成default目录下的 .hex文件下载到M8
下载线用4个330电阻自制的那种,不过把18、19和20-25都接地了,下载正常。
熔丝位设置:cksel3..0 改为 1101其他默认
可是电机不能运行,大家能帮我看看哪里错了吗?第一次就不成功,唉!多谢!
注:我没有仿真器:( 都不振动吗? 本人没有做过,下面只是一些看法,不保正确,只能参考:
const uchar motortb[]={0xfa,0xf6,0xf5,0xf9};
这个好像有点不妥
四相四拍好像是:const uchar motortb[]={0xf1,0xf2,0xf4,0xf8};
四相八拍好像是:const uchar motortb[]={0xf1,0xf3,0xf2,0xf6,xf4,0xfc,0xf8,0xf9}; 电路就错了,步进电机根本就没供电。
步进电机的针座现在空的2个脚应该接电源,合起来接到5V上!
表格是正确的! 晕死,呵呵,多谢!
但是如果两相四线又怎么供电呢? 仔细看了下步进电机的一些知识,终于知道了:) 还有一个地方错了,晕!低电平复位我弄反了!哈哈,电机转起来了! 请教楼主,程序是好着的?对吧。只是线没接好? 程序没有问题。 我试验了一下,电机无法自启动,当借助外力转动后才开始运转,不知道怎么回事?请高手指教! 是不是起动的频率太快了. 应设个加速起动的过程. 好好 请问楼主你驱动的步进电机是双极性2相 6线????还是单极性 4相6线?? 楼主能不能把最后的图和程序发发,我现在也在玩玩步进电机,是两相四线的,但就是不动,程序和电路跟你原先的差不多 楼上,两相四线不能用ULN2003驱动,要用两个H桥驱动。 要有续流二极管的否则2003会很热的
页:
[1]