钱涵舟,冯辰宇,石垒垒,谭睿,冯月芹
(南京工程学院 信息与通信工程学院,江苏南京,211167)
0 引言
当今社会正迅速发展,人们工作节奏较快,压力也越来越大,导致到了一定年纪后心脏病发作比例越来越高;由于某些心脏疾病存在突发性的因素,医院的繁琐医疗程序与高成本的医疗检查并不能满足许多有潜在心脏病患者的需求,所以促使了便携性家庭形式的医疗产品迅速发展,家庭式的心电监护仪器就是其中一种;患者可以在家中进行心电监护。
本文的研究目的是设计家用便携式无线数据传输心电监护仪中的两个基本部分:心电信号采集系统和NB-IOT无线数据传输系统,为设计能够应用物联网进行远程监护的家用心电监护仪提供良好的硬件平台。心电信号采集模块采用STM32F407微处理器作为控制单元,采用ADS1292R心电采集芯片实现心电信号进行放大,滤波,模数转换。NBIOT无线数据传输模块通过微处理器STM32F407与NBIOT模块硬件接口部分,实现数据的无线发送;数据发送到云端服务器。用户可以通过个人家用计算机访问网页或者用微信小程序来实现心电信号的重现,以及心脏健康状态。
1 系统总体设计
数据采集终端设备以STM32F407为主控制器,采用中国电信物联网模块NB-IOT模组作为无线通信模块,主控制器控制生理参数采集传感器,对人体的心电信号,体温等进行数据采集,将采集到的数据通过单片机串口传输到无线收发NB-IOT模组,再由NB-IOT模组发送到基站,最后由基站传送到云服务器,数据存储在云服务器,用户使用客户端软件或微信小程序来查看数据。系统整体架构如图1所示。
图1 系统整体架构图
2 硬件总体设计
■2.1 NB-IOT通信模块
无线通信模块采用BC20,它是一款高性能、低功耗、多频段、支持GNSS定位功能的NB-IoT无线通信模块。其尺寸仅为18.7mm×16.0mm×2.1mm,满足便携式设备的要求。BC20兼容移远通信GSM/GPRS/GNSS系列MC20模块,BC20提供丰富的外部接口和协议栈,同时支持中国移动OneNET、中国电信IoT以及阿里云IoT等物联网云平台。
模组拥有2个串口端,分别为主串口端和调试串口端,调试串口通过TTL转USB电平与电脑端连接,主串口端与STM32串口端进行连接。主串口端用以AT指令的传送,支持的波特率为9600、115200。调试串口端仅用作软件调试,调试波特率配置为9600bps。
■2.2 生理特征采集单元电路实现
心电、体温是反映人体健康状况的重要参数,对心电、体温进行长期准确的测量与监护能够为预防和诊断疾病起到至关重要的作用,特别是独居老人或有心脏病的人来说,预防更为重要。
2.2.1 心电信号监测模块
心电信号检测模块采用TI公司的ADS1292R芯片完成;ADS1292R的特征如下: ADS129X是低功耗、多通道、同时采样、具有集成可编程放大器(PGA)的24位delta-sigma(ΔΣ)模拟-数字转换器。每个PGA前面有个EMI滤波器,可以抑制电磁干扰,减少噪声。这些设备包含各种不同的心电图的特定功能,使它们非常适用于可扩展的心电图(ECG),脑电图(EEG)和肌电图(EMG)的应用。通过关闭适用于心电图的特定功能电路,这些设备也可用于高性能多通道数据采集系统中。ADS1292R提供两种不同的器件时钟方法:内部和外部,内部时钟非常适合低功耗、电池供电系统。
有2路差分输入,减少共模干扰,IN1P, IN1N是通道1组,可用于呼吸测量;IN2P,IN2N是通道2,可用于采集心电信号,ADS1292R 内部右腿驱动电路选择通信号加载在人体上,从而降低共模干扰。从TI的资料可以知道,引脚RESP_MODP,RESP_MODN是 输出调制频率的,其频率可设置为32KHz或者64kHz,与31脚32脚相连的电阻R11和R12是限制电流输出的,因为作为医疗产品在标准上是有漏电流的限制。C19~C24电容都是限制直流留到人体,防止对人体造成伤害的。ADS1292R的呼吸通道是通道1,要注意,测量呼吸时,PGA1P,PGA1N引脚接的滤波电容为47nF,测量心电图时4.7nF即可。
ADS129X有一个高度可编程多路复用器,可用于温度、供电、输入短路和RLD(右腿驱动)测量。此外,该多路复用器允许任何输入电极被编程为患者参考驱动器。PGA增益从7个设置中选择:1、2、3、4、6、8或12。使用SPI兼容的接口与设备通信。硬件连接图如图2所示。由于篇幅限制,这里仅画出三导联与ADS1292R的电路连接图。详细原理图可以参考ADS1292R芯片数据手册。
图2 ADS1292R模块与三导联的电路原理图
2.2.2 人体体表温度的测量
人体温度监测模块采用TI公司的LMT70温度传感器与ADS1115 AD转换实现。LMT70是一款超小型、高精度、低功耗CMOS模拟温度传感器,具有输出使能引脚。LMT70在温度感测方面应用广泛,例如物联网(IOT)传感器节点、医用温度计、高精度仪器仪表和电池供电设备。其特点是精度高,功耗低。
ADS1115是具有16位分辨率的高精度模数转换器 (ADC),采用超小型的无引线 QFN-10 封装或 MSOP-10 封装, ADS1115 具有一个板上基准和振荡器。 数据通过一个 I2C 兼容型串行接口进行传输; ADS1115 具有一个板上可编程增益放大器 (PGA),该 PGA 可提供从电源电压到低至 ±256mV 的输入范围,因而使得能够以高分辨率来测量大信号和小信号。 ADS1115 可工作于连续转换模式或单触发模式,后者在一个转换完成之后将自动断电,从而极大地降低了空闲状态下的电流消耗。这些低功耗的特征,适合电池供电的便携式设备。数字型AD转换方便了数据的读取,I2C总线接口节约了芯片的引脚,易于开发。硬件电路图如图3所示。
图3 体温测量原理图
3 系统软件设计
系统的软件包括下位机数据采集程序与客户端应用程序,下位机负责传感器的控制采集与数据传输,客户端对下位机的数据进行接收与处理、显示。
■3.1 NB-IOT远程传输
BC20采 用MQTT 协 议 接 入 ONENET 平 台, 进 入ONENET 平台后,就可以进入到平台端了。第一次使用需要注册,现在一般都是实名制要求,用户注册的时候,按照模块操作说明,来进行注册,当注册好,设备会显示离线,这时只要单片机端控制模块发送数据到ONENET平台进行激活就可以了。
设备接入步骤如图4所示。
图4 onenet接入流程
■3.2 终端数据采集软件设计
数据采集程序由初始化程序,传感器控制程序,与NBIOT模组串口通信程序等组成。监测模块上电之后先进行初始化,保证串口通信正常。先由控制器向NB-IOT模组发送AT指令,通过NB-IOT模组的应答信息判断模组是否正常连接NB-IOT网络。在完成正常接入网络之后,通过LCD显示程序主要功能操作说明,通过按键来选择需要开启的传感器,主控芯片将传感器采集到的数据通过串口发送给NBIOT模组,同时也将数据经过处理在显示屏上显示。单元模块温度采集ADS1115操作流程:
(1)初始化配置寄存器
①写入器件地址0x90(从机地址)
②写入0x01(配置寄存器地址)
③写入高字节(配置寄存器的高8位)
④写入低字节(配置寄存器的低8位)
(2)配置转换寄存器
①写入0x90(从机地址)
②写入0x00(转换寄存器地址)
(3)读取转换结果
①写入0x91(从机地址)
②读转换结果高字节
③读转换结果低字节
ADS1115与主机通信,采用的是IIC总线协议,它的初始化、读数据C语言程序如下:
unsigned chr ADS1115_Init( )
{ IIC_Start();//启动
IIC_Send_Byte(0x90); //发送器件地址
IIC_Wait_Ack();//等待应答
IIC_Send_Byte(0x01); //写配置寄存器地址
IIC_Wait_Ack();//等待应答
IIC_Send_Byte(0xB3);//写配置寄存器数据高8位,模拟信号从通道0单端输入,两成4.096V
IIC_Wait_Ack(); //等待从机应答
IIC_Send_Byte(0x83); //写配置寄存器数据低8位,单次转换,转换速率128SPS
IIC_Wait_Ack();
IIC_Stop();
delay_us(20);//延时
return 1;}
根据ADS1115工作时序图,写出ADS1115读数据的函数如下:
float ADS1115_ReadAD(void)
{float ret;
unsigned int data;
IIC_Start(); //主机发送启动信号
IIC_Send_Byte(0x90);//ads1115器件写地址
IIC_Wait_Ack();
IIC_Send_Byte(0x00);//写转换结果寄存器地址
IIC_Wait_Ack();//从机应答
IIC_Stop();
IIC_Start();
IIC_Send_Byte(0x91);//写读器件地址
IIC_Wait_Ack();
data=IIC_Read_Byte(1);
master_Ack();//主机发送应答信号
data=(data<<8)+IIC_Read_Byte(1);
master_Ack();//主机发送应答信号IIC_Stop();
//数值计算取决于PGA配置
if(data>0x8000)
ret=((float)(0xffff-data)/32768.0)*4.096;
else
ret=((float)data/32768.0)*4.096;
return ret;
}
单元模块心率采集ADS1292R软件配置寄存器初始化有关寄存器:
①写配置寄存器1=0x01,连续转换模式,采样率为250。
②写配置寄存器2=0xa0,内部参考电压为2.42V,禁止CLK引脚输出信号。
③ 写通道1设置寄存器=0x30,设置增益为3,正常节点输入。
④写通道2设置寄存器:0X40-正常操作,接电极,放大4倍
⑤右腿驱动寄存器RLD_SENS:0X2C-RLD缓冲使能,RLD接入2N,2P,PGA16分频
⑥ 写呼吸控制寄存器1=0xF2,使能呼吸调制解调电路,呼吸解调相位为135°,时钟为32kHz,内部时钟
⑦写呼吸寄存器2:0X03-32K,RLD参考接(AVDD+AVSS)/2
⑧GPIO寄存器:0X0C-设置为输入
⑨start引脚置高电平,AD采样启动
ADS1292R提供较为灵活的操作命令:
(1)系统命令:
WAKEUP唤醒待机模式-0x02
STANDBY进入待机模式-0x04
RESET 复位命令-0x06
(2)读数据命令
RDATAC使能连续读模式-0x10
SDATAC停止读-0x11
(3)寄存器命令:
RREG读寄存器命令-0x20
WREG写寄存器命令-0x40
对ADS1292R的操作包括读寄存器(器件的ID号)、写寄存器(初始化寄存器)、读数据、写命令。
根据SPI通信协议,调用SPI写库函数,写寄存器流程:
CS=0 ;//引脚片选信号低
SPI_I2S_SendData(SPI1,0x40|寄存器地址);
SPI_I2S_SendData(SPI1, 寄存器数量);
SPI_I2S_SendData(SPI1寄存器数据);
写命令操作流程:
START=0;//引脚start低电平
CS=0 ; //引脚片选信号低
SPI_I2S_SendData(SPI1, SPI操作命令);
START=1;//引脚start高电平
CS=1 ; //引脚片选信号高
ADS1292R输出数据格式时序如图5所示。
图5 ADS1292R输出数据时序图
当18脚片选信号CS低电平,启动ADS1292R转换,22引脚DRDY低电平时,数据转换完成,读21脚DOUT输出信号,共读取9个字节,其中前3个字节是有关状态数据,后面6个字节分别是通道一3个字节呼吸信号,通道二3个字节心电信号。
ADS1292R与主机通信采用的同步串行总线SPI协议,需要注意的就是读写寄存器时,SPI的时钟频率不能太快,不能超过芯片内部时钟的2倍。如果使用芯片内部时钟的话就是512K,SPI时钟不能超过1M,如果使用外部的2.048M时钟的话,那幺SPI的速度不能超过4.096M。读写寄存器时SPI的速度太快会造成读写不正常。
■3.3 用户终端监测软件
使用QT软件进行终端人机交互界面的开发,容易开发具有良好的图形用户界面。终端应用软件通过监听端口访问远程服务器读取心电、温度信号,利用C++编程语言实现心电信号,温度数据的动态显示、回放,存储以及异常的分析报警。用户界面包括用户登录,数据显示,远程控制等操作软件可以从数据库中调取最近一周的数据,通过软件处理使数据可视化,观察心率,心电图,体温在一段时间内的变化趋势。
4 结语
设计系统基于NB-IOT传输,终端设备通过移动OneNet平台方便快捷连入互联网,实现远程监测数据变化。测试结果表明,该系统操作简单,通信准确可靠,便捷的使用极其适合中老年人,具有一定的应用前景。