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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

51控制温度简单的PID算法Word格式.docx

1、/占空比调节参数 unsigned char set_temper=35;unsigned char temper;unsigned char i;unsigned char j=0;unsigned int s;/* 延时子程序,延时时间以12M晶振为准,延时时间为30ustime */ void delay(unsigned char time) unsigned char m,n; for(n=0;n for(m=0;m2;m+) 写一位数据子程序 void write_bit(unsigned char bitval) EA=0; DQ=0; /*拉低DQ以开始一个写时序*/ if(b

2、itval=1) _nop_(); DQ=1; /*如要写1,则将总线置高*/ delay(5); /*延时90us供DA18B20采样*/ /*释放DQ总线*/ _nop_();EA=1;写一字节数据子程序 void write_byte(unsigned char val) unsigned char i; unsigned char temp; TR0=0;for(i=0;ii; /*移位操作,将本次要写的位移到最低位*/ temp=temp&1; write_bit(temp); /*向总线写该位*/ delay(7); /*延时120us后*/ / TR0=1; EA=1;读一位数据

3、子程序 unsigned char read_bit() unsigned char i,value_bit;EA=0;DQ=0; /*拉低DQ,开始读时序*/ DQ=1; /*释放总线*/ i+) value_bit=DQ;return(value_bit);读一字节数据子程序 unsigned char read_byte() unsigned char i,value=0;i+) if(read_bit() /*读一字节数据,一个时序中读一次,并作移位处理*/ value|=0x01 delay(4); /*延时80us以完成此次都时序,之后再读下一数据*/ return(value);

4、复位子程序 unsigned char reset() unsigned char presence; /*拉低DQ总线开始复位*/ delay(30); /*保持低电平480us*/ delay(3);presence=DQ; /*获取应答信号*/ delay(28); /*延时以完成整个时序*/ return(presence); /*返回应答信号,有芯片应答返回0,无芯片则返回1*/ 获取温度子程序 void get_temper() unsigned char i,j;do i=reset(); /*复位*/ while(i!=0); /*1为无反馈信号*/ i=0xcc; /*发送设

5、备定位命令*/ write_byte(i); i=0x44; /*发送开始转换命令*/ delay(180); /*延时*/ /*设备定位*/ i=0xbe; /*读出缓冲区内容*/ j=read_byte(); i=read_byte(); i=(i4; temper=i|j; /*获取的温度放在temper中*/ /*= Initialize PID Structure =*/ void PIDInit (struct PID *pp) memset ( pp,0,sizeof(struct PID); /全部初始化为0 PID计算部分 unsigned int PIDCalc( stru

6、ct PID *pp, unsigned int NextPoint ) unsigned int dError,Error;Error = pp-SetPoint - NextPoint; / 偏差 pp-SumError += Error; / 积分 dError = pp-LastError - pp-PrevError; / 当前微分 PrevError = pp-LastError;LastError = Error;return (pp-Proportion * Error / 比例项 + pp-Integral * pp-SumError / 积分项 Derivative * d

7、Error); / 微分项 温度比较处理子程序 void compare_temper() if(set_tempertemper) /是否设置的温度大于实际温度 if(set_temper-temper1) /设置的温度比实际的温度是否是大于1度 high_time=100; /如果是,则全速加热 low_time=0; else /如果是在1度范围内,则运行PID计算 for(i=0;10; get_temper(); /获取温度 rin = s; / Read Input rout = PIDCalc ( &spid,rin ); / Perform PID Interation if

8、(high_time=100) high_time=(unsigned char)(rout/800); else low_time= (100-high_time);else if(set_temper0) high_time=0; low_time=100;100) high_time=(unsigned char)(rout/10000);/ else / /* T0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期 */ void serve_T0() interrupt 1 using 1 if(+count=(high_time) output=1;else if(

9、countoutput=0;else count=0;TH0=0x2f;TL0=0xe0;串行口中断服务程序,用于上位机通讯 void serve_sio() interrupt 4 using 2 /* EA=0;RI=0;i=SBUF;if(i=2) while(RI=0) set_temper=SBUF;SBUF=0x02;while(TI=0) TI=0;else if(i=3) SBUF=temper; */ void disp_1(unsigned char disp_num16) unsigned char n,a,m;for(n=0;n6;n+) / k=disp_num1n;

10、 for(a=0;a if(m=1) data1=1; data1=0; clk=1;显示子程序 功能:将占空比温度转化为单个字符,显示占空比和测得到的温度 void display() unsigned char code number=0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6;unsigned char disp_num6;unsigned int k,k1;k=high_time;k=k%1000;k1=k/100;if(k1=0) disp_num0=0;disp_num0=0x60;k=k%100;disp_num1=numb

11、erk/10;disp_num2=numberk%10;k=temper;disp_num3=numberk/10;disp_num4=numberk%10+1;disp_num5=numbers/10;disp_1(disp_num);主程序 void main() unsigned char z;unsigned char a,b,flag_2=1,count1=0;unsigned char phil=2,0xce,0x6e,0x60,0x1c,2;TMOD=0x21;TL0=0x40;SCON=0x50;PCON=0x00;TH1=0xfd;TL1=0xfd;PS=1;EX1=0;ET

12、0=1;ES=1;TR0=1;TR1=1;high_time=50;low_time=50;PIDInit ( &spid ); / Initialize Structure spid.Proportion = 10; / Set PID Coefficients 比例常数 Proportional Const spid.Integral = 8; /积分常数 Integral Const spid.Derivative =6; /微分常数 Derivative Const spid.SetPoint = 100; / Set PID Setpoint 设定目标 Desired Value while(1) if(plus=0) for(a=0;5;for(b=0;b5) temper=a; temper=b; a=temper; flag_2=0;if(+count130) display(); count1=0; compare_temper(); z=1;if(stop=0) disp_1(phil);/ break;

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

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