ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:18.25KB ,
资源ID:7932554      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7932554.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于PID的水温控制系统.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于PID的水温控制系统.docx

1、基于PID的水温控制系统#include#include#include#include#define Z 55sbit P27=P27;sbit temp=P20;sbit P21=P21;sbit P22=P22;uint nnn;uchar t_min,t_minf,t_sec,t_ge,shii,gee,shiff;uchar uk_qian,uk_bai,uk_shi,uk_ge;/uk显示位uint time;uint z_uk;uchar w_shi,w_ge,w_shif,w_baif; /实际温度数字显示;uchar q_ge,q_shif,q_baif; /占空比显示位uc

2、har idata bai,shi,ge; /预设温度数字显示;bit w_fh;/实际值符号位;uint tvalue; /10倍实际温度。uint p=20000;uint f,g;/float idata bfb;/占空比设定。uchar set_temp=60;float idata temperature;uchar idata count=1;uchar idata cont=500;uchar idata xx;void rst18b20() temp=1; delay10us(1); temp=0; delay10us(70);/延时916us。 temp=1; delay10

3、us(20);/延时266us。 void writedata(uchar dat)/向ds18b20写数据。 uchar i; for(i=0;i=1; /先写低位。 uchar readdata()/从ds18b20读数据。 uchar dat; uchar i; for(i=0;i=1;/ 先读低位。 temp=1; if(temp) dat=dat|0x80; delay10us(10);/延时136us; temp=1; return(dat); void readtemperature() uchar temperh,temperl; rst18b20(); writedata(0

4、xcc);/跳过读rom命令直接给器件发命令。 writedata(0x44);/启动ds18b20读取温度。 rst18b20(); /必须二次复位。 writedata(0xcc); writedata(0xbe); temperl=readdata();/读取温度低字节。 temperh=readdata();/读取温度高字节。 tvalue=temperh; tvalue=8; tvalue=tvalue|temperl;/组成16位合成字。 if(tvalue111) xx=0; clrscreen(); xyset();/建立坐标系; void ruptinte0()interru

5、pt 0 /按键中断子函数 P2=0xff; if(P2!=0xff) delay(8); if(P2!=0xff) switch(P2) case(0xfd):set_temp+;if(set_temp100);temp=0;break; case(0xfb):set_temp-;if(set_temp100);temp=0;break; default:break; void settempdeal() shi=set_temp/10+0x30; ge=set_temp%10+0x30;void ukdeal()/显示控制电压子函数 z_uk=(uint)uk; uk_qian=z_uk/

6、1000; uk_bai=z_uk%1000/100; uk_shi=z_uk%1000%100/10; uk_ge=z_uk%10;void qdeal()/显示占空比子函数 uint x; x=(uint)(bfb*100.0); q_ge=x/100; q_shif=x%100/10; q_baif=x%10;void main() init(); rst(); setbacklight(); clrscreen(); cs=0; zibigset(0x11); send(0x81);/设置ASCII字符类型; send(0x01);/6X10字体,字符为黑色; send(0x83);/

7、设置绘图色; send(1);/黑色; xianhan(16,4,table1);/水 xianhan(32,4,table2);/温 xianhan(48,4,table3);/控 xianhan(62,4,table4);/制 xianhan(78,4,table5);/系 xianhan(94,4,table6);/统 xianhan(24,38,table7); xianhan(40,38,table8); asciiset(56,38,0x3a);/显示冒号; xianhan(64,38,table9); xianhan(80,38,table0); delay(500); clrs

8、creen(); xyset();/建立坐标系; EA=1; while(1) settempdeal(); /预设值处理 ukdeal();/控制电压值处理 if(temperature=set_temp) P27=0; TR1=0; else if(temperature=(set_temp-4) calcpid(set_temp,temperature); bfb=(uk/220.0); qdeal(); /占空比值处理 if(bfb=1.0) TR1=0; P27=1; else if(bfb1.0) d_uk=kp*(ek-ek1)+kd*(ek-2*ek1+ek2); else d

9、_uk=kp*(ek-ek1)+ki*ek+kd*(ek-2*ek1+ek2); uk=d_uk+uk1; ek2=ek1; ek1=ek; uk1=uk; */*void calcpiiid(float s_temp,float now_temp)/遇限削弱积分法; ukmax=5.0*(kp+kd); ek=s_temp-now_temp; d_uk=kp*(ek-ek1)+kd*(ek-2*ek1+ek2); if(uk1=ukmax) if(ek0); else d_uk+=ki*ek; else if(uk1=ukmax) if(ek0); else d_uk+=I*ek; uk=u

10、k1+d_uk; ek2=ek1; ek1=ek; uk1=uk; */void calcpid(float s_temp,float now_temp)/增量式 /ukmax=5.0*(kp+ki+kd); ek=s_temp-now_temp; d_uk=kp*(ek-ek1)+ki*ek+kd*(ek-2*ek1+ek2); uk=d_uk+uk1; ek2=ek1; ek1=ek; uk1=uk; #include#define uint unsigned int#define uchar unsigned charuchar code table1=水;uchar code tabl

11、e2=温;uchar code table3=控;uchar code table4=制;uchar code table5=系;uchar code table6=统;uchar code table7=作;uchar code table8=者;uchar code table9=李;uchar code table0=奕;uchar code table00=度;uchar code table01=时;uchar code table02=间;sbit cs=P10;sbit sda=P11;sbit sck=P13;sbit crst=P14;void delay10us(uint

12、n) do _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); while(-n);void delay(uint n) do delay10us(131); while(-n);void send(uchar da) uint i; for(i=0;i8;i+) sck=0; sda=da&0x80; sck=1; da=1; void rst() sck=1; cs=1; crst=0; delay(3); crst=1; delay(10);void clrscreen() cs=0; send(0x80); cs=1;void asciiset(u

13、char x,uchar y,uchar a) /写阿斯科码; cs=0; send(0x07); send(x); send(y); send(a); void setbacklight() cs=0; send(0x8a); send(110); cs=1; void bitflash()/绘制图像; uchar i,j; send(0x0e); send(0); send(0); send(104); send(46); for(i=0;i46;i+) for(j=0;j13;j+) send(table1i*13+j); void pointset(uchar x,uchar y) /

14、描点; cs=0; send(0x01); send(x); send(y); void danwei() /描坐标点; uint i,j; for(j=20;j14;i-=10) pointset(9,i); void zibigset(uchar x) /设置字体大小 cs=0; send(0x82);/设置汉字库类型; send(x);/16X16字体,字符为黑色; void xianhan(uchar x,uchar y,uchar *p)/写汉字; uchar i; cs=0; send(0x08); send(x); send(y); for(i=0;i2;i+) send(pi)

15、; void xyset() /绘制坐标系 cs=0; send(0x02);/绘制x,y横纵坐标; send(10);/横坐标起点为10,终点为111; send(55); send(111); send(55); send(0x02); send(10); send(55);/纵坐标起点为55,终点8; send(10); send(3); pointset(9,4);/绘制箭头; pointset(8,5); pointset(11,4); pointset(12,5); pointset(110,54); pointset(110,56); pointset(109,53); pointset(109,57); danwei();/绘制单位坐标点; asciiset(2,0,T); asciiset(120,54,t); zibigset(0x01); xianhan(66,36,table01); xianhan(78,36,table02); xianhan(16,0,table2); xianhan(28,0,table00);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1