课题一NTC热敏电阻的温度测量和控制系统.docx
2011年暑期电子设计大赛课题一基于NTC热敏电阻的温度测量与控制系统的设计学生姓名杜衡、向奇林、刘露平院系名称物理与电子工程学院专业名称电子信息工程班级2008级六班指导老师完成时间基于NTC热敏电阻的温度测与控制系统设计学生姓名:杜恒、向奇林、刘路平指导老师:理图如下:系统各个模块的方案论证与设计系统温度采集电路的设计温度采集电路主要由用NTC热敏电阻制作的温度传感器来实现,而NTC测温原理主要是基于基于将NTC阻值随温度变化转换为电压变化来实现。将NTC热敏电阻值变换转换为电压的变化有以下几种方案。方案一:采用恒流源给热敏电阻供电,由于通过电阻的电流恒定,因此只要测出器两端的电压就可以测出其阻值。该方案电路设计简单,测量也方便实现,但对恒流源要求较高,且抗干扰能力较差。方案二:采用差动电桥进行测量。图表2VCC经过稳压二极管后电压稳定值为2.5V由电桥平衡条件可知,当R2R3=R4R5时电桥平衡,此时Vl和V2点的压差为零。由于R2=R3,因此在温度为零时,可以调节R5时R5=R4,使电桥平衡,其输出为零。当温度上升时,R4阻值减小,当温度变化一百摄氏度时,热敏电阻的变化范围大概为1K.)=0.0854V.该电路设计复杂,因为采用差动电桥,所以电路抗干扰能力增强,能有效抑制电源波动对电路的影响。比照上面两种方案,第二种方案虽然电路复杂但能有效抑制干扰信号,因此采用第二种方案。信号调理电路的原理与设计由于从电桥出来的信号很微弱,因此需要通过运算放大器放大后才能经过AD转换。方案一:采用单运放组成的运算放大器进行微弱信号的放大。其原理图如下:图表3为了使运放对称,因此要求RIO=R7,R11=R12,放大倍数A=R12R10.该电路简单,放大倍数可以通过调节R12来调节,但该调节会使运放不对称,因此需要同时调节R12和Rll来实现。方案二:采用仪用放大器来实现放大,仪用放大器的原理图如下。-VCC信号调理电路1仪用放大器的放大倍数可以由以下公式计算得知:A=-Rl1R7(1+2R8R6)由于R6可调,因此可以利用调节放大倍数。由于信号采集电路采集到的最大电压差为0.0854V.而AD的基准电压为2.5V,所以要求信号调理电路的最大输出为2.5V。而信号采集电路的最大输出为00845v,所以要求信号调理电路的放大倍数约为30倍。该电路由于可以调节R6来调节放大倍数,由于调节R6不会影响电路的对称性因此调节起来方便。比照上述两种电路,第一种结构简单但调节起来不方便,而第二种调节起来方便,且易于小信号的采集,因此选用第二种方案。温度控制电路的设计脉宽调制的根本原理简介在脉宽调制有两种方案,第一种是固定低电平时间,而另外一种是固定周期。先对固定周期的脉宽调制原理做如下简介。在固定周期的脉宽调制中,设一个周期的时间为一秒,将一个周期平分成一百份。每一份为10个毫秒,在一个周期内的份数由一个变量P控制,而每一份的时间用一个定时器来控制,当每次中断来时P加1,当P到一百十把P赋值成0,开始下一个周期。而在温度控制程序中,另外设定一个变量此每次M也加一,M到一百十也赋值为零,并且每次M和P进行比拟,当M<P时便可以让温度元件开始工作,于是开始控温。要实现温度突变时改变超调量,可以将温度和设定的温度进行比拟,当温度差值大于某个范围时,可以改变P的初值,这样就可以进行迅速加热,到达快熟调节温度。当温度和设定值接近时可以将P的值减小,从而缓慢加热。温度控制电路的原理与电路的设计该系统要求具有温度控制功能,因此可以制作一个控温元件来给热敏电阻加热来实现if(sub=O)Delay(IO);if(sub=O)TH=TH-IO;)while(sub=O);/防止按键重入一Driveled(Oxef,0x76);/显示H标志)/*设定最低报警温度voidSet_L()Display(TL);if(add=O)Delay(IO);if(add=O)TL=TL+10;if(TL+30>=TH)TL=TH-40;最低报警温度应小于最高报警温度-4)while(add=O);防止按键重入if(sub=0)Delay(10);if(sub=0)TL=TL-IO;while(sub=0);/防止按键重入Driveled(Oxef,0x38);/显示“L”标志)ucharp;占空比控制/*设定控制温度uintset_value=400;温度设定初值40摄氏度voidSetJempreatureOif(add=O)Delay(IO);if(add=O)set_value=set_value+10;)while(add=O);/防止按键重入if(sub=0)Delay(IO);if(sub=0)set_value=set_value-10;while(sub=0);/防止按键重入if(set_value-temperature)>100)p=100;elseif(set_value-temperature)>50)p=50;elseif(set_value>temperature)p+;elsep;)if(set_value>temperature)if(Set_value-temperature)>100)p=100;)elseif(set_value-temperature)>50)P=50;)elsep+;)elseP=0;*/if(set_value>temperature)(if(set_value-temperature)>=100)p=200;)elseif(set_value-temperature)>=80)p=160;)elseif(set_value-temperature)>=60)p=120;)elseif(set_value-temperature)>=40)p=80;)elseif(set_value-temperature)>=20)p=40;)elseif(set_value-temperature)>=10)P=IO;)elsep+;if(p>200)p=200;elseP=0;Display(temperature);/显示测定温度dula=0;显示设定温度PO=Oxff;wela=l;PO=Oxef;weIa=O;P0=0;dula=l;PO=LEDSegmentsetvalue100;duIa=O;Delay(IO);dula=0;送温度值个位,含小数点PO=Oxff;wela=l;PO=Oxdf;wela=0;PO=O;dula=l;PO=LEDSegment1set_value/10%10;duIa=O;Delay(10);duIa=O;送温度值小数位PO=Oxff;wela=l;PO=Oxbf;/weIa=O;PO=O;dula=l;PO=LED_Segmentset_value%10;duIa=O;Delay(10);duIa=O;/送摄氏度单位PO=Oxff;wela=l;P0=0x7f;weIa=O;P0=0;dula=l;PO=LEDSegment10;duIa=O;Delay(IO);voidDriveled(ucharwei,ucharduan)duIa=O;PO=Oxff;wela=l;P0=wei;weIa=O;P0=0;dula=l;P0=duan;duIa=O;Delay(IO);)uchari;voidDisp_record()Display(recordi);/显示记录值Driveled(0xef,0x40);显示-Driveled(Oxdf,LED_Segment(i+l)/10);/显示第1个值Driveled(0xbf,LED_Segment(i+l)%10);if(add=O)Delay(5);if(add=O)i+;if(i>47)i=0;while(add=O);if(sub=0)Delay(5);if(sub=0)i-;if(i=255)i=47;while(sub=O);/*显示平均温度,最大最小温度,最大温差ucharii;voidDisp_cal()if(add=。)/进入后按加键切换显示查看平均、最大最小、最大温差值Delay(40);if(add=0)ii+;if(ii>3)ii=0;while(add=O);switch(ii)case0:Display(average);Driveled(Oxef,0x40);Driveled(Oxdf,0x40);Driveled(Oxbf,0x40);break;case 1: Display(max);Driveled(Oxef,0xl);Driveled(Oxdf,0xl);Driveled(Oxbf,0xl);break;case 2: Display(min);Driveled(Oxef,0x8);Driveled(Oxdf,0x8);Driveled(Oxbf,0x8);break;case 3: Display(dif);Driveled(Oxef,0x5e);Driveled(Oxdf,0x06);Driveled(Oxbf,0x71);break;/*按键功能判断voidSet_function(uchara)switch(八)一case0:Display(temperature);break;显示温度case 1: Set_H();break;设定最高报警温度case 2: Set_L();break;/设定最低报警温度case 3: DispjecordO;break;/显示记录温度值case 4: Disp_cal();break;显示平均温度,最大最小值,最大温差case 5: Setjempreature();break;/温度控制设定default:a=0;break;/*中断计时,30分钟记录一次温度值uinta;ucharj;voidtimer()