基于单片机的步进电机控制系统.docx
《基于单片机的步进电机控制系统.docx》由会员分享,可在线阅读,更多相关《基于单片机的步进电机控制系统.docx(29页珍藏版)》请在冰豆网上搜索。
基于单片机的步进电机控制系统
基于单片机的步进电机开环控制系统
胡啸峰,李俊生
(北京机械工业学院机电工程学院)
摘要:
设计了以AT89C51单片机为主控制器的步进电机控制系统,该文主要介绍了系统硬件电路搭建、软件功能设计及相关机械结构的设计,其中重点阐述了步进电机驱动器的控制及LCD液晶显示,实现了步进电机的开环控制及界面显示。
关键词:
AT89C51;驱动器;步进电机;12864LCD液晶屏;开环控制
Open-loopcontrolsystemofstep-motorbasedonsinglechip
XiaofengHu,JunshengLi
(collageofelectromechanicalengineering,Beijingindustrialmechanicalcollege)
Abstract:
thedesignuseAT89C51singlechiptocontrolthestep-motor.Thepapermainlyintroducesthedesignofstep-motorcontroller,step-motordrivers,thedisplayofLCD.thedesignsucceedsinrealizingcontrolofstep-motor.
0.引言
步进电机是1种纯数字控制电动机,它将电脉冲信号转换成相应位置的转换装置,是与输入脉冲对应的增量驱动元件,当负荷不超过步进电机所提供的动态转矩时,它就能实现快速起、停.另外,它的步距角和转速不受电压和负载变化的影响,也不受环境条件如温度、气压、冲击和震动等影响,仅与脉冲频率和脉冲数有关,因此非常适合于单片机控制.由于步进电机有快速响应特性,并且无积累误差(仅有小于7d的误差),在许多数控装置及仪器设备上都得到广泛应用.文中设计利用了单片机对步进电机对进行数字控制。
在这个控制系统中,控制器是核心,它负责发脉冲和LCD显示的控制。
下文对电机速度的控制及显示做出了详细的介绍。
1.总体方案设计
系统框图如
(1)所示,本系统主要由5部分组成,即:
步进电机,步进电机驱动器,控制电路,LCD显示,执行元件。
本文重点介绍步进电机控制电路,LCD显示两部分。
图1系统框架
2.系统设计
2.1步进电机的控制系统
步进电机的控制系统主要由单片机,晶振电路,复位电路,步进电机驱动器等组成。
如图
(2)所示。
图2步进电机控制电路
(1)晶振电路
单片机的时钟信号通常用两种电路方式获得:
内部震荡方式和外部震荡方式,在引脚XTAL1和XTAL2外接晶体振荡器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器。
当外接晶振后,就构成了自激震荡器并产生震荡时钟脉冲,内部震荡方式的外部电路如图(3)所示,本系统选C1和C2为30PF.
图3晶振电路
(2)复位电路:
复位电路如图(4)所示:
图4复位电路
a.当系统上电时,C3导通,RESET键至高,系统复位。
b.当S1按下,支线2导通,RESET键至高,
系统复位。
(3)步进电机脉冲产生
在采用单片机的步进电机开环系统中,控制系统的CP脉冲的频率实际上就是控制步进电机的运行速度。
系统可以用两种方法实现:
1.延时;2.定时。
在本电路设计中,采用了步进电机驱动器,步进电机驱动器及其接线电路如图(5)所示,其脉冲的输入由单片机的定时器发出,在软件中由软件来实现。
说明:
在电路中,由于其他方面考虑,没有接方向信号和脱机信号两根线,读者可根据实际情况自行使用。
脉冲信号由单片机T0定时器中断发出,能产生任意周期的定时信号,可以通过调节脉冲频率准确的控制电机的转速。
考虑到精度的要求,在容许范围之内,不考虑由于定时器装载完重新启动开始到定时器申请中断止的那段时间。
(4)键盘电路:
4×4的矩阵键盘是由4条行线和4条列线组成,按键设置在行列线交点上,行列线分别连接到按键开关的两端。
行线通过上拉电阻接到+5V上,平时无按键动作时,行线处于高电平状态,而当有按键按下时,行线状态将由与此相连的列线电平决定。
键盘中有无按键按下是由列线送入全扫描字,将所有行由与门相连,输出接中断。
当有键按下时,行线由高变低产生负跳变,即可进入中断进行处理。
电路图如下:
图5键盘电路
图中R1,R2,R3,R4均为4.7K,目的是将行拉高,以便在有键按下时,可以跳进中断。
2.2LCD液晶显示
本文采用12864液晶显示,其与单片机P0口相接,用于显示控制界面信息。
其引脚可参照说明书,本文主要对软件的设计进行详细的介绍。
采用的连接方式是直连方式,通过直接的人为控制状态位,来实现LCD的显示。
其硬件连接图如图6所示
图6LCD与单片机连接图
2.3执行机构
用步进电机带动皮带进行切割机模拟运行。
其基本位置关系及定位如下图所示:
每块支架均有加强筋,图中未示出。
2.4数据采集
本文采用旋转式编码器采集实时速度,并通过LCD显示出来。
编码器脉冲端接单片机T1计数器,通过脉冲的计数,转化为实际转数。
其接线可参照有关资料。
3.软件设计。
本例中,为了使步进电机有较高的转数,采用曲线加速的方法,即不断的减小定时时间。
使其由低速启动,以获得较高的转矩,之后不断的加速,最终获得所需高转速。
目的在某些情况下,可以获得高转速,满足要求.其工作方式如下图:
基本速度为基准的整数倍,1速为13倍,2为11倍,依次类推。
要达到最高转速,由于受到转矩的限制,必须采取低转速启动,经过一段时间加到高转速。
码盘数据的处理,本文中采用AT89c51系列单片机,其只有2个定时器/计数器中断,因此如何处理码盘采回的脉冲数,是软件的核心部分。
我们假设码盘在一定时间内的脉冲数是N,设步进电机的转速为S,于是有如下的方程进行计算。
其中:
采集编码器脉冲得时间为T(us)
编码器旋转一周发生360个脉冲。
流程图如下:
键盘扫描
加减速控制流程图
源程序见附表
(1)
4结论
步进电机开环控制系统具有成本低、简单、控制方便等。
在此方案中,通过曲线加速,可以获得较高的转速。
通过步进电机驱动器使得步进电机的精度得以提高,运动较为平稳。
使用码盘,将现有的速度实时反应在控制界面上。
本实验目的在于模拟切割机的一部分,其基本功能均可实现,且步进电机的误差在容许范围之内,满足使用要求。
参考文献
(1)王福瑞,等单片机微机系统设计大全北京:
北京航天航空大学
(2)胡汉才单片机原理及其接口技术北京:
清华大学
说明:
由于编者水平有限,仅供参考,如有不对之处还请多多指教。
其中胡啸峰做软件设计,李俊生电路设计,卢胜军
QQ:
328510960
特别感谢机电工程学院姚小敏,李天剑老师的耐心指导和帮助。
源程序:
;定义控制位
RSEQUP2.0
RWEQUP2.1
EEQUP2.2
PULSEEQUP2.4
DIREQUP2.5
;程序标志位
STATUSBIT00H;运转停止标志位,1转0停
STATUS1BIT01H;正反转标志位,1正0反
RESETFLAGBIT02H;系统复位标志位
SPEEDSHOWFLAGBIT03H;转速刷新标志位
RIGHTSHOWFLAGBIT04H;版权显示标志位
;LCD显示的变量定义
NDATA30H;行数显示
ADDRDATA31H
ADDR1DATA32H
N1DATA33H
;键盘中断程序变量
KEY1DATA38H
KEY2DATA39H
KEY3DATA3AH
;程序中间变量
GEWEIDATA40H;个位数
SHIWEIDATA41H;十位数
BAIWEIDATA42H;百位数
COUNTERLDATA43H;存计数器低八位
COUNTERHDATA44H;存计数器高八位
SPEEDLEVELPTDATA50H;速度显示指针
TIMPTDATA51H;转速定时器指针
TIMNOWDATA52H;定时器周期当前值
TIMNOW1DATA53H;递减用
TIMTARGETDATA54H;定时器周期目标值
TIMCOUNTER1DATA55H;采样显示计数1
TIMCOUNTER2DATA56H;采样显示计数2
STAYCOUNTERDATA57H;曲线加速阶段停留次数
;延时子程序变量
DR0DATA48H
DR1DATA49H
;*******************************************************************
;入口地址设置
ORG0000H
LJMPSTART
ORG0003H
LJMPKEYBOARD
ORG000BH
LJMPPULSE_GENERATOR
ORG0013H
LJMPLIMIT
START:
MOVSP,#60H
SETBEA;开中断控制位
SETBEX0;开INT0
SETBEX1;开INT1
SETBET0;开定时器0中断
SETBIT0;INT0下降沿触发
SETBIT1;INT1下降沿触发
MOVIP,#02H;设定中断优先级
MOVTMOD,#52H;定时器0方式2,计数器1方式1
START1:
LCALLINITIAL_SYS
LCALLINITIAL_LCD;初始化液晶面板
LCALLGUDINGSHOW;液晶面板固定显示
LOOP:
CJNER5,#0FFH,KEY;键值改变,则KEY
JBRESETFLAG,START1;若按下复位键,则START1
JBSPEEDSHOWFLAG,NEXT;若速度显示计时到,则NEXT
SJMPLOOP
NEXT:
LCALLHEX2BCD;十六进制到BCD码转换
LCALLSPEEDSHOW;显示转速
SJMPLOOP
;********************************************************************
;键值处理
KEY:
JNBRIGHTSHOWFLAG,NEXT0;没有显示版权,到NEXT0判断按下的键
LCALLGUDINGSHOW
LJMPNEXT5
NEXT0:
CJNER5,#0AH,NEXT1
LCALLON_OFF
NEXT1:
CJNER5,#0BH,NEXT2
LCALLFOR_BACK
NEXT2:
CJNER5,#0CH,NEXT3
LCALLFAST
NEXT3:
CJNER5,#0DH,NEXT4
LCALLSLOW
NEXT4:
CJNER5,#0EH,NEXT5
LCALLRESET
NEXT5:
LCALLFORBACKSHOW
LCALLSPEEDLEVELSHOW
CJNER5,#0FH,EXIT0
LCALLABOUT
LJMPEXIT9
EXIT0:
CLRRIGHTSHOWFLAG
SETBTR0
EXIT9:
MOVR5,#0FFH
LJMPLOOP
;**********************************************************
;启停切换
ON_OFF:
CPLSTATUS
JBSTATUS,EXIT1
MOVTIMNOW,#15;若要停止,恢复初始定时器周期15,实现低速启动
EXIT1:
RET
;**********************************************************
;正反转切换
FOR_BACK:
JNBSTATUS,EXIT2;运转中改变方向?
MOVTIMNOW,#15;恢复初始定时器周期15
EXIT2:
CPLDIR
CPLSTATUS1
RET
;*********************************************************
;加速
FAST:
MOVDPTR,#SPEEDLEVELTAB
MOVA,SPEEDLEVELPT
INCA
MOVCA,@A+DPTR
JZEXIT3;已经最高速,则EXIT2
INCSPEEDLEVELPT
INCTIMPT
LCALLSPEEDSHIFT
EXIT3:
RET
;*********************************************************
;减速
SLOW:
MOVDPTR,#SPEEDLEVELTAB
MOVA,SPEEDLEVELPT
DECA
MOVCA,@A+DPTR
JZEXIT4;已经最低速,EXIT3
DECSPEEDLEVELPT
DECTIMPT
LCALLSPEEDSHIFT
EXIT4:
RET
;**********************************************************************
;复位
RESET:
SETBRESETFLAG
RET
;**********************************************************************
;版权显示
ABOUT:
JBSTATUS,EXIT8
JNBRIGHTSHOWFLAG,NEXT6
CLRRIGHTSHOWFLAG
SETBTR0
LJMPEXIT8
NEXT6:
LCALLRIGHTSHOW
SETBRIGHTSHOWFLAG
CLRTR0
EXIT8:
RET
;***********************************************************************
;系统初始化
INITIAL_SYS:
MOVTL0,#0C4H;基准时间60微秒
MOVTH0,#0C4H
MOVTL1,#00H;脉冲计数器清零
MOVTH1,#00H
MOVSPEEDLEVELPT,#01H;速度档显示指针初值
MOVTIMNOW,#15;初始定时器周期20
MOVTIMNOW1,#15
MOVTIMPT,#00H;定时器周期指针初值
MOVDPTR,#TIMTAB;初始目标频率200HZ
MOVA,TIMPT
MOVCA,@A+DPTR
MOVTIMTARGET,A
MOVTIMCOUNTER1,#253;采样显示计数1
MOVTIMCOUNTER2,#44;采样显示计数2
MOVSTAYCOUNTER,#40;阶段停留次数初值
SETBTR0
SETBTR1
MOVR5,#00H;键值初值
MOVP1,#0FH;键盘列扫描线置零
CLRSTATUS;启停标志初值
SETBSTATUS1;正反转标志初值
CLRRESETFLAG;初始化系统复位标志
CLRRIGHTSHOWFLAG;初始化版权显示标志位
CLRSPEEDSHOWFLAG;初始化速度显示标志位
CLRPULSE;初始脉冲置高
CLRDIR;初始转向
RET
;**********************************************************************
;执行LCD初始化工作
INITIAL_LCD:
MOVA,#30H;功能设定
LCALLW_COMMAND
MOVA,#01H
LCALLW_COMMAND;清屏
MOVA,#06H
LCALLW_COMMAND;进入模式设定
MOVA,#0CH
LCALLW_COMMAND;显示器控制,游标不显示,字闪烁
RET
;*********************************************************
;检查LCD忙碌标志
CHKBUSY_LCD:
PUSHACC
CLRRS
SETBRW
SETBE
MOVP0,#0FFH;准备读P0口
CHK:
MOVA,P0;P0口读到A
JBACC.7,CHK;BF为1则CHK,再次查BF
CLRE
POPACC
RET
;*******************************************************************
;写命令到LCD
W_COMMAND:
CALLCHKBUSY_LCD
CLRRS
CLRRW
MOVP0,A
SETBE
CLRE
RET
;*******************************************************************
;写资料到LCD
W_DATA:
CALLCHKBUSY_LCD
SETBRS
CLRRW
MOVP0,A
SETBE
CLRE
RET
;********************************************************************
;固定显示
GUDINGSHOW:
MOVADDR1,#00H
MOVN1,#08H
MOVDPTR,#DHZTAB1
LCALLDHZ
MOVADDR1,#10H
MOVN1,#08H
MOVDPTR,#DHZTAB2
LCALLDHZ
MOVADDR1,#08H
MOVN1,#08H
MOVDPTR,#DHZTAB3
LCALLDHZ
MOVADDR1,#18H
MOVN1,#08H
MOVDPTR,#DHZTAB4
LCALLDHZ
RET
DHZTAB1:
DB"电机控制界面"
DHZTAB2:
DB"转速:
000转/分钟"
DHZTAB3:
DB"速度档:
1"
DHZTAB4:
DB"转向:
正"
;*******************************************************************
;版权显示
RIGHTSHOW:
MOVADDR1,#00H
MOVN1,#08H
MOVDPTR,#DHZTAB5
LCALLDHZ
MOVADDR1,#10H
MOVN1,#08H
MOVDPTR,#DHZTAB6
LCALLDHZ
MOVADDR1,#08H
MOVN1,#08H
MOVDPTR,#DHZTAB7
LCALLDHZ
MOVADDR1,#18H
MOVN1,#08H
MOVDPTR,#DHZTAB8
LCALLDHZ
RET
DHZTAB5:
DB"卢胜军:
机械架构"
DHZTAB6:
DB"李俊生:
电路设计"
DHZTAB7:
DB"胡啸峰:
软件设计"
DHZTAB8:
DB"版权所有"
;********************************************************************
;显示16*16点阵汉字
DHZ:
MOVADDR,ADDR1
MOVB,N1
DHZ1:
MOVA,ADDR
ORLA,#80H
LCALLW_COMMAND
DHZ2:
CLRA
MOVCA,@A+DPTR
INCDPTR
LCALLW_DATA
CLRA
MOVCA,@A+DPTR
INCDPTR
LCALLW_DATA
DJNZB,DHZ2
RET
;**********************************************************************
;正反转显示子程序
FORBACKSHOW:
MOVA,#9CH
LCALLW_COMMAND
JBSTATUS1,FOR
BACK:
MOVA,#0B7H;显示反
LCALLW_DATA
MOVA,#0B4H
LCALLW_DATA
LJMPEXIT6
FOR:
MOVA,#0D5H;显示正
LCALLW_DATA
MOVA,#0FDH
LCALLW_DATA
EXIT6:
RET
;*********************************************************************
;速度档显示子程序
SPEEDLEVELSHOW:
MOVA,#8CH
LCALLW_COMMAND
MOVA,#20H
LCALLW_DATA
MOVA,SPEEDLEVELPT
MOVDPTR,#SPEEDLEVELTAB
MOVCA,@A+DPTR
LCALLW_DATA
RET
;*********************************************************************
;转速显示子程序
SPEEDSHOW:
MOVA,R3
ANLA,#0FH
ORLA,#30H
MOVGEWEI,A;准备个位显示
MOVA,R3
SWAPA
ANLA,#0FH
ORLA,#30H
MOVSHIWEI,A;准备十位显示
MOVA,R2
ANLA,#0FH
ORLA,#30H
MOVBAIWEI,A;准备百位显示
MOVA,#92H
LCALLW_COMMAND
MOVA,#3AH
LCALLW_DATA
MOVA,BAIWEI;显示百位
LCALLW_DATA
MOVA,SHIWEI;显示十位
LCALLW_DATA
MOVA,GEWEI;显示个位
LCALLW_DATA
CLRSPEEDSHOWFLAG
RET
;*******************************************************************
;速度切换
SPEEDSHIFT:
MOVDPTR,#TIMTAB
MOV