《嵌入式论文-基于PIC单片机的多路温度采集显示系统.doc》由会员分享,可在线阅读,更多相关《嵌入式论文-基于PIC单片机的多路温度采集显示系统.doc(24页珍藏版)》请在三一文库上搜索。
1、基于PIC单片机的多路温度采集显示系统1 系统设计在工业生产和日常生活中,经常要对温度进行测量与控制,并且有时是对多个点进行温度测量,比如冷库温度监控、环境温度监测、农业温室监控、粮库温度采集等。在这种情况下,多点温度采集系统应运而生。多点温度检测系统通常能够对多个工作点的温度进行检测,显示当前温度,并能够对温度进行存储和报警,还能将温度上传至PC机,进行后续处理。传统的测温元件有热电偶和热电阻,需很多硬件支持并且电路复杂。本文将设计一款由新型的数字温度传感器DS18B20配合单片机,具有温度检测、显示、存储、自动统计分析及跟电脑通讯连接还利用固定电话远程报警等功能的多点温度采集系统。多路温度
2、监控系统30 PC机通讯4 * 温度传感器固话报警 图 1.1 多路温度采集系统模拟应用温度监控主系统构架框图如图 1.2 所示:PIC16F877A单片机12864液晶显示实时时钟上限报警接口按键控制PC机通讯AT24C02温度储存四路温度采集 图 1.2 多路温度采集系统构架框图主要技术参数A温度检测范围 : -55+125B测量精度 : 0.0625C 显示方式: LCD12864显示D 报警方式: 固话报警2. 硬件设计介绍2.1 PIC单片机介绍(1)哈佛总线结构:MCS-51单片机的总线结构是冯-诺依曼型,计算机 在同一个存储空间取指令和数据,两者不能同时进行;而PIC单片机的总线
3、结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据,由于可以对程序和数据同时进行访问,所以提高了数据吞吐率。正因为在 PIC单片机中采用了哈佛双总线结构,所以与常见的微控制器不同的一点是:程序和数据总线可以采用不同的宽度。数据总线都是8位的,但指令总线位数分别为 12、14、16位。 (2)流水线结构:MCS-51单片机的取指和执行采用单指令流水线结构,即取一条指令,执行完后再取下一条指令;而PIC的取指和执行采用双指令流水线结构,当一条指令被执行时,允许下一条指令同时被取出,这样就实现了单周期指令。 (3)寄存器组:PIC单片机的所有寄存器,包括I/O口,定时器和程序计数
4、器等都采用RAM结构形式,而且都只需要一个指令周期就可以完成访问和操作;而MCS-51单片机需要两个或两个以上的周期才能改变寄存器的内容。 (4)运行速度高:由于采用了哈佛总线结构,以及指令的读取和执行才用了流水作业方式,使得运行速度大大提高。 (5)功耗低:PIC单片机的功率消耗极低,是目前世界上最低的单片机品种之一。在4MHz时钟下工作时耗电不超过2mA,在睡眠模式下耗电可以低到1uA以下。 (6)驱动能力强:I/O端口驱动负载的能力较强,每个I/O引脚吸入和输出电流的最大值可分别达到25mA和20mA,能够直接驱动发光二极管LED、光电耦合器或者轻微继电器等。 (7)外接电路简洁PIC单
5、片机片内集成了上电复位电路、I/O引脚上拉电路、看门狗定时器等,可以最大程度减少或免用外接器件,以便实现“纯单片机”应用。这样,不仅方便于开发,而且还可节省用户的电路空间和制作成本。 (8)程序保密性强目前,尚无办法对其直接进行解密拷贝,可以最大限度的保护用户的程序版权。PIC16F877A的详细引脚如图2.21所示。 图 2.1 PIC16F877A引脚图 图 2.2 PIC16F877A实物图PIC单片机主要性能参数如下所示:l 具有高性能RISC CPUl 仅有35条单字指令l 100000次擦写周期l 除程序分支指令为两个周期外,其余均为单周期指令l 运行速度: DC20MHZ始终输入
6、 DC200ns 指令周期l 8K * 14个 FLASH程序存储器368 * 8 个数据存储器(RAM)字节256 * 8 EEPRM 数据存储器字节l 提供14个中断源l 功耗低在5V, 4MHZ 时钟运行时电流小于 2mA在3V, 32KHZ 时钟运行时电流小于20Ual 支持在线串行编程(ICSP)l 运行电压范围广,2.0V到5.5Vl 输入及输出电流可达到25mAl Timer0:带有预分频器的8位定时器/计数器l Timer1:带有预分频器的16位定时器/计数器,在使用外部晶振震荡时钟时,在睡眠期间仍能工作l Timer2:带有8位周期寄存器,预分频器和后分频器的8位定时器/计数
7、器。l 2个捕捉器,比较器,PWM模块其中: 捕捉器是16位,最大分辨率是12.5ns 比较器是16位,最大分辨率是200ns PWM最大分辨率是10位l 10位多通道模数转换器2.2 单片机最小系统设计 2.2.1 复位功能 PIC16F877A的复位功能设计得比较完善,实现复位或引起复位的条件和原因可以归纳成4类:人工复位、上电复位、看门狗复位、欠压复位。这里简单介绍一下人工复位人工复位:无论是单片机在正常运行程序,还是处在睡眠状态或出现死机状态,只要在人工复位端MCLR加入低点平信号,就令其复位。本次设计的电路图如图2.31所示。2.2.2 系统时钟 数字电路的工作离不开时钟信号,每一步
8、细微动作都是在一个共同的时间基准信号协调下完成的。作为时基发生器的时钟震荡电路,为整个单片机芯片的工作提供系统时钟信号,也为单片机与其他外接芯片之间的通讯提供可靠的同步时钟信号。PIC16F877A的时钟电路是由片内的一个反相器和一个反馈电阻,与外接的1个石英晶体和2个电容,共同构成的一个自激多谐振荡器。电路如图2.31 所示。 图 2.21 PIC最小系统电路图 图2.22 最小系统实物图2.3 LCD12864液晶原理介绍及接口实现12864A-1汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(
9、GDRAM)。主要技术参数和显示特性:电源:VDD 3.3V+5V(内置升压电路,无需负压);显示内容:128列64行显示颜色:黄绿显示角度:6:00钟直视LCD类型:STN与MCU接口:8位或4位并行/3位串行配置LED背光多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等 图 2.3 -1 12864液晶电路连接图2.4 DS18B20原理介绍及接口实现 DS18B20是DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,他它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。DS18B20具有以下优点:(1) 适
10、应电压范围宽,电压范围在3.0V5.5V,在寄生电源方式下可由数据线供电。(2) 独特的单线接口方式,与微处理器连接时只需要一条口线即可实现微处理器与DS18B20的双向通信。(3) 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。(4) 在使用中不需要任何外围元件,全部传感元件以及转换电路集成在形如一直三极管的集成电路内。(5) 测温范围-55+125,在-10+85时进度为0.5(6) 可编程分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温。(7) 负压特性。电源极性接反时,芯片不会因为过热而烧毁,但不能正常
11、工作。DS18B20主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图4.2所示,其中DQ为数字信号输入输出端;GND为电源地;VDD为外接供电电源输入端,在寄生电源接线方式时接地。 图2.4-1 DS18B20原理图 图2.4-2 DSB18B20硬件连接实物2.5存储芯片AT24C02简单介绍及接口实现AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16字节页写缓冲器。该器件通过IC总线接口进行操作,有一个专
12、门的写保护功能。AT24C02支持IC,总线数据传送协议IC,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端A0、A1和A2可以实现将最多8个AT24C02器件连接到总线上。 本次设计采用4个AT24C02用来储存4个温度传感器采集到的温度,用以回显。只要有温度较大变化都会被储存,随时可以通过功能按键切换功能查看,也可以将温度传回PC机统计分析。图5.1 AT24C02硬件连接图AT24C02使用思
13、路如下: NY温度有较大变化?启动24c02监控温度储存温度储存时间2.5-2 使用思路2.6 DS1302的接口实现DS1302的初始化过程非常简单,在DS1302上电之后先关闭DS1302的写保护,接着依据不同的寄存器地址分别写入年份、月份、日期,以及需要设定的时间,然后启动DS1302的时钟振荡,打开写保护,这样DS1302就能正常走时了,并且不会因为误操作而干扰到DS1302。当DS1302上电后,为了防止系统掉电后重新上电,接着调用DS1302初始化程序造成时间丢失,我们在初始化DS1302的时候先把DS1302当前的秒走时读出,放如临时变量,接着判断时间的正确性,如果时间正确,则把
14、秒走时回送DS1302,重新启动时钟振荡后关闭保护;如果时间不正确,则重新调用时间设置程序。关闭写保护读出秒数据时间正确?YN回送秒数据打开写保护芯片上电结束调用时间设置打开写保护结束图2.6-1 DS1302初始化此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发(Burst)方式下的RAM寄存器,此方式下
15、可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。DS1302与单片机的连接电路图如图6.5所示: 图 2.6-2 DS1302硬件连接图备用电池可用来断电保护,当主电源断开之后,备用电池开始工作,起到备用作用,继续保持时钟的准确性。2.7温度上限报警功能 固话报警的设计原理非常简单,把电话外壳拆出来之后,里面的按键其实就是一个矩阵键盘,为了简化设计,这里只说明重拨按键,因为只需要重拨按键就可以工作完全满足我们功能了。拆出来后下一步就是找出重拨键对应的引脚,先找到重拨键位置然后通过万用表就可以测出重拨键对应的两个引脚线,这个过程相当简单,通过肉眼也能很快找出来。其他
16、按键找出方法相同,不过本次设计无需用到不再阐述。 找出重拨键引脚之后通过外线引出来,中间通过一个继电器连接单片机既可工作。如图7.3所示。RC0改装后的固话温度监控系统继电器 图 7.3 固话报警连接图上限温度通过软件设计设定也可以通过功能按键设定,当满足条件达到上限温度,单片机引脚触发高电平引发继电器工作既可实现自动重拨。固话的重拨号码要事先先设定好。2.8 串口通信部分目前较为常用的串口有9针串口(DB9)和25针串口(DB25)。最为简单且常用的是三线制接地法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连,电路图如图2.8.1所示 图2.8.1串口
17、通信电路图3.软件设计部分根据DS18B20约定的通讯协议,每次使用DS18B20之前都必须经过三个步骤,即先复位DS18B20,接着发出ROM操作指令,然后才可以发出RAM操作指令以进行温度转换等命令。本系统将实现读出DS18B20的温度并实时显示到LCD12864上,分辨率为0.0625。由于DS18B20对时序要求很严格,所以在程序设计时,时序要多加注意一点,不过数字不是死的,只要控制合理控制也不是扫描大问题。 DS18B20首次初始化时开启温度转换,之后每1s进行一次DS18B20的温度读取和转换,具体实现效果图如图4.8 流程图如图4.9所示 图 3.1温度采集效果实物图芯片上电复位
18、DS18B20发出Skip ROM指令启动温度转换1s到?YN复位DS18B20发出Skip ROM指令读取温度图3.2 DS18B20读取温度流程图4.上位机设计部分 上位机利用Visual Basic 6.0编程。用VB6.0开发串行通信程序有两种法,一种是利用Windows的API函数;另一种是采用VB6.0的通信控件MSComm。利用API函数编写串行通信程序较为复杂,需要掌握大量的通信知识,其优点是可实现的功能更丰富、应用面更广泛,适合于编写较为复杂的低层次通信程序。而VB6.0的MSComm通信控件提供了标准的事件处理函数、事件、方法,并通过控件属性对串口参数进行设置,比较容易地解
19、决了串口通信问题。 MSComm是VB6.0提供的ActiveX控件,使用前需将该控件添加到VB工具栏。MSComm控件具有功能完善的串口数据发送和接受功能,有两种处理通信的方式,即事件驱动方式和查询方式,事件驱动方式是利用MSComm控件的OnComm事件捕获并处理通信错误事件,是处理串行端口交互作用的一种非常有效的方法;查询方式是通过检查CommEvent属性的值来判断事件和错误。 图 4.1 上位机监控界面 下面VB上位机完整程序:Declare Function GetTickCount Lib kernel32 () As LongSub TimeDelay(t As Long) 时
20、间延迟子程序,单位是毫秒(ms) Dim TT& TT = GetTickCount() Do DoEvents Loop Until GetTickCount() - TT = tEnd Sub等待RS字符串返回,或是时间到达Comm是通信控件名称RS是欲等待的字符DT是最长的等待时间正常时返回值是所得的完整字符串,不正常时返回值是空字符串Function WaitRS(Comm As MSComm, RS As String, DT As Long) As String Dim Buf$, TT As Long Buf = TT = GetTickCount Do Buf = Buf &
21、Comm.Input Loop Until InStr(1, Buf, RS) 0 Or GetTickCount - TT = DT If InStr(1, Buf, RS) 0 Then WaitRS = Buf Else WaitRS = End IfEnd FunctionOption ExplicitDim NowX As Integer 现在的X轴位置Dim MaxPlotNo As Long 最长的X轴范围Dim PreValue As Single 前一个测量值当选择通信端口的Combo控件被选中后激活此事件若用户改变通信端口时,关闭通信端口Private Sub cmbCOM
22、_Click() 若通信端口号码和现在的选择一样时就不必理会,直接跳出此子程序 If cmbCOM.ListIndex + 1 = MSComm1.CommPort Then Exit Sub Timer1.Enabled = False 关闭定时器 TimeDelay 100 If MSComm1.PortOpen Then MSComm1.PortOpen = False 关闭通信端口 End If lblMsg.Caption = 已停止检测并关闭通讯端口 cmdOpenCOM.Enabled = True 允许使用【打开通信端口】按钮End Sub单击【结束】按钮后激活此事件使用End
23、命令将系统结束Private Sub cmdEnd_Click() MSComm1.PortOpen = False 关闭通信端口 EndEnd Sub单击【打开通信端口】按钮后激活此事件将MSComm控件的参数设置好,并打开激活【开始检测】按钮Private Sub cmdOpenCOM_Click() 判断端口号码是否落在1-16之间 If cmbCOM.ListIndex = 0 And cmbCOM.ListIndex PreValue + 0.01 Then picVoltage.Line -(NowX, ValueStr), RGB(255, 0, 0) 由上一次的位置画至此点 E
24、lse picVoltage.Line -(NowX, ValueStr), RGB(0, 0, 255) 由上一次的位置画至此点 End If End If PreValue = ValueStr NowX = NowX + 1 位置加1 If NowX MaxPlotNo Then NowX = 0 超过范围则数值归零End Sub5 设计总结 本系统的设计更加人性化,可以对4路设定不同的上限报警温度,这样在需要不同温度的测量中更具有优势,当然更多路温度的设计方法也一样。并且报警方面只稍微改动了一下固话就达到了远程报警的功能,温度较大变化时还会自动存储同时时间也会储存起来,可以给操作人员提
25、供更多的信息。本系统所需的元器件价格低廉,单片机资源利用率比较高。4个开关实现的功能比较多,使操作人员操作更加方便。在温度数据的处理上精度可达到0.0625,可以满足一定场合的用途。可改进之处:本系统虽然已经实现了大部分功能但仍可继续改造。如果远程测温等,通过无线模块可实现采集到的温度传送到控制台,进行远程监控,无需到现场。这是下一步设计的目标。参考文献1 陈洪财. 单片机C语言和汇编语言实用开发技术M哈尔滨工业出版社 .2008.52 刘和平等. PIC16F877X单片机实用软件与接口技术-C语言及其应用M. 北京航空航天大学出版社, 2003-1-13 李学海. PIC单片机实用教程基础
26、篇M. 北京航空航海大学出版社, 2007-024 李学海.PIC单片机实用教程提高篇M. 北京航空航海大学出版社,2007-025 能昌会.时钟芯片DS1302在单片机系统中的应用J.电子制作,2007年,11期6 郭天祥.新概念51单片机C语言教程:入门、提高、开发、拓展M.电子工业出版社,2009-02 147-167、342-349、394-4097 龙脉工作室.51单片机C语言应用开发技术大全M.人民邮电出版社.2008-98 张越, 张炎,赵延军基于DS18B20温度传感器的数字温度计J微电子学, 第37卷第5期,2007,109赵鸿图.基于单片机的温度控制系统的设计与实现J.中文
27、核心期刊微计算机信息(嵌入式与SOC),2008:545610 廖琪梅,韩彬,杨文昭,屈景辉.基于单总线器件DSl8820的温度测量仪J国外电子元器件2008年第2期2008,2 国外电子元器件-CNKI11 刘俊伏,宗云.DSl8B20与单片机的接口及编程技术J. 河北工业科技.第24卷第4期,2007,712张俊芳,张忠民,刘利民.智能单片机温度控制系统J.辽宁工程技术大学学报,2004:697113龚红军.单片机温度控制系统J.电气时代,2002:666714吴金戌,沈庆阳,郭庭吉.单片机时间与应用J.清华大学出版社,2002:363815 李江全,张丽,芩红蕾. Visual Basi
28、c串口通信与测控应用技术实战详解M. 人民邮电出版社,2007-6附录:程序设计部分代码:/* 名 称:send_i() * 功 能:写一个字节命令到LCD* 入口参数:unsigned char x 字符*/void send_i(unsigned char x)chk_busy(); /检测LCD是否工作繁忙rs = 0; /设置该字节数据为控制命令rw = 0; /设置此次操作为写PORTD = x; /送数据口PORTDe = 1; /使能nop();nop();nop();e = 0; /禁止/* 读数据*/unsigned char u8_Lcd12864ReadByte_f( v
29、oid ) unsigned char byReturnValue ; chk_busy() ; /检测LCD是否工作繁忙TRISD=0XFF; /设置PD口为输入状态 PORTD = 0xff ; /PD初始化为高电平 rs=1; / 读置高 rw=1; / 写置高 e=0; / 使能置低 e=1; / 使能置高 byReturnValue = PORTD ; / 读数据 e=0; / 关使能TRISD=0X00; / 恢复PD口为输出 return byReturnValue ; / 返回读到的数据void lcd_init()rst = 0; /复位LCDdelay(1); /保证复位所
30、需要的时间(1ms)rst = 1; /恢复LCD正常工作/nop();/psb = 1; /设置LCD为8位并口通信send_i(0x30); /基本指令操作send_i(0x01); /清除显示send_i(0x06); /指定在写入或读取时,光标的移动方向send_i(0x0c); /开显示,关光标,不闪烁/*函数名称:Draw_PM功 能:在整个液晶屏幕上画图参 数:无返回值 :无*/void Draw_PM(const uchar *ptr) uchar i,j,k; send_i(0x34); /打开扩展指令集i = 0x80; for(j = 0;j 32;j+) send_i(
31、i+); send_i(0x80); for(k = 0;k 16;k+) send_d(*ptr+); i = 0x80; for(j = 0;j 32;j+) send_i(i+); send_i(0x88); for(k = 0;k 16;k+) send_d(*ptr+); send_i(0x36); /打开绘图显示send_i(0x30); /回到基本指令集/* 名 称: writelcd()* 功 能: 在LCD上显示字符串* 入口参数:const unsigned char *pt 字符串的首地址*/void writelcd(const unsigned char *pt) while(*pt)/检测是否达到了字符串最后 send_d(*pt+); /发送数据给lcd/ 应用如下const uchar table1 = 基PIC 单片机;const uchar table2 = 多路温度; const uchar table3 = 巡回检测系统; const uchar table4 =2009年12月01日;send_i(0x80); / 定位在第一行writelcd(table1); / 写:基PIC 单片机send_i(0x90); / 定位在第二行writel
链接地址:https://www.31doc.com/p-3929291.html