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

加入VIP,省得不是一点点
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于Atmega16的温度测控系统PID算法.docx

1、/编译器: AVRStudio 头文件部分: #include #define uchar unsigned char #define uchar unsigned char #define uint unsigned int void convert(float data); void init_1820(void); void write_1820(uchar x); uchar read_1820(void); float read_temperature(void); char key_scan(); int lcd_bz(); void lcd_wcmd(uchar cmd); vo

2、id lcd_pos(uchar pos); void lcd_wdat(uchar dat); void lcd_wstr(unsigned char pos,unsigned char *q); void lcd_init(); void avr_init(); void delay(int us); void delayl(int ms); void delay1(int ms); 按键程序 #include #include“headfile.h“ /.按键 . char key_scan() int temp=0,temp1,temp2; char key; DDRA=0xf0; P

3、ORTA delay1(3); temp1=PINA if(temp1!=0x0f) delay1(80); temp1=PINA if(temp1!=0x0f) DDRA=0x0f; PORTA delay1(5); temp2=PINA if(temp2!=0xf0) temp=temp1+temp2; switch(temp) case 0xee:key=/;break;/7 case 0xde:key=*;break;/8 case 0xbe:key=-;break;/9 case 0x7e:key=+;break;/+ case 0xed:key=.;break;/4 case 0x

4、dd:key=9;break;/5 case 0xbd:key=6;break;/6 case 0x7d:key=3;break;/- case 0xeb:key=;break;/1 case 0xdb:key=8;break;/2 case 0xbb:key=5;break;/3 case 0x7b:key=2;break;/* case 0xe7:key=0;break;/0 case 0xd7:key=7;break;/. case 0xb7:key=4;break;/= case 0x77:key=1;break;/ default :key=0;break; return key;

5、1602 显示程序 #include /#include #define ep_1 (PORTB|=0x04) #define ep_0 (PORTB int result=0; rs_0; rw_1; ep_1; result =(result|(PINC ep_0; DDRC=0xff; return result; /. 写入指令数据到LCD. . void lcd_wcmd(uchar cmd) while(lcd_bz(); rs_0; rw_0; ep_0; PORTC= cmd; ep_1; ep_0; delay(5); /.设定显示位置 . void lcd_pos(ucha

6、r pos) lcd_wcmd(pos | 0x80); delay(5); /.写入字符显示数据到 LCD. void lcd_wdat(uchar dat) while(lcd_bz(); rs_1; rw_0; ep_0; PORTC=dat; ep_1; ep_0; /.写入字符显示数组到 LCD. void lcd_wstr(unsigned char pos,unsigned char *q) /lcd_wcmd(0x01); /清屏 /delay(10); unsigned char i=0x00; lcd_pos(pos); while(*q!=0) lcd_wdat(*q);

7、 q+; i+; if(i=(0x0F-pos+1) lcd_pos(0x40); delay(10); /*/ /.LCD 初始化设定 . void lcd_init() lcd_wcmd(0x38); /function set delay(10); lcd_wcmd(0x38); /function set delay(10); lcd_wcmd(0x0c); /display on/off delay(10); lcd_wcmd(0x06); /entry mode set delay(10); lcd_wcmd(0x01); /清除 LCD 的显示内容 delay(10); /.av

8、r 初始化 ./ void avr_init() DDRC=0xFF; DDRB=0x07; 18b20 程序 #include #define uchar unsigned char #define uchar unsigned char #define uint unsigned int /-/ /.convert:data display. void convert(float data) /实数在液晶上显示 int i=0; int data1=(int)data; uchar array15=0,array25=0; lcd_wcmd(0x01); / lcd_wcmd(0x00);

9、 lcd_pos(0x0B); / if(data1=0) array10=0; lcd_wdat(48); / delay1(5); else while(data1!=0) array1i=data1%10; data1=data1/10; i+; for(-i;i=0;i-) lcd_wdat(array1i+48); / delay1(5); /显示小数点前面 lcd_wdat(0x2E); /显示小数点 for(i=0;i=18000)Flag_1820Error=1;break; DDRD|=(14; teml=teml teml=(teml*10)/16; tempval=tem

10、h;e0=tempval/100; tempval=temh;e1=(tempval/10)%10; tempval=temh;e2=tempval%10; tempval=teml;e3=tempval;*/ Main 程序 #include #include“headfile.h“ #include #include #include #include #include unsigned char key5; /按键数组 float keyvalue; /按键值 float actual; /温度值 unsigned int flag=0;/判断按键标志 unsigned char dis

11、1=“SET“; unsigned char dis2=“NOW“; unsigned char dis3=“00:00“; unsigned int h=0; /定时 1S 计时 10000 次 unsigned count=0; /计算动态时间 float PWM=0; float PWM1=0; float Error1; /误差 unsigned int maxminflag=0;/判断达到动态平衡标志 unsigned char time7;/存储动态时间 struct PID float SetPoint; / 设定目标 Desired Value float Proportion

12、; / 比例常数 Proportional Const float Integral; / 积分常数 Integral Const float Derivative; / 微分常数 Derivative Const float LastError; / Error1 1 float PrevError; / Error1 2 ; struct PID spid; / PID Control Structure struct PID *pp; /*PID 结构体初始化 */ void PIDInit (struct PID *pp) memset(pp,0,sizeof(struct PID);

13、 /*PID 参数设置 */ void setPID(float a,float b,float c) pp-Proportion=a; pp-Integral=b; pp-Derivative=c; /*PID 计算部分 */ float PIDCalc( struct PID *pp, float NextPoint ) float dError; unsigned int a; Error1 = pp-SetPoint-NextPoint; / 当前偏差 if(fabs(Error1)Proportion*(Error1-pp-LastError) +a*pp-Integral*pp-L

14、astError +a*pp-Derivative*(Error1-2*pp-LastError+pp-PrevError); /*dError=pp-Proportion*Error1 -pp-Integral*pp-LastError +pp-Derivative*pp-PrevError; if(fabs(Error1)Proportion*(Error1-pp-LastError)+a*pp-Integral*pp-LastError+ pp-Derivative*(Error1-2*pp-LastError+pp-PrevError);*/ pp-PrevError = pp-LastError; pp-LastError = Error1; return (dError); / 微分项 /*PWM 占空比设置 /*/ void setPWM(float dError)

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。