1、1前言随着现代科学技术,特别是微电子技术和信息技术以及计算机技术等的快速开展,自动检测和自动控制技术的应用范围越来越广泛。在自动检测和自动控制系统中,传感器和编码器等检测元件起着非常重要的作用,它们是感受和传递外界信息的关键部件,对于整个自动控制系统有着决定性的作用。本次课程设计主要是对电机的转速进行测量,测量转速的方法非常多,但都普遍存在测量过程复杂、测量精度低等缺点。转速是电动机的重要的根本状态参数,在很多运动系统的测控中,都需要对电机的转速进行测量,测量的精度直接影响系统的控制情况,只有转速的高精度检测才能得到高精度的控制系统。按照不同的理论方法,先后产生过很多的测速方法,如模拟测速法、
2、同步测速法以及计数测速法等。我们本次的设计采用了增量式旋转编码器和AT89C52单片机进行测速系统的设计。旋转编码器与电动机的主轴直接联接,从而使编码器的转速与电机的转速完全一致,从而实现对转速的实时在线监控。基于旋转编码器有三种常用的测速方法:M法、T法、M/T法,M法适用于高速段,T法又更适用于低速段,而本测速系统要求对09999rmin测速范围内的转速进行测量。既有高速段又有低速段。综合考虑我们采用了M/T法测速的原理进行转速的计算,计算的过程主要在AT89C52单片机中进行编程实现,最后将计算结果通过液晶显示器进行显示。2总体方案设计2.1系统的整体设计本次设计选用了增量式旋转编码器作
3、为检测元件,M/T法作为测速方法。编码器输出脉冲信号,通过四倍频电路倍频后输入单片机,再经过单片机进行中央控制,通过对编码器输出的脉冲信号进行采集、计时、计数、运算后,将计算结果液晶显示器进行显示。此系统由脉冲采集、中央运算控制、数字显示三个局部构成。具体方案的工作流程分析:旋转编码器与电机的主轴直接相联,编码器的光栅盘转动产生脉冲信号,通过倍频后,直接对AT89C52产生INTO中断。单片机AT89C52作为中央运算控制单元负责对编码器输出的脉冲信号进行采集、计时、计数、运算,最后控制数码管显示计算结果。该测速系统的原理框图如图2.1所示。晶振11.0592MHz旋转编码器倍频电路AT89C
4、52数码管显示图2.1系统原理框图2.2测速方法的选择本系统选择的测速方法为M/T法,M/T法测速是将M法和T法相结合,在一定的时间范围内,同时对旋转编码器输出的脉冲个数陷和W2进行计数,那么电机每分钟的转速为=吗盘,实际工作中,在固定的7;时间内对旋转编码器的脉冲计数,在第一个旋转编NM2码器上升沿定时器开始定时,同时开始记录旋转编码器和时钟脉冲数,定时器定时7;时间到,对旋转编码器停止计数,而在下一个旋转编码器的上升沿到来时刻,时钟脉冲才停止记录。采用M/T法既具有M法测速的高速优点,又有T法测速的低速的优点,能够覆盖较广的转速范围。原理图如图2.2所示。图2.2M/T法测速原理图3系统硬
5、件设计3.1 主要器件的选择旋转编码器的选择在本系统中,既需要对电机进行测速,还要判断转速的方向,所以我选择了增量式旋转编码器。增量式旋转编码器工作原理为:由一个中心有轴的光电码盘,其上有环形通、暗的刻线,有光电发射和接收器件读取,获得四组正弦波信号组合成A、B、C、D,每个正弦波相差90度相位差(相对于一个周波为360度),将C、D信号反向,叠加在A、B两相上,可增强稳定信号;另每转输出一个Z相脉冲以代表零位参考位。由于A、B两相相差90度,可通过比拟A相在前还是B相在前,以判别编码器的正转与反转,通过零位脉冲,可获得编码器的零位参考位。如单相联接,用于单方向计数,单方向测速。A.B两相联接
6、用于正反向计数、判断正反向和测速。A、B、Z三相联接,用于带参考位修正的位置测量。其判向原理如图3.1所示。图3.1转向判别原理图单片机的选择本系统选择的是AT89C52单片机,AT89C52是美国Atmel公司生产的低电压、高性能CMOS8位单片机,片内含8KB的可反复梯写的程序存储器和12B的随机存取数据存储器(RAM),器件采用AtmeI公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和FIaSh存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的
7、80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。其主要工作特性是:片内程序存储器内含8KB的FIaSh程序存储器,可擦写寿命为1000次;片内数据存储器内含256字节的RAM;具有32根可编程I/O口线;具有3个可编程定时器;中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;串行口是具有一个全双工的可编程串行通信口;具有一个数据指针DPTR;低功耗工作模式有空闲模式和掉电模式;具有可编程的3级程序锁定位;AT89C52工作电源电压为5(1+0.2)V,且典型值为5V;AT89C52最高工作频率为24MHz。其引脚图如图3.2所示。图3.2AT89C52引脚图3.2
8、主要电路模块的设计脉冲四倍频电路的设计增量式旋转编码器输出为A、B两个信号,A、B相是两个正交脉冲信号,Z相每转一周输出一个脉冲,根据A、B两相两组信号的相位来判别电机转动的方向,对输出脉冲进行计数到达测量的目的。在一个周期内A、B共有四个上下沿,而每个沿之间相差90度的电气角。我们利用在旋转编码器的一个周期内对A相和B相的上升沿和下降沿均进行计数,即可实现在一个周期内对编码器计数四次,从而到达四倍频计数的目的。我们首先对A、B相信号进行延时,我们利用外加时钟对信号进行整定和延时,如图3.3所示。图3.3四倍频电路A、B相通过D触发器产生与C1.K时钟同步的信号Al、Bl,再经过D触发器产生与
9、C1.K时钟同步的信号A2、B2该信号分别比Al、Bl延时一个C1.K周期,时序图如图3.4所示。图3.4时序图单片机最小系统的设计目前的单片机开发系统只能够仿真单片机,却没有给用户提供一个通用的最小系统。由设计的要求,只要做很小集成度的最小系统应用在一些小的控制单元。其应用特点是:(1)全部I/O口线均可供用户使用;(2)内部存储器容量有限(只有4KB地址空间);(3)应用系统开发具有特殊性。电路如下列图3.1所示。其中有4个双向的8位并行I/O端口,分别记作P0、Pl、P2、P3,都可以用于数据的输出和输入,P3口具有第二功能为系统提供一些控制信号。时钟电路用于产生MCS-51单片机工作所
10、必须的时钟控制信号,内部电路在时钟信号的控制下,严格地按时序指令工作。MCS-51内部有一个用于构成振荡器的高增益反向放大器,该高增益反向放大器的输入端为芯片的引脚XTA1.1,输出端为XTA1.2。这两个引脚跨接石英晶体振荡器和微调电容,就构成了一个稳定的自激振荡器。电路中的微调电容通常选择为30pF左右,该电容的大小会影响到振荡器频率的上下、振荡器的稳定性和起振的快速性。晶体的振荡频率为12MHzo把EA脚接高电平,单片机访问片内程序存储器,但在PC值超过OFFFH(4Kbyte地址范围)时,将自动转向执行外部程序存储器内的程序。MCS-51的复位是由外部的复位电路来实现。采用最简单的外部
11、按键复位电路。按键自动复位是通过外部复位电路的来实现的.我们选用时钟频率为12MHz,ClMX47f0电路图如图3.5所示。图3.5单片机电路图时钟电路的设计单片机必须在时钟的驱动下才能进行正常的工作,单片机内部具有一个时钟振荡电路,只需外接振荡器,即可为各局部提供时钟信号。使用内部时钟电路时,只需在引脚XTA1.l和XTA1.2上外接定时反应回路,振荡器OSC就能自激振荡,产生矩形时钟脉冲序列。定时反应回路常由石英晶振和微调电容组成,其中石英晶振的频率是单片机得重要性能指标之一,时钟频率越高,单片机控制器的速度也越快。一般情况下晶振的频率选用12MHZ,这样有利于得到没有误差的波特率。电容C
12、l、C2起稳定振荡频率、快速起振的作用。为了提高温度稳定性,应采用温度稳定性能较好的NPO高频电容。内部时钟电路如图3.6所示。图3.6时钟电路复位电路的设计为确保控制系统能嚼偶稳定可靠的工作,复位电路是必不可少的一局部。它可以保证程序从指定处开始执行,即从程序存储器的OOOOH地址单元开始执行程序。另外但程序出现运行错误或操作错误使系统出现“死机”状态时,需复位以重新启动。单片机复位是靠外部电路实现的,无论是HMOS型还是C州OS姓,在振荡器运行的情况下,RST引脚保持两个机器周期以上时间的高电平即可实现系统复位。在RST端出现高电平的第二个周期,执行内部复位,以后每个周期复位一次,直至RS
13、T端变低。复位信号的产生有上电自动复位和按钮手动复位两种方式。我们选用的是上电自动复位。上电自动复位是通过外部复位电路的电容充电实现的。通电时,电容两端相当于短路,于是RST引脚上为高电平,然后电源通过电容进行充电,RST端电压慢慢降下来,降到一定程度变为低电平,单片机开始正常运行。上电自动复位电路如图3.7所示。图3.7免位电路1.ED显示电路设计本系统采用4个共阳极的1.ED数码管显示计算所得的转速值。单片机的PO口作为数码管的数据位,用于输出要显示的转速值,即控制数码管的a到dp端口;P2.4到P2.7四个接口用作数码管的片选位来控制数码管的公共极,其中三极管起到驱动的作用,增加1.ED
14、数码管的亮度,便于观察。显示器的显示过程如下:CPU向字段输出口(PO口)送出字型码啊,所有显示器接收到的相同字形码,但究竟是哪个显示器亮,那么取决于DPY端,而这一端是由单片机的P2.4到P2.7四个I/O接口控制的。动态显示尽管占用CPU的资源相对较多,但多个1.ED数码管可以共用八个I/O接口,不存在I/O接口浪费的现象,有效地降低本钱。基于此考虑,该控制系统采用动态扫描的显示方式。接口电路如图3.8所示。图3.8显示电路4系统软件设计4.1软件总体设计由于该系统中旋转编码器输出的脉冲信号是一个变周期信号,所以本次设计采用的是MCS-51单片机内部一个定时器/计数器直接测量连续变周期信号
15、的方法。该系统软件采用MCS-51汇编语言编程,采用模块化结构设计,各个功能子模块独立,调试方便,而且容易根据需求进行扩展。整个软件从功能上分为初始化模块、脉冲计数模块、计时模块、参数调整模块和显示模块。主程序流程图如图4.1所示。图4.1系统主程序流程图4.2初始化的软件设计采用I1.0592MHz的外部晶振,初始化工作包括TMOD.TCON.IE以及IP等特殊存放器的初始化。对于系统的硬件资源,TO定时器负责脉冲计数的计时,定位时间为50ms,并且可调;TI定时器用于动态显示1.ED数码管;INTo负责外部脉冲的采集(通过中断);INTl外接按钮,实现参数如计时单位的调整。在主程序中,分别
16、对其进行设置。4.3系统中断的软件实现4.3.1脉冲计数的软件实现脉冲计数的实现方法是运用INTO的中断效劳程序入口,当INTO产生一次中断时,运用count自加来实现脉冲计数。4.3.2计时的软件实现计时采用TO定时中断的累计次数得到。这段时间内得到的脉冲数转换1分钟的脉冲数,把脉冲数通过M/T法进行速度计算,再将转速的计算结果通过1.ED实时显示出来。4.3.2转速显示的软件实现1.ED显示的数字的字形要由PO口输出相应的字型码,1.ED显示采用动态显示方式,采用Pl口中四位分别选通显示各位、十位、百位、千位。系统中断程序流程图4.2所示。图4.2系统中断流程图4.4程序指令模块显示子程序
17、MOV1.ED-I,#05HMOV1.ED-2,#06HMOV1.ED-3,#07HMOV1.ED-4,#08HDISP1.AY:MOVDPTR,STAB1.EMOVA,1.ED-IMOVCA,A+DPTRMOVSBUF,AOR1.Pl,#OFoH;显示第一位C1.RPl.71.CA1.1.DE1.AYSETBPl.7MOVDPTR,#TAB1.EMOVA,1.ED-2MOVCA,A+DPTRMOVSBUF,A;显示第二位OR1.Pl,#0FoHC1.RPl.61.CA1.1.DE1.AYSETBPl.6MOVDPTR,STAB1.EMOVA,1.ED-3MOVCA,A+DPTRMOVSBUK
18、A;显示第三位OR1.Pl,#0FOHC1.RPl.51.CA1.1.DE1.AYSETBPl.5MOVDPTR,#TAB1.EMOVA,1.ED-4MOVCA,A+DPTRMOVSBUF,A;显示第四位OR1.Pl,#OFoHC1.RPl.41.CA1.1.DE1.AYSETBPl.4RET电机转动子程序Turn-Right:SETBENASETBINlC1.RIN2RET;电机正传Turn-1.eft:SETBENAC1.RINlSETBIN2RET;电机反转电机停止子程序Stop:SETBENAC1.RINlC1.RIN2RET中断效劳子程序INTI:C1.RTRl;计数器1PUSHAC
19、C;ACC入栈PUSHOOH;RO入栈C1.RCMOVA,T1.l;计数值低八位累加器ADDA,#23H;计数器值和中断执行时间、最小中断响应时间相加MOVRO,A;低八位暂存ROMOVA,THlADDCA,#OoHMOVXDPTR,A;脉冲周期高八位DPTR指向的RAM单元INCDPTRINCRl;脉冲周期个数加1MOVTHl,#00HMOVT1.l,#00HPOPOOHPoPACCSETBTRRETI5总结体会本次课程设计是自动控制系统课程的实践性教学环节,是对我学习该课程后的综合性训练,所以我非常珍惜这次做课程设计的时机.虽然我做的仅仅是电机测速系统的设计,但是,完成这一个课题要涉及到许
20、多方面的知识。我通过上网查询和查阅相关书籍资料,知道了很多关于旋转编码器和AT89C52单片机的知识,做到对各个集成块的引脚功能和工作原理都很清晰。同时又重新将从前学过的相关的知识看了一遍,从而让我更深一步掌握了与自动控制和单片机相关的一些知识。我首先熟悉了自己的设计工程,然后通过上网查询和到图书馆查询图书资料,查询相关知识。其次通过查到的资料翻阅课本和相关资料学习相关知识,最后在理解了设计电路之后进行设计报告撰写。通过这次课程设计,不仅培养了我独立分析和解决实际问题的能力,同时也为以后的毕业时的毕业设计打好了根底。在这次的设计中,我认识到自己在学习知识中的缺乏。特别是对一些部件的不理解,发现
21、我有很多东西都学的不太好。我真懊悔没下大功夫学习好单片机相关知识和编程。通过这次设计我想我应该在以后的学习中吸取我不认真搞懂知识的教训,认真对待每一个知识点,脚踏实地的去学习,多向老师和同学请教.在此次设计中我引用了许多网上和书上的资料,并且更加稳固了对Proteus和Protel99SE等软件的使用。但是由于时间紧迫和操作不熟练我画的不是很好,画的不是特别的明白,线路也比拟混乱。不过我学到了很多。在设计的过程中,遇到了不少问题,同学的讲解给我了很大的帮助,让我进一步认识到了同学的帮助及相互合作的重要性。这个课程设计对自己的思考及动手能力的提高有一定的帮助,希望学校以后能够提供更多类似的时机,
22、让我们在步入社会之前得到最大程度的锻炼。不过我的设计中还存在有很多的缺乏之处,还望老师予以指正,提出修改的建议!6致谢课程设计就告一段落了,在此期间我得到了很多人的帮助。首先我要感谢的是:在学习中有严谨的治学态度,丰富渊博的知识;在工作中有精益求精的工作态度,诲人不倦的师者风范的李伟老师。正因为有您这样的楷模,才会使我们向前迈进。当然,我还是要感谢我那些可爱的同学和朋友们。因为你们的帮助和勉励我才能够顺利的完成我的设计。当我遇到设计难题的时候,你们总是会不厌其烦的帮我解决,帮助我完成,真的很感谢你们的帮助。最后,我还想真诚的对在这次设计中给予我帮助的良师益友说声:谢谢!还有在百忙之中抽空看我们
23、设计的评定老师,你们辛苦了!7参考文献1王福瑞.单片微机测控系统设计大全.北京航空航天大学出版社.19992李仁定.电机的微机控制.机械工业出版社.19993陈伯时.电力拖动自动控制系统.机械工业出版社.20074徐科军.传感器与检测技术(第三版).电子工业出版社.20115康华光.电子技术根底模拟局部(第五版).高等教育出版社.20066康华光.电子技术根底数字局部(第五版).高等教育出版社.20067张毅刚.单片机原理及应用.高等教育出版社.2010附录一:程序清单转速代码:ORG0000HAJMPMAINORGOOOBH1.JMPINTTOORG0030HMAIN:MOVSP,#60H;
24、确立堆栈区MOVPSW,#00H9MOVR0,#20H;RAM区首地址MOVR7,#5FH;RAM区单元个数Q1.:MOVR0,#00H;RAM清零INCRODJNZR7,Q1.MOVIP,#02H;IP初始化,优先定时器0MOVIE,#82H;IE初始化,MOVTMOD,#01H;定时器0方式1工作1.CA1.1.PP;调匕子程序NEXT:1.CA1.1.KEY;按键检测子程序JBACC.0,RUNF;A键按下运行1.CA1.1.DISP;调用显示子程序SJMPNEXTRUNF:1.CA1.1.OUTT;调传送子程序1.CA1.1.TIME;开单片机JK:1.CA1.1.DISP;调用显示子
25、程序1.CA1.1.KEY;按键检测子程序JZJK1.CA1.1.ANKEY1.CA1.1.DISP;调用显示子程序SJMPJK,99999iUiZJ,PP:PPP:MOV37H,MOVRO,MOVR7,MOVRO,INCRODJNZR7,RET4taN肉皮#12#30H#07H#10PPP;P点编码送存放器;P点编码送存放器999999KEY:JZ1.CA1.1.1.CA1.1.1.CA1.1.JZMOVKEYSF:JZ1.CA1.1.JMPKEYY:EXIT:KEYS:MOVMOVCP1.AN1.MOVRET,铤口J在H*1.CA1.1.KEYSEXITDISPDISPKEYSEXITB,
26、20H1.CA1.1.KEYSKEYYDISPKEYSFMOVA,BRETPl,#0FFHA,PlAA,#0FH20H,A秘患T+1分匕工工O良,;调键值处理子程序;没有键按下转到返回;调显示去抖动;保存键值;调键值处理子程序;键释放,转到恢复键值;调显示子程序延时;等到键释放;键值送20H单元保存;返回;先向Pl口写1;P1口值送累加器A;A值取反;保存PI口的低4位;A值送20H保存,ANKEY:CHECK:KO:,链功日匕JTdtrPC1.REAJBTRO,YXZCJNEA,#01H:JMPRUN,,Kl,;关中断;判断是否运行;转运行Kl:CJNEA,#02H,K2AJMPKEYl;转
27、1调整K2:CJNEA,#04H,K3AJMPKEY2;转2调整K3:CJNEA,#08H,OUTAJMPKEY3;转3调整YXZ:JBACC.O,STOPAJMPOUTKEYl:MOVRO,#45H;1调整1.CA1.1.ADDlC1.RCCJNEA,#24H,OUTTACA1.1.C1.ROAJMPOUTTKEY2MOVRO,#43H;2调整1.CA1.1.ADDlC1.RCCJNEA,#60H,OUTTACA1.1.C1.ROAJMPOUTTKEY3MOVRO,#4IH;3调整ACA1.1.ADDlC1.RCCJNEA,#60H,OUTTACA1.1.C1.RO传送显示数据9999999
28、999999999999999OUTT1:MOV3011,40H;1显示单元41H-42HMOV31H,41HMOV32H,ftll;MOV33H,42H;2显示单元43H-44HMOV34H,43HMOV35H,ftll,9MOV36H,44H;3显示单元44-45HMOV37H,45HRITSTOP:C1.RRETTRO;跳出RUN:1.CA1.1.TIME;运行OUT:SETBEA;无键按下或完成功能跳出RET右二公=rN4b99999999999与打电J钾999TIME:SETBEAMOVT1.O,#0BOHMOVTHO,#3CH;3CB0HMOVR4,#20;50ms,20次循环SE
29、TBTRO;启动定时器0RETh+rhC999999,A1.JrrHJ困I,INTTO:PUSHACCPUSHPSWC1.RETOC1.RTROMOVT1.O,#0BoH;重新设定定时初值MOVTHO,#3CHSETBTRO;启动定时器0DJNZR4,OUTTO;1秒到ADDSS:MOVR4,#14H;20次计数MOVRO,#4IH;秒十位ACA1.1.ADDl;加1程序C1.RCCJNEA,#60H,ADDMM;1到DDMM:JCOUTTOACA1.1.C1.ROMOVR0,#43HACA1.1.ADDl;加1程序C1.RCCJNEA,#60H,ADDHH;2到DDHH:JCOUTTOACA
30、1.1.C1.ROMOVR0,#45HC1.RCCJNEA,#24H,HOUR;3到HOUR:JCOUTTOACA1.1.C1.ROOUTTO:MOV30H,40H;显示单元41H-42HMOV31H,41HMOV32H,ftll;MOV33H,42H;显示单元43H-44HMOV34H,43HMOV35H,ftll.*MOV36H,44H;显示单元44-45HMOV37H,45HPOPPSWPOPCCSETBETORETI时间清零子程序C1.1.DD1;加1程序C1.RO:C1.RAMOVR0,ADECROMOVRO,ARET;加一子程序DD1:MOVA,R0;取十位DECROSWAPAOR
31、1.A,RO;组合十位与个位ADDA,#01H;加1DAA;十进制调整MOVR3,A;暂存AN1.A,#OFH;屏蔽十位MOVR0,A;放入个位单元MOVA,R3;取值INCROSWAPAAN1.A,#OFH;屏蔽个位MOVRO,A;放入十位单元MOVA,R3;数值放入A中等待判断RET999999999999999999999999999999999999999日-l=vfQHI,业小J枉用,3011,999999DISP:,MOVRl,#30H;显示缓冲存储单元首地址MOVR2,#80H;从右至左显示DISPl:MOVP2,R2;送位控MOVA,R1MOVDPTR,#TABMOVCA,A+DPTRMOVPO,A;送段控ACA1.1.D1.;延时MOVA,R2JBACC.0,DISP2RRAINCRlMOVR2,AAJMPDISPlDISP2:RETTAB:DBOCOH,0F9H,0A4H,OBOH,99H,92H,82H,0F8H,80H,90H,OFFH,OBFH,OCHD1.:MOVR6,ftl4H;显示延时子程序D1.l:MOVR7,#19H;D1.2:DJNZR7,D1.2DJNZR6,D1.lRITEND