步进电机控制毕业设计_第1页
步进电机控制毕业设计_第2页
步进电机控制毕业设计_第3页
步进电机控制毕业设计_第4页
步进电机控制毕业设计_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,成为了一种比较成熟的技术,本文主要介绍了一个基于89C51单片机的远程步进电机控制系统,详细描述了利用主从双单片机开发远程步进电机控制系统的过程,重点对步进电机在单片机下的硬件连接与驱动,主从单片机通过串行口通信的软件编程以及各模块系统设计进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现远程步进电机控制和显示,并可根据需要连续控制或单步控制步进电机,它使用起来相当方便,主从单片机仅通过RS232串行电缆连接,具有远程控制、远程监控、连接简便、安全性高、功耗低等优点,适合于工厂及办公场所的远程阀门控制,也可以当作远程控制模块嵌入其它系统中,作为其他主系统的辅助扩展。步进电机与AT89C51结合实现远程阀门控制系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行远程阀门控制,有广泛的应用前景。关键词步进电机;远程控制;AT89C51目录摘要I引言11设计背景211课题背景212设计内容22远程步进电机控制方案321系统结构框图322设计思路与方案3221步进电机正反转的控制3222键盘检测4223串行口通信4224动态显示43系统硬件设计531时钟及复位模块532按键模块633驱动模块734通信模块835显示模块94系统软件设计1041主机程序设计10411显示子程序11412按键扫描处理子程序13413中断与计算子程序1442从机程序设计16421判断指令子程序17422中断响应子程序19423步进电机控制子程序205PROTEUS仿真236总结26参考文献27附录1主机源程序代码28附录2从机源程序代码34附录3电路原理图40引言步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化系统中,与其他类型的电机相比具有易于精确控制,无累积误差等优点。步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,就驱动步进电机按设定的方向转一个固定的角度,它的旋转是以固定的角度一步一步运行的,可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的。步进电机可以作为一种控制用的特种电机,利用其没有累积误差的特点,广泛应用于各种开环控制。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上,用它来做一些控制电器等不是很复杂的工作。单片机内部也拥有和电脑功能类似的模块,比如ALU,内存,总线,还有和硬盘作用相同的存储器件,以及通信使用的串行口。本文设计一种用双89C51作为核心部件进行远程控制的步进电机控制系统。为使步进电机系统的可靠性、通用性、可维护性以及性价比最优,根据系统的功能要求,通过单片I/O口、串行口通讯、中断、键盘、四位八段数码管的扩展来实现远程控制步进电机的启停、正反转、单步运行、限位保护及监控等功能。1设计背景11课题背景步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的、多相时序控制器。步进电机的发展,依赖于新型材料的应用、设计手段,以及与驱动技术的最佳匹配。随着自动控制技术、计算机网络通信技术在众多领域中的快速发展,以及进一步数字化、智能化,步进电机将会在更深入广泛的领域中得到应用。在主从分布式控制系统中,从机主要完成远端实时控制与数据采集,被采集数据经初步处理后通过串行口传送给主机。主机将从机发送来的数据进行处理后即时向用户提供各种控制过程的具体数据,与此同时进行人机交互。主机根据从输入电路输入的数据进行判断处理并给从机发送各种控制命令。它既利用了单片机的价格低,功能强,抗干扰能力强,温限宽等优点,又利用串行口进行远程通信,使操作者远在数十米之外也能控制具体参数。单片机集成的资源越来越多,内部存储资源也日益丰富,用户不需要扩充就可以完成项目开发,而且单片机抗干扰能力也越来越强,使它更加适合工业控制领域。12设计内容本设计主要是介绍了基于单片机远程控制下的步进电机控制系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下1主机利用独立键盘检测用户输入数据并通过串行口发送至从机,共有六种指令停止、正转、反转、单步正转、单步反转、回到机械零点;2从机接收数据后进行判断,并控制步进电机运动,同时将当前位置发送至主机,位置范围从128到127;3主机接收当前步进电机位置信息后通过四位八段数码管以有符号十进制形式显示出来;2远程步进电机控制方案21系统结构框图图2189C51单片机总体设计结构框图22设计思路与方案对步进电动机的控制接口采用软件控制步进电动机的旋转。步进电动机的驱动脉冲由89C51单片机的编程来实现,由从机89C51芯片的P34、P35、P36、P37发出,驱动步进电动机的A、B、C、D相。由于步进电机的正常工作电压是12V,故需要用达林顿晶体管驱动芯片驱动。通过主机89C51芯片的P3口来读取键盘输入的停止、正转、反转、单步正转、单步反转、回到机械零点控制信号,并通过89C51的串行口将控制状态发送至从机,从机接收信号后按照指令控制电动机工作,同时实时将当前位置状态送回主机,主机接收当前位置信号并显示。221步进电机正反转的控制步进电机有四相绕组A、B、C、D以及公共端,当其中某一相绕组通电时在电动机内部形成NS极,产生磁场,当通电的相发生变化,磁场发生旋转,在磁场的作用下,转子将转动,若步进电机按单双八拍的方式来工作,则在、B、C、D相绕组上输入脉冲的顺序为AABBBCCCDDDAA此时步进电机沿顺时针方向转动,即正转,若在、B、C、D各相绕组上依次输入脉冲AADDDCCCBBBAA此时步进电机将沿逆时针方向旋转,因此只要控制脉冲输出顺序,就可以控制电机的正、反转。同时加入了限位值保护,当电机到达限位值时,自动停止运行,确保人身及机械设备的安全。主机89C51从机89C51电源、时钟及复位电路电源、时钟及复位电路串行口通信数码管显示电路独立按键ULN2003A步进电机222键盘检测P3口内部集成了上拉电阻,所以只需将每根接口线通过开关接地,检测P3口的电平数据,即可判断出是哪个键被按下,同时执行相对应的操作。223串行口通信单片机的串行口由两个数据缓冲寄存器SBUF和一个输入移位寄存器组成,内部还有一个串行控制寄存器SCON和一个波特率发生器。接收与发送缓冲寄存器占用同一个地址99H,其名称同样为SBUF。CPU写SBUF操作,一方面修改发送寄存器,同时启动串行数据发送;读SBUF操作,就是读接收寄存器,完成数据的接收。特殊功能寄存器SCON用以存放串行口的控制和状态信息。根据对其写的控制字决定工作方式,从而决定波特率发生器的时钟源是来自系统时钟还是来自定时器T1。特殊功能寄存器PCON的最高位SMOD为串行口波特率的倍增控制位。表21串行口的控制寄存器SCONSM0SM1SM2RENTB8RB8TIRI方式选择多机控制串行接收允许/禁止欲发的第9位收到的第9位发送中断有/无接收中断有/无SM0,SM1为串行口工作方式控制位。共对应四种工作方式,在本设计中选用方式2波特率固定11位异步通信方式,TXD为串行数据的发送端,RXD为串行数据的接收端。每帧数据为11位1个起始位“0”,9个数据位和1个停止位“1”。发送时,第9个数据位由SCON寄存器的TB8位提供,接收到的第9位数据存放在SCON寄存器的RB8位。波特率固定为波特率(2SMODFOSC)/64224动态显示步进电机当前位置通过串行口发送至主机后,主机处理当前位置信息,并通过四位八段共阳极数码管显示出来,为了节约系统输入输出口资源,输出使用动态显示过程,通过段选和位选达到一次仅使一位数码管亮起,但因为单片机速度极快以及人眼的视觉暂留原理,使人看上去像是四位数码管在同时亮起。3系统硬件设计单片机最小系统或者成为最小应用系统,是指用最少的元件组成的单片机可以工作的系统,对51系列单片机来说,最小系统一般包括单片机、复位电路、晶振电路。本控制系统中包含六个部分复位及时钟模块、主控模块、按键模块、通信模块、驱动模块、显示模块。用按键模块来输入要执行的命令,即正反停,单步运行及复位;通过主机主控模块及所对应的汇编程序,通过通信模块将命令传送给从机,从机通过驱动模块控制步进电机按照命令运转,并将当前位置通过通信模块传递至主机,主机通过显示模块显示当前位置。31时钟及复位模块引脚18和19接上一个12MHZ的晶振及两个22PF的瓷介电容为单片机提供时钟信号。单片机RST通过10UF电容接至VCC,实现上电自复位,同时通过按键开关接至VCC,实现运行中手动复位,增加系统可靠性。图31时钟及复位模块电路图32按键模块按键模块有六个按钮停止按钮(STOP)、正转按钮(POS)、反转按钮(NEG)、单步正转(POS_ONE)、单步反转(NEG_ONE),复位(RESET)分别控制电机的停止、正转、反转、单步正转、单步反转、返回机械零点。分别与AT89C51的P32(引脚12)、P33(引脚13)、P34(引脚14)、P35(引脚15)、P36(引脚16)、P37(引脚17)相连接,另一端都接地。当按下一个键时,使对应的引脚处产生低电平。图32按键模块电路图按下不同的按键,从P3口可以得到不同的数值,不同的数值对应不同的键被按下,被按下的键对应位为“0”,未被按下的键对应位为“1”,通过比对数值,可以判断出输入了哪种指令,从而进行相应的处理。不同按键对应数值如下表表31按键对应数值按键STOPPOSNEGPOS_ONENEG_ONERESETP口数据FBF7EFDFBF7F33驱动模块单片机的驱动电路主要是用ULN2003A芯片来驱动。ULN2003A芯片是一个7路反相器,即第1到7引脚输入端为低电平时,对应输出端第16到10引脚输出为高电平,反之亦然。第9引脚COM提供工作电压,本设计中引脚1、2、3、4分别与AT89C51芯片的P37、P36、P35、P34口相连接,电动机中间引脚直接与12V电压相接,目的是驱动电动机,使其正常工作。图33步进电机驱动模块电路图四相八拍式励磁法可以使步进电机运行更加平稳,步进角进一步减小,提高精确度,本设计中使用单极四相电机,采用四相八拍工作方式,励磁表如下表32四相八拍励磁表励磁顺序AABBBCCCDDDAA顺序12345678A11000001B01110000C00011100D0000011134通信模块串行通信是CPU与外界交换信息的一种基本方式。单片机应用与工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发往主机进行处理,以降低通信成本,提高通信可靠性。RS232C采用的是EIA电平,在TXD和RXD数据线上,逻辑1(MARK)315V;逻辑0(SPACE)315V。很明显,RS232C的EIA标准是以正负电压来表示逻辑状态的,与TTL以高低电平表示逻辑状态的规定不同,因此,为了能够使主从单片机通过RS232C串行口通信,并延长通信距离,必须在EIA电平与TTL电平之间进行电平变换。美国MAXIM公司的MAX232芯片可完成TTL和EIA之间的双向电平转换,MAX232内部有电压倍增电路和转换电路,并可同时进行两路双向转化,功能强大,且只需要单一5V电源,因此获得广泛应用。转换后的信号通过RS232的D型9针连接口输出,最少仅需3根通信线即可进行串行通信,也可购买双绞通讯线进行两机直连,使连接更加方便,并增加通信可靠性。图34MAX232通信模块电路图35显示模块每个八位数码管需占用8根数据线,为了节约系统资源,本设计选用段选位选的方式控制一个四位八段共阳极数码管。共阳极数码管的1、2、3、4位选信号由P10P13信号经PNP三极管放大反相后送至位选输入口。因单片机P0口内部无上拉电阻,故将P0口经过10K的排阻上拉至VCC,P0作为段选数据的输入,送至数码管的段选接口,通过位选选择显示位,通过段选选择显示的数据,可以完成步进电机当前位置的显示。采用动态显示时需要注意以下3点由于每一位八段数码管的点亮时间很短,扫描过程中要确保每一位数码管得到足够的工作电流,从而确保亮度,故位选信号经三极管放大并反相后送入数码管。在切换下一位的八段数码管时,应把上一位熄灭,再将下一位显示数据送出,防止显示数据出现残影。点亮一遍所有数码管的时间应尽量小于01S,以保证足够短的时间,使眼睛产生各位数码管同时显示的错觉。图35四位八段数码管显示模块电路图4系统软件设计根据实际需要和设计要求,系统软件部分设计主要可分为主机键盘扫描程序,显示程序,发送程序,接收程序。从机接收程序,步进电机控制程序,发送程序。41主机程序设计主机,作为人机交互的设备,承担着接收命令,将命令发送给从机,接收从机返回的数据,显示数据,任务繁重。为了确保数码管显示的连续性,主机上电初始化后循环调用显示子程序和键盘扫描程序,一旦检测到有键被按下,即进行判断与存储键值,并将此值发送至从机,随后返回主程序,重复显示与检测键盘。接收程序选择中断的形式进行,一旦有数据被接收,即触发串行通信中断,将从机发来的数据进行处理,将8位二进制数转化为有符号十进制数据,并刷新显示内存,在下一个显示周期中即被显示出来,此法仅需处理一次数据,不需要在每次显示时进行运算,加快了处理速度,节约了系统资源。主机运行流程图如下所示有键按下开始上电初始化显示子程序N处理并发送Y中断发送中断接收中断Y清中断处理数据中断返回YNN图41主机程序流程图411显示子程序因为采用扫描显示,主程序需要逐个将显示内存的数据输送至P0口,配合P1的位选,进行扫描显示MOVDPTR,TABLE将DPTR指向显示表首地址DISPLAY显示子程序JB0D5H,TWO如果0D5H为1,即正数,则直接显示第二位,不显示符号ONE第一位(符号位)MOVA,0AH将A赋值为0AF,即指向表中的负号位MOVCA,ADPTR变址寻址,将显示数据存入AMOVP0,A将显示数据送至P0口CLR90H90H清零,即第一位送低电平,经PNP三极管反相后,即选中第一位数码管CALLDELAY调用延时,保留显示1MSSETB90H90H置1,关闭显示MOVP0,0FFHP0口送0FFH,保证数码管全灭TWOMOVA,21H将21H中的数据存入ACC,即百位MOVCA,ADPTR变址寻址,将显示数据存入AMOVP0,A将显示数据送至P0口CLR91H91H清零,即第二位送低电平,经PNP三极管反相后,即选中第二位数码管CALLDELAY调用延时,保留显示1MSSETB91H91H置1,关闭显示MOVP0,0FFHP0口送0FFH,保证数码管全灭THREEMOVA,22H将22H中的数据存入ACC,即十位MOVCA,ADPTR变址寻址,将显示数据存入AMOVP0,A将显示数据送至P0口CLR92H92H清零,即第三位送低电平,经PNP三极管反相后,即选中第三位数码管CALLDELAY调用延时,保留显示1MSSETB92H92H置1,关闭显示MOVP0,0FFHP0口送0FFH,保证数码管全灭FOURMOVA,23H将23H中的数据存入ACC,即个位MOVCA,ADPTR变址寻址,将显示数据存入AMOVP0,A将显示数据送至P0口CLR93H93H清零,即第三位送低电平,经PNP三极管反相后,即选中第三位数码管CALLDELAY调用延时,保留显示1MSSETB93H93H置1,关闭显示MOVP0,0FFHP0口送0FFH,保证数码管全灭RETDELAYMOVR6,212M晶振延时1MSD1MOVR7,248DJNZR7,DJNZR6,D1RETTABLE数据表分别为共阳极数码管显示09和负号的数据DB0C0H,0F9H,0A4H,0B0H,099HDB092H,082H,0F8H,080H,090H,0BFH412按键扫描处理子程序单片机读取按键并与上一个发送的键值比对,如果一致则不发送,保证了按一次键仅发送一次,避免了重复发送造成单片机进入死循环。CAL转化并判断是否有键被按下,如果有,则发送数据,如果没有继续初始化MOVA,P3读取按键ANLA,0FCH保存高六位数据COMPARECJNEA,30H,SAVE与上一个按键比对,如果不一致,跳转至SAVE子程序SJMPSTART如果与上一个按键一致,返回STARTSAVEMOV30H,A将A中的数据存入30HCJNEA,0FCH,SEND如果A中数据不为0FCH,即有键被按下,跳转至发送子程序SJMPSTART如果A中数据为0FCH,即无键被按下,返回主程序SEND发送数据没有通信协议CALLSEND_DELAY调用延时子程序MOVA,30H将当前键值送入AMOVSBUF,A将当前键值送入SBUF,单片机自动发送JMPSTART返回至主程序SEND_DELAY12M晶振时延时01MSMOVR5,19HDL1NOPNOPDJNZR5,DL1RET413中断与计算子程序当单片机收到串行口中断时,自动寻找中断程序入口地址0023H,随后跳转至ANALY子程序,进行中断的判断,如果是发送中断,则清TI并返回到断点,如果是接收中断,则响应中断,清RI并将SBUF中的数据保存,同时将8位二进制数据转换为3位有符号十进制数据,刷新显示内存,刷新后的数据将在下一个显示周期被显示出来。ORG0023H串行口中断程序入口跳转JMPANALYANALY中断分析程序JBTI,CLRTI如果是发送中断,跳转至CLRTIJBRI,RECEIVE如果是接收中断,跳至RECEIVERETI中断返回CLRTICLRTI发送中断,清TIJMPANALY返回中断分析程序RECEIVECLRRI接收中断,清RI,处理中断请求MOVA,SBUF将SBUF中的数据读取至ACCMOV20H,A将返回的当前位置存至20HCPLA将A中的值取反,在八位LED上显示MOVP2,A将取反后的当前位置值显示在八位LED上JB07H,POS若当前位置首位为1,即正数,跳至POSSJMPNEG否则当前位置首位为0,即负数,跳至NEGPOSSETB0D5H将标志位0D5H置1,表明数据为正数CALLCALCULATION调用计算子程序JMPANALY跳回中断分析程序NEGCLR0D5H将标志位0D5H清0,表明数据为负数MOVA,20H将当前位置值放入ACLRCY清CY,为计算减法做准备SUBBA,1当前位置减1JBCY,NEG_OVER判断是否溢出,如果溢出,说明当前位置为下限,即128CPLA如果未溢出,说明数据正常,对A取反,得到其绝对值MOV20H,A将当前位置的绝对值存入20H,符号位在0D5HCALLCALCULATION调用计算子程序,将8位二进制数转化为3位二进制数JMPANALY跳回中断分析程序NEG_OVER当前位置1溢出,说明为00H,即128,将128分别放入对应的显示内存MOV21H,1MOV22H,2MOV23H,8JMPANALYCALCULATION计算子程序,将8位二进制转化为3位十进制MOVA,20H将当前位置放入ACCANLA,7FH去除符号位,准备进行运算MOV20H,A存回20HMOVA,100将100放入B中,作为除数MOVB,AMOVA,20H将20H放入A中,作为被除数DIVAB进行除法运算MOV21H,A将商放入21H即百位MOVA,B将余数放入22H暂时存储,准备下次运算MOV22H,AMOVA,10将10放入B中,作为除数MOVB,AMOVA,22H将上次运算的商放入ACC,作为被除数DIVAB进行除法运算MOV22H,A将商放入22H即十位MOVA,BMOV23H,A将余数放入23H即个位RET42从机程序设计从机远离主机,双单片机通过串行通信方式进行通信,以提高通信可靠性,降低通信成本。因此从机需要通过串行口获取指令,控制步进电机,并将当前位置实时传递至主机。从机上电初始化后重复检测是否有指令被送入内存,如果有,则通过调用相关子程序控制步进电机运动,每运行一步都会将当前位置送回主机。从机还提供限位保护,当步进电机到达极限位置时,自动停止运行,此时仅接收STOP和RESET指令,确保机械设备的安全,并且可以响应RESET指令,当收到RESET指令时,先判断当前位置正负值,同时自动控制步进电机回到机械零点,随后自动停止。为了确保从机的实时响应性,从机选择中断接收方式,实时更新主机送来的指令。开始上电初始化中断发送中断接收中断清中断处理数据中断返回图41从机程序流程图421判断指令子程序从机上电初始化后,重复判断当前状态与目标状态值,一旦不一致,就判断该如何控制使得步进电机按照目标状态运行。控制指令包括六种,停止,正转,反转,单步正转,单步反转,复位。通过判断每位的状态,决定如何转动。STARTMOVA,21H21H存放当前状态值CJNEA,20H,POS_OR_NEG20H存放目标状态值,判断当前状态与目标状态,如不等,则判断正反转SJMPSTART有数据接收,自动跳转至中断,如果没有,重复判断状态值并等待。POS_OR_NEG21H存放当前状态值,20H存放目标状态值JNB02H,STOP如果32被按下,跳至STOPJNB07H,RESET如果37被按下,跳至RESETJB0D5H,STOP如果0D5H标志位被置1,说明到达限位值,强制停止JNB03H,POS如果33被按下,正转JNB04H,NEG如果34被按下,反转JNB05H,POS_ONE如果35被按下,POS_ONENYNYYN判断当前/目标值转动发送JNB06H,NEG_ONE如果36被按下,NEG_ONEJNB07H,RESET如果37被按下,跳至RESETSJMPSTART如果检测不到,返回STARTSTOPMOV20H,0FFH停止,将当前值和目标值置FFHMOV21H,0FFHSJMPSTARTPOS_ONEMOV20H,0FFH将当前值和目标值置FFHMOV21H,0FFHPOS正转(一步)CALLPOSITIVE调用正转一步子程序CALLSEND调用发送子程序SJMPSTART返回主程序NEG_ONEMOV20H,0FFH将当前值和目标值置FFHMOV21H,0FFHNEGCALLNEGATIVE调用反转一步子程序CALLSEND调用发送子程序SJMPSTART返回主程序RESETCLR0D5HMOVA,R0CJNER0,80H,JUDGE判断当前ACC的值,如不为7FH,转至JUDGE判断正负MOV20H,0FFH如当前ACC为0,将目标状态值至FF,即复位完成SJMPSTART返回主程序JUDGEJB0E7H,NEG若ACC首位为1,即ACC为正,即当前位置值为正,反走JNB0E7H,POS若ACC首位为0,即ACC为负,即当前位置值为负,正走SJMPSTART返回主程序422中断响应子程序为了保证通信数据的迅速处理,从机采用串行口中断通信模式,工作模式1,波特率固定11位异步通信模式,当有指令送来时,从机响应串行口中断,将指令存入目标状态值,在下一次的主程序比较中判断指令。ANALYJBTI,CLRTI如果是发送中断,跳转至CLRTIJBRI,RECEIVE如果是接收中断,跳转至RECEIVE执行RETICLRTICLRTI发送中断,清标志并返回SJMPANALYRECEIVECLRRI接收中断,清中断MOVA,SBUF读取数据ORLA,03H屏蔽后两位(TXD,RXD)MOV20H,A20H存放目标状态值MOVP1,20H数据送P1口输出SJMPANALY接受完毕,返回423步进电机控制子程序指令经过判断后,根据需求调用正转、反转、单步正转、单步反转子程序。每执行一步,单片机就会将R0(即当前位置值)通过串行口送至主机,主机接受后即显示在数码管上,同时每执行一步之前,单片机都会判断本次动作是否会到达限位值,如果会达到限位值,则自动停止本次动作,将标志位置1,表明已经到达限位值。POSITIVE正走子程序CLRC清CY,为加法做准备MOVA,R0当前位置放入ACC,判断本次运动是否会超过限位值INCR4R4数据表增一INCR0R0当前位置值增一ADDA,1HA增一,判断是否有进位标志JBCY,POS_OVER如果有进位标志,说明本次动作会导致溢出,跳至POS_OVERCJNER4,08H,POS_MOVE如果本次动作不会溢出,判断R4是否超过励磁表上限MOVR4,00H如果R4超过上限,则将R4指向励磁表首位,进行下一个循环POS_MOVEMOVA,R4将R4的值放入A,准备间址寻址MOVCA,ADPTR进行取表操作,获得励磁数据MOVR3,A将励磁数据暂存R3MOVA,P3读P3口数据,避免修改TXD,RXDANLA,3H保留低两位的值ORLA,R3将励磁数据加入MOVP3,A输出励磁数据,同时不改变通讯口的电平CLRTI清TI,准备发送数据MOVSBUF,R0将当前位置放入SBUF,发送至主机CALLDELAY调用延时,避免转动频率过快,造成电机失步RETPOS_OVER正转溢出处理MOVR0,0FFH将当前位置为0FFH即127DECR4R4减一,回到上个励磁数据SETB0D5H标志位置1,表明到达限位值,不得再继续动作SJMPSTOP跳至STOP,停止指令NEGATIVE反走子程序CLRC清CY,为减法做准备MOVA,R0当前位置放入ACC,判断本次运动是否会超过限位值DECR4R4数据表减一DECR0R0当前位置值减一SUBBA,1HA减一,判断是否有借位标志JBCY,NEG_OVER如果有借位标志,说明本次动作会导致溢出,跳至NEG_OVERCJNER4,0FFH,NEG_MOVE如果本次动作不会溢出,判断R4是否超过励磁表下限MOVR4,07H如果R4超过下限,则将R4指向励磁表末位,进行下一个循环NEG_MOVEMOVA,R4将R4的值放入A,准备间址寻址MOVCA,ADPTR进行取表操作,获得励磁数据MOVR3,A将励磁数据暂存R3MOVA,P3读P3口数据,避免修改TXD,RXDANLA,3H保留低两位的值ORLA,R3将励磁数据加入MOVP3,A输出励磁数据,同时不改变通讯口的电平CLRTI清TI,准备发送数据MOVSBUF,R0将当前位置放入SBUF,发送至主机CALLDELAY调用延时,避免转动频率过快,造成电机失步RETNEG_OVERMOVR0,00H反转溢出处理INCR4R4增一,回到上个励磁数据SETB0D5H标志位置1,表明到达限位值,不得再继续动作SJMPSTOP跳至STOP,停止指令DELAY延时子程序12M时延时65MS,即步进电机频率约为15HZMOVR6,1D1MOVR5,80HD2MOVR7,0HD3DJNZR7,D3DJNZR5,D2DJNZR6,D1RETRUNTABLE励磁数据表DB030H,020H,060H,040HDB0C0H,080H,090H,010H5PROTEUS仿真将以上设计的各模块在PROTEUS中连接,并进行调试,随后测试系统性能。图51系统初始状态图52NEG_ONE单步运行状态图53POS_ONE单步运行状态图54POS运行至正向限位状态图55NEG运行至反向限位状态图56RESET运行至机械零点状态经过测试,通过串行口通信的远程步进电机控制系统达到了预期目标,经过些许的调试,系统性能良好,各种保护措施有效,圆满完成了此次设计的任务。6总结通过此次课程设计,使我更加扎实的掌握了有关单片机及汇编语言方面的知识,以及PROTEUS软件的使用和KEIL软件的使用。在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。通过本次课设,我学会了遇到问题多查多问,综合运用所学的一些基本理论、基本知识、基本技能,培养自己独立分析和解决实际问题的能力,通过试验推断结论;培养严肃、认真、科学的工作作风;注重团队合作精神,学会虚心听取他人的意见。参考文献1李群芳等单片微型计算机与接口技术(第4版)北京电子工业出版社20122杨欣电子设计从零开始(第2版)北京清华大学出版社20103杨欣51单片机应用丛零开始北京清华大学出版社20084杨欣51单片机应用实例详解北京清华大学出版社20105高吉祥数字系统与自动控制系统设计北京电子工业出版社2007附录1主机源程序代码ORG0000H上电初始化JMPONCEORG0023H串行口中断程序入口跳转JMPANALYORG0030HONCEMOVDPTR,TABLE将DPTR指向显示表首地址SETBEA开总中断SETBES开串行口中断MOVSCON,90H设置为模式2,允许接收数据MOVP1,0FFH位选P1口清零,全不显示MOV20H,80H当前位置值设置为有符号0SETB0D5H0D5H置1,为0MOV21H,00HMOV22H,00HMOV23H,00HMOVP2,7FHP2口为有字符二进制数,初值设置为0STARTCALLDISPLAY调用显示子程序CAL转化并判断是否有键被按下,如果有,则发送数据,如果没有继续初始化MOVA,P3读取按键ANLA,0FCH保存高六位数据COMPARECJNEA,30H,SAVE与上一个按键比对,如果不一致,跳转至SAVE子程序SJMPSTART如果与上一个按键一致,返回STARTSAVEMOV30H,A将A中的数据存入30HCJNEA,0FCH,SEND如果A中数据不为0FCH,即有键被按下,跳转至发送子程序SJMPSTART如果A中数据为0FCH,即无键被按下,返回主程序SEND发送数据没有通信协议CALLSEND_DELAY调用延时子程序MOVA,30H将当前键值送入AMOVSBUF,A将当前键值送入SBUF,单片机自动发送JMPSTART返回至主程序SEND_DELAY12M晶振时延时01MSMOVR5,19HDL1NOPNOPDJNZR5,DL1RETANALY中断分析程序JBTI,CLRTI如果是发送中断,跳转至CLRTIJBRI,RECEIVE如果是接收中断,跳至RECEIVERETI中断返回CLRTICLRTI发送中断,清TIJMPANALY返回中断分析程序RECEIVECLRRI接收中断,清RI,处理中断请求MOVA,SBUF将SBUF中的数据读取至ACCMOV20H,A将返回的当前位置存至20HCPLA将A中的值取反,在八位LED上显示MOVP2,A将取反后的当前位置值显示在八位LED上JB07H,POS若当前位置首位为1,即正数,跳至POSSJMPNEG否则当前位置首位为0,即负数,跳至NEGPOSSETB0D5H将标志位0D5H置1,表明数据为正数CALLCALCULATION调用计算子程序JMPANALY跳回中断分析程序NEGCLR0D5H将标志位0D5H清0,表明数据为负数MOVA,20H将当前位置值放入ACLRCY清CY,为计算减法做准备SUBBA,1当前位置减1JBCY,NEG_OVER判断是否溢出,如果溢出,说明当前位置为下限,即128CPLA如果未溢出,说明数据正常,对A取反得到其绝对值MOV20H,A将当前位置的绝对值存入20H,符号位在0D5HCALLCALCULATION调用计算子程序,将8位二进制数转化为3位二进制数JMPANALY跳回中断分析程序NEG_OVER当前位置1溢出,说明为00H,即128,将128分别放入对应的显示内存MOV21H,1MOV22H,2MOV23H,8JMPANALYCALCULATION计算子程序,将8位二进制转化为3位十进制MOVA,20H将当前位置放入ACCANLA,7FH去除符号位,准备进行运算MOV20H,A存回20HMOVA,100将100放入B中,作为除数MOVB,AMOVA,20H将20H放入A中,作为被除数DIVAB进行除法运算MOV21H,A将商放入21H即百位MOVA,B将余数放入22H暂时存储,准备下次运算MOV22H,AMOVA,10将10放入B中,作为除数MOVB,AMOVA,22H将上次运算的商放入ACC,作为被除数DIVAB进行除法运算MOV22H,A将商放入22H即十位MOVA,BMOV23H,A将余数放入23H即个位RETDISPLAY显示子程序JB0D5H,TWO如果0D5H为1,即正数,则直接显示第二位,不显示符号ONE第一位(符号位)MOVA,0AH将A赋值为0AF,即指向表中的负号位MOVCA,ADPTR变址寻址,将显示数据存入AMOVP0,A将显示数据送至P0口CLR90H90H清零,即第一位送低电平,经PNP三极管反相后,即选中第一位数码管CALLDELAY调用延时,保留显示1MSSETB90H90H置1,关闭显示MOVP0,0FFHP0口送0FFH,保证数码管全灭TWOMOVA,21H将21H中的数据存入ACC,即百位MOVCA,ADPTR变址寻址,将显示数据存入AMOVP0,A将显示数据送至P0口CLR91H91H清零,即第二位送低电平,经PNP三极管反相后,即选中第二位数码管CALLDELAY调用延时,保留显示1MSSETB91H91H置1,关闭显示MOVP0,0FFHP0口送0FFH,保证数码管全灭THREEMOVA,22H将22H中的数据存入ACC,即十位MOVCA,ADPTR变址寻址,将显示数据存入AMOVP0,A将显示数据送至P0口CLR92H92H清零,即第三位送低电平,经PNP三极管反相后,即选中第三位数码管CALLDELAY调用延时,保留显示1MSSETB92H92H置1,关闭显示MOVP0,0FFHP0口送0FFH,保证数码管全灭FOURMOVA,23H将23H中的数据存入ACC,即个位MOVCA,ADPTR变址寻址,将显示数据存入AMOVP0,A将显示数据送至P0口CLR93H93H清零,即第三位送低电平,经PNP三极管反相后,即选中第三位数码管CALLDELAY调用延时,保留显示1MSSETB93H93H置1,关闭显示MOVP0,0FFHP0口送0FFH,保证数码管全灭RETDELAYMOVR6,212M晶振延时1MSD1MOVR7,248DJNZR7,DJNZR6,D1RETTABLE数据表分别为共阳极数码管显示09和负号的数据DB0C0H,0F9H,0A4H,0B0H,099HDB092H,082H,0F8H,080H,090H,0BFHEND附录2从机源程序代码ORG0000HSJMPONCEORG0023H串口中断入口地址SJMPANALYORG0030HONCE复位初始化SETBEA开中断SETBESMOVSCON,90H初始化串行口MOVR4,0HR4(励磁表位置)初值MOVR0,80HMOVA,P3读P3口(避免修改TXD,RXD造成错误)ANLA,03H保留后两位SWAPA高低字节交换ORLA,03H将励磁初值加入SWAPA高低字节交换,TXD,RXD不变,同时励磁输出MOVP3,A输出至P3口MOVDPTR,RUNTABLE将DPTR指向励磁数据表首地址MOV20H,0FFHMOV21H,0FFHSTARTMOVA,21H21H存放当前状态值CJNEA,20H,POS_OR_NEG20H存放目标状态值,判断当前状态与目标状态,如不等,则判断正反转SJMPSTART有数据接收,自动跳转至中断,如果没有,重复判断状态值并等待。ANALYJBTI,CLRTI如果是发送中断,跳转至CLRTIJBRI,RECEIVE如果是接收中断,跳转至RECEIVE执行RETICLRTICLRTI发送中断,清标志并返回SJMPANALYRECEIVECLRRI接收中断,清中断MOVA,SBUF读取数据ORLA,03H屏蔽后两位(TXD,RXD)MOV20H,A20H存放目标状态值MOVP1,20H数据送P1口输出SJMPANALY接受完毕,返回POS_OR_NEG21H存放当前状态值,20H存放目标状态值JNB02H,STOP如果32被按下,跳至STOPJNB07H,RESET如果37被按下,跳至RESETJB0D5H,STOP如果0D5H标志位被置1,说明到达限位值,强制停止JNB03H,POS如果33被按下,正转JNB04H,NEG如果34被按下,反转JNB05H,POS_ONE如果35被按下,POS_ONEJNB06H,NEG_ONE如果36被按下,NEG_ONEJNB07H,RESET如果37被按下,跳至RESETSJMPSTART如果检测不到,返回STAR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论