版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PID89C51DS18B20测得的实际值做比较,然后驱动制冷或keilCPID的控制。//PIDC2008-08-17structPID{unsignedintSetPoint;//DesiredunsignedintProportion;//ProportionalConstunsignedintIntegral;//积分常数IntegralConstunsignedintDerivative;//微分常数DerivativeConstunsignedintLastError;//Error[-1]unsignedintPrevError;//Error[-2]unsignedintSumError;//SumsofErrorsstructPIDspid;//PIDControlStructureunsignedintrout;//PIDResponse(Output)unsignedintrin;//PIDFeedback(Input)sbitdata1=P1^0;sbitclk=P1^1;sbitplus=P2^0;sbitsubs=P2^1;sbitstop=P2^2;sbitoutput=P3^4;sbitDQ=P3^3;unsignedcharunsignedcharhigh_time,low_time,count=0;//占空比调节参数unsignedcharset_temper=35;unsignedchartemper;unsignedchari;unsignedcharj=0;unsignedints;延时子程序,12M晶振为准,voiddelay(unsignedchartime)unsignedcharvoidwrite_bit(unsignedcharbitval)DQ=0;/*DQ以开始一个写时序DQ=1;/*1,则将总线置高delay(5);/*90usDA18B20采样*/DQ=1;/*DQ总线*/voidwrite_byte(unsignedcharval)unsignedchari;unsignedchartemp; /*关中断for(i=0;i<8;i++)/*写一字节数据,一次写一位temp=val>>i;/*移位操作,将本次要写的位移到最低位*/write_bit(temp);/*向总线写该位delay(7);/*120us后//EA=1;/*开中断unsignedcharread_bit()unsignedchari,value_bit;DQ=0;/*DQ,开始读时序DQ=1;/*释放总线*/unsignedcharread_byte()unsignedchari,value=0;if(read_bit())/*读一字节数据,一个时序中读一次,并作移位处理*/delay(4);/*80us以完成此次都时序,之后再读下一数据unsignedcharreset()unsignedcharDQ=0;/*DQ总线开始复位delay(30);/*480us*/DQ=1;/*释放总线*/presence=DQ;/*获取应答信号delay(28);/*延时以完成整个时序*/return(presence);/*0,voidget_temper()unsignedchari,j;i=reset/*复位}while(i!=0);/*1为无反馈信号*/i=0xcc;/*发送设备定位命令*/i=0x44;*发送开始转换命令*/delay(180);/*延时i=reset/*复位i=0xcc/*设备定位*/i=0xbe;*读出缓冲区内容s=(unsignedint)(j&0x0f);temper=i|j;/*temper中InitializePIDvoidPIDInit(structPIDmemset(pp,0,sizeof(structPIDunsignedintPIDCalc(structPID*pp,unsignedintNextPointunsignedintErrorpp->SetPointNextPoint;//pp->SumError+=Error;//dErrorpp->LastErrorpp->PrevError;//pp->PrevError=pp->LastError;pp->LastError=Error;return(pp->Proportion*Error//pp->Integral*pp //pp->Derivative*dError); unsignedchari;{rin=s;//Readrout=PIDCalc(&spid,rin);//PerformPIDif(high_time<=100)high_time=(unsignedchar)(rout/800);low_time=(100-else{rin=s;//Readrout=PIDCalc(&spid,rin);//PerformPIDif(high_time<100)high_time=(unsignedchar)(rout/10000);low_time=(100-////T0,40us*100=4msvoidserve_T0()interrupt1using1elsevoidserve_sio()interrupt4using2/*EA=0;elseEA=1;voiddisp_1(unsignedcharunsignedcharn,a,m;//k=disp_num1[n];voiddisplay()unsignedcharcodenumber[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};unsignedchardisp_num[6];unsignedintk,k1;unsignedcharunsignedcharunsignedcharphil[]={2,0xce,0x6e,0x60,0x1c,2};PIDInit(&spid);//InitializeStructurespid.Proportion=10;//SetPIDCoefficientsspid.Integral=8;spid.Derivativespid.SetPoint=100;//SetPIDSetpointelseelse////DS18b20#includesbit //typedefunsignedchar typedefunsigned voiddelay(wordfor(;useconds>0;useconds--
////bytebyte //DQ //DQ // //presence信号 //0允许,1//从1- 总线上读取一个字bytebytebytevalue=0;for(i=8;i>0;i--)//1-wirevoidwrite_byte(char for(i=8;i>0;i ////charbytec[2];intx; PIDPIDPID模糊控制技术,Pvar、Ivar、Dvar(比例、积分、微分)PIDΔUn=Kp[(en-en-1)+(T/Ti)en+(Td/T)(en-2*en-1+en-式中,en、en-1、en-2n次、n-1n-2次的偏差值,Kp、Ti、Td分别为比例系数、积分系数和微分系数,TTPIDPWM方波的占空比,后续加PWM方波的占空比决定加热功率。现场温度与目标温度的偏差大则占空比大,加热电路的加热功率大,使温度的实测值与设定值PIDPIDPID调节器参数整定的各种方℃P对系统性能的影响:比例系数加大,使系统的动作灵敏,速度加快,稳态误差减小;P偏大,振荡次数加多,调节时间加长P的符号就一定要取反。D合适,才能使超调量较小,减短调节时间。温底控制PID(ProportionalIntegralDerivative)控制是控制工程中技术成熟、应用广泛的一种控制策略,经过长期的工程实践,已形成了一套完整的控象值(以下简称被控参数)PID控制器的输入端,并与其给定值(SP得到偏差值(e值),从而使现场控制对象值发生改变,并趋向于给定值(SP值)1PID的实质就是对偏差(e值)进PIDD续-时间控制系统(PID控制系统)中,PID控制器应用得非常广泛。其设计技术成熟,长期以来形成了典型的结构,参数整定方便PIDPID控制。PID控制算法(1所示),所以必须将控制模型离散化,离散化的方采样周期,k为采样序号,用求和的形式代替积分,用增量的形式(求差)PID计算公式离散:(3)(4)PIDPIDPIDPID4PIDΔμ的大小,而Δμk=μk-μk-14做自减变换有:制PIDfOutfOutPIDPID的结构体数据类型,该数据类型P、I、D系数,以及设定值,历史误差的累加和等信息:structtPoint;//设定目标DesiredValueoportion;//比例系数ProportionalConsttegral;//积分系数IntegralConsterivative;//微分系数DerivativeConstError;//上次偏差Error;//ID;//stPIDPIDPIDfOut,fOut的值决定是否加热,加热时间是多少。C实现代码:DCalc(PID*pp,intNextPointpp->SetPoint*10-NextPoint;//mError+=Error;//=Error-pp->LastError;//vError=pp->LastError;//tError=ntegral*pp->SumError//erivative*dError//项)PD控制PD控制的实现过程:DCalc(PID*pp,intNextPointpp->SetPoint*10-NextPoint;//=Error-pp->LastError;//vError=pp->LastError;//tError=pp->Proportion*Error//erivative*dError//PIDfOutoportion=2;//PID比例值tegral=0;//PID积分值erivative=5;//PID微分值PIDCalc(&stPID,(int)(fT*10));//PID_Buffer&=0xff7f;//_Buffer|=0x0080;//TimerBPIDCalcfOut参数,如果该参数大于“0”,则开启加热器。IRQ2_TMIRQ2_TMB中断,fOut1fOut=0PIDCalc计算结果比较大说明离目标温度相基于PID算法和89C52单片机的温度2009-12-2217:36:09[][评基于PID算法和89C520PIDPIDPIDPID调节。PID控制器以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控PID数、积分时问和微分时间的大小。PID控制器参数整定的方法概括起来有两大类:一是理论计算整定法。PID一般算式及模拟控制规律如式(1)式中:u(t)为控制器的输出;e(t)为偏差,即设定值与反馈值之差;KC为控制器的放大系数,即比例增益;TI为控制器的积分常数;TD为控制器的微分时间常数。PIDKC,TI,TD将式(2)和式(3)代入式(1)PID样时的偏差值;E(K-1)K-1次采样时的偏差值;P(K)K次采样是调节器的输出。A/D采样输入、单片机控制、人机交互、控制信号输出四部分组成,其中温度传感部12PCRS232PID1kW1L清水进行加热。观测设定值和实测值之间的误差(当水温达到稳定时的值)1。50℃30s225minPID算法的单片机温度控制系统具有较高的精确回复数:5,PID【楼主位】MEGA16PID30%等级:152006-02-↑↑编辑删除【1楼】qq等级:2009-04-↑↑编辑删除【2楼】PIDLZ等级:2255100%1PIDPIDPID3PID02009-04-↑↑编辑删除【3楼】【2学习了等级:2009-04-↑↑编辑删除【4lengqi2009-04-↑↑编辑删除【5楼】2009-10-↑↑AT89S51单片机为核心的温度控制器的设计,在该设计中采用高精度的温度传感AD590对电热锅炉的温度进行实时精确测量,OP07将温度-电压信号进行放大,12AD574AAD转换,从而实现自动检测,PID算法,PWM控制输出参数,控制可控硅的通断时间,最终实现对炉温的高精度控制。PID方案一8031作为控制核心,ADC0809作模数转换,控制上使用对电阻丝加电,器件的价格便宜,8031内部没有程序存储器,需要扩展,增加了电路的复杂性,ADC08098位的模数转换,不能满足本题目的精度要求。方案二AT89S51作为电路的控制核心,12AD574A转换,PWM控制可控硅的通断以实行对锅炉温度的连续控制,此方案电路简单并且可以综上分析,1控制器设计温度控制设定波动范围小于±1%,测量精度小于±1%,控制精度小于±2%,超调整量小于实现控制可以升温也可以降温实时显示当前温度值按键控制:设置复位键、运行键、功能转换键、加一键、减一键二硬件1主机电路的2I/0通道的硬件电路的分送去显示;另一部分与设定值进行比较,PID算法得到控制量并经由单片机输出去控制电热锅炉加热数据采集电路的数据采集电路AD590,0P07,74LS373,AD574A0.1度,而考虑到测量干扰和数据处理误差,AD转化器的精度应更高才能保证控制精度的实现,这个精度可处粗略0.10.1度;AD转换器,40-90度,0.1度作AD区分度要求,AD需要区分(90-40)/0.1=500个数字量,10AD转换器。为此,12AD574A。℃精度.)0P07将温度一电压信号进行放大,A/D进行转换,以提高温度采集电路的可靠性。模拟电路2。2温度电压转换电控制执行电路的由输出来控制电炉,行隔离处理,TLP521在控制部分进行光电隔离,此外采用变压器隔离实现弱强电的电源PWM0时,光耦元件导通,从而使三极管形成有效偏置而导通,通过整流桥的电压经过集电极电阻以及射集反向偏压,7V左右的电压加在双向可控硅控制端,从而使可控硅导通,交流通路形成,电阻炉工作;反之单片机0时,光耦元件不能导通,三极管不能形成有效偏置而截止,可控硅控制端3控制执行部分3键盘及显示的键盘采用软件查询和外部中断相结合的方法来设计,3AN1,AN2,AN3,AN4,1AN3P3.2相连,采用外部中断方式,并且优先级定为最高;AN5AN4P1.7P1.6相连,采用软件查询的方式;AN1则为硬件复位键,R、C构成复位电路。1按键按下(D1亮)时,设定值;按键升起(D1不亮)时,3位静态显示。数字电路硬件部分见图:4数字硬件电路三系统软件级,以便能实时响应键盘处理;T05秒定时,5秒响应一次,以用来采ORGAJMPORGAJMPORGAJMPORGAJMP5A/D转换子程序、中断处理子程序、键盘处T0该中断是单片机5s定时中断,优先级设为最低,但却是最重要的子程序。在该中断响应中,单片机要完A/D数据采集转换、数字滤波、判断是否越限、标度转换处理、继续显示当前温度、与设定值进行比较,PID算法子程序并输出控制信号等功能。2.3T1T1T中断之中,T中断,PID算法子程序提供,T1间用于输出可控硅(电炉)运算控制模块涉及标度转换、PID式中,Ax:实际测量的温度值;NxA/D转换的温度量Am=90;Ao=40;Nm=FEH;单片机运算采用定点数运算,并且在高温区和低温区分别用程序作矫正处理,LED显示见7。PID有效地克服了积分饱和的影响,使控制精度大大提高。PID8。78PID9中,26C。实现思想:Ui(k)k次采样温度值,Ure(k)≥εPD算法e(k)<εPID9四源程序五结果分析论述本文针对电热锅炉温度控制系统模型,AT89S51PID算T1的定时常数,PWM输出控制可控硅的通断,79可以看出:本设计的控制器工作稳定,控制精度高,PID算法超调量大大降低;软件采用模块化结构,提PIDPID控制那块C程序啊18B20为
2#2009-5-2319:13只看该作者#include#istruct_pidintpv;/*integerthatcontainstheprocessvalue*/intsp;/*integerthatcontainsthesetpoint*/floatintegral;floatpgain;floatigain;floatdgain;
intdeadband;intstruct_pidintprocess_point,floatp_gain,i_gain,d_gain,/*DESCRIPTIONThisfunctioninitializesthepointersinthe_pidstructuretotheprocessvariableandthesetpoint.*pvand*spareintegervoidpid_init(struct_pid*warm,intprocess_point,intstruct_pidpid=pid->pv=process_point;pid->sp=set_point;/*DESCRIPTIONSetstheproportionalgain(p_gain),integralgain(i_gain),derivitivegain(d_gain),andthedeadband(dead_band)ofapidcontrolstructurevoidpid_tune(struct_pid*pid,floatp_gain,floati_gain,floatd_gain,pid->pgain=p_gain;pid->igain=i_gain;pid->dgain=pid->deadband=dead_band;pid->integral=integral_val;/*DESCRIPTIONSetanewvaluefortheintegraltermofthepidThisisusefulforsettingtheinitialoutputofthepidcontrolleratstartup.voidpid_setinteg(struct_pid*pid,floatpid->integral=new_integ;pid->last_error=0;/*DESCRIPTIONBumplesstransferalgorithim.Whensuddenlychangingsetpoints,orwhenrestartingthePIDequationafteranextendedpause,thederivativeoftheequationcancauseabumpinthecontrolleroutput.Thisfunctionwillhelpsmoothoutthatbump.Theprocessvaluein*pvshouldbetheupdatedjustbeforethisfunctionisused.voidpid_bumpless(struct_pidpid->last_error=(pid->sp)-(pid-/*DESCRIPTIONPerformsPIDcalculationsforthe_pidstructure*a.Thisfunctionusesthepositionalformofthepidequation,andincorporatesanintegralwinduppreventionalgorithim.Rectangularintegrationisused,sothisfunctionmustberepeatedonaconsistenttimebasisforaccurateRETURNVALUEThenewoutputvalueforthepidUSAGE#includefloatpid_calc(struct_pidintfloatpterm,dterm,result,err=(pid->sp)-(pid->pv);if(abs(err)>pid-ferror=(float)err;/*dointegertofloatconversiononlyonce*/pterm=pid->pgain*ferror;if(pterm>100||pterm<-pid->integral=pid->integral+=pid->igain*ferror;if(pid->integral>100.0)pid->integral=elseif(pid->integral<0.0)pid->integral=dterm=((float)(err-pid->last_error))*pid->dgain;result=pterm+pid->integral+dterm;elseresult=pid->integral;pid->last_error=err;return(result);voidfloatdisplay_value;intcount=0;pid=//printf("EnterthevaluesofProcesspoint,Setpoint,Pgain,Igain,D//scanf("%d%d%f%f%f",&process_point,&set_point,&p_gain,process_point=set_point=40;p_gain=(float)(5.2);i_gain=(float)(0.77);d_gain=dead_band=integral_valprintf("ThevaluesofProcesspoint,Setpoint,Pgain,Igain,Dgain\n");printf("%6d%6d%4f%4f%4f\n",process_point,set_point,p_gain,i_gain,printf("EnterthevaluesofProcesspid_init(&warm,process_point,set_point);pid_tune(&warm,p_gain,i_gain,d_gain,dead_band);pid_setinteg(&warm,0.0);//Getinputvalueforprocesspoint//howtodisplayoutputdisplay_value=pid_calc(&warm);printf("%f\n",display_value);3#大中小发表于2009-5-2319:49蒋辉
4#2009-5-2319:49只看该作者QQ TEL
5#2009-6-1618:26只看该作者SHAC#include#include<vector> //定义vector数组#include<string> usingnamespaceconstintNUM=8; //一个字由32比特(或者8个16进制数)constintBIT=512; //消息认证码要以512比特一组//stringH0="67452301";stringH1="EFCDAB89";stringH2="98BADCFE";stringH3="10325476";stringH4="C3D2E1F0";classSHA1//vector数组vector<int>hex_into_dec(stringword);//vectorstring字符串形式stringnum_into_message(vector<int>A);//XY的逻辑"和vector<int>word_AND(vector<int>A,vector<int>//XY的逻辑"或vector<int>word_OR(vector<int>A,vector<int>//XY的逻辑"异或vector<int>word_XOR(vector<int>A,vector<int>//XY的逻辑"补vector<int>word_COMPLEMENT(vector<int>//XY2^32vector<int>word_ADD(vector<int>A,vector<int>//Xs个位置vector<int>ROTL(vector<int>A,ints);//SHA-1的填充方案,msgASCIIvector<vector<int>>SHA_1_PAD(string//SHA-1vector<vector<vector<int>>>compress(vector<vector<int>>//ftftB,C,D三个字作为输入,并产生一个字作vector<int>Ft(intt,vector<int>B,vector<int>C,vector<int>//Kvector<int>K(intt);//SHA-1(Hash算法)的加密vector<vector<int>>SHA_1(stringmsg);//vectorstringstringSHA1::num_into_message(vector<int>intstringmsg=for(i=0;i<if(A[i]>=0&&A[i]<=9)msg+='0'+A[i];elseif(A[i]>=10&&A[i]<=15)msg+='A'+(A[i]-10);return//vector数组vector<int>SHA1::hex_into_dec(stringintvector<int>result(NUM,0);for(i=0;i<NUM;i++)if(word[i]>='0'&&word[i]<=result[i]=word[i]-elseif(word[i]>='A'&&word[i]<=result[i]=10+word[i]-return//XY的逻辑"和vector<int>SHA1::word_AND(vector<int>A,vector<int>vector<int>result(NUM,0);inti;for(i=0;i<result[i]=A[i]&return//XY的逻辑"或vector<int>SHA1::word_OR(vector<int>A,vector<int>vector<int>result(NUM,0);inti;for(i=0;i<result[i]=A[i]|return//XY的逻辑"异或vector<int>SHA1::word_XOR(vector<int>A,vector<int>vector<int>result(NUM,0);inti;for(i=0;i<result[i]=A[i]^return//XY的逻辑"补vector<int>SHA1::word_COMPLEMENT(vector<int>vector<int>result(NUM,0);inti;for(i=0;i<result[i]=15-return//XY2^32vector<int>SHA1::word_ADD(vector<int>A,vector<int>vector<int>result(NUM,0);inti;for(i=NUM-1;i>=0;i--result[i]=A[i]+B[i];if(i!=0)inttemp=result[i]/16;result[i-1]+=temp;result[i]%=return//Xsvector<int>SHA1::ROTL(vector<int>A,intvector<int>result=A;vector<int>temp(NUM,0);inti,j;for(i=0;i<for(j=NUM-1;j>=0;j--if(result[j]/8>=temp[j]=result[j]<<=result[j]%=16;if(j<NUM-result[j]+=temp[j+elseif(result[j]/8==temp[j]=result[j]<<=result[j]%=result[NUM-1]+=return//SHA-1的填充方案,msgASCII码组成vector<vector<int>SHA1::SHA_1_PAD(stringintlen=msg.length();intbit_num=len*8;inti,j;intnum,lest=bit_num%if(lest!= //512512num=bit_num/512+num=bit_num///8vector里面,51264位元素vector<vector<int>result;for(i=0;i<for(i=0;i<for(j=0;j<64&&i*64+j<result[i][j]=msg[i*64+//512if(lest!=intx=num-1,last_len=lest/8;result[x][last_len]=128; for(i=last_len+1;i<56;i++)result[x][i]=intlast_l=lest;j=63;while(j>=result[x][j]=last_l%128;last_l/=128;j--return//SHA-1压成以字为单位(三维数组有点复杂)vector<vector<vector<int>SHA1::compress(vector<vector<int>result)vector<vector<int>>rr;intfor(i=0;i<for(i=0;i<for(j=0;j<rr[i][2*j]=result[i][j]/rr[i][2*j+1]=result[i][j]%vector<vector<vector<int>>>rrr;for(i=0;i<for(i=0;i<for(j=0;j<for(i=0;i<for(j=0;j<rrr[i][j/8][j%8]=return//ftftB,C,D三个字作为输入,并产生一个字作为输vector<int>SHA1::Ft(intt,vector<int>B,vector<int>C,vector<int>vector<int>result;if(t>=0&&t<=19)vector<int>a1=vector<int>a2=word_AND(word_COMPLEMENT(B),D);result=word_OR(a1,a2);elseif((t>=20&&t<=39)||(t>=60&&t<=vector<int>a1=word_XOR(B,C);result=word_XOR(a1,D);elseif(t>=40&&t<=vector<int>a1=word_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉首大学张家界学院《思想道德修养与法律基础》2021-2022学年第一学期期末试卷
- 脑病科护理安全
- 言语治疗呼吸系统
- 皮肤科护理论文
- 二零二四年度智能照明系统合同3篇
- 招商员工入职培训
- 英语探究型活动设计
- 二零二四年度婚姻登记处常用离婚协议参考样式3篇
- 2024年度建设合同:城市供水管道建设合同2篇
- 人音版音乐七年级上册《溜冰圆舞曲》课件
- 土地权属争议案件调查处理文书格
- 樱花栽培管理浅谈
- 《探究串并联电路中电流的规律》说课稿
- 医院回避制度
- 新概念第二册第62课
- 在全市现代生态(富硒)循环农业现场会上的讲话
- DB63∕T 954-2020 压力容器安全使用管理规范
- 第四讲(2)转炉主体设备
- 武汉大学2011年博士研究生入学考核申请表
- 《设计色彩》全套教学课件(完整版)
- 排球体育运动宣传PPT模板
评论
0/150
提交评论