摘要本论文要求使用单片机进行电路设计,同时单片机部分应带有显示功能。
单片机对某个位置进行温度监控,当外部温度≥45℃时,电动机加速正转,当温度≥75℃时,电动机全速正转;当外部温度≤10℃时,电动机加速反转,当温度≤0℃时,电动机全速反转;当温度回到10℃~45℃之间时电动机逐渐停止转动。
温度采集模块可以采用一只温度传感器 DS18B20,此传感器,可以很容易直接读取被测温度值,利用单片机的一个I/O口的引脚,通过软件对这个引脚不断地输出高低电平来实现PWM波的输出,51系列单片机无PWM输出功能,可以采用定时器配合软件的方法输出。
对精度要求不高的场合,非常实用。
所谓脉冲宽度调制是指用改变电机电枢电压接通与断开的时间的占空比来控制电机转速的方法,称为脉冲宽度调制(PWM)。
PWM驱动装置是利用全控型功率器件的开关特性来调制固定电压的直流电源,按一个固定的频率来接通和断开,并根据需要改变一个周期内“接通”与“断开”时间的长短,改变直流电动机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。
因此,这种装置又称为“开关驱动装置”。
对于直流电机调速系统,其方法是通过改变电机电枢电压导通时间与通电时间的比值(即占空比)来控制电机速度。
本次设计可以作为简单控制向复杂控制的过度,实现直流电机启动、正反转控制和顺序控制外,还要进行转速控制。
为以后复杂控制设计做基础。
关键词:PWM;单片机;温度控制1 设计总说明引言在电气时代的今天,电动机一直在现代化的生产和生活中起着十分重要的作用,无论在工业农业生产、交通运输、国防航空航天、医疗卫生、商务与办公设备,还是在日常生活中的家用电器,都在大量地使用着各式各样的电动机。
据资料统计,现在有的90%以上的动力源来自于电动机,我国生产的电能大约有60%用于电动机。
电动机与人们的生活息息相关,密不可分。
随着现代化步伐的迈进,人们对自动化的需求越来越高,使电动机控制向更复杂的控制发展。
研究意义对电动机的控制可分为简单控制和复杂控制两种,简单控制是对电动机进行启动、制动、正反转控制和顺序控制,复杂控制是对电动机的转速转速、转角、转矩、电压、电流等物理量进行控制。
本次设计可以作为简单控制向复杂控制的过度,实现直流电机启动、制动、正反转控制和顺序控制外,还要进行转速控制。
为以后复杂控制做为基础学习。
直流电动机具有良好的起动、制动性能,宜于在大范围内平滑调速,早期直流电动机的控制均以模拟电路为基础,采用运算放大器、非线性集成电路以及少量的数字电路组成,控制系统的硬件部分非常复杂,功能单一,而且系统非常不灵活、调试困难,阻碍了直流电动机控制技术的发展和应用范围的推广。
随着单片机技术的日新月异,使得许多控制功能及算法可以采用软件技术来完成,为直流电动机的控制提供了更大的灵活性,并使系统能达到更高的性能。
采用单片机构成控制系统,可以节约人力资源和降低系统成本,从而有效的提高工作效率,可以实现复杂的控制,控制灵活性和适应性好,无零点漂移,控制精密高,可提供人机界面,多机联网工作。
采用智能功率电路驱动比传统的分立功率器件组成的驱动体积小,功能强;减少了电路元器件数量,提高了系统的可靠性;监控更容易实现;集成化使电路的连线减少,减少了布线电容和电感以及信号传输的延时,增加了系统抗干扰的能力;集成化使系统成本大大降低。
系统设计内容本设计将介绍一种基于单片机的温度控制直流电机转速系统。
该系统采用AT89C51单片机为核心,通过AT89C51 单片机驱动数字温度传感器DS18B20,进行温度数据采集通过温度的比较和温度范围设定的程序控制产生PWM(脉宽调制)信号;通过L298驱动芯片来控制直流电机的启动、速度、方向的变化;通过LM016L显示温度。
论文包括对单片机的功能及各个管脚和晶振复位电路的介绍,整个电路设计包括温度采集模块,单片机控制模块,温度显示模块,和电机及电机驱动模块。
2系统方案设计系统的设计要求及主要技术指标本论文要求使用单片机进行电路设计,同时单片机部分应带有显示功能。
单片机对某个位置进行温度监控,当外部温度≥45℃时,电动机加速正转,当温度≥75℃时,电动机全速正转;当外部温度≤10℃时,电动机加速反转,当温度≤0℃时,电动机全速反转;当温度回到10℃~45℃之间时电动机逐渐停止转动。
系统总体方案系统总体方案设计,如下图1图1 系统总体方案图总体方案论述该系统采用AT89C51单片机为核心,通过DS18B20进行温度采集,送入单片机,经过软件编程进行温度的比较和范围划定,然后通过程序控制由单片机产生不同的PWM (脉冲宽度调制)信号,送给电机驱动芯片L298的使能端口,通过L298驱动芯片来控制直流电机的启动、速度、方向的变化;单片机将温度数据传送给LM016L显示温度。
整个电路设计包括温度采集模块,单片机控制模块,温度显示模块,和电机及电机驱动模块。
3 硬件电路设计温度采集模块的电路连接DS18B20 有三个管脚:GND 为电源地,DQ 为数字信号输入/输出端,VCC 为外接供电电源接入端(用寄生电源方式时接地)。
在硬件上,DS18B20与单片机的连接有两种方法,一种是VCC接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时VCC、GND接地,I/O接单片机I/O。
无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电阻。
本系统中DS18B20的DQ口与单片机的口连接,GND 接地。
Protues软件仿真图如图2所示。
图 2 DS18B20的Protues仿真图转速控制模块设计A(IN1)、B(IN2)分别与AT89C51单片机的、相连接,输入控制电位来控制电机的正反转。
ENA与单片机的口相连接,口输出控制电动机转速的PWM信号,来控制电动机的加速、减速,启动、停止。
由于我们使用的电机是线圈式的,在从运行状态突然转换到停止状态和从顺时针状态突然转换到逆时针状态时会形成很大的反向电流,在电路中加入二极管的作用就是在产生反向电流的时候进行泄流,保护芯片的安全。
上面接电源那个是当VS断电后,电机的产生的磁场产生很大的电动势保护电机(因为电机可能正传或者反转,所以两个方向均要设计二极管),接地那个作用在于保护单片机等元件。
图 3 转速控制模块protues仿真的电路图温度显示模块设计数据手册中可能介绍LM1602内部D0~D7已有上拉,可以使用P0口直接驱动。
在Proteus里LM016L内部可能没有,应该人为加上拉电阻。
图 5 温度显示模块设计proteus仿真图4系统软件设计系统软件构架图 6系统软件总框图5元器件清单表 2 元器件清单名称型号数量备注单片机AT89C511二极管1N40071电容CAP2220pF2100nF 电解电容CAP-ELEC110uF 晶振CRYSTAL112MHZ 温度采集器DS18B201电机控制元件L2981LCD显示器LM016L1电机转子MOTOR-DC1电阻排阻RESPESPACK11110K6电路设计仿真图 7 设计电路的proteus仿真结论本方案实现了单片机通过对温度的采集和比较对直流电机进行转速控制,以及利用软件模拟实现直流电机PWM调速的方法。
以AT89C51单片机为控制核心,通过DS18B20进行温度采集,送入单片机,经过软件编程进行温度的比较和范围划定,然后通过程序控制由单片机产生不同的PWM(脉冲宽度调制)控制信号,送给电机驱动芯片L298的使能端口,通过L298驱动芯片来控制直流电机的启动、速度、方向的变化实现了对普通直流电机的转速调节,为进一步研究和优化直流电机控制方法提供了基础。
达到了系统的设计要求:单片机对某个位置进行温度监控,当外部温度≥45℃时,电动机加速正转,当温度≥75℃时,电动机全速正转;当外部温度≤10℃时,电动机加速反转,当温度≤0℃时,电动机全速反转;当温度回到10℃~45℃之间时电动机逐渐停止转动。
从这次的设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次设计中的最大收获。
参考文献[1] 王之道,周靖,刘旭,一种基于AT89C2051单片机的直流电机调速装置, [J]机械工程与自动化2009(5)[2] 茹占军,谢家兴,基于AT89S52单片机直流电机调速系统的设计, [J].软件导刊2010, 9(8)[3] 赵鸿图,基于单片机AT89C51的直流电机PWM调速系统[J].电子技术,2008, 45(10)[4] 周润景,张丽娜.基于Proteus的电路及单片机系统设计与仿真[M].北京:北京航空航天大学出版社,2006.[5] 宁成军,张江霞.基于Proteus和Keil接口的单片机外围硬件电路仿真[J].现代电子技术,2006,29(18):142-143,146.[6] 陈良光,管聪慧.由数字式传感器DS18B20 构成的多点测温系统[J].传感器世界, 1999, 9.[7] 杜洋,DS18B20温度传感器应用解析, 马忠梅,张凯,等.单片机的C语言应用程序设计(第四版).北京航空航天大学出版社实验程序#include<>#include<>#difine uchar ;unsigned char#difine uint ;unsigned int#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}sbit DQ =p3^3;sbit LCD_RS=p2^0;sbit LCD_RW=p2^1;sbit LCD_EN=p2^2;sbit MA =P1^0;sbit MB =p1^1;sbit PWM1 =p1^2;uchar code temp_DISP_Title[] ={"Current temp : "};uchar current_temp_Display_Buffer[]={"TEMP: "};;Current_Temp_Display_Buffer[ 9] = Display_Digit[1] + '0';Current_Temp_Display_Buffer[ 8] = Display_Digit[2] + '0';Current_Temp_Display_Buffer[ 7] = Display_Digit[3] + '0';if (Signed_Temp≥75 ) Signed_Temp = 75;if (Signed_Temp≤ 0 ) Signed_Temp = 0;//>=45℃时加速正转,75℃时全速运行if ( Signed_Temp ≥ 45){MA = 1; MB = 0; //正转if (Signed_Temp == 45) //PWM输出(占空比:0%){PWM1 = 0; DelayXus(30); return;}elseif (Signed_Temp == 75) //PWM输出(占空比:100%){PWM = 1; DelayXus(30); return;}PWM1 = 1; //PWM输出(占空比:0%~100%) DelayXus(Signed_Temp - 45);PWM1 = 0;DelayXus(75 - Signed_Temp );}else//≤10℃时加速反转,0℃时全速运行if ( Signed_Temp≤ 10 ){MA = 0; MB = 1; //反转if (Signed_Temp == 10) //PWM输出(占空比:0%){PWM1 = 0; DlayXus(10); return;}elseif (Signed_Temp == 0 ) //PWM输出(占空比:100%){PWM = 1; DelayXus(10); return;}PWM = 1; //PWM输出(占空比:0%~100%) DelayXus(10 - Signed_Temp);PWM = 0;DelayXus(Signed_Temp);}//否则由惯性运动过渡到停止else{MA = 0; MB = 0;}}//---------------------------------------------------------------------//主函数//---------------------------------------------------------------------void main (){LCD_Intialise();Read_Temperature(); Delay(5000);Delay(5000);TMOD = 0x01;TH0 = -50000 / 256; TL0 = -50000 % 256; IE = 0x82;TR0 = 1;While(1);})。