6.2 程序设计流程图
图6.2-1 发射流程图 图6.2-2 接收流程图
6.3 温度传感器多点数据采集
DS18B20 可设定9~12 位的分辨率,本系统采用12位分辨率,转换精度为0.0625℃,转换温度信号所需最长时间为750ms。温度数据由2 字节组成,以符号扩展的二进制补码形式存储,最低4 位是小数部分,中间7 位是整数部分, 1 位符号位。DS18B20 内部RAM 由9 个字节的高速缓存器和E2PROM 组成,前2 个字节即为温度数据。通过复位指令、ROM 和RAM 功能命令,即可完成对指定DS18B20温度数据的采集和读取。
在一线制总线上串接多个DS18B20 器件时,需要先发送跳过ROM 指令,将所有传感器都进行一次温度转换,之后通过匹配ROM依次读取每个传感器的温度数据,实现对单I/O 口上的多个DS18B20 器件的操作[10]。
在系统安装及工作之前应将主机逐个与DS1820挂接,以读出其序列号。其工作过程为:主机发出一个脉冲,待“0”电平大于480μs后,复位DS1820,在DS1820所发响应脉冲由主机接收后,主机再发读ROM命令代码33H,然后发一个脉冲(15μs),并接着读取DS1820序列号的一位。用同样方法读取序列号的56位。另外,由于DS1820单线通信功能是分时完成的,遵循严格的时隙概念,系统对DS1820和各种操作必须按协议进行,即:初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。 7 调试及结果
7.1 测试环境及工具
测试温度:0~100摄氏度(模拟多点不同温度值环境)。
测试仪器及软件:数字万用表,温度计0~100摄氏度,串口调试助手。
测试方法:目测。
7.2 测试方法
使系统运行,观察系统硬件检测是否正常(包括单片机最小系统,键盘电路,显示电路,温度测试电路等)。系统自带测试表格数据,观察显示数据是否相符合即可。
采用温度传感器和温度计同时测量多点水温变化情况(取温度值不同的多点),目测显示电路是否正常。并记录各点温度值,与实际温度值比较,得出系统的温度指标。
使用串口调试助手与单片机通讯,观察单片机与串口之间传输数据正确否。
7.3 测试结果分析
自检正常,各点温度显示正常,串口传输数据正确。
因为芯片是塑料封装,所以对温度的感应灵敏度不是相当高,需要一个很短的时间才能达到稳定。 8 总结
本文研究的课题是基于单片机的多通道数据采集系统,该系统的实现的功能是将
来自传感器的信号通过放大、线性化、滤波、同步采样保持等处理后,输入A/D转换为数字信号后由单片机采集,然后利用单片机与PC机的通信将数据送到PC机进行数据的存储、后期处理与显示,该系统的数据处理功能强大、显示直观、界面友好、性价比商,可广泛应用于工业控制、仪器、仪表、机电一体化、智能家居等诸多领域。
本系统还是一个不完善的系统,还有许多需要改进的地方。设计中所采用的DS18B20搜索算法还存在不足,有时会发生重复或遗漏搜索。在通信协议不完整,没有进行发送超时出错处理。还有各种不足之处有待将来改进。
设计得以顺利完成,得感谢我的指导老师,在这个过程中他都一直指导着我,虽然
他没有时时刻刻在我们身边亲历指导,但是他每天都询问我的进展情况,对我遇到的问题给予我解答,并对我的设计进行一些优化。 附录1: 电路原理总图 附录2: 发射部分主程序
#include
#include”ds18b20.h”
#define uchar unsigned char
/***********pt2262发射函数***********/
void send_dat(uchar x)
{
uchar x1,x2;
x1=x&0x0f;
P2=x1;//将数据的低4位先发送出去
x2=x>>4;
P2=x2;//再将数据的高4位发送出去
}
/************主函数******************/
void main()
{
while(1)
{
read_ds18b20();//读取温度
send_dat(temp1);//发射温度1
send_dat(temp2);//发射温度2
send_dat(temp3);//发射温度3
}
}
Ds18b20.h头文件:
#ifndef _ds18b20
#define _ds18b20
uchar temperature,y1,y2,x2,y3;
#define DQ P1_0 //温度接收口
uchar tpl;
uchar tph;
/************************************************************/
void delay_b(uint t)
{
uint i;
while(t--)
{