“Don't ever underestimate the heart of a champion.” ——Rudy Tomjanovich
对于这句堪称Clutch City精神写照的话,我却也有着另一方面的理解。
那么便是:对于专业运动训练来讲,心率表真的是最最重要的辅助设备没有之一了。
这次写的主题就是心率传感器(HRM,HeartRateMonitor)。
一、回顾ANT+
之前的文章中提到了ANT官方对于多种不同类型的传感应用,专门制定了一套设计规范,那就是【ANT+】。
ANT+是基于ANT技术的一种受控网络(managed network)。它对特定类型的传感器,以及相应的接收终端的设计都给出了标准化的规范与定义。这样做的好处不言而喻----最大限度地保证了不同制造商生产的ANT产品都能具有良好的互操作性、兼容性。而这一点对于建立一个强大的ANT终端生态链无疑是至关重要的。
本文以最常见的心率检测应用为例,介绍ANT+的心率传感器设计规范。(不含心率接收终端)
二、ANT+心率传感应用
可以说心率监测应用是ANT技术表现最出色的领域之一,尤其是在面临BLE等技术的有利竞争时,ANT凭借其优良的性能表现,牢牢坚守着相当比例的市场份额。典型的ANT+心率监测应用如下图所示。
在一个ANT通道中,传感器仅作为数据发送者,将采集到的心率数据发送至接收终端。接收终端往往是具有屏幕、及存储器的设备,负责将接收到的信息进行处理并显示。
传输的数据具有两种数据页格式,Main Data Pages和Background Data Pages。数据传输的频率固定为4Hz。
三、通道配置
之前介绍过ANT通道配置的基本参数,在一个ANT+网络中,对于特定的应用,其通道配置参数都各不相同。HRM设备类型参数则专门定义为120(0x78)。RF频率被限定为2.457GHz上。我们知道2.4GHz的ISM频段,其范围通常是2.4~2.483GHz,例如802.11a/b/g/n协议族,而ANT可用的频段范围在2.400~2.524GHz之间,略大于前者。实际上,考虑到ANT的TDMA特性,并没有必要对于每个通道配置不同的RF频率。
通道参数 | Transmitter | Receiver | |
网络key | ANT+ key | ANT+ key | |
RF 频率 | 2.457GHz (0x39) | 2.457GHz (0x39) | |
通道ID | 设备ID | 1-65535 | 0-1-65535 (0 用于配对) |
设备类型 | 120 (0x78) | 120 (0x78) | |
传输类型 | 1 (0x01) | 0 (0x00用于配对) | |
通道类型 | 0x10 (双向主通道) | 0x00 (双向从通道) | |
通道周期 | 8070 (4.06Hz) | 8070-16140-32280 (4.06-2.03-1.02Hz) | |
数据类型 | Broadcast | Broadcast (可选Ack Burst) |
四、数据页格式
ANT+为HRM定义了2类共5种Data Page格式。各个Page之间即包含共有信息,也包含专有信息。
Main Data Page:
page0,为简单的心率显示终端(如跑步机)提供无需计算或存储,可直接送显的实时心率,属于“万金油”类型数据。
page4,最常用的格式数据。包含了前后两次心跳发生的时间差,为计算实时心室搏动间距R-R Interval提供了可能。
Background Data Page:
page1,传感器累计工作时间,用于记录传感器的电池消耗状况。终端借此实现低电量警示功能。
page2,OEM生产商ID信息,需要向Nordic交钱申请。
page3,OEM制造商ID信息。
根据其作用的不同,各个page的发送周期也必然不同。Main类的数据发送频率为4Hz,而Background的信息因为相对没那么重要,其数据发送频率为每65个page发送一次。
PS:接收端可以选择以1~2~4Hz为频率接收数据,响应地会带来功耗以及数据刷新率的改变,需要特别考虑。
byte 0 | byte 1 | byte 2 | byte 3 | byte 4 | byte 5 | byte 6 | byte 7 | |
page 0 | 0x00/0x80 | 0xFF 并没有什么卵用 | 当次心跳时间 0~64s循环计数 步长1/1024s LSB------MSB | 心跳累计 0~255 循环 | 瞬时心率 1-255 bpm 0x00无效 | |||
page 4 | 0x04/0x84 | 制造商自定义 接收端不解读 | 前次心跳时间 0~64s循环计数 步长1/1024s LSB------MSB | |||||
page 1 | 0x01/0x81 | 0~0xFFFFFF 上电计数,用于记录电池使用时间 每2s+1,MAX 9320h | ||||||
page 2 | 0x02/0x82 | 制造商ID | 设备ID扩展字段 | |||||
page 3 | 0x03/0x83 | 硬件版本号 | 软件版本号 | 模块版本号 |
在Byte 0中有一个toggle bits,其作用在于:当前后消息相同,即心率低于数据发送速率时,用以提醒接收端新消息的到来。
另外值得一提的是,使用page4相比“万金油”page0的优势在于,利用前后两次心跳的时间间隔计算心率,比直接得到的瞬时心率更加稳定可靠。所以绝大多数现有ANT+HRM都是使用page4来传输数据。
最后还有一点,对于开发者,制造商ID可设置为0xFF。
好了,ANT+的心率传感器设计规范到此就介绍完了。并没有很复杂的样子~ ANT毕竟还算是个developer friendly的协议嘛~
下次将介绍心率传感器应用层相关的一些开发。JUST HRBEAT iT。;)