摘 要 排尿记录仪用于测量患者在排尿过程中的尿流量等医学数据,为医疗人员诊断患者病情提供参考。为了实现对患者排尿信息的高精度、实时采集,本文采用ADS7694芯片结合压力传感器、模拟放大电路和滤波电路对患者排尿信息进行采集和处理。实验结果表明,本文所采用的方法在1000ml测量范围内其误差小于0.46ml,很好地满足排尿记录仪对高精度采样的要求。
关键字 尿流量;数据采集;高精度
1 引言
排尿记录仪将患者一段时期内每次排尿的排尿速度、排尿量、2秒最大尿流率等数据记录下来,并上传给PC机,供医疗人员进行分析。排尿记录仪中,要求精确采集患者在整个排尿过程中不同时刻的排尿量,这就要求寻找一块芯片进行高精度实时采样。而本设计中使用ADS7694芯片结合压力传感器、模拟放大电路和滤波电路可以达到排尿记录仪高精度实时采样的要求。其过程是:先用压力传感器将排尿量等数据转化为模拟信号,然后通过滤波电路滤波,再用放大电路将信号放大后,用ADS7694芯片将模拟信号转换为数字信号,以便计算机进行处理。本文中给出ADS7694的电路连接图、滤波电路和放大电路设计以及AD7694工作时序编程方法、数据采集方法,并通过大量实验对ADS7694芯片采样精度进行了验证。
2 ADS7694主要特点
AD7694是一款16位、250 kSPS、电荷再分配、逐次逼近型模数转换器(ADC),采用2.7 V至5.25 V单电源(VDD )供电。该器件内置一个极低功耗、高速、16位无失码采样ADC(B级)、一个内部转换时钟和一个SPI兼容串行接口端口,还集成了一个低噪声、宽带宽、极短孔径延迟的采样保持电路。在CNV上升沿,AD7694对IN+与IN-之间的模拟输入电压差进行采样,范围从0V至REF。基准电压(REF)由外部提供,最高可设置为电源电压。 功耗和吞吐量呈线性变化关系。
2.1 引脚说明
AD7694封装成8个引脚的形式,其引脚及其功能如表1所示。
表1 AD7694管脚功能表
编号
| 名称
| 引脚描述
| 1
| REF
| 参考输入电压,其电压范围从1V到电源提供的电压;。被参考于GND 引脚。
| 2
| IN+
| 模拟输入,用于IN-的参考。其电压范围 ,IN+与IN-之间的不同点是0V到VREF。
| 3
| IN-
| 模拟输入接地。
| 4
| GND
| 电源提供接地。
| 5
| CNV
| 转换输入。在其边缘,初始转换;当为低时触发SDO引脚。
| 6
| SDO
| 串行数据输出。转换结果从这个引脚输出。与SCK同步。
| 7
| SCK
| 串行数据时钟输入。当CNV为低,转换结果由这个时钟送出。
| 8
| VDD
| 提供电源。
|
2.2 工作原理
AD7694是基于电荷再分配DAC的逐次逼近型ADC。这个电容型的数模转换器包含了两个相同的阵列,每个矩阵包含16个二进制加权电容,这些电容被连接到两比较器的输入端。
在数据采集阶段,阵列终端连接到比较器的输入端,而比较器的输入端通过SW+和SW-接地。所有独立的开关连接到模拟输入端。因此,这个电容阵列被用作采样电容,通过IN+和IN-引脚采样模拟输入信号。
当采样阶段完成,然后拉高CNV输入端,就开始了一个新的转换阶段。当一个转换阶段开始,SW+和SW-首先被打开。这两个电容阵列从输入端断开,然后接地。因此,在捕获阶段结束时,采集IN+和IN-端的不同电压来作为比较器的输入信号,使比较器变得不平衡。
通过转换连接在GND和REF之间的电容阵列的每个单元,比较器通过二进制加权电压一步一步地改变(VREF/2,VREF/4……VREF/65536)。控制逻辑从最高位开始切换这些开关,最终将比较器带回一种平衡状态。在这个过程完成后,又重新回到采样阶段,控制逻辑产生ADC输出码。因为AD7694拥有板载转换时钟,所以在转换过程中不需要串行时钟(SCK)。
3 AD7694在排尿记录仪中的应用
3.1 模拟输入电路的设计
模拟输入电路如图1所示,电路图的上边是一个滤波电路,中间是一个放大电路,采样同步信号SOUT+,SOUT-经过一个基本的滤波电路LC,产生S-,S+信号,信号经过OPA2277的放大电路,产生与AD7694同型范围的信号。两同步信号同时采样进入AD7694,其同步采样两信号的目的在于是采样互相对比,减小误差,经过AD7694的电压比较把模拟的采样信号转化成数字信号ADO。主控通过ADO和SCLK接收采样信号。
图1 模拟输入电路
3.2 AD7694的转换时序图
图2 AD7694的转换时序图
从图2中可以看出,AD7694一共有三根信号线,分别是CNV、SCK和SDO。其中,CNV是芯片的转换信号,当拉高CNV信号线的时候,AD7694开始进行AD转换;当拉低CNV信号线的时候,表示AD转换完成,可以读取AD转换的结果。AD7694完成一次AD转换所需要的时间是4.66us,如果低于此时间就拉低CNV信号线,那么就可能因为AD7694还未转换完成,而导致CNV低电平时读取的转换结果不正确。信号线SCK和SDO构成一个同步串行接口,可以通过这个同步串行接口读取AD转换的结果。在SCK上升沿的时候,AD7694将数据锁存到SDO上;在SCK下降沿的时候,从内部移位寄存器上移除一位数据。从SDO信号线上读取的数据是高位在前,低位在后,一共有16位有效数据,也就是说拉高再拉低SCK信号线16次后,可以将这16位有效数据读完,这个时候就可以拉高CNV信号线,进行下一次的AD转换。
4 与处理器LPC1343的连接设计
与处理器LPC1343引脚的连接如图1所示。主控芯片选用飞利浦公司的LPC1343,该芯片拥有8K的RAM空间(作为程序变量及程序栈)和32K的ROM空间(存放程序),并且该主控芯片在硬件上包含USB接口,可以方便地通过USB接口将数据上传给PC机,而不用外接其它USB芯片。芯片AD7694的SCK、CS、ADO分别连接在LPC1343的PIO1_8、PIO2_8和PIO2_4引脚,PIO1_8和PIO2_8引脚设置为GPIO并且输出,使用GPIO引脚来模拟SCK和CS时序。PIO2_4引脚设置为GPIO并且输入,用来接收AD7694转换的数字信号。
4.1 代码的编写
在排尿记录仪项目中,结合芯片AD7694的时序图,用C语言编写出AD采样的主要程序代码如下:
/*打开GPIO功能部件时钟*/
SYSAHBCLKCTRL |= (1<<6 );
/*引脚选择*/
IOCON_PIO1_8 = ((0x00 << 0) | (0x10 << 3)); /*选择1.8为GPIO*/
IOCON_PIO2_4 = ((0x00 << 0) | (0x10 << 3)); /*选择2.4为GPIO*/
IOCON_PIO2_8 = ((0x00 << 0) | (0x10 << 3)); /*选择2.8为GPIO*/
/*GPIO方向选择*/
GPIO1DIR |= (1 << 8);
GPIO2DIR &= ~(1 << 4);
GPIO2DIR |= (1 << 8);
Weight_CS_LOW();/*拉低片选信号*/
Weight_SCLK_LOW();/*拉低同步时钟*/
data = (data << 1);
if((GPIO2DATA & (1 << 4)))
/*读取一位AD转换信息*/
data += 1
Weight_SCLK_HI();/*拉高同步时钟*/
Weight_CS_HI(); /*拉高片选信号*/
5 数据测量
5.1 测量方法
AD7694采用原码来表示采集到的数据,因为AD7694芯片使用16位原码来表示数据,所以一共能表示216 = 65536种不同的数据。在设计中,我们采用的参考电压为5V,所以在输入电压为0V时,数据为0000H,输入电压为5V时,数据为FFFFH,5V电压被等分成了65535份,每一份的电压为1/13107V,如图3所示。
图3 电压编码图
在设计过程中,所采用的电路是线性电路,并且压力传感器在其测量范围内,随压力变化引起的电流变化也是线性的,而尿液的密度为1.02g/ml是一个常数,所以患者排尿体积和AD芯片上所采集到的数据呈一个正比关系,公式为:C = kD + b(其中C为患者排尿体积,k为AD采样数据和患者排尿量C的斜率常数,b是一个截矩,可以调节b参数来进行设备的校零工作)。
由于受到称重机械装置以及使用的压力传感器等的影响,k参数最好通过实际砝码来进行确定。使用两个法码可以确定参数k。假如第一个法码的重量为W1,第二个法码的重量为W2。假设将两个法码的重量换算成尿液的体积分别为C1,C2。第一次AD测量的数值为D1,第二次AD测量的数值为D2。根据
C = kD + b 可以得到:
C1 = (kD1 + b)*1.02;(式4-1)
C2 = (kD2 + b)*1.02;(式4-2)
C1 = W1 / 1.02; (式4-2)
C2 = W2 / 1.02; (式4-4)
联合(式4-1)、(式4-2)、(式4-3)、(式4-4)可以得到:
k =(W1 -W2) / (D1 - D2)/ 1.02; (式4-5)
在设计过程中将b定义成一个可变的变量,可以通过一个校零按钮来改变该变量的值,从而实现称重装置的校零操作(普遍的称重装置会因为称盘重量改变,或者称盘上有沾附物而需要进行校零操作)。当用户按下校零按钮以后,说明现在的实际重量C = 0,从而得到kD + b = 0,可以得出b = -kD。
5.2 测量精度计算
对于排尿记录仪,要求称重装置在测量患者排尿过程中的精度小于等于1ml。根据公式:C = kD + b可知,患者排尿量是随AD转换数值D变换的一个线性函数,所以测量精度就为斜率k。斜率k可由(式4-5)计算得到。在实际测量及计算中等到k约为0.45714。也就是说使用芯片AD7694,结合相应的放大电路和压力传感器,可以将测量精度做到0.46ml。完成满足排尿记录仪的设计要求。
5.3 测量准确性实验
在医学上,为了实现实时、精确地测量患者在排尿过程中的排尿容量随时间变换的关系,要求在进行数据采样的时候每秒钟采集10个有效数据。按照AD7694数据手册上提供的数据,该芯片每秒钟可以采样25万次,远远超过了排尿记录仪在医学上的要求。为了让采样过程中得到的数据更准确,可以采用每秒钟采样1000个数据,每一百个数据求一次平均值的方法,这样即满足每秒钟采集10个有效数据的要求,又能使采集到的数据更加准确和有效。
如果使用5ml的量筒,量筒本身的精度是0.1ml,这样就可以比较准确地测量容积测量的精度,但是5ml的量筒测量范围太小,使用1000ml的量筒,量程增大了,但是1000ml的量筒本身的精度为10ml,不能满足要求。所以,在“泌尿情况记录仪”中采用的方法是在称重模块上放一个5ml的量筒,再放一个空杯子,这个时候按下校零键进行校零操作。往空杯子里面倒水,当示数达到700ml的时候,停止往水杯里面倒水,然后往5ml的量筒里面倒水,记录量筒上的读数和“泌尿情况记录仪”上的示数,结果如表2所示。
表2
量筒容量(ml)
| 泌尿记录数(ml)
| 相差
| 700
| 700
| 0
| 701
| 701
| 0
| 702
| 702
| 0
| 703
| 703
| 0
| 704
| 704
| 0
| 705
| 705
| 0
|
可见,700ml-705ml范围内,精度相差<1ml。使用同样的方法,先将杯子里倒入800ml水,使用100ml的量筒来测量,结果如表3所示。
表3
量筒容量(ml)
| 泌尿记录数(ml)
| 相差
| 900
| 900
| 0
| 901
| 901
| 0
| 902
| 902
| 0
| 903
| 903
| 0
| 904
| 904
| 0
| 905
| 905
| 0
| 906
| 906
| 0
| 907
| 907
| 0
| 908
| 908
| 0
| 909
| 909
| 0
| ……
| ……
| ……
| 1000
| 1000
| 0
|
可见,900ml-1000ml范围内,精度相差<1ml。以上两个实验都是为了测试专门写的程序,在程序里面就是用的水的密度,尿液的密度为1.02g/ml,在“泌尿情况记录仪”中的实际程序的时候再将这个密度换算回来。由以上实验和线性关系可知,在测量范围内,容积测量的误差<1ml,其实通过数据手册计算的理论误差为0.45ml,说明“泌尿情况记录仪”容积准确、有效。
6 结论
AD7694芯片不仅采样精度高,转换速度快,而且接口灵活,应用方便,完全能够满足在排尿记录仪中,对于患者排尿信息进行的高精度,实时采样的要求。这种稳重装置不仅可以运用到排尿记录仪中,也可以用于普通的电子秤,以及其它的高精度实时重力感应装置。本设计为其它的重力实时感应装置的设计提供了一定的借鉴。
参考文献
[1]周立功.王祖麟. ARM嵌入式系统基础教程(第2版)[M]. 航空航天大学出版社,2008
[2]严蔚敏.吴伟民. 数据结构(C语言版)[M]. 清华大学出版社,2007
[3]谭浩强. C程序设计(第四版)[M]. 清华大学出版社,2010
[4]关志忱.魏本林.孟作为. 远程无线排尿日记开发及20例年轻人客观排尿情况报告[J]. 北京大学学报,2009
[5]岑和. 尿流率与尿动力学检查[J]. 福建医药杂志,1999
[6]汪庆玲.徐虹. 305例原发性遗尿症儿童尿流率检测结果分析[J]. 临床小儿外科杂志,2006
[7]钟狂飚,蒋先镇.前列腺增生患者尿流率及其影响因素的关系[N]. 中南大学学报,2005
[8]Dan Nessett. MassivelyDistributed Systems:Design Issues and Challenges. USENIX Workshop onEmbedded System,1999
[9]Michael,J.Patterns for Time-Triggered Embedded Systems[M]. Addison-Wesley Professional,2001
[10]David,E.An Embedded Software Primer[M]. Pearson,2007 |