于CIP-51单片机的温度数据采集和监测系统.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于 CIP CIP--51单片机的温度数据采集和监测系统单片机的温度数据采集和监测系统
娄水锋
(温州大学物理与电子信息工程学院温州 325000
摘要摘要::本文介绍了以 C8051F410为处理器结合 DS18B20 构成了一个智能的温度测量和监测系统。
并介绍了该系统的硬件组成和软件设计,着重分析了通过TM1639上的 LED 对新型单总线结构温度传感器 DS18B20采集的环境温度进行实时显示,将采集的环境温度值发送到 SMBus 接口的 AT24C02存储器存储,可以将采集的数据送上位机 PC 进行显示、处理; 能够接受上位机 PC 的数据,并且可以根据
协议的定义来执行上位机的指令;该系统可以对温度超过设定范围进行报警,达到监测目的。
关键词关键词:: C8051F DS18B20 温度测量数据采集温度监测
Temperature Data Acquisition and Monitoring System Based on
Cip-51 Sigle-Chip
Lou Shuifeng
(College of Phsics&Electroic Information Engineering WenZhou 325000
ABSTRACT : Intelligent temperature measurement and monitoring systems based on combination of the processor C8051F410 and DS18B20 is described. And the system's hardware components and software design also be introduced. This article focuses on the analysis of the LED which on TM1639 real-time display the temperature data that a new single-bus architecture of the temperature sensor DS18B20 collects. The collection of ambient temperature values can be sent to the AT24C02 memory for storage. The data can also be sent to PC to display and process. The system is designed that it can
accept PC core under the defined agreement to implement the host machine instructions; The system can set the range of temperature exceeds the alarm, to monitoring purposes.
KEYWORDS: temperature measurement data collection temperature monitoring
C8051F DS18B20
1引言
温度是工业生产中常用的被控参数,大部分电子元器件的性能特性受温度影响会发生一定的变化,在某些情况下,甚至会因温度的影响而无法正常工作。
人们的生活与环境的温度也息息相关,工业和农业生产中的许多场合对温度有严格要求,如温室养殖场、仓储室和冷冻室等。
在这种环境下,温度过高或过低都将对生产造成严重的损失。
所以,一套性能可靠的可以测量温度并进行实时监测的系统在生产生活中是必不可少的。
过去的温度测量系统一般以热敏电阻为温度传感元件,虽然热敏电阻价格低廉,但这种采用由模拟温度传感器、多路模拟开关、A/ D 转换器及单片机等组成的温度监测系统需要后续信号处理电路,而且在测量的过程中需要标定温度值。
检测系统因电路和工艺复杂而误报率高,故障频繁,也给施工和维护带来不便。
同时线路上传送的是模拟信号,易受干扰和损耗,测量误差也比较大,不利于控制者根据温度变化及时做出决定。
针对这种情况,本文提出一种采用数字化单总线技术的温度采集和监测系统,以DS18B20为温度敏感元件,基于C8051F410 单片机,通过TM1639对检测到的温度进行实时显示,并可以记录历史温度值,以便研究特定生产环境的温度变化规律,为科学化控制提供数据支持。
系统设有报警系统,如果环境温度超过了设定的允许范围,那么蜂鸣器将发生报警,同时LED灯闪烁,达到监测目的;系统还具有实现上下位机通讯的功能,根据设定的通讯协议,上位机可以向下位机发出回传测量到的温度的实时数据和存储在存储器中的历史数据,也可以通过指令来控制下位机,包括报警电路中的蜂鸣器和LED的关闭控制。
2温度测量系统的硬件结构
2.1DS18B20的简介
的简介:
:
以前的温度传感器大都输出的是模拟信号,不能直接送入单片机等微处理器进行测量,还要经过A/D转换,线路复杂,成本较高。
而且要做多点测量十分麻烦,所以在多点温度测量中得不到广泛的应用。
同时由于以前的温度传感器在线路上传送的是模拟信号, 易受干扰和损耗,测量误差也比较大,不利于控制者进行准备的控制。
美国Dallas公司开发出的DS18B20为单线数字温度传感器,具有与一般模拟温度传感
器相当的测量范围和精度,输出直接表示温度值的12位(二进制数数字。
DS18B20测温范围-55~+125 ℃,在-10~85℃范围内精度为±5℃。
除此之外DS18B20能直接从单线通讯中吸取能量,粗去了对外部电源的需求。
每个器件与唯一的序列号,故一根总线可以挂很多个传感器,可以方便构建多点分布式监测网络。
2.2MCU 选型
C8051F410 是整个装置的控制核心,其内置的Flash存储器和RAM ,是种高性能8 位嵌入式微处器,其使用CIP-51 微控制器内核CIP-51 ,与MCS-51 的内核和指令集完全兼容。
其MCU 都能有效地管理模拟和数字外设,功耗很低。
通过J TA G 接口,可进行非插入式全速的在线调试,支持功能允许使用安装在最终应用系统上的产品MCU 进行非侵入式(小占用片内资源、全速、在系统调试。
芯片集成了丰富的片内外设资源,实现了全集成数模混合信号在片系统SOC ( System on Chip 。
正是由于这些优点以及极高的模拟和数字集成度,对温度采集系统小体积、高集成度精确测量的要求而言,C8051F410实为理想选择。
2.3C8051F410开发板电路
图 1:C8051F410开发板电路2.4温度测量单元
图 2 DS18B20测温电路
温度传感器DS18B20将环境的温度转换为数字量,在输出脚DQ直接与
C8051F410相连, 并接4.7K上拉电阻。
VDD通过外部电源供电,GND接地。
C8051F410与DS18B20通讯按照传感器DS18B20的通讯协议进行读写,再由单片机将读到的数据通过UART与PC机进行通信,发往TM1639进行实时显示和发到相应存储器进行数据存储;
2.5TM1639显示电路
图 3 TM1639键盘和 LED 显示电路
LED显示、键盘读取,采用的是TM1639芯片模块(包括8个八段数码管和8个按键, 与PC机通过串行通讯。
LED灯显示:左边的四个LED灯用来实时显示DS18B20测量的温度值,右边的四个LED灯用来显示储存在AT24C02的历史温度值。
键盘控制:第一个按键用来关闭发生报警的蜂鸣器,第二个按键用来关闭报警时闪烁的发光二极管,第三个按键用来读取历史温度值,没按一次,读取前次存储在
AT24C02的温度值;
2.6存储单元
采用的I2C借口的AT24LC02B芯片作为存储历史温度数据的存储器,芯片的硬件连接电路如图所示:
图 4 AT24LC02B 芯片的硬件连接电路
C8051F410根据I2C协议对AT24LC02B存储器进行读写操作。
2.7报警单元
图 5 蜂鸣器电路
当DS18B20监测到的温度超过一定的范围或低于某一温度值,数据线传输0,使蜂鸣器
导通,发出报警声音;
图 6 正常工作和报警指示灯电路
当DS18B20监测到的温度在正常范围内,是上面的绿灯亮,表明工作正常;如果监测
到的范围超过某一范围是,下面的红灯闪烁,进行报警;
2.8系统结构简图
系统结构简图:
:
图 7 系统硬件组成简图
说明:
1:TM1639芯片模块完成左四个LED灯实时显示DS18B20采集的温度,右四个LED灯,通过相应键盘按钮显示存储在AT24LC02B芯片内的历史温度数据。
2:报警电路:当DS18B20检测到的温度超限时,蜂鸣器报警,指示灯闪烁。
3:DS18B20:进行温度采集。
4:AT24LC02B:为SMBus借口的EEPROM存储芯片,储存历史温度值。
5:PC机:通过串口和相应通信协议,实现上下位机的相互通信,使单片机可以接受和执行由上位机发来的指令。
3系统软件设计
3.1主程序流程图
主程序流程图:
首先对各个功能模块进行初始化,如存储历史温度的EEPROM的SMBus通信模块初始化, 上位机和下位机进行通信的UART串口模块,系统时钟模块、输入输出模块,相应定时器的设置等。
初始化程序如下:
void Init_Device(void
{
PCA_Init(;
Oscillator_Init(;
Port_IO_Init(;
ADC_Init(;
Voltage_Reference_Init(;
Time0_Init(;
Timer2_Init (;
Timer3_Init (;
SMBus_Init (;
UART0_Init (;
}
3.2 温度采集的子系统流程图
启动DS18B20转换,进行温度采集,将采集到的温度经由C8051F410处理后在LED灯上实时显示。
使用DS18B20温度传感器进行温度采集的子系统编程流程图:
图 8 DS18B20温度传感器测量温度的流程图
温度监测部分代码:
void initial( //DS18B20传感器初始化 {
dq=1;
delay(8; dq=0;
delay(80; //拉低约700us, 符合协议要求的480us以上 dq=1; //产生一个上升沿, 进入等待应答状态 delay(20; //45us }
char readbyte(//读DS18B20测出的温度值 {
unsigned char i,dat;
dat=0;
for(i=0;i<8;i++
{
dq=0;
dat>>=1;
dq=1; //释放总线
if(dq
dat|=0x80;
delay(5;
}
return dat;
}
void writebyte(unsigned char dat //启动DS18B20传感器测量温度{
unsigned char i;
for(i= 0;i< 8;i++
{
dq=0;
delay(1;
dq=dat&0x01;
delay(5;
dq=1; //释放总线
dat>>=1;
}
delay(5;
}
3.3延时函数设计
程序设计了两个延时变量,sg10ms和sg100ms,分别延时10ms和100ms,由定时器0中断产生,其有点是定时准确度很高。
当100ms到来,TM1639芯片模块左边的四展LED灯实时显示温度值,并进行温度数值的存储,若监测到的温度值超限,那么就触发报警电路,指示灯(红灯,正常工作下为绿灯闪烁,蜂鸣器鸣叫,提醒管理者采取相应措施。
当有效措施实施后,管理者可以通过在上位机发送D命令取消报警,也可以用其他命令查询相应的温度数据。
TM1639芯片模块右边的四个LED显示灯用来显示历史温度值,按键也可以进行相应操作,将按键命令置于if(sg10ms{}函数下,当按下按键1进行历史数据查询时,延时10ms 后在LED等上进行显示。
在报警电路启动后,也可以通过按键2和3来关闭蜂鸣器和报警灯;
void Timer0_ISR(void interrupt 1 using 0 { TH0=(0xffff-1000/256; TL0=(0xffff-1000%256; if(tim10ms++==100 { tim10ms=0; sig10ms=1; if(tim100ms++==10
{ tim100ms=0; sig100ms=1; } } } 利用Time0中断实现延时代码 //主函数 10ms循环3.4 PC 和单片机系统通信的协议通过串口实现PC和单片机系统通信的协议代码实现: while(RI0 //串口通讯 pc机输入指令 { //若串口有命令 Volt0 串口调试器中显
示电压 RI0=0; switch(SBUF0 { case 's' : //显示单片机保存在AT24C02中的数据全
部上传给PC机 j=ADDR; for(i=0;i<128;i++ { Volt0L = EEPROM_ByteRead(j; j++;
Volt0H = EEPROM_ByteRead(j; j++; Volt0=Volt0H; Volt0=Volt0<<8;
Volt0=Volt0+Volt0L; printf("%d ",i; printf("at24c16 voltage: %dmV\n ",Volt0 } 11
break; case 'e': // 显示单片机最近采样到的一次值传给PC机 j=ADDR; Volt0L = EEPROM_ByteRead(j; j++; Volt0H = EEPROM_ByteRead(j; j++; Volt0=Volt0H;
Volt0=Volt0<<8; Volt0=Volt0+Volt0L; printf("at24c16 voltage: %1dmV\n",Volt0; break; case 'd' : beep = 1; RED_LED=1; break; default: break; 3.5 报警电路代码设计报警电路代码的实现: 1:通过按键2和按键3关闭蜂鸣器和红色发光二极管的代码: switch(keystore { case 1: //按键1 (TM1639共8个按键) for(i=0;i<3;i++
{ ledAddressRegularDispaly(8-i,Data[i]; } ledAddressRegularDispaly(5,Data[3]+10; break; case 2: //按键2 beep=1; //用键盘关闭蜂鸣器 break; case 3: RED_LED=0; break; default: break; } 2:通过PC机发送指令来关闭蜂鸣器和红色发光二极管闪烁: 12
switch(SBUF0 { case 'd' : beep = 1; break; } 说明:往蜂鸣器电路的I/O口送0,根据图所示,就可以让蜂鸣器导通,实现发音。
同理,往I/O口送1,便可以关闭蜂鸣器。
发光二极管送高电平时导通发光,所以,可以向单片机相应口送0来关闭红色发光二极管。
RED_LED=0; 4 结论采用C8051F410 微控制器和DS18B20 数字温度传感器构成的温度采集和监测系统, 该温度监测系统充分发挥了C8051F410 单片机强大的控制能力和计算机的数据处理能力, 通过传感器DS18B20 实现了对温度的测量,并进行存储和分析,报警电路的设置使温度监测可以达到预警的作用。
同时,DS18B20 数字温度传感器的分辨率提高到了0. 0625 ℃。
使系统对环境温度的变化有更好的敏锐性,提高了工业生产应用中的安全性。
总体来说,该温度采集监测系统具有整体性能可靠、硬件结构简单、精度高、易于扩展、维修方便和系统稳定性好等优点。
在温度监测中将会拥有很好的前景。
5 学习心得学习心得 1:代码的整理和归类非常重要,最好建立自己的代码库。
做项目时可以随时移植一些已经实现了的功能模块,既提高了效率,又保证了系统的可靠性。
在设计这个系统的 DS18B20 测温程序时,我就是借鉴了在之前编写的电子系统设计实验课“数字温度计”实验的代码。
还有用 UART 实现 PC 机和单片机系统的通信,我借鉴了单片机实践课上关于 UART 通信的相关代码。
当然,用 SMBus 接口的 AT24C02 存
储数据,用 TM1639 芯片显示单片机数据及有关键盘的操作,我在单片机实践课也做过相应的实验。
2:设计程序时要学会化流程图和模块简图,理清整个系统的逻辑是非常重要的。
在写这个系统的程序前,我在纸上试着话这个模块的功能逻辑图和程序的流程图,在画的过程中 13
会遇到很多细节性的问题,画图的本身也使我对程序的逻辑有了更清楚的认识。
当然,学会用计算机画流程图和功能模块图也是非常必要,我用 word 画出系统硬件组成简图和主程序流程图来做相应的说明显得更加简明、直观。
3:做硬件实物前先用软件进行仿真检验自己的设计方案,如果仿真通过,再进行实物焊接,这样可以减少很多麻烦,也可以降低很多成本和风险。
4:学会代码的移植也很重要,现在的系统越来越复杂,如果每个模块都重新编写,那效率和可靠性都很低,学会移植别人或自己曾编写的可靠代码到新的系统中,然后进行代码改写和调试,这样就事半功倍。
5:学会借鉴,通过阅读相关的论文,我发现这个系统还可以做很多的完善工作,比如可以扩展一个步进电动机,当系统监测到温度过高时,启动步进电动机,带动风扇以达到降温目的。
可以扩展一个网络接口,实现系统的远程控制。
参考文献 [1]. [2]. [3]. [4]. [5]. 黄慧殷兴辉基于DS18B20 的高分辨率温度数据采集[J] 电子测量技术,2009. 张明阳郭唐永基于CIP.51单片机的温度采集系统[J] 大地测量与地球动力学,2007, 潘琢金.C8051F×××高速SOC 单片机原理及应用[M].北京:航空航天大学出版社,2003. TM1639数据手册
/docc/default.html Maxim Integrated Product. DB18B20 Data Sheet[ EB/ OL ] .https:///cn 14。