求51单片机控制步进电机程序

求51单片机控制步进电机程序,第1张

给你一段电机走一步的函数吧!

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

函数名:步进电机正反转一步

调 用:MOTOR()

参 数:Mot=0,电机反转一步 ,Mot=1电机正转

返回值:无

结 果:电机坐标 Motor 自动加一或减一,电机走一步

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

void MOTOR(void){ //步进电机正反转一步子程序

code unsigned char MOTOR_DB[]={0x00,0xb0,0x90,0xd0,0x50,0x70,0x60,0xe0,0xa0,0x00}//定义电机输出编码

unsigned char i

MOIC=0 //开电机电流

i=0 //电机输出编码初值设00

CBB=10 //设减小电机电流时间设为10

if(Mot==1)Mo_data++

else{if(Mo_data!=0)Mo_data--}//如果电机反转,并且当前电机坐标不小于1时,坐标减一

while(1)

{

if(Mot)Motor_t ++//当前电机输出编码加一指向下一编码

else Motor_t --//电机输出编码减一

i=MOTOR_DB[Motor_t]//取电机输出编码

if(i!=0)break

else{

if(Mot)Motor_t=0

else Motor_t=9

}

}

i=i&0xf8//屏蔽低3位,高5位不变

M_data=M_data&0x07//屏蔽P1口的高5位,低3位不变

M_data=M_data|i//高5位送P1口,P1口的低3位不变

}

单片机控制步进电机,我想你说的是两相步进电机,一般是控制其相序分配的顺逆从而控制正反转,一般而言,步进电机相序分配你可以做成一个数组比如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应该是不需要的),具体的编码要看电机的拍数; 一旦明白这些,你就可以很容易编写代码来控制电机的转动了,还有在脉冲间你可以设置不同的延时时间来调节电机的转速。


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

原文地址:https://54852.com/yw/11111984.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存