51单片机步进电机正反转程序

51单片机步进电机正反转程序,第1张

单片机控制步进电机,我想你说的是两相步进电机,一般是控制其相序分配的顺逆从而控制正反转,一般而言,步进电机相序分配你可以做成一个数组比如step[]={0x03,0x06,0x0c,0x09},这样来说可以假设P0口是步进电机控制口,那么可以按如下方式来控制: while(1) { for(i=0i<4i++) { if(fx==1)P0=step[i]//正向 else P0=step[3-i]//反向 delay(x)//x大小决定电机速度。

根据电机相数买个驱动器。然后用单片机产生脉冲来控制电机的转动以及正反转。单片机产生脉冲的方法和单片机控制流水灯是一样的。ULN2003D 是驱动步进电机的驱动芯片,主要是匹配电机所需的电流。 由于是四相电机,步进电机之所以可以转动就需要给相绕组提供连续的脉冲,所以需要4个端口来控制四相绕组的工作状态(P15应该是不需要的),具体的编码要看电机的拍数; 一旦明白这些,你就可以很容易编写代码来控制电机的转动了,还有在脉冲间你可以设置不同的延时时间来调节电机的转速。

#include <reg51.h> //51芯片管脚定义头文件

#include <intrins.h>//内部包含延时函数 _nop_()

#define uchar unsigned char

#define uint unsigned int

uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}

uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1}

/********************************************************/

/*

/* 延时t毫秒

/* 11.0592MHz时钟,延时约1ms

/*

/********************************************************/

void delay(uint t)

{

uint k

while(t--)

{

for(k=0k<125k++)

{ }

}

}

/********************************************************/

/*

/*步进电机正转

/*

/********************************************************/

void motor_ffw(uint n)

{

uchar i

uint j

for (j=0j<12*nj++)//转1×n圈

{

for (i=0i<8i++) //一个周期转30度

{

P1 = FFW[i] //取数据

delay(15)//调节转速

}

}

}

/********************************************************/

/*

/*步进电机反转

/*

/********************************************************/

void motor_rev(uint n)

{

uchar i

uint j

for (j=0j<12*nj++)//转1×n圈

{

for (i=0i<8i++) //一个周期转30度

{

P1 = REV[i] //取数据

delay(15)//调节转速

}

}

}

/********************************************************

*

* 主程序

*

*********************************************************/

main()

{

while(1)

{

motor_ffw(5) //电机正转

delay(5000) //换向延时

//motor_rev(5) //电机反转

//delay(1000) //换向延时

}

}

/********************************************************/


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11004998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存