直流电机测速摘要设计一种直流电机调速系统,以STC89C52 为控制核心,通过ULN2003 驱动电机,使用ST151 测量转速,实现了按键输入、电机驱动、转速控制、转速显示等功能。
关键词:直流电机, 80C51, ULN2003, 转速控制第一章题目描述直流小电机调速系统:采用单片机、ul n2003 为主要器件,设计直流电机调速系统,实现电机速度开环可调。
要求:1、电机速度分30r /m、60r /m、100r /m共3 档;2、通过按选择速度;3、检测并显示各档速度。
所需器件:实验板(中号)、直流电机、STC89C52、电容(30pFⅹ2、10uF ⅹ2)、数码管(共阳、四位一体)、晶振(12M H z )、小按键(4 个)、ST151、电阻、发光二极管等。
第二章方案论述按照题给要求,我们最终设计了如下的解决方案:用户通过键盘键入控制指令(开关),微控制器在收到指令后改变输出的 PW M波,最终在 U LN2003 的驱动下电机转速发生改变。
通过 ST151 传感器测量电机扇叶的旋转情况,将转速显示在数码管上。
在程序主循环中实现按键扫描与转速显示,将定时器0 作为计数器,计数ST151 产生的下降沿,可算出转速,并送至数码管显示。
第三章硬件部分设计系统硬件部分包含输入模块、显示模块、控制模块、测速模块等。
在硬件搭建前,先通过Pr ot eus Pr o 7. 5 进行硬件仿真实现。
1. 时钟电路系统采用12M 晶振与两个30pF 电容组成震荡电路,接STC89C52 的 XTAL1 与 XTAL2 引脚,为微控制器提供时钟源2. 按键电路四个按键分别控制电机的不同转速,即控制 PW M波高电平的占空比,以实现电机的速度控制,采用开环控制方法,不是十分精确,但控制简单,易实现,代码编写简单3. 显示部分系统采用4 位共阴极数码管实现转速显示。
数码管的位选端1~4 分别接STC89C52 的P2. 0~P2. 3 管脚,端选段A~G与 D P分别接 STC89C52 的 P0. 0~P0. 7 管脚。
需要说明的是:实际焊接电路时,数码管的位选端需要焊接三极管,否则数码管显示亮度将会非常暗。
4. 电机控制与驱动部分电机的运行通过 PWM波控制。
PWM波通过 STC89C52 的 P2. 4 口输出。
说明:测速部分用的是 Mot r o- encode 电机,实际用ST151 实现测速,焊接电路如下图:其中R1=510Ω ,R2=4. 7KΩST 内部电路:5. 其他电路复位电路如下所示:完整仿真电路图:第四章软件部分设计1. 开发环境系统软件采用Ke i l 集成开发环境开发程序代码如下(带注释):#i ncl ude <r eg51. h>s bi t P2_0=P2^0; //数码管选定位s bi t P2_1=P2^1;s bi t P2_2=P2^2;s bi t P2_3=P2^3;s bi t P2_4=P2^4; //电机控制位s bi t keys p0=P1^0; //电机转速为 0 的控制键 sbi t keys p30=P1^1; //电机转速为 30 的控制键s bi t keys p60=P1^2; //电机转速为 60 的控制键s bi t keys p100=P1^3; //电机转速为 100 的控制键uns i gned char code t abl e [ ] ={0xc 0, 0xf 9, 0xa 4, 0xb0, 0x99, 0x92, 0x82, 0xf 8, 0x80, 0x90, 0x88, 0x83, 0xc 6, 0xa 1, 0x86, 0x8e};uns i gned i nt mot or s p eed; //电机转速uns i gned char G E,SHI , BAI , Q I A N;//电机转速 mot or s peed 的各个位uns i gned i nt count er =0; //光电传感器脉冲数uns i gned i nt pwm; //pwm占空比uns i gned i nt m i d; //占空比设置值uns i gned i nt cal s p; //设定多长时间计算一次速度voi d di s pl ay( ) ; //数码管显示电机速度voi d del ay( ) ; //延迟函数voi d cont r ol pwm( ) ; //控制电机占空比voi d cal s peed( ) ; //计算电机速度,放于 mot or s peed 变量中voi d keys can( ) ; //按键扫描voi d m a i n( ){P2=P2&0x0f ;m i d=0;EA=1; //开启总中断EX0=1; //开启外部中断 0I T0=1; //设置成下降沿触发方式TMOD=0x01; //设置定时器 0 为模式 1,即 16 位计数模式TH0=( 65536- 10000) /256; //计数时间为 10msTL0=( 65536- 10000) %256;ET0=1; //开启定时器 0 中断TR0=1; //启动定时器 0whi l e( 1){keys can( ) ;di s pl ay( ) ;cont r ol pwm( ) ;cal s peed( ) ;}}voi d keys can( ) //键盘扫描i f ( keys p0 == 0){del ay( ) ; //延迟防止抖动i f ( keys p0 == 0)m i d=0;}i f ( keys p30 == 0){del ay( ) ;i f ( keys p30 == 0)m i d=1;}i f ( keys p60 == 0){del ay( ) ;i f ( keys p60 == 0)m i d=3;}i f ( keys p100 == 0){del ay( ) ;i f ( keys p100 == 0)m i d=5;}}voi d cal s peed( ){i f ( cal s p>=100) //100* 10ms =1s 计算一次电机转速{mot or s peed=c ount er /3; //转的圈数除以时间count er =0; //清零脉冲数cal s p=0; //清零标志}}voi d cont r ol pwm( ){i f ( pwm>=0 && p w m<m i d){P2_4=1; //电机加速}e l s e if ( p w m>=m i d && pwm<10){P2_4=0; //电机不加速e l s e pwm=0;}voi d _TI MER0( ) i nt er r upt 1{TH0=( 65536- 10000) /256; //重新装入初值,计数时间为 10ms TL0=( 65536- 10000) %256;pwm++;cal s p++;}voi d _I NT0( ) i nt er r upt 0{count er ++; //接受脉冲数}voi d di s pl ay( ) //数码管显示函数{G E=m ot or s peed%10;SH I=m ot or s peed/10%10;BA I=m ot or s peed/100%10;QI A N=mo t or s peed/1000%10;P2_0=0;P0=t abl e [ Q I A N] ;del ay( ) ;P0=0xf f ;P2_0=1;P2_1=0;P0=t abl e [ BAI ] ;del ay( ) ;P0=0xf f ;P2_1=1;P2_2=0;P0=t abl e [ SHI ] ;del ay( ) ;P0=0xf f ;P2_2=1;P2_3=0;P0=t abl e [ G E];del ay( ) ;P0=0xf f ;P2_3=1;}voi d del ay( ) //延迟函数{uns i gned char i =10;whi l e( i - - );}第五章系统测试测试方案:测试包含仿真测试和硬件测试两个部分。
仿真测试指使用 Pr ot eus Pr o 7. 5 对系统进行仿真测试。
主要测试系统电路的设计和验证程序逻辑的正确性。
硬件测试指系统搭建后对硬件电气性能的测试。
主要测试各功能的完整性可靠性,以及系统电气性能的稳定性。
测试工具为示波器万用表等。
仿真测试结果:真测试中,系统运行正常,程序逻辑正确。
按键输入正常、数码管显示正确。
P2. 4 管脚间输出PWM波正常。
硬件测试结果:系统硬件搭建完毕后,进行硬件测试。
系统加电后,振荡电路正常起振,STC89C52 在时钟源电路的驱动下运行正常。
系统可在复位电路的作用下正常复位。
系统按键输入正常,并能够正确消除抖动。
系统 PWM波输出正常。
将示波器接 STC89C52 的 P2. 4 管脚,可观察到峰峰值 5V左右的方波,频率与调速要求一致。
ST151 传感器测量正常。
数码管转速显示正常,数码管可正确显示并正确显示电机转速。
第六章实验总结这次课程设计我主要负责硬件方面,从刚开始到图书馆查资料、上网查资料、软件仿真、再到后来的硬件焊接,整个过程下来感觉还是挺不容易的。
到最后成功的完成了设计,还是有点成就感的。
在整个过程中学到了很多东西,更加巩固了单片机方面的知识,掌握了pr ot ues , kei l 等软件的使用。
熟悉了硬件方面测试,焊接等知识,回想这次实习,还是有很大收获的。
对以后学习有很大的帮助。
通过这次课设,我了解了直流电机调速系统,熟悉了单片机在控制系统的应用,掌握了 Pr ot eus 和 kei l 环境和应用。
实际硬件做出来后效果和仿真的相差甚远,经过反复的检查,我们发现我们的程序效率太差,其运行时间比设定的计时还要长,以至于占空比的调节范围太小,经多次调试最终的效果还是比较理想,当然,我们做的还有不足之处,比如说:测速模块,准确度不太高,而且数码管的显示总是不稳定(+/- 20 震荡)。
总之,通过这次课设,我觉得对待知识一定要严谨认真,细微之处见水平此次课程设计使用 80C51 作为核心,在十分有限的性能和硬件资源上实现一定的功能,虽然是一个十分简单的系统,但很好的体现了对嵌入式工程师的要求,也纠正了我们以往思维的很多错误,让我们认识到嵌入式系统开发的关键正是在有限的成本和硬件资源下实现所需的功能,更加扎实了我们的设计功底。