




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
温度掌握系统及掌握方案0808378094【摘要51单片机与pc机相结合,使用ADC0809数据使用中位值平均滤波法进展滤波,然后使用专家模糊PID掌握算法对加热炉进展掌握,加热。【关键字:PC机51单片机炉温掌握专家模糊PID掌握 滤波一、 概述温度是工业生产中常见的工艺参数之一关,因此温度掌握是生产自动化的重要任务。对于不同生产状况和工艺要求下的温度掌握,所承受的加热方式,燃料,掌握方式也各不一样。系统用温度传感器将检测到的实际炉温A/D转换,51单片机把所得值与设定值进展比较,使用专家模糊PID算法进展修正,求得对应的掌握量掌握可控硅驱动器,调整电炉的加热功率,从而实现对炉温的掌握。因此采集的炉温数据精度至关重要。利用51单片机实现温度智能掌握,能自动完成数据采集、处理、缓冲、转换、并进展PID实施掌握,包括各参数数值的修正,并把数据传输给PC机进展动态直观显示,同时也可以通过PC机设定参数。但在掌握过程中应当留意,采样周期不能太短,否则使调整过于频繁,不但执行机构不能反响,而且计算机的利用率大为降低。采样周期太长,硬件实施手段及系统特点。二、 温度掌握系统的硬件组成框图与其具体功能介绍PC51T-t输参数,而在曲线跟踪过程中也是通过pc51机:接收adc采样得到的数值,并进展滤波处理,依据所得到的数值进展专家模糊PIDPWM同时传输相关的数据给PCPC继电器盒:承受51机的通断信号,弱电掌握强电,对加热棒及风扇进展掌握。分为手动和自动两种方式加热棒:对温控箱加热,可通过转变通断的占空比来调整加热的速率风扇:对温控箱降热,通过转变通断的占空比来调整降热的速率加热箱:被控对象,特点:延时大,温度在肯定范围内是线性变化的。硬件电路三、 掌握流程〔一〕程序设计512开始开始系统初始化串口中断设定温度值定时中断采样数据滤波专家PID算法给PC机发送参数输出PWMPC3开开始系统初始化曲线跟踪画出所要跟踪的曲线51传输的参数传输温度设定值显示1、MSComm通信方式PC51机之间承受RS-232CVisualBasic6.0编写掌握软件。MSCommMSCommWindowsActiveXMSComm件供给了两种通信方式:大事驱动和查询。大事驱动是串口交互通信中的一种格外有效的方法。当串口接收缓冲区中收到数据,或者串口发送完毕之类的大事发生时,系统将大事转换为消息,在MSComm控件中表达为CommEventMSComm控件的OnComm消息,从而实现串口通信的编程。查询实质上还是属于大事驱动的范围,由于查询是通过每隔一段时间就查询一次MSComm控件的CommEvent属性的值来查询发生的大事和消灭的错误。一旦CommEvent的值发生变化,说明有通信大事或者错误发生。MSCommA.MSComm对MSComm串口的初始化一般要完成以下的设置:设定端口号CommPor输协议Setting、设定其他参数、翻开通信端口。捕获串口大事在窗体设计中,双击窗体中的MSComm空间,会自动弹出代码窗口,系统会自动生成OnComm子程序并定位光标在OnComm子程序。我们可以在里边编程设定发生OnComm串口数据的读取在MSComm进制形式。对于文本形式来说,需要在初始化时设置InputMode属性为comInputModeText,读取时可以直接将接收缓冲区赋值给一个String字符串变量。MSDNInput过一个VariantVariant收,承受后的变量作为二进制数组使用,也可直接用二进制数组接收。串口数据的写入。在MSComm控件中,发送数据同样有两种方式。一种是文本方式,另一种是二进制方式。对于文本方式,直接将一个字符串变量传递给Output2、温度曲线的绘制画图框首先建立一个PictureBox画图框picture1,全部的曲线绘制工作都在这个画图框AutoRedrawFalse,当程序窗口被遮盖时,再切换回程序,之前绘制的图形中被挡住的局部会被擦去;设置为True后,切换回程序,系统会自动重绘制被擦去的局部。确定绘图点的位置VB〔X向下为Y方向。为画图便利,系统设定picture1的大小为0,0〔1200,10,而时1s,所以picture1120min,而纵坐标即温度值。但实010030-80,Y值也需由式子Y=〔T-30〕*2得到。绘图方法Pset〔点、Line〔线、Circle〔圆〕〔二〕系统的算法与根本原理1、数据采集与滤波1s10采集数据的特点选择了中位值平均滤波法〔又称防脉冲干扰平均滤波法〕连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。但是单单该算二次滤波,即依据所得的结果与上次的结果进展比较,假设偏差大于2.5度则认定为坏点,同时把上次的结果赋给这次的结果。2、掌握算法对于炉温掌握,其方框图为:RR+eG(s)cU(s)G(s)cY(s)-系统框图PIDPID〔E〔〕为误差:U(t)k
[e(t)kte(t)dtT
de(t)]p i0
d dt经数字离散化,掌握器〔其中T3S〕为:Tk TU(k)k
p
Tii0
E(i)
d[E(k)E(k1)]}TkE(k)
KpT
KTE(i) pd
[E(k)E(k1)]p Ti经化简有:kT
Ti0KTPkp
,I pTi
pd, ①TU(k)PE(k)Iki0
E(i)D[E(k)E(k1)] ②经PID掌握器输出〔,作为占空比的掌握。积分分别PID虽然PID易于实现,但当输入的偏差太大时,简洁产生因积分溢出引起振荡。积分分别PID数字化后的掌握器为:U(k)PE(k)Iki0
E(i)D[E(k)E(k1)],0或1前馈校正加PIDG (s)C2-R(s)+eGG (s)C2-R(s)+eG(s)+cU(s)G(s)cY(s)-前馈掌握框图即是对于输入的现在斜率变化,和一段时间后的斜率变化作比照,消灭一个差值,PID〔三〕试验过程用计算机掌握一个工业生产过程时,必需先将过程中表达因与果、量与量之间的关系用数学形式描述出来,编好程序存入计算机,才能实现掌握有关的生产过程。对数学模型的建立有阶跃响应法、脉冲响应法、相关函数法等多种方法。1PID承受阶跃响应方法,对炉子的数学模型K1+T1τ〕可得以下参数:炉子时间常数T=5~8min,K=0.6~1.2,延迟时间τ=0.5~2.5min由已得参数,承受Matlab数,为试验做好预备。Simulink得到等幅振荡响应:临界比例系数Ku=10,振荡周期Tu大约为200s在实际试验当中,用临界比例系数法得Tu=220S根本相符。依据阅历PIDKu,TuKp=10/1.67=6Ti=0.5*Tu=100STd=0.125*Tu=25代入①式,有:P=6,I=0.18〔0.2〕,D=5045)按此作为PID掌握器初步参数。2定温算法试验中试验了该PID算法,但由于所用的炉子功率太小,导致消灭超调之后温度很难降下来,也使炉温消灭长时间的震荡,所用试验承受了让风扇全开,通过掌握加热棒是炉子稳定到所需的温度。依据炉子的温度曲线走向趋势,承受了专家PID算法,即编程使炉子的曲线按自己想要的方向进展。通过不断的修改算法与试验,最终得到的算法或许如下:先让炉子全速升温,在炉子温度上升到设定温度10度误差范围内时承受带PID重量分别开来作为推断依据。依据D温还是在降温,在升温过程消灭负偏差时,马上关掉加热棒,而在降温过程中负偏差大于两度时才关闭加热棒。其他时候都是依据PI算法得出的结果掌握加热棒的开关占空比。积分值设了一个上限,但误差积分超过该上限则积分值为该上限值,假设积分值连续增大的另一个上限则把积分值设为0,重累计误差。而上限值的选取在不同温度时可选不同的值,在调整过程中可以设的大一点,而在稳态时可以设小一点,从而使炉温更加稳定。该算法得出的结果如以下图:由图可见除去一两个坏点〔是由于变送器引起的,虽然经过二次滤波后数值减小了,但照旧可以看到,炉子温度稳定在65度左右,误差1度。跟踪曲线算法该算法基于定温算法,再依据实际曲线的趋势进展调整。首先参加了模糊掌握量,由于温度变化范围比较大,在不同的温度范围内需对P进展调整。其次D的作用更加的明显。基于定温算法,在升温过程曲线是趋于稳定状态的,即D重量会有等0〔由于温度是个缓慢变化的量,在2s趋D重量也根本为0故D的采样时间增大到10s假设消灭该状况则应加大炉子的使炉子有升温的趋势,即强制升温。其次在稳定在65度然后升温时会消灭滞后,此时需加超前处理算法,即在接近拐点处就给炉子肯定的PWM加热,使其到达拐点时刚好处于升温趋势。以下是试验过程的一些截图:Dkp增加D推断的结果,在拐点处的滞后使得后一段曲线不能很好的跟踪,而且可看出后一段的强制升温值设小了偏离曲线后无法跟上去。最终的结果,即加了D推断和超前处理,同时加大了后一段强制升温值,由图可见跟踪的很好。四、 设计总结与扩展〔一〕1试验中,由51机的P1口对温控箱的开关炉进展掌握,更微小的说,是对温控箱里的继电器进展掌握,当P1口输出一个高电寻常,给继电器一个驱动电流,让继电器吸合,即开P1P1512〔实际系统的采样周期〕的固定问题对于数字系统,其采样周期是很有讲究的,关系到掌握效果和系统的稳定。对于一个温10几秒范围。经过屡次试验,1PWM2s,这样的选择使其稳定性,收敛性,抗干扰性都会好很多,避开过于频繁的开关操作,既能保护继电器,又能使得系统的反响在预期之内。310个采样点作为一次PID重代价,包括引发振荡,跳出限幅范围,甚至引起发散。的坏点又进展了二次滤波。4较丰富的实践阅历则很可能使连接起来的系统不能如期的工作成为垃圾。由于单片机与PC机通信方面以前没做过,所以使得试验过程滞后了,但这不影一段时间才能看到结果……不过当消灭的结果最终到达想要的时容了。pcvb程序〔包括串行通信,数据接收等,跟踪曲线等等〕DimXinterval,YintervalAsInteger”Xintervaxy轴多少个单位DimX,YpreX,PreYAsDouble当前坐标和前一个坐标DimiAsIntegerDimtemp_setAsDoubleDimMinX,MaxX,MaxY,MinYAsIntegerPrivateSubForm_LoadMSComm1mPort=1MSComm1.Settings=“1200,N,8,1“MSComm1.InputLen=0MSComm1.InBufferSize=1024MSComm1.OutBufferSize=512MSComm1.SThreshold=0MSComm1.RThreshold=3MSComm1.InBufferCount=0MSComm1.OutBufferCount=0MSComm1.InputMode=comInputModeBinaryMinX=0MaxX=20*60MinY=0MaxY=100Yinterval=1Xinterval=1Picture1.Scale(MinX,MaxY)-(MaxX,MinY)Timer1.Enabled=FalseTimer2.Enabled=FalseTimer3.Enabled=FalseEndSubPrivateSubDrawCurvepreX=XPreY=YX=X+XintervalY=(Val(NowTemp.Text)-30)*2Picture1.PSet(X,Y)”Picture1.Line(preX,PreY)-(X,Y),2EndSubPrivateSubPicture1_ClickEndSubPrivateSubstart_ClickIfMSComm1.PortOpen=FalseThenMSComm1.PortOpen=TrueTimer1.Enabled=TruedarwbacklineForm_XYEndSubPrivateSubStop_ClickIfMSComm1.PortOpen=TrueThenMSComm1.PortOpen=FalseTimer1.Enabled=FalseTimer2.Enabled=FalseTimer3.Enabled=FalseEndSubPrivateSubRedarw_ClickPicture1.ClsdarwbacklineX=0Y=0EndSubPrivateSubSet_temp_ClickDimout_data(0)AsByteIfMSComm1.PortOpen=FalseThenMSComm1.PortOpen=Trueout_data(0)=Val(Settemp.Text)MSComm1.Output=out_data正在传数...“EndSubPrivateSubMSComm1_OnCommDimdatinAsBytedatin=MSComm1.InputY=datin(0)pwm.Text=CStr(datin(1))wanttemp.Text=CStr((datin(2)-5)/2)Set_P.Text=CStr(datin(3))Get_AD.Text=CStr(Y)Com_State.Text正在接收数据...“NowTemp.Text=CStr((Y-5)/2)EndSubPrivateSubTimer1_TimerDrawCurveEndSubPrivateSubForm_XYDimX!,Y!,i%Form1.Scale(-9,9)-(9,-9)CurrentX7:CurrentY-7.2:Print时间〔min〕“CurrentX-8.5:CurrentY4.5:Print温度〔C〕“Fori=0To20 ”X轴坐标Line(i*7/10-7,-7.2)-(i*7/10-7,-7)CurrentX=i*7/10-7-0.2CurrentY=-7.5PrintiNextiFori=0To5 ”Y轴坐标Line(-7.2,i*11/5-7)-(-7,i*11/5-7)CurrentX=-8CurrentY=i*11/5-7+0.1Printi*10+30NextiEndSubPrivateSubdarwbacklineDimX!,Y!,i%ForX=0To1200IfXMod60=0ThenFori=1To200Y=i/2Picture1.PSet(X,Y),RGB(0,200,0)NextiElseFori=1To50Y=i*2Picture1.PSet(X,Y),RGB(0,200,0)NextiEndIfX=X+2NextXEndSubPrivateSubfollow_lineIfi<=300ThenSettemp.Text=CStr(55+i/30)ElseIfi<=480ThenSettemp.Text=CStr(65)ElseIfi<=780ThenSettemp.Text=CStr(65+(i-480)/30)ElseIfi<=900ThenSettemp.Text=CStr(75)ElseSettemp.Text=CStr(75-(i-900)/30)EndIfEndIfEndIfIfEndSubPrivateSubfollowline_ClickPicture1.Clsdarwbacklinei=0Timer2.Enabled=TruedarwlineEndSubPrivateSubdarwlineDimX!,Y!ForX=0To1200IfX<=300ThenY=55+X/30Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)ElseIfX<=480ThenY=65Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)ElseIfX<=780ThenY=65+(X-480)/30Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)ElseIfX<=900ThenY=75Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)ElseY=75-(X-900)/30Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)EndIfEndIfEndIfIfX=X+2NextXEndSubPrivateSubTimer2_TimerDimout_data(0)AsByteIfMSComm1.PortOpen=FalseThenMSComm1.PortOpen=Truei=i+1follow_lineout_data(0)=Val(Settemp.Text)MSComm1.Output=out_dataEndSubPrivateSubfollow_line2Settemp.Text=CStr(65+10*Sin(2*3.1415926*i/1200))EndSubPrivateSubdarwline2DimX!,Y!ForX=0To1200Y=65+10*Sin(2*3.1415926*X/1200)Y=(Y-30)*2Picture1.PSet(X,Y),RGB(0,0,255)X=X+2NextXEndSubPrivateSubfollowline2_ClickPicture1.Clsdarwbacklinei=0Timer3.Enabled=Truedarwline2EndSubPrivateSubTimer3_TimerDimout_data(0)AsByteIfMSComm1.PortOpen=FalseThenMSComm1.PortOpen=Truei=i+1follow_line2out_data(0)=Val(Settemp.Text)MSComm1.Output=out_dataEndSub单片机定温程序〔主要是专家PID算法,AD温度承受,数据输出〕#include<reg52.h>#include<stdio.h>#defineuintunsignedint#defineucharunsignedcharunsignedcharxdata*ad=0xcfa8;ucharTEMP_MAX=200;ucharTEMP_DEADLINE=1;ucharTEMP_KP=11;ucharTEMP_KI=20;ucharTEMP_KD=3;uintcount1,count2,count3,count4;uchartemp[10]=0;uintaverage_temp1;ucharaverage_temp;ucharlast_average_temp;uchartemp_pwm;sbitstover=P3^4;sbitfan=P3^5;sbitad_eoc=P3^3;ucharreceive_buf[4];uchartemp_Ref;inttemp_PreError;inttemp_PreDerror;inttemp_PreU1;inttemp_PreU;uchartemp_kp1;uchartemp_ki1;uchartemp_kd1;ucharTEMP_MIN;uchartemp_kp2;uchartemp_ki2;uchartemp_kd2;ucharKI;interror_count;interror_count2;interror_count3;ucharde_flag=0;ucharlast_temp;ucharflag1=0;charI_max=15;charI_min=-15;voidtemp_PIDInit{temp_Ref=0;average_temp=0;temp_PreError=0;temp_PreDerror=0;temp_PreU=0;temp_kp1=TEMP_KP;temp_ki1=TEMP_KI;temp_kd1=TEMP_KD;temp_kp2=temp_kp1;}uchartemp_PIDCalc{int if(temp_kp1!=temp_kp2){temp_kp1=temp_kp2;temp_PreError=0;temp_PreDerror=0;temp_PreU=0;}if(average_temp>2)TEMP_MIN=0;elseTEMP_MIN=TEMP_MAX;error=temp_Ref-average_temp;temp_PreError=error;temp_PreDerror=d_error;count4++;error_count+=error;error_count2+=error;if(count4>=10){if((last_temp-average_temp)<0){de_flag=1;}else{de_flag=0;}d_error=last_temp-average_temp;temp_PreDerror=d_error;last_temp=average_temp;error_count2=0;count4=0;}if(error_count>I_max){error_count3=I_max;if(error_count>I_max+10||error_count2<0){KI=0;error_count=0;}}elseif(error_count<=I_min){error_count3=I_min;if(error_count<I_min-10||error_count2>0){KI=0;error_count=0;}}else{error_count3=error_count;KI=1;}if(error>=20)temp_PreU=200;elseif(error<0)temp_PreU=0;else{temp_PreU1=temp_kp1*(temp_Ref-5)+KI*temp_ki1*error_count3;temp_PreU=temp_PreU1/20-2;}if(error<0&&error>-4&&de_flag==1){temp_PreU1=temp_kp1*(temp_Ref-5)+KI*temp_ki1*error_count3;temp_PreU=temp_PreU1/20-2;}if(error<0&&error>-2&&de_flag==0){temp_PreU1=temp_kp1*(temp_Ref-5)+KI*temp_ki1*error_count3;temp_PreU=temp_PreU1/20-2;}if(error==0&&d_error==0){if(flag1==0){error_count3=0;flag1=1;}I_max=10;I_min=-10;}else{flag1=0;}if(temp_PreU>=TEMP_MAX)temp_PreU=TEMP_MAX;elseif(temp_PreU<=TEMP_MIN)temp_PreU=TEMP_MIN;return(temp_PreU);}voidsystem_int{TMOD=0x21;TL1=0xf3;TH1=0xf3;PCON=0x00;TR1=1;SCON=0x50;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TR0=1;EA=1;ET0=1;ES=1;fan=1;temp_PIDInit;temp_Ref=65;temp_Ref=65*2+5;}voidto_certern_temp{temp_pwm=temp_PIDCalc;}voiddata_process{uchartemp_temp,i,j;for(j=0;j<=8;j++){for(i=j+1;i<=9;i++){if(temp[j]>=temp[i]){}else{temp_temp=temp[j];temp[j]=temp[i];temp[i]=temp_temp;}}}average_temp1=temp[1]+temp[2]+temp[3]+temp[4]+temp[5]+temp[6]+temp[7]+temp[8]+average_temp*8;average_temp=average_temp1/16;if(last_temp-average_temp<=10&&last_temp-average_temp>=-10){if(average_temp-last_average_temp>5||average_temp-last_average_temp<-5){average_temp=last_average_temp;}}last_average_temp=average_temp;}voidmain{system_int;while(1){}}voidtimer0interrupt1{TH0=(65536-5000)/256;TL0=(65536-5000)%256;count1++;count3++;if(count3>=200){count3=0;}if(temp_pwm<=count3){}else{}
stover=0;stover=1;if(count1>=10){count2++;*ad=0;ad_eoc=1;while(ad_eoc!=1);ad_eoc=0;temp[0]=*ad;temp[1]=temp[0];temp[2]=temp[1];temp[3]=temp[2];temp[4]=temp[3];temp[5]=temp[4];temp[6]=temp[5];temp[7]=temp[6];temp[8]=temp[7];temp[9]=temp[8];if(count2>=10&temp[9]!=0){data_process;to_certern_temp;SBUF=average_temp;while(!TI);TI=0;SBUF=temp_pwm;while(!TI);TI=0;SBUF=temp_Ref;while(!TI);TI=0;count2=0;}count1=0;}TF0=0;}voidssio(void)interrupt4{uchari;ES=0;while(RI==0);RI=0;receive_buf[0]=SBUF;temp_Ref=receive_buf[0];temp_Ref=temp_Ref*2+5;ES=1;}曲线跟踪时的算法局部如下:uchartemp_PIDCalc{if(temp_Ref<58)temp_kp1=9;elseif(temp_Ref<63)temp_kp1=10;elseif(temp_Ref<69)temp_kp1==11;elsetemp_kp1=12;error=temp_Ref-average_temp;temp_PreError=error;temp_PreDerror=d_error;count4++;error_count+=error;error_count2+=error;if(count4>=10){if({}else{}
temp_Ref==135)count5++;if(count5>=13){turn_flag1=1;}count5=0;turn_flag1=0;if({}else{
temp_Ref==155)count6++;if(count6>=12){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 采购外贸流程
- 针灸治疗头晕
- 采购年终总结与未来规划
- 销售部门年终总结和计划
- 静脉炎护理疑难病例讨论
- 中级个人理财-2025中级银行从业资格考试《个人理财》预测试卷4
- 阳光心态培训
- 防洪防汛安全教育班会
- 信息技术系统安全防护
- 家庭文明礼仪教育
- 东方终端锅炉安全环保升级改造工程环境影响报告表
- 2025届东北三省三校高三第一次联合模拟考试地理试题(原卷版+解析版)
- 四年级数学(小数加减运算)计算题专项练习与答案
- 2025年四川成渝高速公路股份有限公司招聘笔试参考题库含答案解析
- 2025年赣南卫生健康职业学院单招职业技能考试题库及完整答案1套
- 2024年南信语文数学试卷(含答案)
- JGJ46-2024 建筑与市政工程施工现场临时用电安全技术标准
- 大连农商银行2024年招聘172人管理单位遴选500模拟题附带答案详解
- DZ∕T 0283-2015 地面沉降调查与监测规范(正式版)
- 2016-2023年江苏电子信息职业学院高职单招(英语/数学/语文)笔试历年考点试题甄选合集含答案解析
- 8.6《林黛玉进贾府》课本剧剧本
评论
0/150
提交评论