基于单总线的温度实时监控_第1页
基于单总线的温度实时监控_第2页
基于单总线的温度实时监控_第3页
基于单总线的温度实时监控_第4页
基于单总线的温度实时监控_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 . . . 评语:成绩:签名:日期:淮海工学院课程设计报告书课程名称: 综合课程设计 题 目: 基于单总线的温度实时监控系统 系 (院): _电子工程系_学 期: _ 11-12-1 _ 专业班级: _ DZ电子083_ 姓 名: _嘉敏_ 学 号: _510830310_- 1 引言随着计算机技术的发展和计算机应用的普与, 计算机在各个领域都有着广泛的应用, 特别是在一些需要精确控制的应用中采用实时的、动态的控制显得特别的重要, 通过硬件采集到的数据如何合理的、科学的处理, 是实施控制的关键, 并且方便的、功能强大的软件处理能更好地实施精确控制。很多现有的实时控制系统的软件部分是用汇编语言

2、编写的, 软件调试、维护起来比较困难, 应用的界面也不是很好, 给用户的使用带来了很多不便,下面是采用功能强大的可视化的高级语言Delph i 和SQL server 2000 做为后台数据库来实现软件部分。11 本设计主要任务(1)对单总线设备的结构特点和以单总线技术构建起来的微型局域网的拓朴结构、网络结构优化以与设备与单总线的连接进行阐述和研究。(2)设计基于单总线的温度采集电路,单总线和PC机串行口的接口电路。(3)用自己熟悉的计算机语言编写温度实时监控系统软件。12 设计要求(1)温度测量围50100。(2)测温分辨率不低于0.0625。(3)数据传输距离不低于60米。(4)温度测量点

3、不少于3。(5)温度采集间隔不底于10分钟。(6)能显示一天实时温度变化曲线。1.3 注意事项(1)设计时重点考虑单总线的供电问题,数据的可靠采集,单总线与PC机串口的连接问题。(2)设计单总线与PC机接口时,要正确掌握PC机串口的电参数、DS2480B的电参数,要采取一定的过电压与过电流保护措施,防止损坏PC机串行端口。(3)软件的界面要友好、简明、直观。在编写软件时要重点考虑温度采集数据的存储、单总线设备的CRC循环冗余码的实现方法、从设备的“即时插即用”的算法研究等。2 硬件电路与原理2.1方案选择本设计为基于单总线的温度实时监控系统,采用Dallas公司生产的一种新型温度传感器DS18

4、B20。单总线温度采集电路采集测量点的温度并且将其数字化,串口至单总线接口转接桥负责单总线芯片DS18B20与主机UART接口通信协议的转换,温度实时监控系统软件则将主机获得的数据予以记录并且在显示设备上显示出来。2.2 硬件电路总体框图图1 硬件电路图23 DS2480B图2 DS2480B引脚排列2.3.1 DS2480B简介DS2480B是一种串口至1-Wire®的接口芯片,支持标准和高速两种模式。它可以直接连至UART或5V的RS232系统。与RS232C (±12V电平)相接时,还需要一个无源箝位电路和一个5V电平至±12V电平的转换电路。部带有定时器,

5、因此主机就不再需要产生1-Wire通信所需的要求严格的时序波形。而在DS9097(E)中,主机必须为每一个1-Wire时隙发送一个完整的字符。比较而言,DS2480B则是将每个字符转换成8个1-Wire时隙,因此大提高了数据的吞吐量。另外,DS2480B可以采用四种不同的通信速率,分别为115.2kbps、57.6kbps、19.2kbps,其中9.6kbps是系统上电后默认的通信速率。来自主机的晶振源UART的命令码充当时钟基准,不断地校准时钟发生器。DS2480B采用独特的通信协议,合并数据和控制信息,而无需控制引脚,这样就保证了通用串口至无线转换器的兼容性,允许更容易实现1-Wire接口

6、转换。DS2480B的多种控制功能针对1-Wire网络进行了优化,支持当前所有1-Wire器件,包括:基于EEPROM的只添加存储器以与1-Wire温度计等特殊功能器件。2.3.2 DS2480B关键特性(1)通用、共地的串口至1-Wire线驱动器。(2)支持所有iButton®和1-Wire从器件。(3)支持标准速度和高速模式的1-Wire通信,且串行接口数据传输速率可在9600bps (默认)、 19200bps、57600bps和115200bps中进行选择。(4)支持12V EPROM编程,为传感器以与EEPROM提供5V强上拉。(5)进行串行和1-Wire通信时的自校准时基

7、误差为±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。24 DS18B20温度传感器图3 DS18B202.4.1 DS18B2

8、0功能特点新一代的 DS18B20 体积更小、更经济、更灵活。使您可以充分发挥“一线总线”的长处。同DS1820 一样,DS18B20 也支持“一线总线”接口,测量温度围为 -55°C+125°C,在-10+85°C围,精度为±0.5°C。DS1822 的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V5.5V 的电压围,使系统设计更灵活、方便。而且新一代产品更便宜,

9、体积更小。DS18B20 新特点:适用电压为3V5V 与DS1820 软件略有不同 912 位分辨率可调 TO-92、SOIC 与CSP 封装可选,经济型版本无EEPROM 合自己的经济的测温系统。2.4.2 DS18B20存结构图4 DS18B20存储结构 DS18B20的存包括9个快速暂存器和三个非易失的电可擦可编程只读存储器,EEPROM存储用于报警的温度上限和下限以与温度采集分辨率的配置数据。如果DS18B20的报警功能未启用,TH、TL可以用作普通功能寄存器。暂存器byte0和byte1分别存储采集温度的低位和高位,byte8是循环冗余校验码寄存器。2.4.3 DS18B20温度寄存

10、器图5 DS18B20温度寄存器温度高位字节的高五位是符号位,温度为正时取0,为负取1。低字节的低四位为小数位,有效的位数取决于配置寄存器的R1和R0值。2.4.4DS18B20 TH、TL寄存器图6 DS18B20 TH、TL温度寄存器温度高位字DS18B20 TH、TL温度寄存器各占一个字节,其中最高位是符号位,可以设定的温度围为-128127是(摄氏)。TH、TL可以用copy命令复制到EEPROM,反之可以用Recall命令从EEPROM读取。2.4.5DS18B20 配置寄存器 图7 DS18B20温度寄存器快速暂存器的byte4是Configuration寄存器,寄存器的五六位R0

11、、R1可以设定采集温度的精度,见表一。表1 采集温度精度对应R1R0精度转换时长009-bit93.75ms(tCONV/8)0110-bit187.5ms(tCONV/4)1011-bit375ms(tCONV/2)1112-bit750mstCONV3 Delphi温度采集程序31 程序功能简介程序主要包括温度读取显示、采集数据存储和配置寄存器设置三个功能,四个选项卡切换不同的功能模块。温度显示模块采用了iocomp组件实现温度计和实时曲线两种显示方式,并提供两个温度传感器宏观同步显示以与摄氏温标和华氏温标的一键切换功能。由于涉与数据量较少,数据结构简单,程序采用了access数据库对采集

12、温度进行同步存储。配置寄存器的模块位于第三个选项卡,第四个选项卡显示DS18B20暂存器的原始数据。 32 温度计显示图8 温度计显示程序如下:procedure TForm1.Timer1Timer(Sender: TObject);/计时器程序,此处程序整体来说就是先获得访问权,在调用前面的FindFirstFamily和FindSecondFamily然后再改写变量 VarPortNum, PortType : smallint; /定义局部变量 RetValue : smallint;st : longint; begin if dieer then begin Progressbar

13、1.Step :=1; while progressbar1.Position < strtofloat(cj1) do begin progressbar1.StepIt; end; progressbar2.Step :=1; while progressbar2.Position < strtofloat(cj2) do begin progressbar2.StepIt; end; label18.Caption :=cj1; label19.caption :=cj2; end; RetValue := TMReadDefaultPort(PortNum, PortTyp

14、e); 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

15、; While (GetTickCount < st) do; TMEndSession(SHandle); end;33 实时曲线绘制图9 实时曲线绘制程序如下: 开始绘图按钮实现 procedure TForm1.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' la

16、bel22.Caption :='50' label26.Caption :='25' label6.Caption :='0' paintbox1.Canvas.Pixels0,128 := clBlack; /这里是描点,让它黑点 paintbox1.Canvas.Pixels1,127 := clBlack; paintbox1.Canvas.Pixels1,129 := clBlack; paintbox1.Canvas.Pixels2,127 := clBlack; paintbox1.Canvas.Pixels2,129 := clB

17、lack; paintbox1.Canvas.Pixels2,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,5

18、7); 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; if radiobutton5.Checked then /画曲线一 beg

19、in while not table1.Eof do 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; i

20、f radiobutton6.Checked then /画曲线二 begin paintbox1.Canvas.MoveTo(0,230); while not table1.Eof do 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

21、(b); h :=h +5; Paintbox1.Canvas.LineTo(h,m); table1.Next; end; end;end;34 温度日志图10 温度日志采用数据源控件DBGrid动态绑定数据库中温度表的信息35 配置寄存器管理图11 配置寄存器设置程序如下:以第一个为列 设置按钮实现 procedure TForm1.Button1Click(Sender: TObject); /设置温度上下限以与精度 var rbuf1 : array0.4 of byte; l,m,n :integer; o,p,q ,z: smallint; RetValue,i : smallin

22、t; PortNum, PortType : smallint; rbuf : array0.9 of smallint ; CRCByte : Byte; st : longint; rom : array0.8 of smallint; begin l :=strtoint(edit1.Text); m :=strtoint(edit2.Text); n :=strtoint(edit3.Text); if n=9 then n :=31 else if n=10 then n :=63 else if n=11 then n :=95 else if n=12 then n :=127

23、else begin showmessage('error number,please input the right number(912)'); halt; end; RetValue := TMReadDefaultPort(PortNum, PortType); SHandle := TMExtendedStartSession(PortNum,PortType,NIL); If (SHandle > 0) Then begin if (TMSetup(SHandle) = 1) then if radiobutton1.Checked =true then /写

24、入第一个温度传感器 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)

25、 <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 < st) do; TMOneWireLevel(SHandle, LEVEL_SET,LEVEL_NORMAL,PRIMED_NON

26、E); /恢复正常电压 TMAccess(SHandle,StateBuf); TMTouchByte(SHandle,$BE); CRC8 := 0; for i := 0 to 7 do begin rbufi:= TMTouchByte(SHandle, $FF); end else showmessage('error TmAccess'); end36 原始数据显示图12 原始数据显示窗口程序如下:procedure TForm1.Button2Click(Sender: TObject);显示按钮实现 /用来显示温度以与精度等 var RetValue,i : sm

27、allint; 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 := TMExtendedSt

28、artSession(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.Check

29、ed) 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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论