51系列单片机 程序设计 用4个开关控制步进电机进行启动停止正转和反转

51系列单片机 程序设计 用4个开关控制步进电机进行启动停止正转和反转,第1张

设计思路:

1、分析功能需求:四个按键控制步进电机的四种状态,那么必须要在程序中有IO口按键扫描程序;

而且步进电机的控制一则知定要先设置好定时器。

2、功能模块定义:四个按键对应四蔽盯罩个函数,每个函数实现不同功能,对于正反转,先定义控制电机每一步时P0口的数据列表,把列表地址赋给DPTR,即TAB1,和TAB2,分别为正转和反转的数据列表,当按下按键1、2的时候,分别把对应的地址赋给DPTR,然后在定时器1的ISR中,轮询把数据列表中的数据一次发送给P0口控制步进电机;对于按键3、4,就是简单设置TR1,控制定时器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位不变

}

这个还是比较容易实现的,定义个曲线表就可以了,比如按梯形曲线或S型曲线,定义一个升速和降速表,点击的控制分三亩桥个阶段:

1、启动

2、运卖耐睁行

3、刹车

所以需中岁要修改run()这个程序,按这三部曲来做。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存