
/***************************************************************************************************
函数名:步进电机正反转一步
调 用: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应该是不需要的),具体的编码要看电机的拍数; 一旦明白这些,你就可以很容易编写代码来控制电机的转动了,还有在脉冲间你可以设置不同的延时时间来调节电机的转速。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)