历史上的今天
今天是:2026年03月07日(星期六)
2023年03月07日 | 89C51单片机的步进电动机控制系统设计
2023-03-07 来源:elecfans
本文为大家带来两个89C51单片机的步进电动机控制系统设计。
89C51单片机的步进电动机控制系统设计一
系统整图如图1所示,本系统采用外部中断方式,p0口作为信号的输入部分,p1口为发光二极管显示部分,p2口作为电机的驱动部分。

图1 系统整图
电源部分
利用LM7812和LM7805芯片得到12V和5V的电压,它们的应用要注意以下几点:
(1)输入输出压差不能太大,太大则转换效率急速降低,而且容易击穿损坏;
(2)输出电流不能太大,1.5A 是其极限值。大电流的输出,散热片的尺寸要足够大,否则会导致高温保护或热击穿;
(3)输入输出压差也不能太小,大小效率很差。 其中12V电压给步进电机供电,5V电压则给单片机供电。分别如图2、图3所示。
(1)产生12V的电压给步进电机供电

图2 12V电路部分
(2)产生5V的电压给单片机供电

图3 5V电路部分
按键部分
本次设计选用的是单片机的P0口来控制信号的输入,所以把按键开关和P0口连接起来,当按下开关S1时,相当于给P0.0口一个低电平;当按下开关S2时,相当于给P0.1口一个低电平;当按下开关S3时,相当于给P0.2口一个低电平;当按下开关S4时,相当于给P0.3口一个低电平;当按下开关S5时,相当于给P0.4口一个低电平。然后通过单片机实行相应的操作。如图4。

图4 按键部分电路
驱动部分
此电路是步进电机的驱动部分,我选用的是ULN2004芯片来驱动的,ULN2004系列是一款高耐压,大电流达林顿管驱动器,包含7个NPN达林顿管。如图5。

图5 驱动部分电路
状态指示部分
状态指示用P1口控制发光二极管的显示,如果相应端口是低电平,相应的发光二极管就会亮,用它来表示步进电机所处的状态。
时钟部分
时钟电路是计算机的心脏,它控制着计算机的工作节奏,可以通过提高时钟频率来提高CPU的速度,本次设计采用的晶振为12MHz。如图6。

图6 时钟部分电路
系统软件设计
系统主程序
系统分为电机正转、电机反转、电机加速与电机减速的几部分组成,其主程序框图如图7所示。

图7 主程序框图
查键部分
查键程序用于判断P0.0口与P0.1口的值,当p0.0口为0时,电机正转,当p0.0口为1时,继续判断p0.1口的值,p0.1口为0时,电机反转。如图8所示。

图8 查键部分流程图
前进部分
系统初始化之后,前进子程序R0用于给P2口送不同的值,根据电机转动的相序,使电机正向转动,P2口的值分别为01H,03H,02H,06H,04H,0CH,08H,09H。流程图如图9所示。

图9 前进部分流程图
后退部分
电机反转原理与正转相似,此时P2口的值分别为09H,08H,0CH,04H,06H,02H,03H,01H。流程图如图10所示。

图10 后退部分流程图
加速部分
当电机正转或反转的时候,按下加速键,调用加速子程序,使电机每转动一步的延时时间变短,从而实现电机的加速。流程图如图11所示。

图11 加速部分流程图
减速部分
电机正转或反转的时候,按下减速键,通过改变电机每转动一步的延时时间,使时间变长,从而实现电机减速。流程图如图12所示。

图12
89C51单片机的步进电动机控制系统设计二
控制系统设计
步进电机控制系统主要由单片机、PC上位机、驱动电路、步进电动机、4*4键盘和LED显示等模块组成,下图为步进电机控制系统是总体结构图。单片机产生脉冲信号并将脉冲信号传送给步进电动机,完成对步进电动机的步数和圈数的准确计数,从而实现对步进电动机的转速控制。PC上位机模块是系统的核心,通过串口向单片机发送控制命令,实现PC机对步进电动机的实时控制,并实时显示步进电动机的运行状态。4*4键盘模块实现指令输入,LED显示模块可显示步进电动机的转速和转向等运行状态。为保护单片机控制系统硬件电路,在单片机和步进电机之间增加过驱动电路。

系统总体结构图
由于步进电动机的驱动电流比较大,步进电动机较大驱动电流的通断会造成电磁干扰,进而会影响单片机的正常工作。因而单片机与步进电动机之间的驱动电路就显得尤为重要。本系统采用74LS04非门与有光电隔离的4N29达林顿管组成驱动电路,这样不仅避免了在驱动电路发生故障,造成高电压、大电流进入单片机而烧毁器件。同时割断了驱动电路与单片机控制电路之间的电气连接。另外步进电动机的启停和正反转分别由S1,S2控制。硬件接线图如下图所示。

步进电机与单片机硬件接线图
软件实现
单片机程序判断步进电机是否启动;若启动则进一步判断其旋转方向;然后按照既定的旋转方向传送控制脉冲序列,再加上脉宽延时即可。每走一步步数减1,并判断步数是否为零,从而决定是否送下一个脉冲序列。其控制状态如下表所示。

三相单三拍控制模式
由上表可以看出,输出的不同状态字,表示不同的励磁方式。P1=0x06H,表示A相通电,其它两相断电:P1=0x05H,表示B相通电,其它两相断电;P1=0x03H,表示C相通电,其它两相断电。若以次给P1口送0X06H,0X05H,0X03H,则步进电机通电顺序为A——B——C——A相。反之若以次给P1口送0X03H,0X05H,0X06H,则步进电机通电顺序为C——B——A——C相。从而用软件实现了步进电机的正反转控制。步进电机的旋转速度可以用脉冲宽度,即送出控制状态字后的延时时间长短来控制。
软件设计流程框图如下图所示。

步进电动机控制流程图
史海拾趣
|
我现在用一个GPS芯片接收卫星传下来的数据,用万用表测量,发现电压为2.45V,提供的电压是3.3V,应该是接收到了数据,但是用MiniCDU就是无法现实接收到的数据,用系统的超级终端还是无法检测到是否接收到数据了,请问高手,这是什么原因啊?… 查看全部问答> |
|
我建立了一个工程,生成目标文件mutex.o.启动vxsim目标服务器,名称为vism@zxj. 在shell里面输入ld vism@zxj mutex.提示mutex未定义符号?要怎么输入呢? 刚开始学一天,问这个白痴问题,请大家不要见笑.… 查看全部问答> |
|
在注册表中偶然看到这个一段: \"DevConfig\"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00请问这个设置 是根据什么来设的呀?作用是什么呀?… 查看全部问答> |
|
用IAR自己建立一STM32工程,编译提示找不到*.h文件。自己觉得可能是c/c++ compiler下Proprocess处设置的原因,目前是参考万利的设置: $PROJ_DIR$.. $PROJ_DIR$....Libraryinc 不成功,烦请高手指点下。 工程在此: ...… 查看全部问答> |
|
我现在的板子,JTAG可以烧写程序,可以调试。复位芯片用的MAX708R,用JTAG仿真,F5运行, / RESET 引脚上常为高,DSP2812正常工作,但是拔掉仿真器,断电后,用示波器检测/RESET(MAX708R) 检测到有200HZ的复位信号,。XCLKOUT 输出为3.75M,奇怪了 ...… 查看全部问答> |




