温度控制系统设计.docx
- 文档编号:11768394
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:28
- 大小:230.44KB
温度控制系统设计.docx
《温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《温度控制系统设计.docx(28页珍藏版)》请在冰点文库上搜索。
温度控制系统设计
毕业设计(论文)
题目:
智能温度控制系统设计
摘要
本设计应用性比较强,设计系统可以作为生物培养液温度监控系统,如果稍微改装可以做热水器温度调节系统、实验室温度监控系统等等。
课题主要任务是完成环境温度检测,利用单片机实现温度调节并通过计算机实施温度监控。
设计后的系统具有操作方便,控制灵活等优点。
本设计采用单片机PIC16F877A,软件系统包括温度传感器,A/D转换模块,输出控制模块,数据传输模块,温度显示模块和温度调节模块六个部分。
文中对每个部分功能、实现过程作了详细介绍。
整个系统的核心是进行温度监控,完成了课题所有要求。
关键词温度控制传感器单片机PIC16F877A
目录
第1章设计要求1
1.1控制要求1
1.2受控对象的数学模型1
第2章硬件设计2
2.1硬件选型2
2.2温度控制系统的组成框图2
2.3温度控制系统结构图及总述3
第3章软件设计5
3.1单片机温度控制系统软件结构图5
3.2单片机控制流程图6
3.3温度变换程序模块6
3.4温度非线性转换程序模块7
第4章通信协议的设计9
4.1软件设计9
4.2通信协议说明10
4.2.1信号帧分类10
4.2.2信号帧格式10
4.2.3通信协议处理流程11
4.3PC上位机的软件设计13
4.3.1PC软件设计方法的选择13
4.3.2PC软件通信方式的选择14
4.3.3具体实现方法16
4.4单片机软件设计19
4.5通信协议设计结论20
4.5.1通信可靠性分析20
4.5.2通信速度分析20
第5章结论22
致谢...23
参考文献24
第1章设计要求
1.1控制要求
(1)生物繁殖培养液的温度要保证在适于细胞繁殖的温度内,这主要在控制程序设计中考虑。
温度控制范围为15~25℃,升温、降温阶段的温度控制精度要求为0.5℃,保温阶段温度控制精度为0.5℃。
图1-1温度控制曲线
(2)微机自动调节正常情况下,系统投入自动。
(3)模拟手动操作当系统发生异常,投入手动操作。
(4)微机监控功能显示当前被控量的设定值、实际值,控制量的输出。
1.2受控对象的数学模型
生物繁殖的培养液主要用于生物的繁殖研究,而温度是影响生物繁殖的重要因素。
本系统要求长时间监视培养液的温度,并对当前的温度进行控制。
本控制对象为生物繁殖用培养液,采用继电器进行控制。
第2章硬件设计
2.1硬件选型
单片机:
PIC16F877A(PIC16F877A为美国MICORCHIP公司生产的带A/D转换的8位单片机)。
显示系统:
商用计算机。
用户内存:
256MRAM。
系统总线:
RS-232-C接口(又称EIARS-232-C)RS232C有2条线,,分为5个功能组,包括4条数据线,11条控制线,3条定时线,7条备用线和未定义线。
操作系统:
Windows2000。
2.2温度控制系统的组成框图
采用典型的反馈式温度控制系统,组成部分见图2-1。
其中数字控制器的功能由单片机实现。
图2-1温度控制系统的组成框图
培养皿的传递函数为
,,其中τ1为电阻加热的时间常数,为电阻加热的纯滞后时间,为采样周期。
A/D转换器可划归为零阶保持器内,所以广义对象的传递函数为
广义对象的Z传递函数为
所以系统的闭环Z传递函数为
系统的数字控制器为
=
写成差分方程即为
令
得
式中——第次采样时的偏差;
——第次采样时的偏差;
——第次采样时的偏差;
2.3温度控制系统结构图及总述
图2-2温度控制系统结构图
图2-2中温度传感器和MicroChipPIC16F877A单片机中的A/D转换器构成输入通道,用于采集培养皿内的温度信号。
温度传感器输出电压经过A/D转换后的数字量与培养皿内的温度给定值数字化后进行比较,即可得到实际温度和给定温度的偏差。
培养皿内的温度设定值由MicroChipPIC16F877A单片机中程序设定。
由MicroChipPIC16F877A单片机构成的数字控制器进行比较运算,经过比较后输出控制量控制由加热和降温电路构成的温度调节电路对培养皿中的培养液温度进行调节。
同时通过电平转换电路把当前温度传输到商用计算机的串口中,由计算机动态的显示培养皿中的温度,正常情况下温度控制由MicroChipPIC16F877A单片机自动控制。
必要时,计算机也可以通过软件来强制改变培养皿中温度。
第3章软件设计
3.1单片机温度控制系统软件结构图。
图3-1单片机温度控制系统软件结构图
3.2单片机控制流程图如图
图3-2单片机控制流程图
3.3温度变换程序模块
温度传感器在12℃到60℃输出2.52V—1.02V,温度起点为12℃,满量程为48℃。
MicroChipPIC16F877A单片机内嵌的10位A/D转换器对应输出的数字量为0000000000B~1111111111B(0~5V),应用以下变换公式进行变换:
AX=A0+(AM-A0)(NX-N0)/(NM-N0)
式中,A0为一次测量仪表的下限。
AM为一次测量仪表的上限。
AX实际测量值。
N0仪表下限对应的数字量。
NM仪表上限对应的数字量。
NX测量值对应的数字量。
3.4温度非线性转换程序模块
采用折线拟合法进行线性化处理
如图3-3所示,分为以下几段:
当1.73V≤Ax<2.52V时,T℃=0.06*WN+12
当1.40V≤WN<1.73V时,T℃=0.03*WN+25
当1.24V≤WN<1.40V时,T℃=0.016*WN+40
当1.06V≤WN<1.24V时,T℃=0.018WN+50
表3-3温度曲线实际测量数据
温度(℃)
12
13
14
15
16
17
18
电压(V)
2.52
2.48
2.47
2.44
2.40
2.39
2.37
温度(℃)
19
20
21
22
23
24
25
电压(V)
2.32
2.28
2.22
2.15
2.09
1.83
1.73
温度(℃)
26
27
28
29
30
31
32
电压(V)
1.70
1.66
1.64
1.61
1.58
1.56
1.54
温度(℃)
33
34
35
36
37
38
39
电压(V)
1.53
1.50
1.48
1.46
1.45
1.43
1.41
温度(℃)
40
41
42
43
44
45
46
电压(V)
1.40
1.38
1.37
1.35
1.32
1.30
1.29
温度(℃)
47
48
49
50
51
52
53
电压(V)
1.27
1.26
1.25
1.24
1.22
1.20
1.19
温度(℃)
54
55
56
57
58
59
60
电压(V)
1.17
1.16
1.12
1.11
1.09
1.07
1.06
图3-4温度分段线限等效图
第4章通信协议的设计
由于温度采集和实施控制是通过单片机控制系统实现,而微机完成温度监控,所以需要采用单片机和微机之间的通信协议。
本设计应用条件为传输距离不超过15米的短距离数据传输,且传输数据量较小,所以采用在控制领域里应用较广泛RS232C串行通信方式。
针对近程小批量的数据通信,设计时采用3线制(RXD,TXD,GND)软握手的零MODEM方式。
即:
将PC机和单片机的“发送数据线(TXD)”与“接收数据(RXD)”交叉连接,二者的地线(GND)直接相连而其它信号线如握手信号线均不用,而采用软件握手。
这样即可以实现预定的任务,又可以简化电路设计节约了成本。
由于RS232C是早期为促进公用电话网络进行数据通信而制定的标准,其逻辑电平与TTL,MOS逻辑电平不同。
逻辑0电平规定为+5~+15V之间,逻辑1是电平为-5~-15V之间。
因此在将PC机和单片机的RXD和TXD交叉连接时,必须进行电平转换。
下图即为通信时的硬件连接图,其中器件MAX232完成逻辑电平转换的任务。
图4-1电平转换电路图
注:
在PC机中9针RS232接口中:
2线:
RXD,3线:
TXD,5线:
GND
而在25针的RS232接口中:
3线:
RXD,2线:
TXD,7线:
GND
4.1软件设计
在进行数据通信的软件设计时,必须解决好两个方面的问题:
一是可靠性,二是速度。
而这两方面的问题,可靠性是第一位的,速度只能是在可靠的基础上的速度。
可靠快速转输的实现,需要PC-单片机软件以及通信协议等各个环节的可靠和其间的相互配合。
在设计PC-单片机通信协议时,需说明一点:
在本系统的实际通信中,PC机是主控者单片机只是被动接收者。
采用这种通信协议较双方互为主控者时简单。
本通信协议的设计思想是基于帧传输方式。
即在向RS232串口发送命令信号,应答信号及数据信号时,是一帧一帧地发送的。
为了使数据快速可靠地传输,将每一帧数据唯一对应一命令帧。
此时传输数据即执行命令具体如下:
(1)在PC读数据时,遵循“读命令-等数据-报告”,即PC下达一命令,等待接收数据,根据所接收数据的正误向应用程序报告此命令的执行情况。
(2)在PC写数据时,遵循“写命令-等回应-报告”,即PC下达一写命令(此时所要写的数据含于此命令中),等待单片机发来的“已正确接收”的回应信号,并向应用程序报告此命令执行完毕。
(3)如果在转输过程中,其间PC或MCU所接收任何一帧信号出现错误时,均会向对方发送重发此帧信号的请求。
如果连续三次转输失败,则退出通信并向应用程序报告。
4.2通信协议说明
4.2.1信号帧分类
(1)读命令帧:
当PC读数据时,PC向PIC16F877A发送的命令信号。
(2)写命令帧:
当PC写数据时,PC向PIC16F877A发送的命令信号(内含所要写的数据)。
(3)数据帧:
当PC读数据时,PIC16F877A向PC发送的内含数据信息的信号。
(4)正回应帧:
当PC写数据时,PIC16F877A向PC报告数据已正确接收的信号。
(5)重发命令帧:
当PC读/写数据时,PIC16F877A所接收的信号帧(读/写命令帧)有误时向PC发出的请求重发信号。
(6)放弃命令帧:
当PC读/写数据时出现了使程序无法正常执行时PC或PIC16F877A向对方发出的退出通信的通知信号。
4.2.2信号帧格式
(1)读命令帧格式
帧头标志
帧类型
器件地址
起始地址
长度
校验和
帧尾标志
帧头标志(1Bit):
表示此数据包属于本串口通信协议,并为是否接收此包数据的标志。
帧类型(1Bit):
所用信号帧的识别标志,即1.2.1信号帧分类中的各类型信号的标志字节。
器件地址(1Byte):
PC所要访问的外部器件的地址即是哪一个外部器件。
起始地址(2Byte):
PC所要访问的器件的存贮器起始地址。
长度(1Byte):
一次命令所转输的数据长度。
校验和(1Byte):
此帧信号的校验字节,为异或校验。
帧尾标志(1Byte):
此帧信号的结束标志。
(2)写命令帧
帧头标志
帧类型
器件地址
起始地址
长度
数据区
校验和
帧尾标志
数据区:
所要写的数据信息。
其它分析同上。
(3)数据帧
帧头标志
帧类型
长度
数据区
校验字
帧尾标志
数据区:
所转输的数据信息。
其它分析同上。
(4)正响应帧
帧头标志
帧类型
空
校验字
帧尾标志
空无意义:
为了PIC16F877A编程的方便而加入。
其它分析同上。
(5)重发帧
帧头标志
帧类型
空
校验字
帧尾标志
其它分析同上。
(6)放弃帧
帧头标志
帧类型
错误码
校验字
帧尾标志
错误码:
00H执行PC命令发放弃帧回应被动退出通讯。
01HPIC16F877A单片机方写入芯片发生错误主动通知PC退出通讯。
4.2.3通信协议处理流程
(1)数据分帧与数据重组如图4-2、4-3所示
图4-2串口数据发送过程
图4-3串口数据接受过程
将应用程序发送过来的数据作为一个数据流放在发送缓冲区中,通过通信协议进行分帧──切割──发送。
在接收端,分帧的数据去掉帧头重新组合到接收缓冲区中,交给应用程序处理,发送过程的示意如图4-2,接收过程的示意图如图4-3
(2)单片机串口通信软件设计流程图如图4-4所示:
图4-4单片机串口通信软件流程图
(3)PC接收数据软件设计流程如图4-5所示:
图4-5PC串口通信软件设计流程图
4.3PC上位机的软件设计
4.3.1PC软件设计方法的选择
在开发PC上位机的通信程序中,人们常用的编程语言可分为3类:
(1)直接面向底层硬件的汇编语言。
(2)DOS环境下的高级编程语言,如:
C语言等。
(3)Windows环境下的高级编程语言,如:
VC++等。
而在这3种方式中Windows环境下的串口编程以其设备无关性,可移植性以及界面友好等特征而得到广泛应用。
同时在Windows操作系统已经占据统治地位的情况下,欲开发良好的通信程序,利用Windows环境下的高级语言已渐成为必然的选择。
开发Windows环境下的串口通信程序主要有以下2种方法:
(1)利用WindowsAPI(ApplicationProgramInterface)用户程序接口函数;
(2)利用ActiveX控件;
后者的主要特点是简单易学,但前者的功能更为强大控制手段更为灵活。
4.3.2PC软件通信方式的选择
在Win32环境下串行通信有两种:
主要方式即同步方式,异步方式两种方式有各自的特点。
在软件设计时应根据实际情况选择合适的方式。
(1)同步方式
在同步方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的数据,直到规定数目的数据全部被读出或设定的超时时间已到时才返回。
例如:
(以C++Builder编程语言为例下同)
……………………
……………………
COMMTIMEOUTScto;
inttimeConstant,timeMutiplier;
cto.ReadTotalTimeoutConstant=timeConstant;//设置总超时常数
cto.ReadTotalTimeoutMultiplier=timeMutiplier;//设置总超时系数
SetCommTimeouts(m_hFile,&cto);//超时设置
…………………………
…………………………
ReadFile(hComport,inBuffer,nWantRead,&nRealRead,NULL);//读串口
…………………………
…………………………
COMMTIMEOUTS结构用于设置超时,指定读写函数的等待时间
在ReadFile函数中hComport为待读串口句柄;inBuffer为输入缓冲区大小;nWantRead为每次调用ReadFile时,函数试图读出的字节数;nRealRead为实际读出的字节数;最后一个参数值NULL代表ReadFile将采用同步文件读写方式。
(2)异步方式
异步方式中,利用Win32的多线程结构,可以让串口的读写操作在后台进行,而应用程序的其它部分在前台执行例如:
……………………
……………………
……………………
CreateFile(lpszPort,//打开串口
GENERIC_READ|GENERIC_WRITE,
0,
0,
……………………
……………………
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,//允许异步操作
0);
OVERLAPPEDlpOverlapped;
COMMTIMEOUTScto;
inttimeConstant,timeMutiplier;
cto.ReadTotalTimeoutConstant=timeConstant;//设置总超时常数
cto.ReadTotalTimeoutMultiplier=timeMutiplier;//设置总超时系数
SetCommTimeouts(m_hFile,&cto);//超时设置
lpOverlapped.hEvent=CreateEvent(NULL.TRUE,FALSE,NULL);
……………………
……………………
……………………
ReadFile(hComport,inBuffer,nWantRead,&nRealRead,&lpOverlapped);//读串口
……………………
lpOverlapped是1个OVERLAPPED结构变量,OVERLAPPED结构用于指出读写操作与其它操作的重叠为了实现线程间同步与通信,上面的代码中用CreateEvent函数产生1个人工复位事件,并将其句柄赋予lpOverlapped的hEvent成员这样,在异步读写完成时,Windows95发送该事件信号。
(3)两种方式的比较
异步方式利用多线程结构来监视通信设备,其最大优点是程序对接收数据具有自主觉察能力。
一旦通信线程查询到数据已发送到串口上,线程自动向应用程序发送一个数据接收到的消息,应用程序可用该消息来读取通信设备传来的数据。
并且使用通信线程还不占用CPU时间,这样系统实际上具有了同时控制多个通信设备(如MODEM)的能力。
因此在对系统强壮性要求较高的场合下应采用异步方式。
异步方式的优点也恰是同步方式的缺点。
使用同步方式时容易发生线程阻塞,从而使系统性能下降。
但在某些场合下,该缺点可以通过一些措施尽可能地减小,而其简单易用的优点却是很好地体现出来。
如果不考虑Win95的进程和线程的问题,仅在串口有数据时,去读串口缓冲区就可以了。
此时确定串口读取的时机,握手协议及软件纠错的实现是程序员应考虑的主要问题,也是减小线程阻塞所带来的负面影响的主要措施。
可以采用同步转输方式的场合有如下一些特点:
①何时转输数据由PC机来决定,下位机只是被动接收并执行命令。
②有限时间内,PC机命令可以执行完毕并返回结果。
而不会使PC机处于长时间等待。
③每次所转输的数据的长度是已知的,所转输的数据量是有限且比较小。
我们在开发串行通信程序时,分别应用这两种方式开发都获得了成功。
鉴于应用异步方式的安全性和普遍性
4.3.3具体实现方法
下面以C++Builder为例,叙述PC机通信软件的实现过程:
(1)打开串口
在Win32中,串口和其他通信设备是作为文件处理的。
串口的打开并闭读取以及写入所用的函数与操作文件的函数相同。
通信会话由调用CreateFile函数打开串口开始,CreateFile以读访问权限,写访问权限或读写访问权限“打开串口”并设定了对其是异步操作方式。
还是同步操作方式调用该函数打开串口进行读写操作的例子如下:
mHandle=CreateFile(lpszPort,//串口名
GENERIC_READ|GENERIC_WRITE,//允许读/写
0,//独占方式串口不能共享
NULL,//安全性属性一般设为0
OPEN_EXISTING,//串口是已存在的不能建新端口
lpOverlapped,//异步方式
0//串口无模板文件应设为0
如果调用成功函数返回串口的句柄赋给Handle,如果调用失败则函数返回INVALID_HANDLE_VALUE。
(2)初始化串口
对串口的初始化工作包括对波特率,数据位,停止位,奇偶校验位I/O缓冲大小以及超时等参数的设置。
在调用API函数进行串口初始化时,波特率,数据位,奇偶校验停止位的信息包含于一个DCB结构中,而超时方面的信息则包含于COMMTIMEOUTS结构中,
一般在用CreateFile打开串行口后,可以调用GetCommState函数来获取串行口的初始配置。
要修改串行口的配置应该先修改DCB结构,然后再调用SetCommState函数用指定的DCB结构来设置串行口。
例如:
DCBdcb;
GetCommState(mHandle,&dcb)//读取DCB结构
……………………
……………………
dcb.BaudRate=9600//设置波特率为9600b/s
dcb.ByteSize=8;//每个字符有8位
dcb.Parity=NOPARITY;//无校验
dcb.StopBits=ONESTOPBIT;//一个停止位
SetCommState(hCom,&dcb)//保存至DCB结构使设置值生效
调用SetupComm函数可以设置串行口的输入和输出缓冲区的大小。
如果通信的速率较高则应该设置较大的缓冲区。
例如:
…………………………
…………………………
SetupComm(mHandle,1024*2,1024*2)//输入输出缓冲区的大小均为2K
…………………………
…………………………
在用ReadFile和WriteFile读写串行口时,需要考虑超时问题。
如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFile或WriteFile的操作就会结束。
要查询当前的超时设置应调用GetCommTimeouts函数。
该函数会填充一个COMMTIMEOUTS结构调用SetCommTimeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时。
…………………………
…………………………
TimeOuts.ReadIntervalTimeout=0//读间隔超时
TimeOuts.ReadTotalTimeoutMultiplier=10//读时间系数
TimeOuts.ReadTotalTimeoutConstant=100//读时间常量
TimeOuts.WriteTotalTimeoutMultiplier=10//写时间系数
TimeOuts.WriteTotalTimeoutConstant=100//写时间常数
SetCommTimeouts(hCom,&TimeOuts);//保存设置值生效
………………………………
………………………………
………………………………
COMMTIMEOUTS结构的成员都以毫秒为单位。
总超时的计算公式是:
总超时=时间系数×要求读/写的字符数+时间常数
异步方式读写串行口时虽然ReadFile()和WriteFile()在完成操作以前就可能返回但超时仍然是起作用的。
这种情况下,超时规定的是操作的完成时间而不是ReadFile()和WriteFile()的返回时间。
(3)读写串口
初始化工作完成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 控制系统 设计