基于AM2301单总线协议数据采集系统的设计
2015-10-10陆正杰
陆正杰
(河池学院 物理与机电工程学院,广西 宜州 546300)
0 引言
AM2301是广州奥松公司研发的一款单总线数字式温湿度传感器,其单总线数据传输协议简单有效,通信距离较远,数据通信程序设计简单,非常适合在分布式温湿度采集系统中应用。将这种单总线协议应用到分布式数据采集系统终端的设计中将大大简化采集网络的设计。本文将设计一款模仿AM2301的单总线协议的数据采集系统。该系统可以把采集到的数据按照AM2301的数据格式对采集信号进行处理,并能按照AM2301的单总线协议向主控设备传送数据。在分布式数据采集网络中具有广泛的应用前景。
1 单总线数据采集器设计方案
1.1 单总线数据采集器功能分析
单总线数据采集器设计为一个终端设备,主要用于采集两路模拟信号,然后按照单总线器件AM2301的数据格式存储,并能按AM2301的读写时序把采集到的数据与主控设备进行通信。因此采集器的主要功能有:一是数据采集功能;二是数据处理及显示功能;三是数据传输功能。
1.2 单总线数据采集器的方案设计
根据功能需求,单总线数据采集器方案设计如图1所示。
图1 数据采集器结构图
系统可以实时采集两通道模拟信号,然后进行AD转换,并把采集到的数据按AM2301的数据格式进行处理、存储和显示。在主控设备请求数据时,由单总线协议发生器负责把存储的数据通过单总线传送。
2 单总线数据采集系统的硬件设计
系统主要有数据采集和数据传输两大部分,而数据传输主要依靠软件来完成相关传输协议,将在软件设计部分介绍。硬件部分主要由单片机最小系统控制ADC电路实现模拟信号的实时采集。根据设计方案,硬件电路如图2所示。
图2 单总线数据采集器硬件电路图
控制核心采用AT89C52及其外围电路构成的最小系统,用LCD1602实时显示采集的数据。
数据采集电路采用双通道高速16位ADC集成电路LTC1865,其串行数据输出(SDO)引脚、串行同步时钟(SCK)引脚、启动转换控制(CONV)引脚和串行数据输入(SDI)引脚分别连接到单片机的P1.4~P1.7。单片机通过SDI写入命令选择数据通道,然后通过CONV引脚控制ADC电路启动A/D转换,从SDO引脚读取串行数据即可采集到相应通道的实时数据。
3 单总线数据采集系统的软件设计
3.1 采集器的数据传送协议的时序分析与实现
根据AM2301数据手册,主控设备与其通信时序表示及数据位时序表示分别如表1、表2所示。采集器的数据传送协议时序采用AM2301时序的典型值,根据表1和表2所示的各种控制信号和数据位的时序信号,采集器的数据传送协议程序设计思路如下:
表1 AM2301数据通信时序
(1)数据采集器平时一直在监视主控设备发起通信的起始信号,即先把数据线SDA拉高,然后一直监测数据线SDA的电平状态;
(2)监测到SDA被主控设备拉低时计时(0.8~20 ms)确定是否为主控设备发起通信请求;
(3)主控设备发起通信请求低电平信号后,等待主控设备拉高释放总路线约30 μs,然后拉低总线约80 μs作为应答信号;
(4)然后拉高释放总线约80 μs后开始发送数据位;
(5)发送数据时每个数据位之间有一个50 μs的低电平时隙。数据从高位到低位移出数据位,然后进行判断:为0则在低电平时隙信号后把总线拉高26 μs,为1则在低电平时隙后把总线拉高70 μs;
(6)40位数据发送完毕,把总路线拉高;
(7)启动ADC电路采集一次数据,并把数据保存到数据存储单元替换掉旧的数据。协议时序如图3所示。
表2 AM2301数据位的表示
图3 协议发生器的时序图
3.2 采集系统的设计
根据以上对协议发生器的工作过程和通信时序分析,程序从功能上可以划分为主函数、数据采集函数、数据处理函数、显示函数、数据传送函数五大模块。程序采用模块化编程,分别用main.c,data_transfer.c,data_simple.c,data_proce.c,disp.c实现上述五大功能并建立相应的接口文件(*.h)。其中,显示函数针对LCD1602编程,主要实现在LCD1602指定位置(x,y)写字符串和写数据功能,功能函数分别为write_n_char(unsigned char x,unsigned char y,unsigned char*string)和 write_data(unsigned char x,unsigned char y,unsigned char date),作为常用函数模块,不是本文讨论的重点。
3.2.1 数据采集与数据处理
根据LTC1865数据手册,模拟信号的A/D转换是由MCU向LTC1865发出转换命令并按照时序采集转换得到的测量值的数字量分别保存到数组conv_data[2]中。参考LTC1865数据手册,采集程序设计流程如图4所示。
数据处理函数将采集的数字量conv_data[2]拆分为四个字节的无符号字符型数据并计算其CRC较验值,按照AM2301的数据格式保存在数据寄存器RT_Data[]中。
具体实现代码为:
数据格式为:
较验值1通道高8位1通道低8位2通道高8位2通道低8位CRC
3.2.2 数据传送函数的设计
根据图3所示数据传输时序,数据传输程序主要是将需要传输的数据在单总线上构建数据位低电平时隙和高电平数据位,程序设计流程如图5所示。
图4 LTC1865数据采集程序流程
图5 数据传送程序流程
将传送过程设计成子函数的形式方便调用和程序的移植,子函数命名为data_tranfer(),实现代码如下:
图6 主函数流程图
3.2.3 主程序的设计
主函数中,首先定义数据总线SDA及ADC的数据线SDO,时钟线SCK和转换控制线CONV并进行初始化操作,然后一直监测数据端口,根据图2所示的协议时序,当检测到数据端口SDA被拉低后就开始计时判断是否为主控设备发出的通信请求,是则调用数据传送函数将保存在数据器寄存器中的40位数据按协议移位传送。然后进行一次数据采集和处理,将新的数据保存到数据寄存器中,程序流程如图6所示。
4 系统测试与应用
根据设计目的,系统的测试主要包括两个方面,一是系统能否正确采集信号并显示出来;二是系统能否按照设计的协议将采集到的信号传送给主控设备。
4.1 数据采集功能的测试
在protues中设计测试电路,如图7所示,用两个电位计RV1和RV2产生和改变两路输入电压,通过电压探针可观察两路输入电压的大小及其变化情况。单片机控制ADC电路采集数据并处理后,将在显示器显示当前值,测试结果如图8所示,通过比对,图8中两处虚线框处,电压探针显示的输入信号电压与采集系统采集显示的信号大小一致,表明电路实现了两路模拟信号的采集并进行数据处理的功能。
4.2 数据传输功能测试
测试实验过程示意图如图9所示。
测试时在Protues中设计一单片机系统作为主控设备,按设计的协议向单总线数据采集系统请求数据并显示出来。
具体测试电路和测试结果如图10所示,通过对比图中虚线框处数据,主控设备显示的接收数据和采集系统实时显示的数据一致,表明本文设计的系统能按照设计的协议正确传输数据,实现了预期的功能。
5 结论
本文讨论设计的基于AM2301的单总线协议的数据采集系统,硬件系统简洁明了,可扩展性较好,在分布式电压型模拟信号采集系统中有很好的优势。系统通过Protues仿真测试,达到预期的功能。
图7 数据采集功能测试电路图
图8 数据采集功能测试结果
图9 数据传输功能测试方法示意图
图10 数据传输测试结果
[1]济南联诚创发科技有限公司.数字温湿度传感器DHT21(AM2301)[Z],2003.
[2]陶凌,聂惠娟.基于RS-485总线的蚕种催青控制系统[J].微计算机信息,2008(4):23-25.
[3]许才铨.蚕种催青室控制系统的研制与应用[J].蚕桑通报,2003(4):39-40.
[4]曾庆波,何一楠,辛春红.单片机应用技术[M].哈尔滨:哈尔滨工业大学出版社,2012.
[5]深圳奥松传感器科技有限公司.数字温湿度传感器AM23XX使用说明[Z],2010.
[6]LINEAR TECHNOLOGY CORPORATION.LTC1864/LTC1865 μPower,16 - Bit,250ksps 1 - and 2 - Channel ADCs in MSOP[Z],2001.
[7]李富伟,翟守忠,何万平,等.基于LTC1865和McBSP的高速串行数据采集系统设计[J].信息化纵横,2009(13):18-21.