基于VC++的温度检测系统设计文档格式.docx

上传人:b****2 文档编号:789884 上传时间:2023-04-29 格式:DOCX 页数:14 大小:545.64KB
下载 相关 举报
基于VC++的温度检测系统设计文档格式.docx_第1页
第1页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第2页
第2页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第3页
第3页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第4页
第4页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第5页
第5页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第6页
第6页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第7页
第7页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第8页
第8页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第9页
第9页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第10页
第10页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第11页
第11页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第12页
第12页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第13页
第13页 / 共14页
基于VC++的温度检测系统设计文档格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于VC++的温度检测系统设计文档格式.docx

《基于VC++的温度检测系统设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于VC++的温度检测系统设计文档格式.docx(14页珍藏版)》请在冰点文库上搜索。

基于VC++的温度检测系统设计文档格式.docx

inordertoimplementamachineofdistributedcontrol,thisisintroducedaeffectiveprogram,realizedtheimplementationofamachineundertemperaturemonitoring.Amachineundertemperaturegatheringtothroughds18b20,stc89c52singlechipmicrocomputertemperaturedataprocessinganddisplay,andreal-timethroughaserialportsendingtothePC.Intheuppermachine,touseVisualC++writethecorrespondingserialinterfacecommunicationsoftware,thusfulfillingthecompletetemperaturemonitoringsystemdesign.

Keywords:

VisualC++;

PC;

Singlechipmicrocomputer;

temperature

前言

随着电子技术和计算机技术的发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。

温度是工业生产中主要的被控参数之一,与之相关的跟中温度控制是工业生产过程中经常遇到的过过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量。

温度控制在实际生产中有着广泛的应用,例如:

在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中。

在这些领域中人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。

因而设计一种较为理想的温度控制系统是非常有价值的。

本论文正以上位机与下位机通讯为主要内容,对远程温度控制系统作了较详尽的介绍。

在实时检测和自动控制的应用系统中,单个单片机控制作为一个核心部件来使用往往是不够的,还应根据具体硬件结构,以及针对具体应用对象特点,编写对应的上位机软件,加以完善,才能设计出完整的系统。

本文设计的一种温度控制系统,用STC89C52单片机作为温控器,选用DS18B20数字温度传感器,可以实现如温度自动控制,设定温度、实时温度显示,温度上下限报警,温度上下限报警值设定,目标温度值设定,自动调零等各种不同的功能。

1、设计方案及原理

在设计的过程中,充分考虑了法案的可行性,在通信这一块,由于目前的PC机都淘汰了串口,故采用PL2302芯片进行了USB与RS232的通信协议转换,从而在上位机中模拟了一个串口,经实验证明,其稳定性与通信速率方面都能满足要求。

在下位机中,采用了常用的STC89C52单片机,该单片机集成了片内eeprom,可以记录温度数据,且能掉电保存。

为了验证通信的准确性,下位机同时把温度数据在LCD上显示出来,本设计的整体框图如图1所示:

图1温度检测系统整体原理框图

2、上位机设计

在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。

串口通信方便易行,应用广泛。

一般情况下,工控机和各智能仪表通过RS485总线进行通信。

RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点。

每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。

  在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活。

其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。

本设计中我采用了ActiveX控件的方式。

串口的操作可以有两种操作方式:

同步操作方式和重叠操作方式(又称为异步操作方式)。

同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);

而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。

在上位机编程中,采用如下步骤完成串口通信的核心框架:

(1)打开并配置串口,双击“打开串口”控件,进入TemperDlg.cpp源程序,在CTemperDlg:

:

OnBtnopen()函数中加入如下代码:

voidCTemperDlg:

OnBtnopen()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

if(!

m_bOpenPort)//第一次点击,打开串口

{

if(m_ctrlComm.GetPortOpen())

{

AfxMessageBox("

该端口已经被打开或者被占用!

"

);

}

intComSel;

ComSel=((CC

omboBox*)GetDlgItem(IDC_COMBO1))->

GetCurSel();

m_ctrlComm.SetCommPort(ComSel+1);

//串口的初始化

m_ctrlComm.SetInputMode

(1);

//二进制

m_ctrlComm.SetInBufferSize(1024);

m_ctrlComm.SetOutBufferSize(512);

m_ctrlComm.SetSettings("

9600,n,8,1"

//无奇偶校验,1个停止位

if(!

m_ctrlComm.GetPortOpen())

m_ctrlComm.SetPortOpen(TRUE);

//MessageBox(NULL,"

串口初始化成功!

0);

else

该端口已经被打开或者被占用!

m_ctrlComm.SetRThreshold

(1);

m_ctrlComm.SetInputLen(0);

m_ctrlComm.GetInput();

EnableSetting(FALSE);

m_ctrlIconOpenoff.SetIcon(m_hIconon);

((CButton*)GetDlgItem(IDC_BTNOPEN))->

SetWindowText("

关闭串口"

m_bOpenPort=TRUE;

}

elseif(m_bOpenPort)//第2次点击,关闭串口

ComSel=((CComboBox*)GetDlgItem(IDC_COMBO1))->

m_ctrlComm.SetPortOpen(FALSE);

EnableSetting(TRUE);

m_ctrlIconOpenoff.SetIcon(m_hIconoff);

打开串口"

m_bOpenPort=FALSE;

}

(2)读写串口:

即温度数据的接收与处理,在voidCTemperDlg:

OnCommMscomm()函数中加入代码如下:

OnCommMscomm()

m_strRXData="

"

;

//每次进入编辑框内容清空等待显示新的数据

VARIANTvariant_inp;

COleSafeArraysafearray_inp;

LONGlen,k;

BYTErxdata[2048];

//设置BYTE数组

CStringstrtemp;

staticintflag;

//识别码数字标志位

if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符

{//以下你可以根据自己的通信协议加入//处理代码

variant_inp=m_ctrlComm.GetInput();

//读缓冲区

safearray_inp=variant_inp;

//VARIANT型变量转换为//ColeSafeArray型变量

len=safearray_inp.GetOneDimSize();

//得到有效数据长度

for(k=0;

k<

len;

k++)

safearray_inp.GetElement(&

k,rxdata+k);

//转换为BYTE型数组

k++)//将数组转换为Cstring型变量

BYTEbt=*(char*)(rxdata+k);

//字符型

strtemp.Format("

%c"

bt);

//将字符送入临时变量strtemp存放

m_strRXData+=bt;

//加入接收编辑框对应字符串strtemp

UpdateData(FALSE);

经过不断调试,不断修正,最终的上位机程序界面如图2所示。

图2上位机软件调试

3.下位机设计

整个下位机程序流程图如图3所示:

图4下位机软件流程图

3.1温度传感器的选用

方案一:

采用DS18B20温度传感器

DS18B20传感器的主要特性如下:

(1)适应电压范围更宽,电压范围:

3.0~5.5V,在寄生电源方式下可由数据线供电;

  

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

  (3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温;

  (4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内;

  (5)温范围-55℃~+125℃,在-10~+85℃时精度为±

0.5℃;

(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温;

  (7)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快;

(8)测量结果直接输出数字温度信号,以"

一线总线"

串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力;

  (9)负压特性:

电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

方案二:

采用AD590温度传感器

AD590是美国模拟器件公司的电流输出型温度传感器,它属于模拟温度传感器,供电电压范围为3~30V,输出电流223μA(-50℃)~423μA(+150℃),灵敏度为1μA/℃。

AD590在正常工作时等效一个高阻抗的恒流源,对应于热力学温度T每变化1K,就输出1uA的电流。

当在电路中串接采样电阻R时,R两端的电压可作为喻出电压。

但是R的阻值不能取得太大,以保证AD590两端电压不低于3V。

AD590输出电流信号传输距离可达到1km以上。

作为一种高阻电流源,最高可达20MΩ,所以它不必考虑选择开关或CMOS多路转换器所引入的附加电阻造成的误差。

适用于多点温度测量和远距离温度测量的控制。

由上述可见,无论使用DS18B20还是AD590都可以满足温度范围上的要求。

使用DS18B20时,因为它带有A/D转换的功能,在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,故使用较为简单,电路连接较为方便。

使用AD590时,其转换速度快、转换精度高、功耗小、非线性误差小。

两种温度传感器在使用上各有特点,但为了满足非线性误差的要求,故选用DS18B20。

3.2温度转换的算法与编程

为了提取有效的温度数据,我们必须到达经过有效的编程才能达到要求,根据datasheet,温度与数值的对应关系如表1所示。

例如当DS18B20采集到+125℃的实际温度后,输出为07D0H,则:

实际温度=07D0H*0.0625=2000*0.0625=125°

C。

例如当DS18B20采集到-55℃的实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变),则:

实际温度=370H*0.0625=880*0.0625=55°

C

表1温度与二进制码对应表

温度转换的C51核心代码如下:

voidtemperature_convert()

ucharTL,TH;

//存放温度的高八位和低八位

uintpoint,temp;

TL=ds18b20_read_byte();

//读取温度值低八位

TH=ds18b20_read_byte();

//读取温度值高八位(最高位为符号位)

/***********************温度转换成数值**************************/

if(TH>

0x07)//判断负温度

{

negative_flag=1;

TH=~TH;

//把负数的补码换算成绝对值

TL=~TL;

//如果TL向TH右进位?

TL++;

temp=(TH*256+TL)/16;

//提取温度整数部分,temp已经扩大了1000

//除16即乘以精度0.0625,

temperature[0]=temp/100;

//百位

temperature[1]=temp%100/10;

//分离十位

temperature[2]=temp%100%10;

//分离个位

point=TL&

0x0f;

//得温度数据小数部分,屏高四位,低四位为小数位

//若point*10000则超出了65535的范围

temperature[3]=(point*1000/16)/100;

//个分位

temperature[4]=(point*1000/16)%100/10;

//十分位

temperature[5]=(point*1000/16)%100%10;

//百分位

}

下位机软件编程

4分析与结论

通过本次课程设计的软件仿真与在线调试,以及下位机单片机系统的设计。

我从中学到了很多知识。

通过实践,虽然暴露了我学习的不足之处,但同时也巩固和提高了所学的知识,使我的专业技能得到锻炼和提高。

最后终于调试成功,下位机的温度能准确无误的传送到上位机。

5参考文献

[1]STCMicrocontrollerHandbook,2007

[2]童诗白、华成英模拟电子技术基础北京:

高等教育出版社

[3]VC知识库

[4]谢剑英、贾青微型计算机控制技术北京:

国防工业出版社

[5]周航慈.单片机程序设计基础[M].北京:

航空航天大学出版社,2003.07

附录:

源代码及实物作品

蔡志威现场总线课设源代码.rar下载链接:

图5KeilC51的下位机编程

图6下位机显示温度20.125度

图7上位机VisualC++编程

图8调试成功

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2