好久不见!!最近的几个月发生了不少事情,导致精力极度分散,自己todolist上各个项目的优先级不停地被调整,博客的事情就被暂时搁置了下来,特别是__AW君__的出现,让自己突然有了一种说不出来的感觉……唔,果然love is blind没错,所幸自己毕竟是一个天生乐观的人,接下来的剧情我会用心去体验的~ 让我们永远相信美好的事情即将发生吧!
/*********************************************************************************************************************/
一、设计思路
我们的节点工作在一个无线体域网系统中,承担着感测数据的重要任务,因此在设计过程中有必要针对应用环境,进行特殊的考虑。所谓无线体域网(WBAN Wireless Body Area Network),是一种在无线传感器网络(WSN Wireless Sensor Network)基础上发展起来的具有特定应用领域的网络,它以人体为中心,通过布置在人体附近(体外、体表、体内)的高集成度的微型传感器节点构建无线网络,由中心节点/协调器设备进行网络管理并将所采集的数据汇聚、上传到上级服务器,进而为各式各样的数据业务的开展提供了基础。
考虑到[植入体内的传感器]需要严格的医学支持,我们现在仅关注[体表]+[体外]的节点设计。WBAN的节点在设计过程中面临着体积、功耗、网络扩展性、网络可靠性等诸多问题,而其中又以功耗问题尤为突出。文献表明,WBAN节点之间通过无线网络进行通信,相比有线网络会消耗更多的电能,而通信过程消耗的电能在节点整体功耗中所占比重达70%。
因此,构建传感器节点所使用的无线通信技术功耗特性无疑是我们关注的重点。这也就是本系列ANT故事的起源。
不可忽略的是,除了通信模块的功耗外,传感器节点的整体功耗控制还离不开系统微控制单元MCU的功耗表现,以及高效的程序代码的支持,如何尽可能地进行传感器节点的低功耗设计将一直成为我们需要面对的挑战。
二、硬件设计
首先我们归纳一下WBAN系统中可能存在的节点类型,按照所测量的信号的不同,有如下分类,呃…抱歉,最近搞JSON解析快疯掉了…(独自钻研技术的感觉真suck…… ):
{
“生理信号传感节点”:[
{心率},{脉搏},{血氧},{血压},{肌电},{脑波},……
],
“生物动力学信号传感节点”:[
{加速度},{角速度},{鸭梨},……
],
“外界感知节点”:[
{位置(GPS)},{温度},{PM2.5},{地磁},{工具辅助(Robert Downey Jr.)},……
]
}
我们的系统中所使用到的类型已经用彩色标出来了,当然在本文中,我们只讨论[脉搏传感器]。有人肯定会问,脉搏心率不是差不多吗?其实严格意义上来说他们是有差异的,尤其是在医学领域,脉搏与心率的差异通常是诊断“心率失常”的重要体征之一,因此在医疗应用中,需要分别检测脉搏和心率。在这篇文章中,我们将心率与脉搏做同义词。
为了最大限度保证自己课题不会“后继无人”,我决定将节点设计为可扩展的形态,即:构建一个微处理器单元母板,通过接口外接传感器模块与通信模块,实现WBAN节点的功能。微处理器单元母板也就是一个MCU最小系统,自己设计并焊接了PCB,IO全部引出、供电、复位、下载一应俱全。从此老大再也不用担心没人会做板子了……
1. 微处理器单元母板
说到低功耗表现,就不得不提来自Texas的Houston Rockets那位善于从二轮秀中淘宝的球队经理Daryl Morey…哦我错了…我不得不提的是来自Texas Instrument公司的MSP430系列单片机;) 一方面在于MSP430在工艺方面进行了特别的设计,如铁电FRAM的集成,有效降低了存储数据时的电量消耗,另一方面,丰富的时钟源配合多种多样的LPM(低功耗模式Low Power Mode),保证了高度优化的控制程序设计,最大化降低了硬件的功耗。
当然,我们也必须要知道,在一款商业产品的开发过程中,市场永远是不可或缺的考虑因素。一味地追求性能的极致,无疑将导致成本的提升,影响最终的产品售价。对于终端消费者(尤其是来自庞大的新兴市场)来说,有限的购买力决定了他们对于性价比的关注。他们对于极致性能产品的需求,远不如对一个价格适中,功能够用的产品的追捧。因此,对于硬件的选型过程中的性能与成本的平衡问题,产品经理们任重而道远。
由于我们开发WBAN系统并不是出于商业目的,因此并没有过多关注成本的问题,选择低功耗表现优秀的MSP430系列单品机也就是顺理成章的事情了。研究了DataSheet后,发现MSP430G2553-20Pin系列两种不同的封装引脚规格一致,联想到手上的LaunchPad刚好也是使用20Pin DIP封装的G2553,那是否也能够利用板子上的仿真芯片,烧写20Pin TSSOP封装的G2553呢?我决定试一试,到南塔淘来了几块芯片,将芯片焊接后引脚引出,查到LaunchPad上对应的接口上,果然好使!就这样,我可以放心大胆地制作PCB了。
至于为什么要做成这个形状,主要是考虑到和外部模块的配合安装,这个后面再说。总之,用起来是没问题了,覆铜什么的也省了,相比这位哥们的板子差远了。:))
LDO使用的是TLV1117-33,上次去北京玩的时候逛到中关村的中发淘的,一个字,贵,快赶上AMS1117的两倍了,也就是满足下心理安全。再说传感节点明明用2032就供电了,还整这么浪费的原件,啊喂老板给开张发票呗~~~^^
2. 光电心率传感器模块
对于非侵入式心率检测,目前比较成熟的就是胸带式心电传感器和光电心率传感器了。胸带式心电传感器需要必须佩戴在用户胸前才能够有效地测量心跳产生的电位差,这并不是一个很舒适的方案。而光电式心率传感器都使用了PPG也就是Photoplethysmography光电容积脉搏波描记技术,向血管发射特定波长的参考光束,并收集反射回来的光纤,利用血管周期性搏动造成的血液光线折射率周期变化,便可测量出脉搏的周期。也就是说理论上只要是具有毛细血管的皮肤表面都能够进行心率检测,这也就保证了良好的佩戴体验,手腕,耳朵,手臂,额头等部位都能够满足要求。
首先来介绍下目前心率传感器行业的主要厂商:
欧美:Philips、ADI、AMS、Osram、Maxim
日本:JRC、TOSHIBA
台湾:伟诠、原相
大陆:华润半导体、松恩……我儿,没错
目前市场上用的最多的应该是Philips,比如著名的MIO方案就是用的Philips的传感器,而ADI主要是三丧在Glaxy Gear上用。大陆公司对于采购台湾同胞的产品向来是出手阔绰,联想的智能手环就使用了原相的传感器。但是对于JRC和TOSHIBA这样的日本厂商,总感觉他们的市场策略似乎有些迟缓,似乎快要跟不上快速变化的消费类电子市场了,像EPSON家宁愿自研传感器都不爱使用其他日本公司的方案,真不知道未来日本厂商们如何应对台湾和崛起中的大陆IC产业了。至于三丧,很好奇这么强大的全产业链公司为何没有自己开发光电心率传感器的品类,难道早就预料到了这东西技术壁垒不高玩不赢MADE IN CHINA?
最终经过一番考虑,我选择了国产的松恩SON1303。他们提供的测试板上甚至自带了前置低通滤波和方波整形,之后直接判断方波频率即可得到心率数据,简单可靠,还省事。
两侧留下的矩形槽,正好可以用来安装表带以及固定MCU母板,但是必须选择平头螺钉,否则会挤到电池。下边的是原理图,也是非常简单实用的设计。
经过测量,SON1303测试板工作电流约23mA,去掉LED跟随指示灯应该还能更低点。参考Mio Alpha配备170mA锂电,算上ANT的功耗,工作寿命约6小时,感觉松恩的方案在纯硬件功耗方面应该和飞利浦比较接近的。
3.通信模块
通信模块自然是用的Nordic的nRF24AP2-1CH,我们为模块设计了安装基座ANT-Base
内侧基座转为ANT模块设计,外侧的两排插针能够直接插入到MCU母板之上。反面的圆形区域则用于固定第二块CR2032电池。(SON1303测试板上有一块专供传感器使用)预留的矩形槽可以方便使用铜柱固定多个模块。两个LED作电源及工作指示灯用。
必须说明的是,这个基座针对的是nRF24AP2的Bit-Sync也就是位同步模式而设计,并且使用了RESET-Pin进行模块的初始化。若想配置成Byte-Sync位同步模式,则引脚定义需要进行微调,必须重新做板。
三、软件设计
软件方面,之前的文章已经介绍过msp430g2553-nRF24AP2-SPI驱动的编写,这里不再多说。总之调试过程一定要非常细心,而且要善于运用各种工具资源。我遇到过的一些问题,在ANT+官方开发者论坛中都咨询到了解决方法。进入论坛发帖只需要免费注册成 Adoptor级别的会员就可以了,对于ANT+ Member或者ANT Devkit Owner则是需要交钱或者购买套件才能注册的,好处是会有工程师提供快捷的技术支持。如果有需要的话,以后我会挑选一些论坛中比较典型的问题翻译成中文和大家分享。
再就是ANT模块的配置,在【上】文中已经介绍过了,这里也不再讲了。单通道的ANT+配置起来还是轻松多了,用好ANT ware就没什么问题了。
最后要说的也是软件设计的重点了,那就是滤波算法。先给大家看看SON1303出来的原始波形:
图中圈出的就是信号中的噪声,当然这只是比较直观的一类噪声,还有许多其他的噪声从波形中并不能轻易分辨的。
按照噪声产生的原因,光电心率传感器的信号噪声可以分为这样两类:
1.当传感器与皮肤接触不好时,环境光从外部直接射入光源接收处,产生严重的噪声
2.由于皮肤具有一定透光性,即使当传感器与皮肤接触良好时,外部光源仍能通过附近皮肤射入到被测部分的血管中,影响检测精度
从这个角度来看,保证传感器与皮肤的良好、稳定接触,并且尽量减少周边皮肤的透光是避免这类噪声的解决方法。
按照噪声自身的性质类型,我们还可以将信号噪声分为:
1.环境光照度缓慢改变所导致的信号无序性变化(例如白天使用和夜晚使用)
2.周期性漏光引入的周期性噪声(例如在人特定的运动模式中,如跑步)
对于这类比较典型的噪声,使用滤波算法进行滤波无疑是最合适的选择,这也正是当前决定产品性能好坏的最重要的因素。
结合我们测试中的实际情况,我们尝试了三种不同的滤波方案。第一种,简单的限幅滤波,第二种滑动平均滤波(Moving Average),第三种则是混合了前面两种方法,实现一个动态的滤波过程。
结果证明了这样的选择还是比较合适的,限幅滤波可以有效抑制随机性噪声,虽然牺牲了最终测量的有效范围,但对于典型值50~180bpm的人体心率来说也是足够的了;滑动平均可以一定程度上滤除周期性的噪声,增强了传感器对于人体运动模式下的适应性;当然代价也是有的,就是运算功耗的增大,缩短了节点的工作时间,而且增加了初始化时间,首次测量需要等待5秒才能得出稳定的心率值。
四、最后
回想过来,在设计这个ANT+心率传感器的过程中,还是充满了许多大大小小的波折与挑战的。最后经过自己的努力解决了其中的一部分,另一部分则是冷静思考后而选择了妥协。对于newbie来说,这段经历也是自己的一个锻炼过程吧。只有学会在开始前尽量做好Plan,在Do中不断Check自己的问题,然后在下一步的行动及时Act自己的对策与修正,如此不断循环往复并形成自己的思维方法和应对思路,这样才能不断积累经验,不断进步,才能在以后的工作中做得更加出色。
对于这个心率传感器,自己最大的收获,来自于最后对于产品的一些思考。我开始认识到软件滤波算法也不是万能的。想要设计出综合性能优良的光电心率传感器应用,必须充分结合传感器设计、硬件结构设计和算法设计三个方面,任何一方的不完善,都将给其他方面的设计带来大量的负担,造成产品进度的延期。除此之外,想要保证产品的快速上市,也是离不开研发部门(课题组成员)、生产部门(课题组成员)、和产品市场部门(课题组成员)的相互支持与密切合作。还有呃……管理层(boss……)不能掉
好了,这一系列的ANT+之【心率传感器设计】博文到此就结束了。希望能够给大家带来一点启发! :D
PS:从下一篇博文开始,将换用崭新的风格,“告别排版痛苦,从Markdown开始”~~~