温度控制系统范文

2023-09-20

温度控制系统范文第1篇

1 系统总体方案设计

温度采集系统总体设计框图如图1所示。系统运用主从分布式思想, 由上位机、主控模块和多块温度采集模块组成, 从而形成三级分布式多点温度测量的监测系统。最底层的温度采集模块采用单片机STC89C51作为主控芯片, 采用数字式温度传感器DS18B20进行温度信号的采集。当需要进行温度测量时, 温度采集模块根据主控模块发来的采集指令进行温度信号的采集, 并把采集到的温度信号通过主控模块传输给上位机。为了减少走线, 增强系统的抗干扰能力, 而且要组网方便, 主控模块和各温度采集模块之间的数据通讯采用无线通信的方式。在主控模块和各采集模块均使用低功耗无线发射模块FT1100-232实现了无线通讯功能。无线发射模块FT1100-232与单片机和主控模块通过串口分别连接。上位机主要完成人机交互和数据处理的功能, 由上位机对主控模块发出控制指令, 并把主控模块接收到的温度采集信号通过VB编写的数据库存储, 并通过图形界面将温度曲线显示出来。

2 通讯协议的制定

为了保证主控模块和温度采集模块之间能够准确、可靠的通信, 排除外界的干扰信号, 就必须采用规定好的通讯协议进行数据传输。在本采集系统中, 数据上行和数据下行采用完全相同的数据帧格式, 它是系统传递信息时的最基本的单元, 数据帧格式如表1所示。

数据帧包括六部分内容。起始标志68H表明了一帧数据的起始;单片机地址表明了具体温度采集模块的定位, 最多可扩展255个温度采集模块;控制码表明了控制指令的具体内容;数据长度表明本帧数据中有效数据的具体个数;N字节的数据是各温度采集模块采集到的具体的温度数据;校验是为了保证数据收发的可靠性而设置, 采用奇偶校验的方式, 保证整帧数据的完整、准确;结束标志16H表明一帧数据的结束。由于采用无线传输的方式, 无线通讯的波特率设置为9600bps, 通信信道设置为00。

3 系统主要流程

温度采集模块的主要功能是负责温度的实时采集, 并向主控模块上传采集的数据。它上电初始化后就处于命令等待状态, 不断查询是否接到本模块温度采集指令。当主控模块发出其采集指令后, 开启对DS18B20的采集程序, 并对采集的数据进行滤波处理, 最后将得到的数据通过无线模块发送给主控模块。其主要流程如图2所示。

主控模块主要完成指令的发送和温度采集模块上传数据的接收, 其主要流程如图3所示。在上电初始化后主控模块就开启中断, 等待接收数据。当接收到数据后, 先将Rceiveflag位置位, 然后对接收到的数据进行判断处理。如果是上位机发来的温度采集指令, 主控模块就将该指令下发给相应的温度采集模块;如果是上传来的温度数据, 则将该数据传送给上位机进行保存显示。

4 结语

本设计运用主从分布式思想, 由上位机, 主控模块和多点温度采集模块组成三级分布式多点温度测量的检测系统。通过无线网络可以轻松的组建传感器网络, 方便的实现多点温度的测量, 系统的结构简单、抗干扰性好、设计灵活、方便, 适用于工业多点温度监测场合。

摘要:本文利用无线网络进行了分布式温度采集系统的设计。介绍了分部式温度采集系统的总体框架, 并对网络通讯协议的设计、系统主要模块的程序流程进行了详细的阐述。

关键词:温度检测,无线网络,单片机

参考文献

[1] 余锡存.单片机原理及接口技术 (第2版) [M].西安:西安电子科技大学出版社, 2007.

[2] 黄智伟.单片无线收发集成电路原理与应用[M].北京:人民邮电出版社, 2005:28~32.

[3] 毋昌明, 育辛力.无线数据传输系统的设计[J].北京理工大学学报, 2006.

温度控制系统范文第2篇

1 化学增强型抗蚀剂

i线光刻技术仍将起主导作用, 而关键层光刻对更短波长的DUV光刻技术需求日益增大。i线光刻采用的抗蚀剂是传统的酚醛树脂型抗蚀剂, 其光吸收性有限, 灵敏度低, 不适用于DUV光刻工艺, 取而代之的是化学增强型抗蚀剂。

化学增强型抗蚀剂含有光酸生成器, 在DUV辐射光曝光时产生一种强酸。在随后的热处理过程中 (曝光后烘干) , 这种酸以一种奇特的方式被还原, 生成一种液态可溶性聚合物, 在显影过程中可将聚合物除去。在曝光后烘干 (PEB) 过程中, 光作用形成的每一个酸分子具有催化剂作用, 使被曝光抗蚀剂的化学保护作用减弱, 并溶于显影剂。

2 衬底温度控制 (见表1)

表1说明了热抗蚀剂处理的主要步骤及其温度控制要求。其中有几种工艺窗口小, 范围从 (1~2) ℃减小到零点几度。超过0.1℃的测量热性能对计量技术的要求比一般工艺设备要精密 (4~10) 倍。

3 现场测量

圆片温度是主要的考虑对象。这是因为, 涂胶温度取决于圆片温度, 同设备温度关系不大。热板、冷板及烘炉的温度、设定点控制及其均匀性, 提供不了关于衬底绝对温度和温度均匀性的信息。在以前的几代产品中, 采用的圆片较小, 局部真空使圆片直接与热板接触。由于衬底与热板连在一起, 通过直接热传递或稀薄气体热传导, 有效地加热衬底。因此, 衬底温度容易控制。

由于可用来测量影响因素的方法很少, 估测和模拟衬底温度分布十分困难。直接测量是准确测定衬底温度的一种更经济的方法, 能提供衬底与热板之间关系的信息, 弥补了设定点的偏差, 控制了温度不均匀性的变量, 从而控制了器件的关键尺寸。

4 仪器式衬底技术

测量光致抗蚀剂热处理温度的衬底仪器需要具有下列特性的热敏传感器:体积小, 以便嵌入圆片、光掩模或其它衬底;结实、灵敏、而且成线状;显示所需温度范围, 测量温度的时间短;不需外加功率, 功耗小, 自加热限制其测量误差;在单个器件中的输出均等, 无需校正。热电偶、热敏电阻和电阻温度探测器 (RTD) 目前可作为嵌入式传感器。

5 电阻温度探测器 (RTD)

电阻温度探测器是简化的一段带电阻细导线, 其电阻随温度变化而变化, 依照其材料的电阻温度系数。RTD的电阻温度系数比热敏电阻还小, 灵敏度更低。因此, RTD在较宽温度范围内更稳定, 更线性化。在极小的陶瓷衬底上淀积一段螺旋形薄膜铂线形成嵌入RTD式衬底。

每个RTD的标准电阻相对较低。在0℃时, 通常在 (100~1000) ξ。连接RTD与测试仪器的导线电阻与RTD相比, 电阻大得多, 而且随温度改变。因此, 采用“四线”测量技术可以排除导线电阻效应。一对导线给RTD传导恒定的激励电流, 另一对导线连接在RTD两端, 检测穿过RTD的电压。流过该导线的电流极小, 因此, 对测量影响不大。

300mm圆片的衬底可嵌入传感器的数目最多可达31个。用涂覆或成形法在各种大小和型号的衬底中嵌入传感器件。

6 转换传感器电阻

在瞬时变化过程中, 为获得准确的温度测量, 多个传感器必须同时读数, 电阻信号转换成可存储的数字数据信号瞬间值, 通过计算机线性化并加以校正。这种模拟/数字 (A/D) 转换过程必须具备稳定的电压校准和低噪声的高分辨能力, 而且要十分精确。提供给每个RTD的恒定电流必须具有噪声低、稳定性好的特性。所需的200A水平的电流防止了RTD自加热, 从而排除了自加热引起的校准偏差和漂移。

控制每一个A/D转换器的多个信号得到了简化, 而且降低了成本。然而, 由于圆片放入或移开热板时, 在瞬间温度变化过程中, 时间滞后可产生有关温度均匀性的错误信息。为了获得最佳性能, 每个传感器应具有一个专用的A/D, 所有传感器必须同时读数。对限定的性能, 可采用双通道信号倍增器A/D转换器, 以便测量衬底上所有传感器最多需两次操作。为Thermal Map2系统开发的I-SIS (智能传感器接口系统) 的A/D组件能够准确地同时读出仪器式衬底上的多个传感器数据。

7 温度校准

嵌入衬底的薄膜芯片RTD, 在0℃时, 通常精度为±0.5℃;温度越高, 误差越大。为获得光学光刻工艺所需的测量精度, 在 (0~220) ℃的整个工作温度范围内, 多个设定点的温度标准必须通过插入温度均匀的液态校准槽, 校准仪器式衬底的温度。通过精密的铂电阻温度计监控校准温度, 这种温度计的校准温度标准满足美国国家标准与工艺研究所的标准。因此, 这种校准方法的绝对精度可达±0.1℃;在整个校准温度范围内, 衬底上传感器间的温度校准精度可达±0.05℃。每个传感器的校准数据构成一个多项式方程, 形成每个圆片的数据软盘, 进行衬底的自动校准修正。

总之, 温度计量技术的今后发展将包括总的热循环综合分析。在光刻技术领域, 现场测量技术能够推广到包括检测附加的轨道环境参数等多方面。温度计量技术在下一代尖端技术领域的重要性日益骤增。

摘要:本文阐述了化学增强型抗蚀剂 (CAR) 到抗反射涂层 (ARC) , 远紫外 (DUV) 光刻技术需要特殊的温度条件以及一些解决措施。对抗蚀剂处理设备温度性能的技术进行监控及分析;同时说明了检查测试热循环过程中实际的圆片热测量和掩模温度的现场监控。

温度控制系统范文第3篇

1 加氢催化剂硫化的必要性和现有硫化手段的简述

1.1 加氢催化剂硫化的必要性分析

近年来,原油逐渐呈现出劣质化、重质化的发展趋势,清洁油品的质量标准越来越高,在这样的背景下,炼油厂对加氢技术提出了更高的要求。加氢催化剂是炼油厂加氢技术的核心,一般由金属组分和载体两部分组成,金属组分主要指的是含有镍、钼、钨等金属的活性组分,载体主要包括硅藻泥、活性炭、沸石、氧化铝等等,一些加氢催化剂中还含有助催化剂组分,例如硼、磷等[1] 。对于加氢催化剂来说,氧化态的加氢催化剂在活性、稳定性等方面较低,而硫化态加氢催化剂在活性、稳定性等方面较高,将加氢催化剂进行硫化预处理能够促进催化剂中金属组分从氧化态向硫化态的转化,从而提升加氢催化剂的活性、选择性以及稳定性,同时能够延长加氢催化剂的寿命,增加其抗毒性,对于最大限度发挥加氢催化剂的作用有着重要意义,由此可见,加氢催化剂进行硫化过程是十分必要的。

1.2 现有硫化手段探讨

当前加氢催化剂硫化手段大体可以分为两类,一类是器内预硫化,其在国内外应用广泛,一般选用二甲基二硫或二硫化碳作为硫化剂,而器内预硫化又可以分为湿法硫化和干法硫化等方式;另一类是器外预硫化,在将加氢催化剂加入到加氢反应器之前,利用相关工艺方法将硫化剂填充到加氢催化剂空隙中,将硫化剂与催化剂活性金属组分以硫化物的方式结合,之后再进行硫化过程,这种方式成本较低,硫化效果好,且环境污染小,近年来备受国内外学者关注,应用前景良好。

2 各个硫化温度阶段的意义

2.1 起始注硫温度

在H2S没有穿透加氢催化剂床层之前,应当对床层温度进行合理的控制,保证其在230摄氏度以下,如果床层温度超过230摄氏度,部分氧化态加氢催化剂会被还原,生成金属单只或低价金属氧化物,这就会导致加氢催化剂失活,丧失硫化条件[2] 。因此,在注硫化剂的过程中,应当合理控制加氢催化剂床层温度,保证床层温度足够低,就目前来看,国内二甲基二硫注硫温度能够控制在195摄氏度,二硫化碳注硫温度能够控制在175摄氏度。

2.2 硫化温度

不同加氢催化剂在制作方法、金属组分等方面有着一定的差异性,其活化中心不同,在硫化过程中需要的硫化温度也有着一定的差异性。以Co-Mo/Al2O3系催化剂为例,其Co-Mo-S相能够对活性起作用,其有两种类型,一种类型通过O或S与Al2O3结合成键,此阶段的硫化度较差,在高硫化温度下,O或S与Al2O3成的键会被打破,之后再进行硫化过程,从而生成另一种类型的Co-Mo-S相,相较于第一种类型来说,这种类型的硫化程度和内在活性都要更高一些。相关研究表明,在150~245摄氏度的低温硫化区,在表面上存在的Mo O3分散性较好,会发生还原硫化反应,会出现硫化氢吸附峰,而在273~384摄氏度的高温硫化区,Mo O2及Mo形态物质会产生深度还原硫化,其生成的硫化物为稳定态,因此加氢催化剂存在持续的硫化氢吸附峰。总的来说,对于加氢催化剂的硫化过程来说,需要进行缓慢的升高温度,同时要分阶段进行恒温硫化,只有这样才能够保证不同加氢催化剂的不同活性中性能够在适宜温度下进行硫化。

2.3 最终硫化温度

在低压条件下,加氢催化剂大多只能够发生表面硫化作用,随着硫化压力的提升,则加氢催化剂的最佳硫化温度也提升,而最终硫化温度则会对加氢催化剂的活性产生影响,具体如表1所示:

由表1可知,随着最终硫化温度的提升,ω也提升,但当最终硫化温度提升到一定程度之后,ω下降。此外,如果最终硫化温度超过了最佳温度,还会导致Mo S2出现烧结问题,而当最终硫化温度超过550摄氏度的时候,还会导致γ-Al2O3的烧结和Mo S2的蒸发[3] 。且需要注意的是,反应系统设备设计温度以及换热设备等也会对最终硫化温度产生一定的影响。

3 硫化阶段温升产生原因及温升控制

对于器外加氢催化剂硫化来说,其有效活化温度范围相对较宽,以acti CAT催化剂为例,其有效活化温度范围在204-316摄氏度之间,能够有效降低放热速率,裂化催化剂床层的温度差在11摄氏度以下,精制催化剂床层的温差在22摄氏度以下。

对于有机多硫化物预硫化催化剂来说,其有效活化温度范围相对较窄,一般在10摄氏度左右,在进行活化反应的过程中,其放热速率极大,能够迅速释放活化热。

某加氢裂化装置的反应器床层在入口温度达到176摄氏度的时候,其硫化反应速度较快,而在十分钟后,床层出口温度提升,达到了371摄氏度[4] 。

对于工业硫化装置来说,温升控制方式有很多,例如最大循环量、把握适当的升温速度、最高操作压力、先低温后高温以及在各个阶段采用不同的注硫量等等,一般来说,应当将反应器的入口温度差控制在25摄氏度以下,其最高不能超过30摄氏度。

4 结语

综上所述,对加氢催化剂进行硫化是十分必要的,而不同温度阶段会对加氢裂化催化剂的硫化效果产生影响,本文简要分析了硫化过程温度的控制要点,旨在进一步促进加氢裂化催化剂硫化技术的发展和应用。

摘要:本文从加氢催化剂硫化的必要性和硫化技术手段分析入手,探讨了各个温度阶段对于加氢裂化催化剂硫化的影响,并研究了硫化阶段温升的原因及控制。

关键词:加氢裂化,催化剂,硫化,温度控制

参考文献

[1] 孙万付,张喜文,马波,索继栓,李树本.硫化条件对加氢裂化催化剂金属硫化度的影响[J].燃料化学学报,2000,05:406-409.

[2] 任春晓,吴培,李振昊,贺兆伟,阎立军,李文乐.加氢催化剂预硫化技术现状[J].化工进展,2013,05:1060-1064.

[3] 熊建平.加氢裂化催化剂硫化影响因素与注硫点分析[J].炼油技术与工程,2015,03:13-15.

温度控制系统范文第4篇

1.1 DS18B20简介

DS18B20是美国DALLAS半导体公司生产的可组网数字式温度传感器. 主要由三个数据部件组成:64的激光ROM,温度灵敏原件,非易失性温度告警触发器TH和TL。 封装如图一:

图一 1.

2DS18B20的特点:

1. 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

2. DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温。 3. DS18B20在使用中不需要任何外围元件。

4. 测温范围-55℃~+125℃,固有测温分辨率0.5℃。 5. 测量结果以9位数字量方式串行传送。

内部结构框图如图二所示。

图二

2.1 访问温度计的协议:

(一)初始化

(二)ROM操作命令

(三)存贮器操作命令

(四)处理/数据

由热敏原件中晶振特性计算出所测的温度。 注意:复位操作如下图三

图三 必需要给DS18B20输入脉冲激活其复位功能。

DS18B20的驱动程序:

/*************************此部分为18B20的驱动程序*************************************/

#include #include sbit D18B20=P3^7; sbit error=P3^4; #define NOP() _nop_() /* 定义空指令 */ #define _Nop() _nop_() /*定义空指令*/ void TempDelay (unsigned char idata us); void Init18b20 (void); void WriteByte (unsigned char idata wr); //单字节写入 void read_bytes (unsigned char idata j); unsigned char CRC (unsigned char j); void GemTemp (void); void Config18b20 (void); void ReadID (void); void TemperatuerResult(void); bit flag; unsigned int idata Temperature; unsigned char idata temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节 unsigned char idata id_buff[8];

unsigned char idata crc_data; unsigned char code CrcTable [256]={ 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};

void GetTemp() {

if(TIM==100)

{ TIM=0;

TemperatuerResult();

每隔 1000ms 读取温度。

void TemperatuerResult(void) {

p = id_buff;

ReadID();

//先确定是第几个DS18B20

Config18b20(); //配置DS18B20的报警温度和分辨度

Init18b20 ();

//复位)

WriteByte(0xcc);

//skip rom

WriteByte(0x44);

//Temperature convert

Init18b20 ();

//复位)

WriteByte(0xcc);

//skip rom

WriteByte(0xbe);

//read Temperature

p = temp_buff;

GemTemp(); //读取温度

}

void GemTemp (void) {

read_bytes (9);

if (CRC(9)==0) //校验正确

{

Temperature = temp_buff[1]*0x100 + temp_buff[0]; //

Temperature *= 0.0625;

Temperature /= 16;

TempDelay(1);

} } *Function:CRC校验 *parameter: *Return: *Modify: *************************************************************/ unsigned char CRC (unsigned char j) {

unsigned char idata i,crc_data=0;

for(i=0;i

crc_data = CrcTable[crc_data^temp_buff[i]];

return (crc_data); }

/************************************************************ *Function:向18B20写入一个字节 *parameter: *Return: *Modify:

void WriteByte (unsigned char idata wr) //单字节写入 {

unsigned char idata i;

for (i=0;i<8;i++)

{

D18B20 = 0;

_nop_();

D18B20=wr&0x01;

TempDelay(3);

//delay 45 uS //

5 _nop_();

_nop_();

D18B20=1;

wr >>= 1;

} }

/************************************************************ *Function:读18B20的一个字节 *parameter: *Return: *Modify: *************************************************************/ unsigned char ReadByte (void)

//读取单字节

unsigned char idata i,u=0;

for(i=0;i<8;i++)

{

D18B20 = 0;

u >>= 1;

D18B20 = 1;

if(D18B20==1)

u |= 0x80;

TempDelay (2);

_nop_();

}

return(u); } /************************************************************ *Function:读18B20 *parameter: *Return: *Modify: *************************************************************/ void read_bytes (unsigned char idata j) {

unsigned char idata i;

for(i=0;i

{

*p = ReadByte();

p++;

} } /************************************************************ *Function:延时处理 *parameter: *Return: *Modify: *************************************************************/ void TempDelay (unsigned char idata us) {

while(us--); } /************************************************************ *Function:18B20初始化 *parameter: *Return: *Modify: *************************************************************/ void Init18b20 (void) {

D18B20=1;

_nop_();

D18B20=0;

TempDelay(80);

//delay 530 uS//80

_nop_();

D18B20=1;

TempDelay(14);

//delay 100 uS//14

_nop_();

_nop_();

_nop_();

if(D18B20==0)

{flag = 1; error=0; }

//detect 1820 success!

else

{flag = 0; error=1; }

//detect 1820 fail!

TempDelay(20);

//20

_nop_();

_nop_();

D18B20 = 1; }

/************************************************************

向18B20写入一个字节 *parameter: *Return: *Modify: *************************************************************/ void WriteByte (unsigned char idata wr) //单字节写入 {

unsigned char idata i;

for (i=0;i<8;i++)

{

D18B20 = 0;

_nop_();

D18B20=wr&0x01;

TempDelay(3);

//delay 45 uS //5

_nop_();

_nop_();

D18B20=1;

wr >>= 1;

} }

/************************************************************

读18B20的一个字节

*/ unsigned char ReadByte (void)

//读取单字节 {

unsigned char idata i,u=0;

for(i=0;i<8;i++)

{

D18B20 = 0;

u >>= 1;

D18B20 = 1;

if(D18B20==1)

u |= 0x80;

TempDelay (2);

_nop_();

}

return(u); }

/************************************************************ 3.1.2

SPI数据线配置。

/*************************此部分为74HC595的驱动程序使用SPI总线连接*************************************/

#include #include

#define NOP()

_nop_()

/* 定义空指令 */ #define _Nop() _nop_()

/*?定义空指令*/ void HC595SendData(unsigned int SendVal);

//SPI IO sbit

MOSIO =P1^5; sbit

R_CLK =P1^6; sbit

S_CLK =P1^7; sbit

IN_PL =P3^4;

//74HC165 shift load

把数据加载到锁存器中 sbit

IN_Dat=P3^5;

//74HC165 output

数据移出 sbit

OE

=P3^6;

/********************************************************************************************************* ** 函数名称: HC595SendData ** 功能描述: 向SPI总线发送数据

*********************************************************************************************************/ void HC595SendData(unsigned int SendVal) {

unsigned char i;

for(i=0;i<16;i++)

{

if((SendVal<

else MOSIO=0;

S_CLK=0;

NOP();

NOP();

S_CLK=1;

}

R_CLK=0; //set dataline low

NOP();

NOP();

R_CLK=1; //片选

OE=0; }

3.1.

3试验数码管上显示温度

#include extern GetTemp();

//声明引用外部函数 extern unsigned int idata Temperature;

// 声明引用外部变量 void delay(unsigned int i);

sbit

LS138A=P2^2;

//管脚定义 sbit

LS138B=P2^3; sbit

LS138C=P2^4;

//此表为 LED 的字模, 共阴数码管 0-9 -

unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned long LedOut[5],LedNumVal; void system_Ini() {

TMOD|= 0x11;

TH1 = 0xD8;

//10

TL1 = 0xF0;

IE = 0x8A;

TR1 = 1 main() { unsigned char i;

system_Ini();

while(1)

{

GetTemp();

/********以下将读18b20的数据送到LED数码管显示*************/

LedNumVal=Temperature;

//把实际温度送到LedNumVal变量中

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

LedOut[1]=Disp_Tab[LedNumVal%1000/100];

LedOut[2]=Disp_Tab[LedNumVal%100/10]; //十位

LedOut[3]=Disp_Tab[LedNumVal%10];

//个位

for(i=0; i<4; i++)

{

P0 = LedOut[i] ;

switch(i)

{

//138译码

case 0:LS138A=0; LS138B=0; LS138C=0; break;

case 1:LS138A=1; LS138B=0; LS138C=0; break;

case 2:LS138A=0; LS138B=1; LS138C=0; break;

case 3:LS138A=1; LS138B=1; LS138C=0; break;

}

delay(100);

}

P0 = 0;

} }

//延时程序

void delay(unsigned int i) {

char j;

for(i; i > 0; i--)

for(j = 200; j > 0; j--); } 4.1 讨论DS18B20的自动报警功能实现。

DS18B20只是一个测温元件,所谓的报警功能要通过程序由单片机来实现。

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,头2个字节包含测得的温度信息,第3和第4字节TH(报警温度上限)和TL(报警温度下限)的拷贝。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。第

6、

温度控制系统范文第5篇

1.1 DS18B20简介

DS18B20是美国DALLAS半导体公司生产的可组网数字式温度传感器. 主要由三个数据部件组成:64的激光ROM,温度灵敏原件,非易失性温度告警触发器TH和TL。 封装如图一:

图一 1.

2DS18B20的特点:

1. 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

2. DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温。 3. DS18B20在使用中不需要任何外围元件。

4. 测温范围-55℃~+125℃,固有测温分辨率0.5℃。 5. 测量结果以9位数字量方式串行传送。

内部结构框图如图二所示。

图二

2.1 访问温度计的协议:

(一)初始化

(二)ROM操作命令

(三)存贮器操作命令

(四)处理/数据

由热敏原件中晶振特性计算出所测的温度。 注意:复位操作如下图三

图三 必需要给DS18B20输入脉冲激活其复位功能。

DS18B20的驱动程序:

/*************************此部分为18B20的驱动程序*************************************/

#include #include sbit D18B20=P3^7; sbit error=P3^4; #define NOP() _nop_() /* 定义空指令 */ #define _Nop() _nop_() /*定义空指令*/ void TempDelay (unsigned char idata us); void Init18b20 (void); void WriteByte (unsigned char idata wr); //单字节写入 void read_bytes (unsigned char idata j); unsigned char CRC (unsigned char j); void GemTemp (void); void Config18b20 (void); void ReadID (void); void TemperatuerResult(void); bit flag; unsigned int idata Temperature; unsigned char idata temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节 unsigned char idata id_buff[8];

unsigned char idata crc_data; unsigned char code CrcTable [256]={ 0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65, 157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220, 35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255, 70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154, 101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36, 248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185, 140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205, 17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80, 175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238, 50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115, 202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139, 87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22, 233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168, 116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53};

void GetTemp() {

if(TIM==100)

{ TIM=0;

TemperatuerResult();

每隔 1000ms 读取温度。

void TemperatuerResult(void) {

p = id_buff;

ReadID();

//先确定是第几个DS18B20

Config18b20(); //配置DS18B20的报警温度和分辨度

Init18b20 ();

//复位)

WriteByte(0xcc);

//skip rom

WriteByte(0x44);

//Temperature convert

Init18b20 ();

//复位)

WriteByte(0xcc);

//skip rom

WriteByte(0xbe);

//read Temperature

p = temp_buff;

GemTemp(); //读取温度

}

void GemTemp (void) {

read_bytes (9);

if (CRC(9)==0) //校验正确

{

Temperature = temp_buff[1]*0x100 + temp_buff[0]; //

Temperature *= 0.0625;

Temperature /= 16;

TempDelay(1);

} } *Function:CRC校验 *parameter: *Return: *Modify: *************************************************************/ unsigned char CRC (unsigned char j) {

unsigned char idata i,crc_data=0;

for(i=0;i

crc_data = CrcTable[crc_data^temp_buff[i]];

return (crc_data); }

/************************************************************ *Function:向18B20写入一个字节 *parameter: *Return: *Modify:

void WriteByte (unsigned char idata wr) //单字节写入 {

unsigned char idata i;

for (i=0;i<8;i++)

{

D18B20 = 0;

_nop_();

D18B20=wr&0x01;

TempDelay(3);

//delay 45 uS //

5 _nop_();

_nop_();

D18B20=1;

wr >>= 1;

} }

/************************************************************ *Function:读18B20的一个字节 *parameter: *Return: *Modify: *************************************************************/ unsigned char ReadByte (void)

//读取单字节

unsigned char idata i,u=0;

for(i=0;i<8;i++)

{

D18B20 = 0;

u >>= 1;

D18B20 = 1;

if(D18B20==1)

u |= 0x80;

TempDelay (2);

_nop_();

}

return(u); } /************************************************************ *Function:读18B20 *parameter: *Return: *Modify: *************************************************************/ void read_bytes (unsigned char idata j) {

unsigned char idata i;

for(i=0;i

{

*p = ReadByte();

p++;

} } /************************************************************ *Function:延时处理 *parameter: *Return: *Modify: *************************************************************/ void TempDelay (unsigned char idata us) {

while(us--); } /************************************************************ *Function:18B20初始化 *parameter: *Return: *Modify: *************************************************************/ void Init18b20 (void) {

D18B20=1;

_nop_();

D18B20=0;

TempDelay(80);

//delay 530 uS//80

_nop_();

D18B20=1;

TempDelay(14);

//delay 100 uS//14

_nop_();

_nop_();

_nop_();

if(D18B20==0)

{flag = 1; error=0; }

//detect 1820 success!

else

{flag = 0; error=1; }

//detect 1820 fail!

TempDelay(20);

//20

_nop_();

_nop_();

D18B20 = 1; }

/************************************************************

向18B20写入一个字节 *parameter: *Return: *Modify: *************************************************************/ void WriteByte (unsigned char idata wr) //单字节写入 {

unsigned char idata i;

for (i=0;i<8;i++)

{

D18B20 = 0;

_nop_();

D18B20=wr&0x01;

TempDelay(3);

//delay 45 uS //5

_nop_();

_nop_();

D18B20=1;

wr >>= 1;

} }

/************************************************************

读18B20的一个字节

*/ unsigned char ReadByte (void)

//读取单字节 {

unsigned char idata i,u=0;

for(i=0;i<8;i++)

{

D18B20 = 0;

u >>= 1;

D18B20 = 1;

if(D18B20==1)

u |= 0x80;

TempDelay (2);

_nop_();

}

return(u); }

/************************************************************ 3.1.2

SPI数据线配置。

/*************************此部分为74HC595的驱动程序使用SPI总线连接*************************************/

#include #include

#define NOP()

_nop_()

/* 定义空指令 */ #define _Nop() _nop_()

/*?定义空指令*/ void HC595SendData(unsigned int SendVal);

//SPI IO sbit

MOSIO =P1^5; sbit

R_CLK =P1^6; sbit

S_CLK =P1^7; sbit

IN_PL =P3^4;

//74HC165 shift load

把数据加载到锁存器中 sbit

IN_Dat=P3^5;

//74HC165 output

数据移出 sbit

OE

=P3^6;

/********************************************************************************************************* ** 函数名称: HC595SendData ** 功能描述: 向SPI总线发送数据

*********************************************************************************************************/ void HC595SendData(unsigned int SendVal) {

unsigned char i;

for(i=0;i<16;i++)

{

if((SendVal<

else MOSIO=0;

S_CLK=0;

NOP();

NOP();

S_CLK=1;

}

R_CLK=0; //set dataline low

NOP();

NOP();

R_CLK=1; //片选

OE=0; }

3.1.

3试验数码管上显示温度

#include extern GetTemp();

//声明引用外部函数 extern unsigned int idata Temperature;

// 声明引用外部变量 void delay(unsigned int i);

sbit

LS138A=P2^2;

//管脚定义 sbit

LS138B=P2^3; sbit

LS138C=P2^4;

//此表为 LED 的字模, 共阴数码管 0-9 -

unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned long LedOut[5],LedNumVal; void system_Ini() {

TMOD|= 0x11;

TH1 = 0xD8;

//10

TL1 = 0xF0;

IE = 0x8A;

TR1 = 1 main() { unsigned char i;

system_Ini();

while(1)

{

GetTemp();

/********以下将读18b20的数据送到LED数码管显示*************/

LedNumVal=Temperature;

//把实际温度送到LedNumVal变量中

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

LedOut[1]=Disp_Tab[LedNumVal%1000/100];

LedOut[2]=Disp_Tab[LedNumVal%100/10]; //十位

LedOut[3]=Disp_Tab[LedNumVal%10];

//个位

for(i=0; i<4; i++)

{

P0 = LedOut[i] ;

switch(i)

{

//138译码

case 0:LS138A=0; LS138B=0; LS138C=0; break;

case 1:LS138A=1; LS138B=0; LS138C=0; break;

case 2:LS138A=0; LS138B=1; LS138C=0; break;

case 3:LS138A=1; LS138B=1; LS138C=0; break;

}

delay(100);

}

P0 = 0;

} }

//延时程序

void delay(unsigned int i) {

char j;

for(i; i > 0; i--)

for(j = 200; j > 0; j--); } 4.1 讨论DS18B20的自动报警功能实现。

DS18B20只是一个测温元件,所谓的报警功能要通过程序由单片机来实现。

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,头2个字节包含测得的温度信息,第3和第4字节TH(报警温度上限)和TL(报警温度下限)的拷贝。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。第

6、

温度控制系统范文第6篇

织物的外观会受到染色质量好坏的影响, 因此在工业化生产过程中要严格控制织物的染色过程。影响染色效果的因素有很多, 主要是:浓度、染液温度、时间。其中温度是影响染色效果的最重要因素之一[1], 而温度控制又是一个很重要而复杂的控制过程。

2 系统介绍

染缸是主要控制对象。在高温高压染色时, 压力检测组件测量染缸内压力。当压力不足时自动打开压缩空气进气阀。送入压缩空气, 直至压力达到设定值, 将进气阀关闭。在升温过程中压力过高时排压阀打开自动排气, 使压力不超过上限。染缸温度由铂电阻温度计测量, 经变送器输入微机A/D接口, 微机经过调节算法运算后, 由D/A接口经过执行机构控制蒸汽阀门的开度。改变送入换热器的蒸汽量, 使染液的温度变化斜率符合编程设定的升温斜率。在降温阶段, 送入冷却水冷却。使温度变化曲线满足工艺要求。一般在温度小于87℃左右时, 系统才被允许开盖操作以保证安全生产。

3 温度对象的特性

染液等效为热交换器, 总传热系数为升温时, 染液吸收的热量为Q1=a2A (θv-θ) ;降温时, 冷却水带走的热量为Q2=K2A (θ-θu) (a1是管内传热系数;a2是管外对流传热系数;K是总传热系数, A是换热面积;θv是蛇管内的平均温度;θ是染液温度;θu为冷却水温度) ;染液一部分热量散失到周围环境中, 散失的热量即:Q3=K3 (θ-θa) (K3是与染缸尺寸和通风情况有关的系数, θa是环境温度)

高温高压染色机温度对象动态特性[2]为

4 模糊控制器的编辑与存储

系统仿真中使用Matlab/simulink的模糊推理系统工具箱。FIS系统的规则语句可根据模糊控制器设计的输出变量控制规则表全部直接写出。

在FIS编辑器的里面设置两个输入和输出的论域, 即θ, △θ和Kp的论域, 并保存文件名为WENKONG.fis。

4.1 编辑规则表:

为了实现在线调整比例系数引入模糊推理机构。选择染液温度θ和温度偏差△θ来作为输入量, 比例系数作为输出量。将θ、△θ和Kp的模糊控制表在规则观察器编辑[3]。规则观察器以非常详细的方式给出了模糊推理系统的一种微观视角, 可以通过观察器建立模糊控制查询表。

4.2 控制器在Simulink环境下的仿真:

根据参数在线自校正模糊控制系统结构图, 在Matlab仿真平台下的Simulink环境下的建造出如图4-6所示的染色过程温度智能控制系统的仿真结构图形[4], 并选取好各个模块的参数, 将其文件名取为WEN.mdl。

4.3 运行结果观察与分析

选择菜单Simulation/Simulation Parametem对仿真参数进行设置, 选择菜单Simulation/Star, 开始仿真, 然后双击Scope和Scope1观察曲线图像, 仿真图像:

横轴代表时间, 纵轴代表温度。图4-8上图是系统仿真的给定曲线。一般工艺曲线的开始阶段是斜线, 如果开始阶段是恒温, 可在系统温度恒定时才进行染色, 系统开始升温、保温过程, 当温度到达到最高点时, 开始降温的全部过程图像。图4-8下图是系统仿真的染色过程温度控制系统的经过模糊PID控制后的输出曲线图。

由图4-9保温误差放大图曲线图, 保温控制的偏差在0.2℃以内, 图4-10升温误差放大图, 我们可以看出动态升温过程的偏差在0.5℃以内, 图4-11降温误差放大图, 我们可以看出动态降温过程的偏差在0.3℃以内, 有效地克服了积分饱和问题, 在染液的升温、保温和降温过程中, 温度曲线能严格符合染液工艺的要求, 该染色过程的温度控制系统能适应染色过程动态特性的变化, 保证了温度控制的精度, 保温、升温、降温效果很好, 温度跟踪效果也很优秀, 可有效提高染色质量。

摘要:高温高压染色机温度系统是一种复杂的控制对象, 很难获得精确的数学模型。因此本文在分析染色机系统结构和染色机温度对象特性的基础上, 根据染色过程的温度偏差和实际温度, 设计了一种参数可变的PID控制器。本文基于Simulink对这种染色过程中的温度智能控制进行了系统仿真研究。

关键词:染色机,模糊PI,Simulink,系统仿真

参考文献

上一篇:雅舍范文下一篇:小学优秀教师总结范文