计算机温度控制实验报告1

  • 格式:doc
  • 大小:154.50 KB
  • 文档页数:12

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;