付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、XPAN TECHNOLOGICAL UNIVERSITY课程设计说明书题目:基于PID算法的恒温控制系统设计学号:姓名:指导教师:日期:目录一、设计题目1二、设计要求1三、设计思路1四、实验设备1五、硬件介绍1六、硬件接线图3七、软件流程图4八、PID参数确定5九、实验总结6附件:实验程序7一、设计题目基于PID算法的恒温控制系统设计二、设计要求1 .利用DS18B20采集温度并显示;2 .利用单片机I/O管角输出PWM控制功率电阻发热;3 .基于PID算法实现恒温控制。三、设计思路本设计要求实时采集温度并实现恒温控制,根据设计要求,本次设计拟采用 AT89C52单片机作为控制芯片,采集部分
2、使用DS18B20温度传感器,显示部分采用数 码管显示实时温度,功率电阻作为控制对象。在PID算法的基础上完成恒温控制系统 的设计。四、实验设备单片机开发试验仪1台AT89C52单片机芯片1个DS18B20温度传感器1个C9013三极管1个1W功率二极管1个五、硬件介绍DS18B20 :DS18B20是常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的 特点。DS18B20的主要特征:全数字温度转换及输出。先进的单总线数据通信。最高12位分辨率,精度可达土 0.5摄氏度。12位分辨率时的最大工作周期为750毫秒。可选择寄生工作方式。检测温度范围为-55° C+125
3、176; C (-67° F+257° F)内置EEPROM,限温报警功能。64位光刻ROM,内置产品序列号,方便多机挂接。多样封装形式,适应不同硬件系统。DS18B20数据采集过程GND地信号 DQ 数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以 向器件提供电源。 VDD 可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。由于DS18B20采用的是1Wire总线协议方式,即在一根数据线实现数据的双向传输, 而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的 方法来模拟单总线的协议时序来完成对DS18B20芯片的访问
4、。由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要 求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义 了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备, 单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始, 如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数 据和命令的传输都是低位在先。六、硬件接线图硬件部分分别也P0 口和P1 口作为八位七段码的段选和位选的控 制端口,DS18B20连接至P3.1 口作为控制线,P2.0 口作为PWM波 输出口,经过C
5、9013信号放大后接功率电阻作为被控对象。通过温 度传感器采集电阻上的温度反馈给系统,构成闭环调节系统,构成恒 温控制系统。七、软件流程图、PID算法流程图软件部分采用PID算法,其中数据采集与显示部分不属于本 设计的主要部分在此不再赘述。PID算法的参数有实验确定,遵 循先比例,后积分,再微分的原则,从最小看是逐步调试,最终取得最佳的PID参数。八、PID参数确定PID算法运用比例、积分、微分算法,来对回路中的偏差进行修正,通过执行器调节参 数,使测量值稳定在设定值附近,达到控制某一参数的目的。必须先明白P,I,D各自的含义及控制规律比例P:比例项部分其实就是对预设值和反馈值差值的发大倍数。
6、积分I:顾名思义,积分项部分其实就是对预设值和反馈值之间的差值在时间上进行累 加。当差值不是很大时,为了不引起振荡。可以先让电机按原转速继续运行。当时要将这个 差值用积分项累加。当这个和累加到一定值时,再一次性进行处理。从而避免了振荡现象的 发生。可见,积分项的调节存在明显的滞后。而且I值越大,滞后效果越明显。微分D:微分项部分其实就是求电机转速的变化率。也就是前后两次差值的差而已。也 就是说,微分项是根据差值变化的速率,提前给出一个相应的调节动作。可见微分项的调节 是超前的。并且D值越大,超前作用越明显。可以在一定程度上缓冲振荡。比例项的作用 仅是放大误差的幅值,而目前需要增加的是“微分项”
7、,它能预测误差变化的趋势,这样, 具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避 免了被控量的严重超调其次进行参数调整a.确定比例增益P确定比例增益P时,首先去掉PID的积分项和微分项,一般是令Ti=0、Td=0,PID为 纯比例调节。输入设定为系统允许的最大值的60%70%,由0逐渐加大比例增益P,直至 系统出现振荡;再反过来,从此时的比例增益P逐渐减小,直至系统振荡消失,记录此时 的比例增益P,设定PID的比例增益P为当前值的60%70%。比例增益P调试完成。b.确定积分时间常数Ti比例增益P确定后,设定一个较大的积分时间常数Ti的初值,然后逐渐减小Ti,
8、直至系统出现振荡,之后在反过来,逐渐加大Ti,直至系统振荡消失。记录此时的Ti,设定PID 的积分时间常数Ti为当前值的150%180%。积分时间常数Ti调试完成。c.确定积分时间常数Td积分时间常数Td 一般不用设定,为0即可。若要设定,与确定P和Ti的方法相同, 取不振荡时的30%。九、实验总结本次课程设计的题目为基于PID算法的恒温控制系统。在接到这个题目的同时, 我们就开始思考如何去设计这个系统。首先是硬件电路的设计与器件的选择。其中温度 采集与显示部分的设计,我们在单片机课程上已经有所涉及,在这里我们就可以直接拿 来用了。硬件部分需要我们设计的就是被控对象。为了试验方便我们选择了 1
9、W的功率 电阻作为被控对象,然后通过DS18B20温度传感器去测量电阻附近的温度变化。从而 实现系统的控制与反馈。考虑到单片机I/O 的驱动能力不足,不足以驱动功率二极管, 我们在I/O 口与功率二极管之间串入一个C9013最为驱动与开关器件,用以对二极管的 驱动和控制。软件部分采用了 PID控制算法,其中最重要的环节为PID控制参数的确定,一开 始我们准备利用计算法来确定,可是在实施的过程终发现,计算法所需要的原始数据难 以确定,而且在实际测量中也有很大的不确定性。最终,经过我们的分析研究,得出实 验法确定参数是一个比较切实可行的办法。然后就通过实验一步一步测试出所需要的参 数,经过我们几天
10、的而艰苦奋战,终于测试好了参数。最后在进行系统的整体调试,最 终完成这次课程设计,并顺利通过老师的验收。这次的课程设计,让我有了很多的收获和感受。首先,让我认识到了,在学习的过 程中仅仅有理论知识是不足的,必须要理论与实践相结合起来。有的东西看起来非常简 单,可是到了实现环节,就会变得异常困难。在实现的过程中可能会出现各种各样的状 况,需要在现场分析解决。在最任何事情的时候都必须认真细致,有时一个小小的环节 出现问题,都会导致结果出现巨大的差异。在最任何是的过程中遇到困难都是正常的, 我们需要做的就是去面对它,通过自己的分析理解,最终找到解决方法,克服困难。附件:实验程序微机控制课程设计* 实
11、验名 :基于PID算法的恒温控制系统设计* 实验说明:通过DS18B20采集温度,反馈给系统,构成闭环调节系统* 连接方式:见连接图* 注 意:#include<reg51.h>#include"temp.h"/-定义使用的IO-/* define GPIO_DIG P0* define GPIO_PLACE P1sbit PWM=P2A0;/-定义全局变量unsigned char code DIG_PLACE8 = 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/位选控制查表的方法控制unsigned char code D
12、IG_CODE17 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F 的显示码 unsigned char DisplayData8;unsigned char timer1;unsigned int count=0;* 用来存放要显示的8位数的值/定义PID参数float uk,uk1,uk2;float ek,ek1,ek2;float x;float t,Auk;float Kp,Ki,Kd;-声明全局函数-
13、float LcdDisplay(int);void DigDisplay();void Time1Config(); float AD_init(void);void PID_init(void);void DA_init(void);/void delay();unsigned int j,m;unsigned int d;* 函数名:main* 函数功能:主函数* 输入:无* 输出:无/main() int m;m=Auk/10;Time1Config();Ds18b20Init();uk=0,uk1=0,uk2=0;ek=0,ek1=0;ek2=0;x=40;Kp=2.83,Ki=0.
14、59,Kd=5.41;while(1)AD_init();PID_init();DA_init();LcdDisplay(Ds18b20ReadTemp();/delay();float AD_init() (float temp;temp=LcdDisplay(Ds18b20ReadTemp(); return(temp);void PID_init()(t=AD_init();ek=x-t;Auk=Kp*(ek-ek1);if(x>=35&x<=45) (Auk=Auk+Ki*ek;Auk=Auk+Kd*(ek-2*ek1+ek2);uk=Auk+uk;ek2=ek1;
15、ek1=ek;void DA_init()(if(Auk>=0) count+;if(Auk<0)PWM=0;if(count=0|count=99) count=count ;if(Auk>=5) count=count+5;if(Auk<5)switch(m%10) (case 0:count=count; break;case 1:count+;break;case 2:count=count+2;break;case 3:count=count+3;break;case 4:count=count+4;break; default:break;count-;if
16、(timer1>100) /PWM 周期为 100*0.5ms(timer1=0;if(timer1 < count) /改变30这个值可以改变直流电机的速度 (PWM=1;else(PWM=0;* 函数名:LcdDisplay()* 函数功能:LCD显示读取到的温度* 输入:v* 输出:无/*void delay() (for(j=0;j<1000;j+) (for(m=0;m<100;m+) (; * /float LcdDisplay(int temp) /lcd 显示 (float tp;if(temp< 0)当温度值为负数(DisplayData0 =
17、0x40;因为读取的温度是实际温度的补码,所以减1,再取反求出原码temp=temp-1;temp=temp;tp=temp;temp=tp*0.0625*100+0.5;留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把 小数点后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1 了,小于 0.5的就算由?.5,还是在小数点后面。 else(DisplayData0 = 0x00;tp=temp;/因为数据处理有小数点所以将温度赋给一个浮点型变量如果温度是正的那么,那么正数的原码就是补码它本身temp=tp*0.0625*100+0.5;留两个
18、小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把 小数点后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1 了,小于 0.5的就算加上0.5,还是在小数点后面。DisplayData1 = DIG_CODEtemp / 10000;DisplayData2 = DIG_CODEtemp % 10000 / 1000;DisplayData3 = DIG_CODEtemp % 1000 / 100 | 0x80;DisplayData4 = DIG_CODEtemp % 100 / 10;DisplayData5 = DIG_CODEtemp % 1
19、0;DigDisplay();return(temp);扫描显示* 函数名:DigDisplay* 函数功能:使用数码管显示* 输入:无* 输出:无/void DigDisplay()(unsigned char i;unsigned int j;for(i=0; i<8; i+)(GPIO_PLACE = DIG_PLACEi; 发送位选GPIO_DIG = DisplayDatai;发送段码j = 10;扫描间隔时间设定while(j-);GPIO_DIG = 0x00;/消隐void Time1Config()(TMOD|= 0x10;设置定时计数器工作方式1为定时器/-定时器赋初
20、始值,12MHZ下定时0.5ms-TH1 = 0xFE;TL1 = 0x0C;ET1 = 1;开启定时器1中断EA = 1;TR1 = 1; 开启定时器* 函数名:Time1* 函数功能:定时器1的中断函数* 输 入:无* 输 出:无void Time1(void) interrupt 3/3为定时器1的中断号1定时器0的中断号0外部中断1 2外部中断2 4串口中断(TH1 = 0xFE; 重新赋初值TL1 = 0x0C;timer1+;temp.c #include"temp.h* 函数名:Delaylms* 函数功能:延时函数* 输 入:无* 输 出:无void Delay1ms
21、(uint y) (uint x;for( ; y>0; y-) (for(x=110; x>0; x-);* 函数名* 函数功能* 输入* 输出Ds18b20Init初始化无初始化成功返回1,失败返回0uchar Ds18b20Init() (uchar i;DSPORT = 0;/将总线拉低 480us960usi = 70;while(i-);/延时 642usDSPORT = 1;然后拉高总线,如果DS18B20做出反应会将在15us60us后总线拉低i = 0;while(DSPORT) 等待 DS18B20 拉低总线(Delay1ms(1);i+;if(i>5)/
22、等待 >5MS(return 0;/初始化失败return 1;/初始化成功 * 函数名:Ds18b20WriteByte* 函数功能:向18B20写入一个字节* 输入:com* 输出:无void Ds18b20WriteByte(uchar dat) (uint i, j;for(j=0; j<8; j+)(DSPORT = 0;每写入一位数据之前先把总线拉低1usi+;DSPORT = dat & 0x01; 然后写入一个数据,从最低位开始 i=6;while(i-); 延时68us,持续时间最少60usDSPORT = 1; /然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值 dat >>= 1;* 函 数 名: Ds18b20ReadByte* 函数功能:读取一个字节* 输 入:com* 输 出:无uchar Ds18b20ReadByte() (uchar byte, bi;uint i, j;for(j=8; j>0; j-)(DSPORT = 0;/先将总线拉低1us i+;DSPORT = 1;/然后释放总线 i+;i+;/延时6us等待数据稳定bi = DSPORT; /读取数据,从最低位开始读取/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/ byte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026北京四中雄安校区招聘教职人员22人考试参考试题及答案解析
- 2026年东营市技师学院公开招聘工作人员(20人)考试参考试题及答案解析
- 2026新疆阿勒泰地区青河县查干郭勒乡博塔莫音村招聘就业见习人员1人考试参考试题及答案解析
- 2026贵州六盘水盘州市羊场乡卫生院自主招聘见习人员2人考试参考题库及答案解析
- 2026广西北海市铁山港区(临海)工业区人民医院招聘1人笔试模拟试题及答案解析
- 2026四川广安市岳池县不动产登记中心招募见习生5人考试参考试题及答案解析
- 2026鲁东大学全职博士后研究人员招聘(山东)考试参考题库及答案解析
- 2026年潍坊市精神卫生中心招聘高层次人才笔试备考题库及答案解析
- 劳务中介内部管理制度
- 学校内部部门规章制度
- 化工安全培训课件 教学课件化工安全生产技术
- 物流系统规划与设计说课
- 水果干制品(无核蜜枣、杏脯、干枣)HACCP计划
- 学前教育学第2版全套PPT完整教学课件
- 2023年高中学业水平合格考试英语词汇表(复习必背)
- 本科专业评估指标体系
- 2023版中国近现代史纲要课件第一专题历史是最好的教科书PPT
- DLT 802.7-2010 电力电缆用导管技术条件 第7部分:非开挖用改性聚丙烯塑料电缆导管
- 绳正法曲线拨道量计算器
- 学习-八年级英语动词不定式
- 初中数学有效的课堂教学设计课件
评论
0/150
提交评论