基于51单片机的水温测控系统实验报告_第1页
基于51单片机的水温测控系统实验报告_第2页
基于51单片机的水温测控系统实验报告_第3页
基于51单片机的水温测控系统实验报告_第4页
基于51单片机的水温测控系统实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要本次实验是软硬件相结合的实验,通过传感器得到的阻值与其它电阻,可以搭建一个电桥,将水温转化为电压,然后通过放大器将电压放大到所需要的值,将所得的电压送入单片机的 AD转换电路,将模拟信号转换成数字信号,从而在单片机的液晶屏上显示当前的温度。此烧水壶是可控制的,即设定温度,使水加热到设定温度且保温,此控制算法采用 PID控制算法来控制继电器的通断,来保证水温恒定在设定温度处。一、设计要求1•传感器:PtIOO铂热电阻测量放大器:自己设计与搭建被控对象:400W电热杯,约0.5公斤自来水执行机构:12V驱动,5A负载能力的继电器控制系统:51单片机控制算法:PID温度范围:环境温度~100度测量误差1度,控制误差2度、设计原理及方案热电阻传感器热电阻传感器是利用导体或半导体的电阻值随温度变化而变化的原进行测温的。热电阻的工作原理:温度升高,金属内部原子晶格的振动加剧,从而使金属内部的自由电子通过金属导体时的阻碍增大,宏观上表现出电阻率变大,电阻值增加,我们称其为正温度系数,即电阻值与温度的变化趋势相同。实验原理框图A/D5T220VA/D5T220V测量放大器电路图测量放大器电路图12VJ>»R2R412VRB12V-12VR9WWl12VJ>»R2R412VRB12V-12VR9WWl说明:电位器R10用来调节偏置电压,而电位器 R7则用来调节增益。实验时,用R10来调节零点,用R7来调节满度。该电路将0C-100C转换为0-5V电压。上述电路图采用仪表放大器,将铂热电阻两端的电压 U2与电位器R10两端的电压U1差放大,放大器输出电压 U0与电压差的关系为:R? R2「孑2R"U1)由铂热电阻阻值与水温的关系可知,铂热电阻的范围是 1001~1401。则1212(12K100)100-(12K1212(12K100)100-(12K100)100_(65_(12«140)12(12K100)100整理得:0乞(U2-UJZ0.04V而仪表放大器的输出电压为 0~5V,所以放大倍数大约为: 5/0.04=125。当假设R8/R4=2时,R2/R7=30由此,我们可以选择 R8=20KR4=10K,R2=10KR7=2K的电位器,为了使放大器的性能更好,我们可以把 R10选为200欧姆的电位器。调节R,可以调节电平,调节R7是调节放大倍数。4.A/D转换原理调节测量放大电路的电位器 R2和R7,使差分放大器输出 0-5V电压,送入单片机。单片机的 A/D转换电路将0-5V电压划分为1024个量化台阶,即0-5V对应0-1023。用10位二进制数表示。采样读出 DIO口的连续10个电平值,当量化台阶为 1000时,刚好1000对应的是100摄氏度,所以只需把采样读出的电平值左移一位,即可换算出对应的温度值。AD转换程序:TLC1549仇盘IEFirnrnrnrnmFinn冋t%%%羽m卜31Figureft.Timingfor Trarrafr卜31Figureft.Timingfor Trarrafr『UsingC95.PID控制算法PID控制,即比例-积分-微分控制。将控制信号u(k)表示为u(k)二kpXe(k)+kiX ⑹秽711=0 Ts其中:e(k)=r(k)-y(k)r(k)—设定值;y(k)—反馈值调节k“kxkd三个系数,使得温度可以稳定在设定的温度值上。三、程序设计主要思想:首先AD转换器TLC1549是10位的,故转换最大值为 1023,为显示及计算方便,只取到 1000,对应输入电压值4.88V,对应显示温度值100摄氏度•由于温度传感器基本是线性的,故 0摄氏度对应电压值0V,取放大器放大倍数约 100倍,将输入的微小电流放大•程序中计时器定时为50ms,每50次也就是2.5秒进行一次AD转换,显示及PID计算,也就是2.5秒的加热周期,故占空比的比例为五十分之几,这个几是PID计算出来的u换算出来的•u的取值有负有正,且大小范围非常大,不好确定,故对U经行比例压缩,u越大加热的占空比就越高, u为0对应不加热,这样就将u转换为占空比•虽然可能精度不够,但基本实现了温度的控制•关于PID三个系数的确定问题,比例项应大,使温度反应快一点•积分微分项系数也稍微取大一点,使震荡次数下降,稳定值波动较小•系统也许需要比较长的时间才能准确的跟踪设定值.TMOD设置采用T1定时/计数器,工作在方式1下,见下表:GATEC/TM1M0GATEC/TM1M000010000所以TMOD=10H开中断:EA=1;定时器T1开:ET1=1TH1、TL1设置定时时间设为50ms,所以50X10-3=(216-初始值)X(12/11.0592)x10-6解得:初始值=19456=0100110000000000B因此:TH1=01001100B=4CHTL1=00000000B=00H程序中需用到的系统地址系统地址:0A000H0A001H0A002H0A003H源程序附在附录里面。四、实验结果在电热水杯加热的初始阶段,继电器始终保持接通状态,电热水杯全速加热。当水温到达50r以上,继电器在PID算法的控制下开始通断交替,且随着水温的升高,继电器接通的时间逐渐减少,断开的频率逐渐增大。当水温到达设定温度左右(土2°C)时,继电器通断时间比例不再变化,电热水杯处在保温状态,水温恒定在设定温度上下。经过调试和温度的校后显示的温度值是比较准确的 ,误差大约在零点几摄氏度内.在做温度控制的时候,由于我显示出了占空比值和时间t,故调整系数很方便和直观.控制误差大约一摄氏度左右,也是符合要求的,但系统的超调量还是比较大的,故做了适当软件上的调整,如温度超过设定值时直接将继电器断开,而不是等待PID做出反应,毕竟温度控制是一个大滞后性和大惯性的系统.五、实验总结3年大学时光中,觉得最有用的课程就是这些实验了,它让我们学有所用,而不仅仅是各种理论,而是通过实践来巩固深入理解理论。这门实验课让我们不仅在软件上花了大量的功夫,代码力求精益求精;而且•在实际的调试中,还是发现软件只是一方面的内容,外硬件的优劣也是影响系统性能和精度的致命因素•尤其是做控制的时候和调整温度的时候,一个可靠的硬件可以省下不少功夫.温度控制系统的设计让我们学会的不仅仅是对单片机的内部结构的进一步理解与运用, 还在上一次实验的基础上进一步提高运放集成电路设计与运用的能力。附:源程序#include<REG52.H>#inelude<absacc.h>#ineludevintrins.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedint#defineKP0.55 //比例系数#defineKI0.02 //积分系数#defineKD0.1 //微分系数sbitpout=P1A7;sbitSCLK=P"2;sbitDI0=P1A3;sbitAD_CS=P"4;ucharnum1[13]={0x53,0x45,0x54,0x54,0x3A,0,0,0,0x2E,0,0xDF,0x43};ucharnum2[13]={0x4E,0x4F,0x57,0x54,0x3A,0,0,0,0x2E,0,0xDF,0x43};unsignedintsettemp=500,nowtemp;unsignedchartimecount=0;bitadflag,showflag; //ad标志位unsignedcharduty=O,duty_tem=O; 〃输出控制量floatel,en=0,es=0;floatp_out,i_out,d_out;voidwrite();voidBUSY();voidLCD_inti();voiddelay(ucharn){intii,jj;for(ii=0;ii<n;ii++)for(jj=0;jj<120;jj++);return;voidkeyscan(){ucharkey=0,tempKey=0;XBYTE[0x8fff]=0x0f;delay(IOO);tempKey=XBYTE[0x8fff];〃读取按键tempKey&=OxOf;delay(100);key=XBYTE[0x8fff];〃再次读取按键key&=OxOf;if(key==tempKey){while(key==tempKey)〃等待按键弹起{key=XBYTE[0x8fff];key&=OxOf;}switch(tempKey){case1:if(settemp<=900)settemp+=100;break;case2:if(settemp>100)settemp-=100;break;case4:if(settemp<=990)settemp+=10;break;case8:if(settemp>10)settemp-=10;break;default:break;}}}voidwriteData(uchardata1){while(XBYTE[0xa001]&0x80);〃 等待可写XBYTE[0xa002]=(data1);〃向数据端口写入数据}voidwriteString(uchardata1[],intlen){intk=0;for(k=0;k<len;k++)〃写入字符串writeData(data1[k]);}//LCD初始化voidLCD_inti(){BUSY();XBYTE[0xa000]=0x01;BUSY();XBYTE[0xa000]=0x06;BUSY();XBYTE[0xa000]=0x1c;BUSY();XBYTE[0xa000]=0x38;BUSY();XBYTE[0xa000]=0x0c;

voidBUSY(){ucharBUSYBF=0;while(1){BUSYBF=XBYTE[0xa001];if(BUSYBF<0x80)break;}return;}//AD初始化voidAD_init()//必须为高////必须为高//上升沿有效〃置高//本次AD读取上一次的值AD_CS=1;SCLK=1;DIO=1;}unsignedintAD(){uinttemp=0;uchari;AD_CS=0;SCLK=0;for(i=0;i<10;i++){temp<<=1;temp|=DIO;SCLK=1;SCLK=0;}//延迟//延迟>17usdelay(256);returntemp;}//定时器初始化voidtimer_init(){-TMOD=0x10;//T1:计时器EA=1; 〃全局中断允许TH1=0x4C;TL仁0x00; //初值19456ET仁1; //允许定时器中断timecount=0;TR1=1; //开始计时}voidOnTimer1()interrupt3{TR1=0; //停止计时EA=0;TH1=0x4C;TL1=0x00;//初值19456timecount++;if(timecount>50) 112.5秒进行一次PID控制{timecount=1;adflag=1;//ad采样开始控制}/* if(timecount<=duty){pout=1;}else{pout=0;}*/if(timecount%1O==O){showflag=1;//0.5秒对屏幕进行一次刷新//nowtemp+=1;}TR1=1; //开始计时EA=1;}//pid控制算法pid(){el=en;en=(signed)settemp-(signed)nowtemp;es+=en;p_out=KP*en; //比例项输出i_out=KI*es; 〃积分项输出d_out=KD*(en-el); //微分项输出if(i_out>100) 〃积分分离i_out=100;if(i_out<-100)i_out=-100;duty_tem=p_out+i_out+d_out;//总输出量if(duty_tem<O)duty_tem=0;if(duty_tem>=100)duty_tem=100;duty=floor(duty_tem)/2;//u最大值为50if(duty_tem<0)pout=1;elsepout=0;return(pout);}///////////////////////main(){pout=1;LCD_inti();AD_init();timer_init();if(adflag){nowtemp=AD();nowtemp=AD();adflag=O;pid();while(1){keyscan();if(showflag){LCD_inti();nowtemp=AD();nowtemp=AD();num1[5]=settemp/1000+48;num1[6]=(settemp/100)%10+48;num1[7]=(settemp/10)%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论