




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于单片机的步进电机控制系统设计与研究摘要:随着我国工业的快速发展,步进电机在很多领域受到了广泛的应用,对步进电机的控制要求也越来越高;步进电机作为一个动力元件,其控制器的好坏,直接影响到步进电机运行的稳定性,进而影响到整个系统。本文研究一种基于STC89C52RC单片机和L298N驱动芯片的步进电机控制系统的设计,控制系统可以控制步进电机以给定速度进行任意合理的角度的旋转,有按键输入模块和1602液晶屏显示模块进行人机交互,同时控制系统还可以选择通过串口和基于VB语言的上位机软件进行通信,进而控制步进电机的运动。经调试,该系统可以实现预期的控制目标,驱动器也可以和上位机软件通信来控制步进电机,具有一定的实用价值。关键字:单片机,步进电机,串口通信,VB语言,L298NIDesignandresearchofSteppingmotorcontrolsystembasedonMCUAbstract:Withtherapiddevelopmentofindustryinourcountry,Steppingmotoriswidelyusedinmanyareas,thecontrolrequirementsoftheSteppingmotorisbec-ominghighandhigher.Steppingmotorasapowerelement,itscontrollerisgoodorbad,directlyaffectthestabilityofthesteppingmotor,andthenaffectthewholesystem.Inthisthesis,westudyacontrolsystemofsteppingmotorwhichbasedontheSTC89C52RCMCUandL298Ndriverchip,thecontrolsystemcancontrolasteppingmotoratagivenspeedforanyreasonableangleofrotation,keyinputmoduleand1602LCDdisplaymoduleforhuman-computercommunication,atthesametimecontrolsystemcanalsocommunicatewithPCsoftwarebasedonVBla-nguagebyaserialport,itcanalsocontroltheSteppingmotortomove.Afterde-bugging,thesystemcanachievetheexpectedtarget,andthecontrollercancommu-nicatewiththePCsoftwaretocontroltheSteppingmotor,andithassomepractic-alvalue.Keyword:MCU,Steppingmotor,Serialcommunication,VBlanguage,L298NII目录1绪论.11.1步进电机及其发展.11.2步进电机在我国的应用及前景.11.3本设计要研究的内容.22总体方案设计.32.1步进电机控制原理.32.2步进电机的驱动.32.2.1基于电子电路的控制.42.2.2基于PLC的控制.42.2.3基于单片机的控制.52.3硬件方案的提出与选型.62.3.1单片机的选型.62.3.2显示模块的选型.72.3.3驱动芯片的选择.83硬件电路设计.103.1STC89C52RC单片机及外围电路设计.103.1.1STC89C52RC单片机管脚介绍.103.1.2STC89C52RC单片机最小系统.123.2显示模块设计.133.3电机驱动电路设计.143.4电源稳压模块设计.154单片机软件设计.174.1KeilUV3软件使用.174.2主程序工作过程.204.3初始化程序设计.204.4步进电机控制算法设计.224.4.1步进电机的正反转.224.4.2步进电机的调速.23III4.4.3串口接收函数编写.244.5显示程序设计.254.6键盘程序设计.295上位机软件设计.335.1上位机与下位机通信协议的制定.335.2串口通信控件使用.346系统调试与结果显示.36参考文献.38致谢.3901绪论1.1步进电机及其发展步进电机是工业过程控制及仪表中主要执行元件之一1,又称阶跃电动机或脉冲电动机,步进电机在结构上和普通电机一样也是由定子和转子组成,只是它具有像齿轮一样的突起相锲合的转子和定子,只需要开环控制,不需要昂贵的速度反馈传感器和位置反馈传感器就可以对角度和速度进行开环的较高精度的控制。步进电机以结构简单、稳定性好、相对成本低廉而受到了人们的青睐。步进电机控制系统己经在国民经济、工业生产等领域有了广泛的应用2。步进电机定子本质上就是一个线圈,当线圈通电时,定子线圈便会产生一个磁场,又因为转子上有磁钢,线圈组成的定子的磁场方向与转子磁钢上的一对磁极的磁场方向会有一个夹角,步进电机转子便会转过这个夹角的度数。所以,只要按照步进电机要求的规律给电机定子通电,电机定子就会按照这个脉冲的规律轮流产生磁场,转子也就跟着磁场一步一步地转动,在供给步进电机连续的脉冲时,步进电机便会连续旋转3。步进电机在近80年的发展历史中。依据其自身结构和工作原理出现了反应式、永磁式和混合式三种不同的种类。近年来磁阻式和永磁式步进电机由于他们各自的缺点而应用的越来越少;而混合式步进电机兼有二者的优点,所以得到了更加广泛的应用,并逐步代替前两种步进电机。1.2步进电机在我国的应用及前景步进电机因为其众多突出的有点,广泛地应用在各种机电产品中。如使用在数控系统中,我国数控系统初期就是采用了结构简单、价格便宜的以单片机为数控系统核心,步进电机为执行元件的解决方案,很受我国广大中小型企业的欢迎。而且,采用步进电机作为执行元件,不仅可以应用于经济型的开环数控系统,配合先进的检测和反馈元件还可以组装成高精度的半闭环和全闭环数控,进而可以大大的提高加工精度。步进电机除了在数控系统中得到了非常广泛的应用,由于单片机近年来的快速发展,使得步进电机的控制发生了革命性的变革,控制电路简单、精度高、成本低1等优点明显的步进电机被广泛应用在许多场合中,例如打印机、存储器存取机构、卡片阅读机、通信和雷达设备、摄影系统、光电组合装置等。步进电机用途这么多,良好的控制性能对于步进电机来说也就极其重要了,对步进电机的控制系统的研究一直在进行着,步进电机早期的控制系统采用集成电路的控制回路,定型之后就不容易更改,消耗大量元器件、调试安装复杂,系统很难进行改进和升级,而基于单片机的控制系统则通过软件的算法来控制步进电机,能够更好地发挥步进电机的潜力4。1.3本设计要研究的内容通过此毕业设计,可以对以前所学各种控制工程、机电传动等课程的基础理论知识进行综合,要求在深入了解步进电机工作原理的基础上,掌握单片机控制系统的设计流程,包括驱动器和上位机软件的设计,为学生在毕业后从事机电控制系统设计工作打好基础。(1)深入了解步进电机工作原理。(2)掌握单片机控制系统设计。(3)选择一款步进电机,设计其控制系统总体方案。(4)控制系统可以控制步进电机以电机允许的任意速度进行任意合理的角度的旋转。(5)设计一款小的上位机软件,控制器要和上位机软件进行通信,用上位机软件也可以控制步进电机,控制器上要有模式选择(即上位机控制模式和控制器本地控制模式)功能。(6)设计控制器软硬件电路,最后提交实物。22总体方案设计2.1步进电机控制原理三相步进电机为结构原理见图2.1,电机的定子上有六个均布的定子线圈,每个定子线圈上有5个小齿,这样,定子上共有30个齿,相邻两齿之间夹角为12。转子是由由均布着40个齿的磁钢制成。且定子和转子齿距相同。由于定子齿数(30个)和转子齿数(40个)的比值不是整数,会有错位情况的发生,通电后便会有运动的趋势。利用电磁学原理,在三项绕组中的某相绕组通电时,相应的定子线圈产生磁场,与转子磁钢形成的磁场相互叠加,如果此时转子与定子小齿有一个夹角,没有对齐的话,在二者磁场的共同作用下,转子就会转过这个夹角,使得二者对其,也就是走了一步。1-定子2-转子3-定子绕组图2.1步进电机结构原理图本次毕业设计采用的是两相四线制的精密42步进电机,其步距角可以小至0.9度,其工作原理与3相步进电机完全一样,价格更加实惠,实物图与一角硬币对照如图2.2。2.2步进电机的驱动步进电机由于其特殊原理与构造必须加驱动电路才能工作,驱动电路将直接影响电机工作是否稳定,常用的步进电机驱动有基于电子电路的控制、基于PLC的控3制、和基于单片机的控制三种5。图2.2本毕业设计用到的步进电机实物图2.2.1基于电子电路的控制基于电子电路的步进电机控制系统中,电机需要的脉冲信号的产生和分配都需要由专门的电路实现。此种控制电路虽然电路设计简单,但是其功能依然功能强大。控制系统由三部分组成:脉冲信号的产生、分配电路和功率放大电路6。系统组成如图2.3所示。该方案大多通过大规模集成电路来实现,功能相对较单一,功能一旦实现,不容易更改,即使需要微调下控制方案,也必须需重新设计整个电路,因此灵活性不高。2.2.2基于PLC的控制PLC也叫可编程逻辑控制器,是工业自动化上常用的控制器。基于PLC的控制系统通常由3部分组成,PLC是核心控制单元,通过对其编写程序来达到让其输出4特定的脉冲;脉冲分配器,将PLC产生的脉冲按照步进电机需要的规律分配给各定子绕组对应的功率放大器件,功率放大器件负责将脉冲信号放大,使得功率满足步进电机的驱动要求。脉冲控制器功率放大驱动电路环形分配器步进电机图2.3基于电子电路控制系统一般情况下,采用PLC控制的步进电机多采用硬件的环形分配器,这样只需要使用少量的输出口就可以控制电机,也不占用PLC的定时器,PLC还可以完成很多其他的任务。若果系统成本预算很紧张,对速度要求也不是很高的情况下,可以采用PLC的梯形图软件模拟环形分配器的功能,这样虽然多占用PLC输出口和其他资源,但却节省了硬件上成本。2.2.3基于单片机的控制单片机由于价格低廉、使用简单、功能强大、型号众多而受到越来越广泛地应用,采用单片机来控制步进电机。可以达到对步进电机的最佳控制。系统中采用单片机IO口直接去控制步进电机驱动芯片,用软件模拟环形脉冲分配器。由于单片机的处理功能较为强大,还可设计较为复杂的人机交互电路,按键作为输入工具,设置了步进电机正反转、角度、速度输入等功能,显示器及时显示正反转速度、角度等,同时还可用上位机软件控制,采用上位机模式和本地模式完成对步进电机的最佳控制。本方案有以下优点:(1)通过单片机硬件定时器0产生脉冲,用软件模拟环形分配器,软硬件结合,合理高效。(2)单片机可以在系统编程,对步进电机控制系统的升级和修改快速方便。(3)单片机的强大功能和快速的执行过程使的显示电路、输入电路。上位机通信电路等外围电路有机的组合,大大提高系统的使用舒适性。(4)5采用上位机模式和本地模式两种控制模式,适用范围更加广泛。2.3硬件方案的提出与选型2.3.1单片机的选型(1)STM32f103单片机STM32F1系列属于32位的ARM微控制器,是意法半导体公司出品的,其内核是Cortex-M3。其工作频率可调,可以满足更多应用,最高可达72MHz,具有有单机器周期的乘法和基于硬件电路的除法运算功能,具有128K字节的Flash存储器,共12个DMA通道,有多个定时器,有AD和DA转化,有SPI,UART,USB,CAN等多个通讯接口。(2)STC89c52单片机STC89C52RC单片机是采用8051核的ISP在系统可编程芯片,其管脚分布兼容标准MCS-51,指令系统也兼容,片内含8K字节的的Flash只读存储器,可反复擦写10万次,便于系统多次升级,可在系统编程,配合PC端的STC-ISP软件即可将用户的程序代码下载进单片机内部。采用PDIP-40的双列直插封装形式实物图如图2.4所示。便于使用万能板手工制作。图2.4STC89C52RC单片机实物图STM32f103单片机功能及其强大,使用灵活,但因其价格比较高,步进电机控6制系统算法的运算量也不多,没必要用32位的处理器,而且STM32f103单片机功能强大意味着使用复杂,故不使用此单片机,STC89C52RC单片机因其使用简单,资料丰富,资源也足够步进电机控制系统使用,因而选用双列直插封装的STC89C52RC单片机。2.3.2显示模块的选型(1)3.2寸TFT彩屏TFT显示屏因显示图像色彩丰富,分辨率高,显示速度快、亮度高等优点受到了广泛地应用,常用于手机等数码产品和便携式设备中,由于其每个像素点都是有源的(即每个像素点都可单独受控),所以其显示的色彩更加逼真,又叫真彩屏,其中3.2寸TFT彩屏常用在各种嵌入式设备中。实物如图2.5所示。图2.53.2寸TFT真彩屏(2)数码管数码管也称LED数码管,早先常用的数码管都是7段数码管,后来随着人们对显示精度要求的提高,出现了7段数码管,可以多显示一个小数点,使得显示精度提高,显示内容更加丰富。数码管又分为共阴和共阳数码管,这是按照公共端的连接方式来定的。以图2.7中共阳极数码管为例,数码管的公共端阳极接到+5V电源上,数码管的阴极串联限流电阻后接到单片机IO口上,当端口输出低电平时,对应的LED变回发光,高电7平时不发光,例如给图2.6中b、c、f、g端口低电平,其他端口为高电平时,数码管b、c、f、g对应的LED发光,表示“4”,以此类推,数码管可显示从0到9的数字及从a到f的字母。图2.6数码管管脚图由于数码管的价格便宜、寿命高、使用简单、一般不会损坏,在电器特别是家电领域应用极为广泛。现在几乎所有人的家里都有数码管的影子。(3)1602液晶屏1602液晶也叫1602字符型液晶。它分为上下两排、每排16个5X7的点阵,共可显示32个字符,是一种专门用来显示符号、数字和字母等的点阵型液晶模块,其使用简单,自带有专门的字库,使用时只需要给定要显示字符的ASCII码就可以了。综上所述,3.2寸TFT彩屏高亮度、高对比度,显示效果好,色彩鲜艳,显示内容丰富,是最为理想的显示屏,但它操作复杂,指令繁多,对处理器的要求高,适合于更高端的处理器;数码管虽然结构简单,价钱便宜,显示亮度高,但是显示的内容过于单一,不太符合本设计的要求;最后选择了折中了二者优点与缺点的1602显示屏。2.3.3驱动芯片的选择(1)ULN2003芯片8ULN2003是高压大电流达林顿晶体管阵列,具有工作电压高、温度范围宽、电流增益高、带负载能力强等特点,适应于各类要求高速大功率驱动的系统7。其输入回路的电阻是2.7k。适于5v的TTL电平。驱动灌入电流达500mA。其管脚排列与功能框图如图2.7所示。图2.7ULN2003管脚排列及功能框图(2)L298N芯片L298N是SGS公司的产品,内部包含4个通道的逻辑驱动电路。内含二个H桥的高电压大电流双全桥式驱动器8,内部具有两个H桥电路,可以驱动一个两相步进电机或者两个直流电机,工作电压可达46v,电流可达2A。可以接收标准TTL逻辑电平信号,其实物图和引脚排列如图2.8所示。图2.8L298N实物图和管脚图ULN2003芯片虽然号称高电压、大电流,但最大电流也不到1A,如果采用ULN2003芯片,只能选择小功率的步进电机,而且只能用5线4相的步进电机,两相的不能用,电机的选择比较受限制,而L298N是专用的电机控制芯片,工作电流9可达2A,综合以上信息,本系统采用L298N芯片。103硬件电路设计3.1STC89C52RC单片机及外围电路设计STC89C52RC单片机是采用8051核的ISP在系统可编程芯片,其管脚分布兼容标准MCS-51,指令系统也兼容,片内含8K字节的的Flash只读存储器,可反复擦写10万次,便于系统多次升级,可在系统编程,配合PC端的STC-ISP软件即可将用户的程序代码下载进单片机内部。采用PDIP-40的双列直插封装形式实物图如图2.4所示。便于使用万能板手工制作。其内部结构框图如图3.1所示。图3.151单片机内部结构框图3.1.1STC89C52RC单片机管脚介绍因为条件有限,不太可能制作PCB板,所以本设计所选单片机为PDIP-40封装的,管脚图如图3.2所示,其管脚间距与万能版的间距是一样的,这样的话可以直接用万能板搭起来,方便制作。11图3.2STC89C52RC单片机管脚图PDIP-40封装的STC89C52RC单片机各引脚功能简要介绍如下:VCC:第40管脚,供电电压,输入5v电压;GND:第20管脚,接地,也就是接5v直流电源的负极;P0口:第32-39管脚,8位准双向I/O口。因为P0是开漏输出的,要想输出高电平,外部必须接电阻以拉高电平,P0用于外部程序数据存储器时,定义为数据/地址的低八位。P1口:第1-8管脚,内部含弱上拉的8位准双向I/O口。P2口:第21-28管脚,P2口做普通I/O口时与P1口相同。P2口还可配合P0口用于16位地址的外部程序、数据存储器进行存取,P2口和P0口共同输出地址信号,P0口分时复用输入输出数据。P3口:第10-17管脚,作为普通I/O口时P3口和P1口、P2口一样,同时P3口还有特殊的第二功能,具体如下:P3.0:RXD(串行通讯时数据输入口)第10管脚;P3.1:TXD(串行通讯时数据输出口)第11管脚;P3.2:INT0(外部中断0输入口)第12管脚;P3.3:INT1(外部中断1输入口)第13管脚;P3.4:T0(记时器0外部输入口)第14管脚;P3.5:T1(记时器1外部输入口)第15管脚;12P3.6:WR(外部数据存储器写选通端口)第16管脚;P3.7:RD(外部数据存储器读选通端口)第17管脚;RST:第9管脚,复位输入。保持RST脚符合要求的高平时间长度,单片机便会复位,本单片机为两个机器周期;ALE/PROG:第30管脚,扩展外部存储器时,用于锁存地址的低位字节。在平时,它可以给其它器件提供时钟脉冲。PSEN:第29管脚,当访问外部存储器时,用于外部程序存储器的选通信号。EA/VPP:传统的51单片机用于选择访问ROM的方式,是内部的还是外部的,现在单片机一型号众多,一般不需要扩展外部存储器。XTAL1:反向振荡放大器的输入端,常接外部晶体振荡器的一端,第18管脚。XTAL2:反向振荡放大器的输出端,常接外部晶体振荡器的另一端,第19管脚。3.1.2STC89C52RC单片机最小系统单片机是作为步进电机控制系统微处理器的首选,其结合简单的几个元器件即可构成单片机最小系统。本系统用到的单片机最小系统电路如图3.3所示。图3.3STC89C52RC单片机最小系统电路复位电路:本文选择5种复位方式中的外部RST引脚复位进行设计,复位电路由一个10uf电容和一个10k电阻组成。13时钟电路:STC89C52RC单片机的系统时钟主要有两个时钟源:内部R/C振荡时钟和外部晶体时钟。半导体器件特性,随着温度的变化,内部R/C振荡器的频率会有一些漂移,内部R/C振荡器只适用于对时钟频率要求不高的场合。因此我们选用外接11.0592M的晶振提供系统时钟频率。一般STC单片机出厂标准配置是使用外部时钟。上拉电阻电路:因为单片机的P0口为一个8位漏级开路双向I/O口。所以不能输出高电平,要想正常的输出高低电平来驱动显示屏,需要外接上拉电阻,本设计中采用的是10K的排阻。3.2显示模块设计1602液晶屏因其显示外围电路简单,操作容易,显示内容相对丰富等优点被越来越多的应用到单片机相关的系统中。本设计采用的1602字符型液晶显示器实物如图3.4所示。图3.41602液晶实物图1602LCD采用标准的16脚接口,间距2.54mm,各引脚接口说明下:第1脚:VSS,为电源地管脚,通常接5V直流电源负极。第2脚:VDD,接5V正电源。第3脚:VL,液晶显示器显示内容对比度调整管脚,对其输入不同的电压,其对比度不同。第4脚:RS,为寄存器选择管脚,接单片机IO口,通过程序控制。14第5脚:R/W,为读写信号线,一般使用不用读(为1时),为0时进行写操作,接单片机IO口,通过程序控制。第6脚:E,为使能端,当外接的IO口由1变为0时,模块开始按照刚输入的指令执行。第714脚:D0D7为8位双向数据线,写入和读取数据时用。第15脚:背光源正极。第16脚:背光源负极9。根据以上介绍,设计其与单片机的接口电路如图3.5所示。图3.51602液晶屏与单片机的接口电路3.3电机驱动电路设计L298N因其体积小,功能多,允许电流大,具有过流保护而受到广泛的应用,其实物图和管脚图如图2.9所示。管脚定义如下:第1、15脚:A相和B相的电流检测脚,可以直接接地。15第2、3、13、14脚:分别为A相的输出1、2和B相的输出1、2管脚,本电路中分别接步进电机的两相线圈。第4脚:电机电源脚,接12V电源正极。第5、7、10、12脚:与4个输出分别对应的4个输入管脚,接单片机的IO口。第6、11脚:A相和B相的使能端,通入高电平使能输出,接IO单片机口。第8脚:GND管脚,电机电源和5V电源的公共地,接两个电源的负极。第9脚:VSS管脚,内部逻辑电路的电源管脚,接5V电源。依据管脚定义,设计出步进电机驱动电路如图3.6所示。图3.6步进电机驱动电路163.4电源稳压模块设计一般情况下,单片机系统对电源电压的变比抵抗力不强,不稳定的电源电压将会影响器件的输出信号。某些情况下,可能会引起器件的不工作或永久损坏,所以电源的选择或处理直接影响到系统的精度和稳定性。在单片机电路设计中,最常用的电源芯片便是三端稳压集成芯片L7805,其中的05表示输出是+5V,三端指的是这种芯片只有三个引脚。用L7805来组成稳压电源所需的外围元件极少,芯片内部还有过热、过流及调整管的保护电路,使用起来可靠、方便,而且价格便宜10。L7805具有最大输出电流可达1.5A、电压精度为4%,内含过温、过流保护电路、不需外接补偿元件、采用TO-220-ST封装等优点,是最为常用的芯片。其管脚图如图3.7所示。图3.7L7805管脚图L7805CV内部框架如图3.8所示:图3.8L7805内部框架图由L7805得到的+5V稳压电源电路设计如图3.9所示:17图3.9+5V稳压电源电路图4单片机软件设计4.1KeilUV3软件使用KeiluVision3是兼容全世界各大厂家生产的51系列单片机的C语言和汇编语言都可以使用的软件开发系统,该软件可以使用关键字、语法和结构都接近于传统C语言的语法来开发单片机的项目,与汇编语言相比,C语言易学易用,最主要的是大大的提高了编程人员的工作效率、缩短了项目开发周期。他还能嵌入汇编语言,编程人员可以在需要的位置嵌入,使程序达到几乎接近于汇编语言的工作效率。KeilUV3软件启动时图标如图4.1。图4.1KeilUV3软件软件启动后,首先新建工程。点击“project”-“new”。弹出保存路径选项,如图4.2所示。18图4.2保存路径选项找到正确的路径后,填写要建立的工程名,完成后点击“保存”后,弹出所建工程的单片机型号选择选项,如图4.3。图4.3片机型号选择选项此时可以根据单片机的厂家和型号来选择合适的单片机,由于种种原因,我们国产的STC单片机没有被KEIL软件收录,所以我们只能选择和其配置相同的ATMEL公司的AT89C52单片机了,如图4.4。19图4.4选中AT89C52单片机选择好单片机后,点击“确定”后会弹出是否给工程中加入启动项,我们选择“否”即可。到此为止,新工程就建立好了,下一步开始为工程中加入文件了,首先先加入一个C文件,点击“file”-“new”后弹出一个text文件,再点击“file”-“save”弹出保存路径和文件名选项如图4.5。图4.5保存c文件选择好路径和文件名后,点击保存,需要注意的是,此处必须要保存成c文件,例如:LED.c因为下一步要用到这个c文件。20保存好后,找到projectworkspace中的target1目录下的sourcegroup1,选中后右击,出现如图4.6选项。图4.6给源文件中添加C文件选中并点击Addfiletogroupsourcegroup1选项,会弹出要加入的文件选项,选中刚刚新建的C文件即可。至此,一个完整的工程新建过程结束了,剩下的就是编写程序并调试程序了。4.2主程序工作过程基于单片机的步进电机控制系统作为一个控制单元,离不开相应硬件的支撑和对应软件的支持。从步进电机脉冲的给定、液晶屏的驱动到单片机与上位机软件的串口通信再到按键的检测等都需要相应程序驱动才会使系统整体协调运作,完成预先设计的数据的采集、处理等措施并在终端上显示出来的同时驱动步进电机以给定的正确的角度和速度行进,所以,软件和硬件缺一不可。因为上位机模式和本地模式可以说是两个完全独立的工作方式,所以主函数的设计分两部分,一个是上位机模式,一个是本地控制模式,其中上位机模式主要包括串口驱动相关寄存器的初始化、液晶屏的初始化程序、与上位机之间通过串口通信及解读并执行上位机发出的指令。本地模式主要包括定时器、外部中断相关寄存器的初始化、液晶屏的初始化、判断脉冲数是否已够及按键扫描。214.3初始化程序设计任何程序在执行前或任何传感器在使用前都应该有系列的初始化操作。初始化过程一般来说包括本函数或传感器用到的基本硬件接口的初始化、应用程序各种变量的定义和赋初值等,这些都为后续应用程序的准确执行提供了可靠的保障。本系统上位机模式初始化主要包括:初始化STC89C52单片机的寄存器及引脚配置。主要包括:EA寄存器置1,开总中断,用于使能所有中断;EX0寄存器置1,开外部中断1,用于检测启停按钮是否按下;ET0寄存器置1,开定时器1中断,用于产生步进电机所需的脉冲信号;ET1=0,关定时器1中断,因为定时器1只是给串口提供合适的脉冲信号以提供9600bps的波特率在中断中也不需要进行什么工作,所以将其关断。ES寄存器置1,开放串口中断,用以接受上位机软件给单片机发来的信息;给TMOD寄存器赋值为0x22,把定时器1和定时器0均设为工作方式2,定时器1用于给串口通信提供合适的波特率,为步进电机提供脉冲可用定时器0;给TH1和TL1都赋初值为0xfd,表示通信的波特率为9600bps;给TR1寄存器赋值为1,启动定时器1;给REN寄存器置1,允许串口接收数据;给SCON寄存器赋值为0x50,设置串口工作在方式1,串口以该方式工作,此时串口为8位异步通信接口,1位停止位,没有校验位。初始化1602液晶显示的驱动HD44780相关端口。包括PSB端口置高位选择8位并口传输信息方式,选择基本的指令集,设定地址指针的初始地址位于第一行第一个字符,指定设定游标的移动方向为向右移动1位及指定显示的移位为光标从左向右加1位移动,向液晶屏中写入上位机连接字符串“LinkingtoPC。”等,上位机模式下液晶显示如图4.7。22图4.7上位机模式下系统显示本系统本地模式初始化主要包括:初始化STC89C52单片机的寄存器及引脚配置。主要包括:EA寄存器置1,开总中断,用于使能所有中断;EX0寄存器置1,开外部中断1,用于检测启停按钮是否按下;ET0寄存器置1,开定时器1中断,用于产生步进电机所需的脉冲信号。给TMOD寄存器赋值为0x02,定时器1不设置,把定时器0设为工作方式2,提供步进电机的特定脉冲;给寄存器TH0和TL0分别赋值为205,因为是8位的工作模式,所以定时器每计数到256就进一次中断,设置初值为205就可以使定时器每计数50us就进入中断一次,以50us为单位来控制步进电机的脉冲频率。初始化1602液晶显示的驱动HD44780的相关端口。包括PSB端口置高位选择8位并口传输信息方式,选择基本的指令集,设定地址指针的初始地址位于第一行第一个字符,指定设定游标的移动方向为向右移动1位及指定显示的移位为光标从左向右加1位移动,向1602液晶屏中第一行写入速度指示字符串“speed:000r/min”,向1602液晶屏中第二行写入角度指示字符串“degrees:+0000”等,本地模式下液晶显示如图4.8。23图4.8本地模式下系统显示4.4步进电机控制算法设计4.4.1步进电机的正反转关于步进电机的原理及L298N驱动芯片的相关知识,前面章节已有介绍,这里不再赘述。我们知道,步进电机的驱动只需要给相应管脚特定的脉冲信号即可,两相四线制步进电机的工作时序图如图4.9。因为所用电机的步距角为0.9度,已经足够小,没必要细分了,由于L298N的输入驱动管脚接在P2口的低4位,只需要给P2口的低4位按顺序赋值0111,1011,1101,1110,步进电机就可以动起来了;想要方向相反时只需要逆序给定就可以了。为了方便,将这四个数写成数组的形式,charbujin=0xf7,0xfb,0xfd,0xfe;这样,每次给P2口按或正或反的顺序赋数组元素即可实现正反转。24图4.9两相四线制步进电机的工作时序图4.4.2步进电机的调速依据步进电机原理,可以用STC89C52RC单片机的定时器来输出不同频率的脉冲,进而调节步进电机的速度,将定时器0设置为工作方式2(8位自动重装载),给TH0和TL0初值都为205,即在12M晶振条件下每50us进中断一次,然后在中断里面再用一个变量计数,控制该变量,即可控制脉冲的频率,也就是步进电机的速度。具体程序如下:voidtimer0()interrupt1/50us一次中断20000次/秒timer0_i+;/每进一次中断都让timer0_i加1if(timer0_i=maichong_j)/maichong_j为计算速度时得到的数据sum+;/给sum加1yiguomaichong+;/给总脉冲数加1if(sum=4)/如果sum值为4这给sum值清零sum=0;if(zhengzhuanflag=1)/如果为反转,则按照相反的顺序给脉冲P2=bujin3-sum;/将反转的数据赋给驱动芯片管脚else/正传的话,直接给脉冲P2=bujinsum;/将正转的数据赋给驱动芯片管脚25timer0_i=0;/清零方便下一次进入4.4.3串口接收函数编写上位机模式下,VB语言的上位机软件通过PL2303usb转串口线与单片机的串口进行数据交换,所以单片机必须正确接收并处理相关数据,最后编写的串口接收函数如下:voiduart()interrupt4/串口接收中断,上位机模式下使用/数据格式:su/v123g1234eif(RI)/检测是否有数据到来1234datedata_i=SBUF;/将数据传送给data数组if(date0=s)/数据起始位为“s”data_i+;/检测到起始位说明数据正确可以继续接受if(datedata_i-1=e)/数据结束标志位为“e”riflag=data_i;/将接收到的数据个数赋值给riflagREN=0;/禁止串口接收数据,方便处理data_i=0;/将接受数据个数清零,以便下一次接收RI=0;/清除接收标志,为下一次接收做准备else/如果不是接收中断,那就是发送中断TI=0;/清除发送中断标志位264.5显示程序设计1602液晶屏的特点及使用方法前面已经介绍了,这里不再重复了,读写操作时序如图4.10所示:图4.10读操作时序依据1602液晶屏读操作时序图,可知读取数据时首先RS、RW管脚电平变化,然后E管脚由低电平变成高电平,延时一会儿后就可以读取管脚数据了,读完后把E管脚拉低,最后是RS和RW管脚相应的电平变化,所以可以确定读取数据函数如下:uintReadData(void)uinttemp;/定义一个无符号的整型数据InitP0(1);/给数据口赋值均为1SetRS(1);/给RS管脚赋值1SetRW(1);/给RW管脚赋值1SetE(0);/给E管脚赋值0SetE(1);/给E管脚赋值1ShortDelay(1);/短暂延时1ustemp=PinData;/把当前管脚的数据传给tempShortDelay(10);/短暂延时10us27SetE(0);/给E管脚赋值0SetRW(0);/给RW管脚赋值0SetRS(0);/给RS管脚赋值0return(temp);/将temp值返回不过在步进电机控制系统中,用不到读取数据的功能,因为所有显示的数据都是单片机给的,只需要判断下当前液晶屏是否繁忙,能否接收数据就可以了,再者,51单片机刷新频率不高,所以有时候可以省去数据读取的步骤。1602液晶屏写数据时序图如图4.11。可知给1602写入数据时首先RS、RW管脚电平变化,然后就可以给P0口写入数据了,写完数据后马上E管脚由低电平变成高电平,延时一会儿写入完成后把E管脚拉低,最后是RS和RW管脚相应的电平变化,所以可以确定写入数据函数如下:voidWriteData(uintdata1)/写数据到RAM函数InitP0(0);/初始化P0口均为0SetRS(1);/给RS管脚赋值1SetRW(0);/给RW管脚赋值0SetE(0);/给E管脚赋值0PinData=data1;/把要显示的数据赋给数据口SetE(1);/给E管脚赋值1ShortDelay(10);/延时10usSetE(0);/给E管脚赋值0SetRW(1);/给RW管脚赋值1SetRS(0);/给RS管脚赋值028图4.11写操作时序由1602液晶屏数据手册可知,给液晶屏写入数据和命令时RS管脚状态是不同的,结合写操作时序图,可知写指令到液晶屏的函数如下:voidWriteInstruc(uintInstruc)/写指令函数while(StatusCheck();/检测1602液晶屏是否繁忙InitP0(0);/初始化P0口均为0SetRS(0);/给RS管脚赋值0SetRW(0);/给RW管脚赋值0SetE(0);/给E管脚赋值0PinData=Instruc;/把要显示的指令赋给数据口SetE(1);/给E管脚赋值1ShortDelay(10);/延时10usSetE(0);/给E管脚赋值0SetRW(1);/给RW管脚赋值1SetRS(1);/给RS管脚赋值1有了最基础、最低层的读写函数后,就可以设计显示函数了,显示函数设计流程图如图4.12所示。29图4.12显示函数设计流程图依据流程图和1602液晶屏的数据手册可得如下显示函数:/在指定位置显示字符函数/x为行号,y为列号,/data为显示字符的码字数据voidDispCharacter(uintx,uinty,uintdata1)uinttemp;while(StatusCheck();/若LCD控制器忙,则等待temp=y/将显示的行列号转换为1602地址号xif(x)temp|=0x40;SetDDRAM_Add(temp);/设置显示位置WriteData(data1);/显示需要的数据304.6键盘程序设计键盘和显示屏一样,是人机交互的重要组成部分,人机交互部分设计是否人性化,直接决定用户体验,所以按键程序的设计也是非常重要的。本系统共有5个非自锁按键,分别代表“左”“由”“加”“减”“开始/停止”,一个自锁按键,用于上位机和本地模式的选择,如图4.13,电路图如图4.14。图4.13按键模块实物单片机系统中的独立按键一般是按键直接接IO口,另一端连接到GND,如图4.14也就是按键被按下后,IO的电平被强制拉成低电平,即0,所以通过检测对应IO读到的数据,即可判断按键是否被按下。图4.14系统按键电路图31理想状态下,以按键S2为例,按键被按下去以后P32收到的应该是个方波,直接P32检测到低电平就可以判断按键S2被按下,但是在单片机的实际应用中,按键的检测不是这么简单,也是很有讲究的,因为在有键按下后,数据线上的信号如图4.15。图4.15按键的理想波形与实际波形由于按键本身的原因,存在按下抖动与释放抖动,而单片机属于高速检测器件,可以很容易检测出抖动的波形,使得单片机误以为我们多次按下按键,或者将由于振动产生的抖动误以为是按键按下的信号,所以单片机应用中需要消除按键抖动。实际应用中,按键的消抖分为软件消抖和硬件消抖两种,一般场合只采用其中的一种即可。常用的硬件消抖电路有RS触发器硬件消抖电路,如图4.16。图4.16RS触发器硬件消抖32还有一种常用的硬件消抖的电路是给按键接入滤波电容,如图4.17,利用电容的充放电延时,对按键两端的电压实现稳定,进而消除抖动。图4.17滤波电容硬件消抖电路硬件消抖好处是不占用单片机软件资源,不干扰单片机工作,但是很明显的增加了电子元器件,增加了硬件成本,同时增加了硬件的复杂程度和故障发生的概率。软件去抖动的基本原理是,当第一次检测到按键按下时,执行一个10ms的软件延时,之后再次判断该按键是否仍然保持闭合状态,如果仍然处于闭合状态,则可以确认按键真正按下11。所以一般要求不高的低成本的场合都采用软件消抖。本系统采用软件延时消抖的方法。按键的使用只是注意到消抖是不够的,实际使用过程中还得注意松手检测,这是因为单片机执行代码的速度是非常快的,而普通按键的检测一般都是循环扫描,这样当按下一次按键后,单片机会在循环检测过程中多次采集到按键被按下,进而多次执行命令,从而造成错误的结果,例如,本来想给速度值加1,按下一次按键后结果被单片机采集到了5次,直接给速度加了5。所以在按键扫描程序中,确定按键按下来以后,还需要有类似“while(key1=0);”的语句,他的意思是等待按键释放,如果按键没有被放开则key1始终为0,也就是说while语句的条件始终成立,程序一直停在原地,等待按键释放,知道按键被释放了,key1变成了1,条件不成立了,才退出了这个while语句,程序才能继续执行。所以,整体的按键检测流程图如图4.18。33图4.18按键检测流程图345上位机软件设计本系统需要制作一个上位机小软件,当前大多数的电脑都没有串口,只有USB口,所以首先就能想到的自然是USB通信,可是51单片机没有USB硬件接口,用IO口模拟USB通信协议难度极高,即使模拟成功,单片机基本也没时间处理其他任务了,再者,用USB通信的话,上位机也不好编写,所以通讯方式最终选择串口,多加一条USB转串口线就可以了。如图5.1。5.1上位机
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康板块活动方案
- 健康理财活动方案
- 健康骨骼活动方案
- 健身培训春季活动方案
- 健身房小组活动方案
- 健身政府活动方案
- 健身粉丝活动方案
- 2025年网络与信息安全行业职业技能竞赛试题
- 简短财务个人工作总结(9篇)
- 童话故事读后感15篇
- 2025年普通高等学校招生全国统一考试数学试题(全国二卷)(有解析)
- 2025年安庆宿松县县属国有企业招聘57人笔试参考题库附带答案详解析集合
- 消防考试基础试题及答案
- 临时用电施工方案技术交底
- 儿童意外异物吞食课件
- 富民银行笔试题库及答案
- 2025年高考第二次模拟考试数学(新高考Ⅱ卷)(参考答案)
- 低血糖的相关试题及答案
- 2025年下半年广东省中山市东凤镇人民政府雇员招聘9人易考易错模拟试题(共500题)试卷后附参考答案
- 2025-2030中国花店行业市场发展分析及发展趋势与投资前景研究报告
- ai训练师笔试题及答案
评论
0/150
提交评论