设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统.docx
《设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统.docx》由会员分享,可在线阅读,更多相关《设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统.docx(39页珍藏版)》请在冰豆网上搜索。
![设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统.docx](https://file1.bdocx.com/fileroot1/2023-1/31/a971bd3e-c9bf-44ba-8d9f-c7bc4531a1ea/a971bd3e-c9bf-44ba-8d9f-c7bc4531a1ea1.gif)
设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统
随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,成为了一种比较成熟的技术,本文主要介绍了一个基于89C51单片机的远程步进电机控制系统,详细描述了利用主-从双单片机开发远程步进电机控制系统的过程,重点对步进电机在单片机下的硬件连接与驱动,主-从单片机通过串行口通信的软件编程以及各模块系统设计进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现远程步进电机控制和显示,并可根据需要连续控制或单步控制步进电机,它使用起来相当方便,主从单片机仅通过RS-232串行电缆连接,具有远程控制、远程监控、连接简便、安全性高、功耗低等优点,适合于工厂及办公场所的远程阀门控制,也可以当作远程控制模块嵌入其它系统中,作为其他主系统的辅助扩展。
步进电机与AT89C51结合实现远程阀门控制系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行远程阀门控制,有广泛的应用前景。
关键词:
步进电机;远程控制;AT89C51
引言
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化系统中,与其他类型的电机相比具有易于精确控制,无累积误差等优点。
步进电机是一种将电脉冲转化为角位移的执行机构。
当步进驱动器接收到一个脉冲信号,就驱动步进电机按设定的方向转一个固定的角度,它的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的。
步进电机可以作为一种控制用的特种电机,利用其没有累积误差的特点,广泛应用于各种开环控制。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上,用它来做一些控制电器等不是很复杂的工作。
单片机内部也拥有和电脑功能类似的模块,比如ALU,内存,总线,还有和硬盘作用相同的存储器件,以及通信使用的串行口。
本文设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统。
为使步进电机系统的可靠性、通用性、可维护性以及性价比最优,根据系统的功能要求,通过单片I/O口、串行口通讯、中断、键盘、四位八段数码管的扩展来实现远程控制步进电机的启停、正反转、单步运行、限位保护及监控等功能。
1.设计背景
1.1课题背景
步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。
随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。
步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的、多相时序控制器。
步进电机的发展,依赖于新型材料的应用、设计手段,以及与驱动技术的最佳匹配。
随着自动控制技术、计算机网络通信技术在众多领域中的快速发展,以及进一步数字化、智能化,步进电机将会在更深入广泛的领域中得到应用。
在主从分布式控制系统中,从机主要完成远端实时控制与数据采集,被采集数据经初步处理后通过串行口传送给主机。
主机将从机发送来的数据进行处理后即时向用户提供各种控制过程的具体数据,与此同时进行人机交互。
主机根据从输入电路输入的数据进行判断处理并给从机发送各种控制命令。
它既利用了单片机的价格低,功能强,抗干扰能力强,温限宽等优点,又利用串行口进行远程通信,使操作者远在数十米之外也能控制具体参数。
单片机集成的资源越来越多,内部存储资源也日益丰富,用户不需要扩充就可以完成项目开发,而且单片机抗干扰能力也越来越强,使它更加适合工业控制领域。
1.2设计内容
本设计主要是介绍了基于单片机远程控制下的步进电机控制系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下:
(1)主机利用独立键盘检测用户输入数据并通过串行口发送至从机,共有六种指令:
停止、正转、反转、单步正转、单步反转、回到机械零点;
(2)从机接收数据后进行判断,并控制步进电机运动,同时将当前位置发送至主机,位置范围从-128到+127;
(3)主机接收当前步进电机位置信息后通过四位八段数码管以有符号十进制形式显示出来;
2.远程步进电机控制方案
2.1系统结构框图
主机
89C51
电源、时钟及复位电路
电源、时钟及复位电路
从机
89C51
ULN2003A
数码管
显示电路
步进电机
独立按键
图2-189C51单片机总体设计结构框图
2.2设计思路与方案
对步进电动机的控制接口采用软件控制步进电动机的旋转。
步进电动机的驱动脉冲由89C51单片机的编程来实现,由从机89C51芯片的P3.4、P3.5、P3.6、P3.7发出,驱动步进电动机的A、B、C、D相。
由于步进电机的正常工作电压是12V,故需要用达林顿晶体管驱动芯片驱动。
通过主机89C51芯片的P3口来读取键盘输入的停止、正转、反转、单步正转、单步反转、回到机械零点控制信号,并通过89C51的串行口将控制状态发送至从机,从机接收信号后按照指令控制电动机工作,同时实时将当前位置状态送回主机,主机接收当前位置信号并显示。
2.2.1步进电机正反转的控制
步进电机有四相绕组A、B、C、D以及公共端,当其中某一相绕组通电时在电动机内部形成N-S极,产生磁场,当通电的相发生变化,磁场发生旋转,在磁场的作用下,转子将转动,若步进电机按单-双八拍的方式来工作,则在A、B、C、D相绕组上输入脉冲的顺序为A—AB—B—BC—C—CD—D—DA—A:
此时步进电机沿顺时针方向转动,即正转,若在A、B、C、D各相绕组上依次输入脉冲A—AD—D—DC—C—CB—B—BA—A:
此时步进电机将沿逆时针方向旋转,因此只要控制脉冲输出顺序,就可以控制电机的正、反转。
同时加入了限位值保护,当电机到达限位值时,自动停止运行,确保人身及机械设备的安全。
2.2.2键盘检测
P3口内部集成了上拉电阻,所以只需将每根接口线通过开关接地,检测P3口的电平数据,即可判断出是哪个键被按下,同时执行相对应的操作。
2.2.3串行口通信
单片机的串行口由两个数据缓冲寄存器SBUF和一个输入移位寄存器组成,内部还有一个串行控制寄存器SCON和一个波特率发生器。
接收与发送缓冲寄存器占用同一个地址99H,其名称同样为SBUF。
CPU写SBUF操作,一方面修改发送寄存器,同时启动串行数据发送;读SBUF操作,就是读接收寄存器,完成数据的接收。
特殊功能寄存器SCON用以存放串行口的控制和状态信息。
根据对其写的控制字决定工作方式,从而决定波特率发生器的时钟源是来自系统时钟还是来自定时器T1。
特殊功能寄存器PCON的最高位SMOD为串行口波特率的倍增控制位。
表2-1串行口的控制寄存器SCON
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
方式选择
多机
控制
串行接收允许/禁止
欲发的第9位
收到的第9位
发送中断有/无
接收中断有/无
SM0,SM1:
为串行口工作方式控制位。
共对应四种工作方式,在本设计中选用方式2:
波特率固定11位异步通信方式,TXD为串行数据的发送端,RXD为串行数据的接收端。
每帧数据为11位:
1个起始位“0”,9个数据位和1个停止位“1”。
发送时,第9个数据位由SCON寄存器的TB8位提供,接收到的第9位数据存放在SCON寄存器的RB8位。
波特率固定为:
波特率=(2SMOD*fOSC)/64
2.2.4动态显示
步进电机当前位置通过串行口发送至主机后,主机处理当前位置信息,并通过四位八段共阳极数码管显示出来,为了节约系统输入输出口资源,输出使用动态显示过程,通过段选和位选达到一次仅使一位数码管亮起,但因为单片机速度极快以及人眼的视觉暂留原理,使人看上去像是四位数码管在同时亮起。
3.系统硬件设计
单片机最小系统或者成为最小应用系统,是指用最少的元件组成的单片机可以工作的系统,对51系列单片机来说,最小系统一般包括:
单片机、复位电路、晶振电路。
本控制系统中包含六个部分:
复位及时钟模块、主控模块、按键模块、通信模块、驱动模块、显示模块。
用按键模块来输入要执行的命令,即正反停,单步运行及复位;通过主机主控模块及所对应的汇编程序,通过通信模块将命令传送给从机,从机通过驱动模块控制步进电机按照命令运转,并将当前位置通过通信模块传递至主机,主机通过显示模块显示当前位置。
3.1时钟及复位模块
引脚18和19接上一个12MHz的晶振及两个22pF的瓷介电容为单片机提供时钟信号。
单片机RST通过10uF电容接至VCC,实现上电自复位,同时通过按键开关接至VCC,实现运行中手动复位,增加系统可靠性。
图3-1时钟及复位模块电路图
3.2按键模块
按键模块有六个按钮:
停止按钮(STOP)、正转按钮(POS)、反转按钮(NEG)、单步正转(POS_ONE)、单步反转(NEG_ONE),复位(RESET)分别控制电机的停止、正转、反转、单步正转、单步反转、返回机械零点。
分别与AT89C51的P3.2(引脚12)、P3.3(引脚13)、P3.4(引脚14)、P3.5(引脚15)、P3.6(引脚16)、P3.7(引脚17)相连接,另一端都接地。
当按下一个键时,使对应的引脚处产生低电平。
图3-2按键模块电路图
按下不同的按键,从P3口可以得到不同的数值,不同的数值对应不同的键被按下,被按下的键对应位为“0”,未被按下的键对应位为“1”,通过比对数值,可以判断出输入了哪种指令,从而进行相应的处理。
不同按键对应数值如下表
表3-1按键对应数值
按键
STOP
POS
NEG
POS_ONE
NEG_ONE
RESET
P口数据
FB
F7
EF
DF
BF
7F
3.3驱动模块
单片机的驱动电路主要是用ULN2003A芯片来驱动。
ULN2003A芯片是一个7路反相器,即第1到7引脚输入端为低电平时,对应输出端第16到10引脚输出为高电平,反之亦然。
第9引脚COM提供工作电压,本设计中引脚1、2、3、4分别与AT89C51芯片的P3.7、P3.6、P3.5、P3.4口相连接,电动机中间引脚直接与12V电压相接,目的是驱动电动机,使其正常工作。
图3-3步进电机驱动模块电路图
四相八拍式励磁法可以使步进电机运行更加平稳,步进角进一步减小,提高精确度,本设计中使用单极四相电机,采用四相八拍工作方式,励磁表如下
表3-2四相八拍励磁表
励磁顺序:
A—AB—B—BC—C—CD—D—DA—A
顺序
1
2
3
4
5
6
7
8
A
1
1
0
0
0
0
0
1
B
0
1
1
1
0
0
0
0
C
0
0
0
1
1
1
0
0
D
0
0
0
0
0
1
1
1
3.4通信模块
串行通信是CPU与外界交换信息的一种基本方式。
单片机应用与工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发往主机进行处理,以降低通信成本,提高通信可靠性。
RS-232C采用的是EIA电平,在TXD和RXD数据线上,逻辑1(MARK)=-3~-15V;逻辑0(SPACE)=+3~+15V。
很明显,RS-232C的EIA标准是以正负电压来表示逻辑状态的,与TTL以高低电平表示逻辑状态的规定不同,因此,为了能够使主从单片机通过RS-232C串行口通信,并延长通信距离,必须在EIA电平与TTL电平之间进行电平变换。
美国MAXIM公司的MAX232芯片可完成TTL和EIA之间的双向电平转换,MAX232内部有电压倍增电路和转换电路,并可同时进行两路双向转化,功能强大,且只需要单一+5V电源,因此获得广泛应用。
转换后的信号通过RS-232的D型9针连接口输出,最少仅需3根通信线即可进行串行通信,也可购买双绞通讯线进行两机直连,使连接更加方便,并增加通信可靠性。
图3-4MAX232通信模块电路图
3.5显示模块
每个八位数码管需占用8根数据线,为了节约系统资源,本设计选用段选+位选的方式控制一个四位八段共阳极数码管。
共阳极数码管的1、2、3、4位选信号由P1.0~P1.3信号经PNP三极管放大反相后送至位选输入口。
因单片机P0口内部无上拉电阻,故将P0口经过10K的排阻上拉至VCC,P0作为段选数据的输入,送至数码管的段选接口,通过位选选择显示位,通过段选选择显示的数据,可以完成步进电机当前位置的显示。
采用动态显示时需要注意以下3点:
◎由于每一位八段数码管的点亮时间很短,扫描过程中要确保每一位数码管得到足够的工作电流,从而确保亮度,故位选信号经三极管放大并反相后送入数码管。
◎在切换下一位的八段数码管时,应把上一位熄灭,再将下一位显示数据送出,防止显示数据出现残影。
◎点亮一遍所有数码管的时间应尽量小于0.1s,以保证足够短的时间,使眼睛产生各位数码管同时显示的错觉。
图3-5四位八段数码管显示模块电路图
4.系统软件设计
根据实际需要和设计要求,系统软件部分设计主要可分为:
主机:
键盘扫描程序,显示程序,发送程序,接收程序。
从机:
接收程序,步进电机控制程序,发送程序。
4.1主机程序设计
主机,作为人机交互的设备,承担着接收命令,将命令发送给从机,接收从机返回的数据,显示数据,任务繁重。
为了确保数码管显示的连续性,主机上电初始化后循环调用显示子程序和键盘扫描程序,一旦检测到有键被按下,即进行判断与存储键值,并将此值发送至从机,随后返回主程序,重复显示与检测键盘。
接收程序选择中断的形式进行,一旦有数据被接收,即触发串行通信中断,将从机发来的数据进行处理,将8位二进制数转化为有符号十进制数据,并刷新显示内存,在下一个显示周期中即被显示出来,此法仅需处理一次数据,不需要在每次显示时进行运算,加快了处理速度,节约了系统资源。
主机运行流程图如下所示:
Y
N
N
N
Y
Y
图4-1主机程序流程图
4.1.1显示子程序
因为采用扫描显示,主程序需要逐个将显示内存的数据输送至P0口,配合P1的位选,进行扫描显示
MOVDPTR,#TABLE;将DPTR指向显示表首地址
DISPLAY:
;显示子程序
JB0D5H,TWO;如果0D5H为1,即正数,则直接显示第二
位,不显示符号
ONE:
;第一位(符号位)
MOVA,#0AH;将A赋值为0AF,即指向表中的负号位
MOVCA,@A+DPTR;变址寻址,将显示数据存入A
MOVP0,A;将显示数据送至P0口
CLR90H;90H清零,即第一位送低电平,经PNP三
极管反相后,即选中第一位数码管
CALLDELAY;调用延时,保留显示1ms
SETB90H;90H置1,关闭显示
MOVP0,#0FFH;P0口送0FFH,保证数码管全灭
TWO:
MOVA,21H;将21H中的数据存入ACC,即百位
MOVCA,@A+DPTR;变址寻址,将显示数据存入A
MOVP0,A;将显示数据送至P0口
CLR91H;91H清零,即第二位送低电平,经PNP三
极管反相后,即选中第二位数码管
CALLDELAY;调用延时,保留显示1ms
SETB91H;91H置1,关闭显示
MOVP0,#0FFH;P0口送0FFH,保证数码管全灭
THREE:
MOVA,22H;将22H中的数据存入ACC,即十位
MOVCA,@A+DPTR;变址寻址,将显示数据存入A
MOVP0,A;将显示数据送至P0口
CLR92H;92H清零,即第三位送低电平,经PNP三
极管反相后,即选中第三位数码管
CALLDELAY;调用延时,保留显示1ms
SETB92H;92H置1,关闭显示
MOVP0,#0FFH;P0口送0FFH,保证数码管全灭
FOUR:
MOVA,23H;将23H中的数据存入ACC,即个位
MOVCA,@A+DPTR;变址寻址,将显示数据存入A
MOVP0,A;将显示数据送至P0口
CLR93H;93H清零,即第三位送低电平,经PNP三
极管反相后,即选中第三位数码管
CALLDELAY;调用延时,保留显示1ms
SETB93H;93H置1,关闭显示
MOVP0,#0FFH;P0口送0FFH,保证数码管全灭
RET
DELAY:
MOVR6,#2;12M晶振延时1ms
D1:
MOVR7,#248
DJNZR7,$
DJNZR6,D1
RET
TABLE:
;数据表分别为共阳极数码管显示0~9和负
号的数据
DB0C0H,0F9H,0A4H,0B0H,099H
DB092H,082H,0F8H,080H,090H,0BFH
4.1.2按键扫描处理子程序
单片机读取按键并与上一个发送的键值比对,如果一致则不发送,保证了按一次键仅发送一次,避免了重复发送造成单片机进入死循环。
CAL:
;转化并判断是否有键被按下,如果有,则
发送数据,如果没有继续初始化
MOVA,P3;读取按键
ANLA,#0FCH;保存高六位数据
COMPARE:
CJNEA,30H,SAVE;与上一个按键比对,如果不一致,跳转至
SAVE子程序
SJMPSTART;如果与上一个按键一致,返回START
SAVE:
MOV30H,A;将A中的数据存入30H
CJNEA,#0FCH,SEND;如果A中数据不为0FCH,即有键被按下,
跳转至发送子程序
SJMPSTART;如果A中数据为0FCH,即无键被按下,
返回主程序
SEND:
;发送数据(没有通信协议)
CALLSEND_DELAY;调用延时子程序
MOVA,30H;将当前键值送入A
MOVSBUF,A;将当前键值送入SBUF,单片机自动发送
JMPSTART;返回至主程序
SEND_DELAY:
;12M晶振时延时0.1ms
MOVR5,#19H
DL1:
NOP
NOP
DJNZR5,DL1
RET
4.1.3中断与计算子程序
当单片机收到串行口中断时,自动寻找中断程序入口地址0023H,随后跳转至ANALY子程序,进行中断的判断,如果是发送中断,则清TI并返回到断点,如果是接收中断,则响应中断,清RI并将SBUF中的数据保存,同时将8位二进制数据转换为3位有符号十进制数据,刷新显示内存,刷新后的数据将在下一个显示周期被显示出来。
ORG0023H;串行口中断程序入口跳转
JMPANALY
ANALY:
;中断分析程序
JBTI,CLRTI;如果是发送中断,跳转至CLRTI
JBRI,RECEIVE;如果是接收中断,跳至RECEIVE
RETI;中断返回
CLRTI:
CLRTI;发送中断,清TI
JMPANALY;返回中断分析程序
RECEIVE:
CLRRI;接收中断,清RI,处理中断请求
MOVA,SBUF;将SBUF中的数据读取至ACC
MOV20H,A;将返回的当前位置存至20H
CPLA;将A中的值取反,在八位LED上显示
MOVP2,A;将取反后的当前位置值显示在八位LED上
JB07H,POS;若当前位置首位为1,即正数,跳至POS
SJMPNEG;否则当前位置首位为0,即负数,跳至NEG
POS:
SETB0D5H;将标志位0D5H置1,表明数据为正数
CALLCALCULATION;调用计算子程序
JMPANALY;跳回中断分析程序
NEG:
CLR0D5H;将标志位0D5H清0,表明数据为负数
MOVA,20H;将当前位置值放入A
CLRCY;清CY,为计算减法做准备
SUBBA,#1;当前位置减1
JBCY,NEG_OVER;判断是否溢出,如果溢出,说明当前位置
为下限,即-128
CPLA;如果未溢出,说明数据正常,对A取反,
得到其绝对值
MOV20H,A;将当前位置的绝对值存入20H,符号位在
0D5H
CALLCALCULATION;调用计算子程序,将8位二进制数转化为3
位二进制数
JMPANALY;跳回中断分析程序
NEG_OVER:
;当前位置-1溢出,说明为00H,即-128,
将128分别放入对应的显示内存
MOV21H,#1
MOV22H,#2
MOV23H,#8
JMPANALY
CALCULATION:
;计算子程序,将8位二进制转化为3位十
进制
MOVA,20H;将当前位置放入ACC
ANLA,#7FH;去除符号位,准备进行运算
MOV20H,A;存回20H
MOVA,#100;将#100放入B中,作为除数
MOVB,A
MOVA,20H;将20H放入A中,作为被除数
DIVAB;进行除法运算
MOV21H,A;将商放入21H即百位
MOVA,B;将余数放入22H暂时存储,准备下次运算
MOV22H,A
MOVA,#10;将#10放入B中,作为除数
MOVB,A
MOVA,22H;将上次运算的商放入ACC,作为被除数
DIVAB;进行除法运算
MOV22H,A;将商放入22H即十位
MOVA,B
MOV23H,A;将余数放入23H即个位
RET
4.2从机程序设计
从机远离主机,双单片机通过串行通信方式进行通信,以提高通信可靠性,降低通信成本。
因此从机需要通过串行口获取指令,控制步进电机,并将当前位置实时传递至主机。
从机上电初始化后重复检测是否有指令被送入内存,如果有,则通过调用相关子程序控制步进电机运动,每运行一步都会将当前位置送回主机。
从机还