基于单总线的温度实时监控.docx
- 文档编号:25888733
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:20
- 大小:346.09KB
基于单总线的温度实时监控.docx
《基于单总线的温度实时监控.docx》由会员分享,可在线阅读,更多相关《基于单总线的温度实时监控.docx(20页珍藏版)》请在冰豆网上搜索。
基于单总线的温度实时监控
评语:
成绩:
签名:
日期:
淮海工学院
课程设计报告书
课程名称:
综合课程设计
题目:
基于单总线的温度实时监控系统
系(院):
____电子工程系___________
学期:
___11-12-1_____
专业班级:
____DZ电子083________
姓名:
__嘉敏________
学号:
__510830310__________-
1引言
随着计算机技术的发展和计算机应用的普与,计算机在各个领域都有着广泛的应用,特别是在一些需要精确控制的应用中采用实时的、动态的控制显得特别的重要,通过硬件采集到的数据如何合理的、科学的处理,是实施控制的关键,并且方便的、功能强大的软件处理能更好地实施精确控制。
很多现有的实时控制系统的软件部分是用汇编语言编写的,软件调试、维护起来比较困难,应用的界面也不是很好,给用户的使用带来了很多不便,下面是采用功能强大的可视化的高级语言Delphi和SQLserver2000做为后台数据库来实现软件部分。
1.1本设计主要任务
(1)对单总线设备的结构特点和以单总线技术构建起来的微型局域网的拓朴结构、网络结构优化以与设备与单总线的连接进行阐述和研究。
(2)设计基于单总线的温度采集电路,单总线和PC机串行口的接口电路。
(3)用自己熟悉的计算机语言编写温度实时监控系统软件。
1.2设计要求
(1)温度测量围-50℃~+100℃。
(2)测温分辨率不低于0.0625℃。
(3)数据传输距离不低于60米。
(4)温度测量点不少于3。
(5)温度采集间隔不底于10分钟。
(6)能显示一天实时温度变化曲线。
1.3注意事项
(1)设计时重点考虑单总线的供电问题,数据的可靠采集,单总线与PC机串口的连接问题。
(2)设计单总线与PC机接口时,要正确掌握PC机串口的电参数、DS2480B的电参数,要采取一定的过电压与过电流保护措施,防止损坏PC机串行端口。
(3)软件的界面要友好、简明、直观。
在编写软件时要重点考虑温度采集数据的存储、单总线设备的CRC循环冗余码的实现方法、从设备的“即时插即用”的算法研究等。
2硬件电路与原理
2.1方案选择
本设计为基于单总线的温度实时监控系统,采用Dallas公司生产的一种新型温度传感器DS18B20。
单总线温度采集电路采集测量点的温度并且将其数字化,串口至单总线接口转接桥负责单总线芯片DS18B20与主机UART接口通信协议的转换,温度实时监控系统软件则将主机获得的数据予以记录并且在显示设备上显示出来。
2.2硬件电路总体框图
图1硬件电路图
2.3DS2480B
图2DS2480B引脚排列
2.3.1DS2480B简介
DS2480B是一种串口至1-Wire®的接口芯片,支持标准和高速两种模式。
它可以直接连至UART或5V的RS232系统。
与RS232C(±12V电平)相接时,还需要一个无源箝位电路和一个5V电平至±12V电平的转换电路。
部带有定时器,因此主机就不再需要产生1-Wire通信所需的要求严格的时序波形。
而在DS9097(E)中,主机必须为每一个1-Wire时隙发送一个完整的字符。
比较而言,DS2480B则是将每个字符转换成8个1-Wire时隙,因此大提高了数据的吞吐量。
另外,DS2480B可以采用四种不同的通信速率,分别为115.2kbps、57.6kbps、19.2kbps,其中9.6kbps是系统上电后默认的通信速率。
来自主机的晶振源UART的命令码充当时钟基准,不断地校准时钟发生器。
DS2480B采用独特的通信协议,合并数据和控制信息,而无需控制引脚,这样就保证了通用串口至无线转换器的兼容性,允许更容易实现1-Wire接口转换。
DS2480B的多种控制功能针对1-Wire网络进行了优化,支持当前所有1-Wire器件,包括:
基于EEPROM的只添加存储器以与1-Wire温度计等特殊功能器件。
2.3.2DS2480B关键特性
(1)通用、共地的串口至1-Wire线驱动器。
(2)支持所有iButton®和1-Wire从器件。
(3)支持标准速度和高速模式的1-Wire通信,且串行接口数据传输速率可在9600bps(默认)、19200bps、57600bps和115200bps中进行选择。
(4)支持12VEPROM编程,为传感器以与EEPROM提供5V强上拉。
(5)进行串行和1-Wire通信时的自校准时基误差为±5%。
(6)压摆率可控的1-Wire下拉和有源上拉,以适应长距离通信和降低辐射。
(7)当与5V供电的RS232系统或与UART相连时,通过用户可选择RXD/TXD的极性将尽可能减少外围器件的数目。
(8)可编程的1-Wire时序和驱动特性,以适应标准速率下更宽围的从机器件配置。
(9)结合数据和控制信息的智能协议,无需额外的引脚控制。
(10)兼容于光耦、IR和RF至RS232的转换器。
(11)低成本的8引脚SO表贴封装。
(12)工作电压4.5V至5.5V,温度围为-40°C至+85°C。
2.4DS18B20温度传感器
图3DS18B20
2.4.1DS18B20功能特点
新一代的DS18B20体积更小、更经济、更灵活。
使您可以充分发挥“一线总线”的长处。
同DS1820一样,DS18B20也支持“一线总线”接口,测量温度围为-55°C~+125°C,在-10~+85°C围,精度为±0.5°C。
DS1822的精度较差为±2°C。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:
环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V的电压围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DS18B20新特点:
•适用电压为3V~5V
•与DS1820软件略有不同
•9~12位分辨率可调
•TO-92、SOIC与CSP封装可选,经济型版本无EEPROM合自己的经济的测温系统。
2.4.2DS18B20存结构
图4DS18B20存储结构
DS18B20的存包括9个快速暂存器和三个非易失的电可擦可编程只读存储器,EEPROM存储用于报警的温度上限和下限以与温度采集分辨率的配置数据。
如果DS18B20的报警功能未启用,TH、TL可以用作普通功能寄存器。
暂存器byte0和byte1分别存储采集温度的低位和高位,byte8是循环冗余校验码寄存器。
2.4.3DS18B20温度寄存器
图5DS18B20温度寄存器
温度高位字节的高五位是符号位,温度为正时取0,为负取1。
低字节的低四位为小数位,有效的位数取决于配置寄存器的R1和R0值。
2.4.4DS18B20TH、TL寄存器
图6DS18B20TH、TL温度寄存器
温度高位字DS18B20TH、TL温度寄存器各占一个字节,其中最高位是符号位,可以设定的温度围为-128—127是(摄氏)。
TH、TL可以用copy命令复制到EEPROM,反之可以用Recall命令从EEPROM读取。
2.4.5DS18B20配置寄存器
图7DS18B20温度寄存器
快速暂存器的byte4是Configuration寄存器,寄存器的五六位R0、R1可以设定采集温度的精度,见表一。
表1采集温度精度对应
R1
R0
精度
转换时长
0
0
9-bit
93.75ms
(tCONV/8)
0
1
10-bit
187.5ms
(tCONV/4)
1
0
11-bit
375ms
(tCONV/2)
1
1
12-bit
750ms
tCONV
3Delphi温度采集程序
3.1程序功能简介
程序主要包括温度读取显示、采集数据存储和配置寄存器设置三个功能,四个选项卡切换不同的功能模块。
温度显示模块采用了iocomp组件实现温度计和实时曲线两种显示方式,并提供两个温度传感器宏观同步显示以与摄氏温标和华氏温标的一键切换功能。
由于涉与数据量较少,数据结构简单,程序采用了access数据库对采集温度进行同步存储。
配置寄存器的模块位于第三个选项卡,第四个选项卡显示DS18B20暂存器的原始数据。
3.2温度计显示
图8温度计显示
程序如下:
procedureTForm1.Timer1Timer(Sender:
TObject);
//计时器程序,此处程序整体来说就是先获得访问权,在调用前面的FindFirstFamily和FindSecondFamily然后再改写变量
VarPortNum,PortType:
smallint;//定义局部变量
RetValue:
smallint;st:
longint;
begin
ifdieerthen
begin
Progressbar1.Step:
=1;
whileprogressbar1.Position begin progressbar1.StepIt; end; progressbar2.Step: =1; whileprogressbar2.Position begin progressbar2.StepIt; end; label18.Caption: =cj1; label19.caption: =cj2; end; RetValue: =TMReadDefaultPort(PortNum,PortType); SHandle: =TMExtendedStartSession(PortNum,PortType,NIL); FindFirstFamily($28,SHandle); RetValue: =TMReadDefaultPort(PortNum,PortType); SHandle: =TMExtendedStartSession(PortNum,PortType,NIL); FindSecondFamily($28,SHandle); label18.Caption: =cj1; label19.caption: =cj2; st: =GetTickCount+1000; While(GetTickCount TMEndSession(SHandle); end; 3.3实时曲线绘制 图9实时曲线绘制 程序如下: {开始绘图按钮实现} procedureTForm1.Button3Click(Sender: TObject); var n,m,h: integer; o,p: single; a,b: string; begin h: =0; label24.Caption: ='50'; label25.Caption: ='25'; label23.Caption: ='0'; label22.Caption: ='50'; label26.Caption: ='25'; label6.Caption: ='0'; paintbox1.Canvas.Pixels[0,128]: =clBlack;//这里是描点,让它黑点 paintbox1.Canvas.Pixels[1,127]: =clBlack; paintbox1.Canvas.Pixels[1,129]: =clBlack; paintbox1.Canvas.Pixels[2,127]: =clBlack; paintbox1.Canvas.Pixels[2,129]: =clBlack; paintbox1.Canvas.Pixels[2,128]: =clBlack; paintbox1.Canvas.MoveTo(0,45); paintbox1.Canvas.LineTo(0,230); paintbox1.Canvas.MoveTo(0,128); paintbox1.Canvas.LineTo(425,128); paintbox1.Canvas.MoveTo(0,230); paintbox1.Canvas.LineTo(425,230); paintbox1.Canvas.MoveTo(0,45); paintbox1.Canvas.LineTo(5,57); paintbox1.Canvas.MoveTo(0,135); paintbox1.Canvas.LineTo(5,147); paintbox1.Canvas.MoveTo(0,200); paintbox1.Canvas.LineTo(7,200); paintbox1.Canvas.MoveTo(0,98); paintbox1.Canvas.LineTo(7,98); paintbox1.Canvas.MoveTo(0,128); table1.Active: =true; table1.First; ifradiobutton5.Checkedthen//画曲线一 begin whilenottable1.Eofdo begin a: =table1.FieldValues['TempC1']; b: =table1.FieldValues['TempC2']; o: =strtofloat(a); p: =strtofloat(b); a: =FormatFloat('00',o); b: =FormatFloat('00',p); n: =128-strtoint(a); h: =h+5; Paintbox1.Canvas.LineTo(h,n); table1.Next; end; end; ifradiobutton6.Checkedthen//画曲线二 begin paintbox1.Canvas.MoveTo(0,230); whilenottable1.Eofdo begin a: =table1.FieldValues['TempC1']; b: =table1.FieldValues['TempC2']; o: =strtofloat(a); p: =strtofloat(b); a: =FormatFloat('00',o); b: =FormatFloat('00',p); m: =230-strtoint(b); h: =h+5; Paintbox1.Canvas.LineTo(h,m); table1.Next; end; end; end; 3.4温度日志 图10温度日志 采用数据源控件DBGrid动态绑定数据库中温度表的信息 3.5配置寄存器管理 图11配置寄存器设置 程序如下: 以第一个为列 {设置按钮实现} procedureTForm1.Button1Click(Sender: TObject); //设置温度上下限以与精度 var rbuf1: array[0..4]ofbyte; l,m,n: integer; o,p,q,z: smallint; RetValue,i: smallint; PortNum,PortType: smallint; rbuf: array[0..9]ofsmallint; CRCByte: Byte; st: longint; rom: array[0..8]ofsmallint; begin l: =strtoint(edit1.Text); m: =strtoint(edit2.Text); n: =strtoint(edit3.Text); ifn=9thenn: =31 elseifn=10thenn: =63 elseifn=11thenn: =95 elseifn=12thenn: =127 else begin showmessage('errornumber,pleaseinputtherightnumber(9~12)'); halt; end; RetValue: =TMReadDefaultPort(PortNum,PortType); SHandle: =TMExtendedStartSession(PortNum,PortType,NIL); If(SHandle>0)Then begin if(TMSetup(SHandle)=1)then ifradiobutton1.Checked=truethen//写入第一个温度传感器 if(TMFirst(SHandle,stateBuf)=1)then begin if(TMAccess(SHandle,StateBuf)=1)then begin if(TMTouchByte(SHandle,$4E)>0)then begin if(TMTouchByte(SHandle,l)<0)then//传递温度上限且判断是否传递成功 halt; if(TMTouchByte(SHandle,m)=255)then//传递温度下限且判断是否传递成功 halt; if(TMTouchByte(SHandle,n)<0)then//传递精度且判断是否传递成功 halt; end; TMAccess(SHandle,StateBuf); TMTouchByte(SHandle,$48);//这里是写道E2Rom里所以用上拉电压 TMOneWireLevel(SHandle,LEVEL_SET,LEVEL_STRONG_PULL_UP,PRIMED_BYTE); st: =GetTickCount+1000; while(GetTickCount TMOneWireLevel(SHandle,LEVEL_SET,LEVEL_NORMAL,PRIMED_NONE);//恢复正常电压 TMAccess(SHandle,StateBuf); TMTouchByte(SHandle,$BE); CRC8: =0; fori: =0to7do begin rbuf[i]: =TMTouchByte(SHandle,$FF); end else showmessage('errorTmAccess'); end 3.6原始数据显示 图12原始数据显示窗口 程序如下: procedureTForm1.Button2Click(Sender: TObject);{显示按钮实现} //用来显示温度以与精度等 var RetValue,i: smallint; PortNum,PortType: smallint; begin if(radiobutton3.Checked)then//温度一 begin edit9.Text: ='';edit4.Text: =''; edit5.Text: ='';edit6.Text: =''; edit7.Text: ='';edit8.Text: =''; RetValue: =TMReadDefaultPort(PortNum,PortType); SHandle: =TMExtendedStartSession(PortNum,PortType,NIL); FindFirstFamily($28,SHandle); edit9.Text: =inttostr(fenbianlv1); edit4.Text: =floattostr(gaowei1); edit5.Text: =floattostr(diwei1); edit6.Text: =floattostr(shangxian1); edit7.Text: =floattostr(xiaxian1); edit8.Text: =floattostr(yuanshi1); end; if(radiobutton4.Checked)then//温度二 begin edit9.Text: ='';edit4.Text: =''; edit5.Text: ='';edit6.Text: =''; edit7.Text: ='';edit8.Text: =''; RetValue: =TMReadDefaultPort(PortNum,PortType); SHandle: =TMExtendedStartSession(PortNum,PortType,NIL); FindSecondFamily($28,SHandle); edit4.Text: =floattostr(gaowei2); edit9.Text: =floattostr(fenbianlv2); edit5.Text: =floattostr(diwei2); edit6.Text: =floattostr(shangxian2); edit7.Text: =floattostr(xiaxian2); edit8.Text: =floattostr(yuanshi2); end; end; 4元器件清单 表2器件列表 元件名称 元件规格 元件数量 电路板 XF07 1 UART / 1 二极管D1,D2 M7 2 稳压二极管D3,D4 / 2 DS18B20 / 1 DS2480B / 1 5心得体会 三周的课程设计结束了,在这次的设计课程中收获知识的同时,还收获了阅历,收获了成熟。 在此过程中,我们查找了大量的知识,请教了老师。 以不懈的努力,不仅培养了独立的思考能力,动手操作能力,在其它各方面的能力上都有提高。 在设计过程中,与同学分工合作,相互讨论,相互学习。 促进了友谊与信任。 通过这次温度实时监控系统设计,我在很多方面提高了知识。 刚开始焊接时,由于粗心,老是失败,在一次一次的仔细下,在一次又一次的老师帮助下,终于成功的完成了焊接。 通过焊接实践,告诉我,同学之间的配合,老师的指导,自己的细心都离开大家。 整个过程是一个分工的团结的实践。 让我明白了团结两个字。 开始做软件部分时,之前认为Delphi很简单,可是当做起来时,我知道自己想的太简单了。 做任何事时都不能轻易的高估,要用认真的心态去面对。 后来不断的研究Delphi的资料,请教其他的同学,反复的修改程序,最终调试成功。 在编写程序时,不仅让我了解了Delphi的程序编写,还
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 总线 温度 实时 监控
![提示](https://static.bdocx.com/images/bang_tan.gif)