




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PID 温度控制程序/PID 算法温控 C 语言 2008-08-1718:58#include#include#include#includestructPIDunsignedintSetPoint;/设定目标 DesiredValueunsignedintProportion;/比例常数 ProportionalConstunsignedintIntegral;/积分常数 IntegralConstunsignedintDerivative;/微分常数 DerivativeConstunsignedintLastError;/Error-1unsignedintPrevError;/Err
2、or-2unsignedintSumError;/SumsofErrors);structPIDspid;/PIDControlStructureunsignedintrout;/PIDResponse(Output)unsignedintrin;/PIDFeedback(Input)sbitdata1=P1A0;sbitclk=P1A1;sbitplus=P2A0;sbitsubs=P2A1;sbitstop=P2A2;sbitoutput=P3A4;sbitDQ=P3A3;unsignedcharflag,flag_1=0;unsignedcharhigh_time,low_time,co
3、unt=0;/占空比调节参数unsignedcharset_temper=35;unsignedchartemper;unsignedchari;unsignedcharj=0;unsignedints;/*延时子程序,延时时间以 12M 晶振为准,延时时间为 30usxtime*voiddelay(unsignedchartime)(unsignedcharm,n;for(n=0;ntime;n+)for(m=0;m2;m+)/*写一位数据子程序*/voidwrite_bit(unsignedcharbitval)EA=0;DQ=0;/*拉低 DQ 以开始一个写时序*/if(bitval=1
4、)_nop_();DQ=1;/*如要写 1,则将总线置高*/delay(5);/*延时 90us 供 DA18B2C0R 样*/DQ=1;/*释放 DQ 总线*/_nop_();_nop_();EA=1;/*写一字节数据子程序*/voidwrite_byte(unsignedcharval)unsignedchari;unsignedchartemp;EA=0;/*关中断*/TR0=0;for(i=0;ii;/*移位操作,将本次要写的位移到最低位*/temp=temp&1;write_bit(temp);/*向总线写该位*/)delay(7);/*延时 120us 后*/TR0=1;E
5、A=1;/*开中断*/)/*读一位数据子程序*/unsignedcharread_bit()unsignedchari,value_bit;EA=0;DQ=0;/*拉低 DQ 开始 t时序*/_nop_();_nop_();DQ=1;/*释放总线*/for(i=0;i2;i+)value_bit=DQ;EA=1;return(value_bit);/*读一字节数据子程序*/unsignedcharread_byte()unsignedchari,value=0;EA=0;for(i=0;i8;i+)if(read_bit()/*读一字节数据,一个时序中读一次,并作移位处理*/value|=0
6、x01i;delay(4);/*延时 80us 以完成此次都时序,之后再读下一数据*/EA=1;return(value);)/*复位子程序*/unsignedcharreset()(unsignedcharpresence;EA=0;DQ=0;/*拉低 DQ 总线开始复位*/delay(30);/*保持低电平 480us*/DQ=1;/*释放总线*/delay(3);presence=DQ;/*获取应答信号*/delay(28);/*延时以完成整个时序*/EA=1;return(presence);/*返回应答信号,有芯片应答返回 0,无芯片则返回 1*/)/*获取温度子程序*/voidge
7、t_temper()(unsignedchari,j;do(i=reset();/*复位*/while(i!=0);/*1 为 无 反 馈 信 号 */i=0 xcc;/* 发 送 设 备 定 位 命 令*/write_byte(i);i=0 x44;/*发送开始转换命令*/write_byte(i);delay(180);/*延时*/do(i=reset();/*复位*/while(i!=0);i=0 xcc;/*设备定位*/write_byte(i);i=0 xbe;/*读出缓冲区内容*/write_byte(i);j=read_byte();i=read_byte();i=(i4;tem
8、per=i|j;/*获取的温度放在 temper 中*/*=InitializePIDStructure=*/voidPIDInit(structPID*pp)memset(pp,0,sizeof(structPID);/*=PID 计算部分=*/unsignedintPIDCalc(structPID*pp,unsignedintNextPoint)unsignedintdError,Error;Error=pp-SetPoint-NextPoint;/偏差pp-SumError+=Error;/积分dError=pp-LastError-pp-PrevError;/当前微分pp-PrevE
9、rror=pp-LastError;pp-LastError=Error;return(pp-Proportion*Error/比例+pp-Integral*pp-SumError/积分项+pp-Derivative*dError);/微分项)/*温度比较处理子程序*/compare_temper()unsignedchari;if(set_tempertemper)if(set_temper-temper1)high_time=100;low_time=0;)elsefor(i=0;i10;i+)get_temper();rin=s;/ReadInputrout=PIDCalc(&s
10、pid,rin);/PerformPIDInteration)if(high_time=100)high_time=(unsignedchar)(rout/800);elsehigh_time=100;low_time=(100-high_time);)elseif(set_temper0)high_time=0;low_time=100;)else(for(i=0;i10;i+)get_temper();rin=s;/ReadInputrout=PIDCalc(&spid,rin);/PerformPIDInteration)if(high_time100)high_time=(un
11、signedchar)(rout/10000);elsehigh_time=0;low_time=(100-high_time);)/else/)I*T0 中断服务子程序,用于控制电平的翻转,40us*100=4ms 周期*/voidserve_T0()interrupt1using1if(+count=(high_time)output=1;elseif(count=100)output=0;)elsecount=0;TH0=0 x2f;TL0=0 xe0;)*用行中断服务程序,用于上位机通讯*/voidserve_sio()interrupt4using2(/*EA=0;RI=0;i=SB
12、UF;if(i=2)(while(RI=0)RI=0;set_temper=SBUF;SBUF=0 x02;while(TI=0)TI=0;elseif(i=3)TI=0;SBUF=temper;while(TI=0)TI=0;EA=1;*/voiddisp_1(unsignedchardisp_num16)unsignedcharn,a,m;for(n=0;n6;n+)/k=disp_num1n;for(a=0;a1;if(m=1)data1=1;elsedata1=0;_nop_();clk=1;_nop_();)I*显小子程序功能:将占空比温度转化为单个字符,显示占空比和测得到的温度*/
13、voiddisplay()(unsignedcharcodenumber=0 xfc,0 x60,0 xda,0 xf2,0 x66,0 xb6,0 xbe,0 xe0,0 xfe,0 xf6;unsignedchardisp_num6;unsignedintk,k1;k=high_time;k=k%1000;k1=k/100;if(k1=0)disp_num0=0;elsedisp_num0=0 x60;k=k%100;disp_num1=numberk/10;disp_num2=numberk%10;k=temper;k=k%100;disp_num3=numberk/10;disp_nu
14、m4=numberk%10+1;disp_num5=numbers/10;disp_1(disp_num);)/*主程序*/main()(unsignedcharz;unsignedchara,b,flag_2=1,count1=0;unsignedcharphil=2,0 xce,0 x6e,0 x60,0 x1c,2;TMOD=0 x21;TH0=0 x2f;TL0=0 x40;SCON=0 x50;PCON=0 x00;TH1=0 xfd;TL1=0 xfd;PS=1;EA=1;EX1=0;ET0=1;ES=1;TR0=1;TR1=1;high_time=50;low_time=50;PIDInit(&spid);/InitializeStructurespid.Proportion=10;/SetPIDCoefficientsspid.Integral=8;spid.Derivative=6;spid.SetPoint=100;/SetPIDSetpointwhile(1)if(plus=0)EA=0;for(a=0;a5;a+)for(b=0;b102;b+)if(plus=0)set_temper+;flag=0;elseif(subs=0)for(a=0;a5;a+)for(b=0;a102;b+)if(subs=0)set_temper-;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业音响设备销售与售后维修服务协议
- 进口巧克力购货合同协议
- 培训机构职工大会
- 建筑工程补充协议付款方式
- 企业并购后权益共享协议
- 广告行业居间合同
- 消防安全培训实施指南
- 法院免还协议书
- 转让全闲置合同协议
- 水源保洁协议书
- 北师大版五年级数学下册公开课《包装的学问》课件
- 车辆采购、维修服务投标方案
- 药剂科病房麻醉药品精神药品处方流程
- 北师大版英语八年级下册 Unit 4 Lesson 11 Online Time 课件(30张PPT)
- 浅析商业综合体的消防疏散
- 红金大气国际护士节表彰大会PPT模板
- 贝多芬F大调浪漫曲—小提琴谱(带钢伴谱)
- 外架悬挑防护棚施工方案完整
- 以天然气制合成气的工艺
- CDR-临床痴呆评定量表
- 设备计算与选型——孙景海
评论
0/150
提交评论