计算机温度控制实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、实验目的---------------------------------2
二、预习与参考------------------------------- 2
三、实验(设计)的要求与数据------------------- 2
四、实验(设计)仪器设备和材料清单-------------- 2
五、实验过程---------------------------------2 (一)硬件的连接- --------- ----------------------- 2 (二)软件的设计与测试结果--------------------------3
六、实验过程遇到问题与解决--------------------11
七、实验心得--------------------------------12
八、参考资料-------------------------------12
一、实验目的
设计制作和调试一个由工业控制机控制的温度测控系统。通过这个过程学习温度的采样方法,A/D变换方法以及数字滤波的方法。通过时间过程掌握温度的几种控制方式,了解利用计算机进行自动控制的系统结构。
二、预习与参考
C语言、计算机控制技术、自动控制原理
三、实验(设计)的要求与数据
温度控制指标:60~80℃之间任选;偏差:1℃。
1.每组4~5同学,每个小组根据实验室提供的设备及设计要求,设计并制作出实际电路组成一个完整的计算机温度控制测控系统。
2.根据设备情况以及被控对象,选择1~2种合适的控制算法,编制程序框图和源程序,并进行实际操作和调试通过。
四、实验(设计)仪器设备和材料清单
工业控制机、烘箱、温度变送器、直流电源、万用表、温度计等
五、实验过程
(一).硬件的连接
图1 硬件接线图
1.按上述接线图接线。
2.为了使温度变动不大,把烘箱的地线与直流电源的地线相连。
3.为了更好的测到烘箱的温度,把温度计的检测点与温度变送器捆绑在一起。
4.用万用表测试电磁继电器两端的电压,室温时应该差不多在1.5v左右,若不
是,适当调整变阻器的阻值。
最后,我们把27摄氏度时电磁继电器两端的电压调到1.95V.
(二).软件的设计
1.控制算法的选择:
a.PID控制:PID控制算法可分为两种,位置型控制算法与增量型控制算法。为了减少程序的冗余量,处理起来比较麻烦,可选用增量型控制算法。不过,用它的话就要考虑多个变量的选取,T,Td,Ti三个周期的选取比较耗时间。
b.趋近控制:基本思想是把控制分为许多个区间,在各个区间加不同的加热时间或者吹风时间,越接近设定值就分得越细。
鉴于报告要求没有严谨的要求,而且在十分钟之内能达到设置温度即可,所以我们组在选择的时候选择了较为容易实现的b方法,趋近控制。
2.实际温度与数字量的转换
通过测算初步确定温度和数字量的对应关系。
a.测算结果如下表:
60 65 70 75 80
781 817 850 894 920
做出其散点图如下:
则程序中的温度换算公式为:
x = ((float)temp-850) / 7 + 70;
y = 440 - x*4;
在实验控制过程显示器显示温度控制图像如下:
计算机温度测算图
b.加温测试:通过加温测算,取得以下列表,温度与变换后的数字量的数据比较如下表。
C.干扰测试:在温度稳定的情况下突然给烘箱降温干扰后的实验温度数据:
做出控制过程温度时间趋势曲线如下所示:
3.程序思路图
4.程序
#include
#include
#include
int h_temp, l_temp;
int pot_time=40;
int flag, flag1, temp;
float wendu, wendu1, qushi;
int wending=0;
void delay(int z)
{
int x,y;
for(x=100; x>0; x--)
{
for(y=z; y>0; y--);
}
}
void s_delay(int z)
{
int x;
for(x=z; x>0; x--);
}
void l_delay(int z)
{
int x,y,m;
for(x=500; x>0; x--)
{
for(m=500; m>0; m--)
{
for(y=z; y>0; y--) ;
}
}
}
void ad_init()
{
outportb(0x030A, 0x00);
outportb(0x0309, 0x00);
}
void read_ad()
{
int i;
temp=0;
for(i=0; i<5; i++)
{
outportb(0x030C, 0xFF);
delay(500);
h_temp = inportb(0x0305) - 0x08;
l_temp = inportb(0x0304);
h_temp<<=8;
temp = temp + h_temp + l_temp;