无线体域网人体中心通信设备使用说明
09 Apr 2021 4103字 14分 次 Others打赏作者 CC BY 4.0 (除特别声明或转载文章外)
1 简介
无线体域网人体中心通信设备由以下四部分组成:
- ZigBee模块;
- FPGA控制器;
- 电池监测与连接底板;
- 锂电池。
本设计通过ZigBee进行信道建模,并由MAX17263电池电量计IC获取电池性能。信道建模数据大约每秒更新20次,电池性能数据每秒更新10次(可通过FPGA代码中的INTERVAL值配置更新间隔)。PC会以设置好的时间间隔向A、B发送不同的指令(A设备为C5,B设备为3A),设备收到对应的命令后会将当前的信道建模和电池信息数据传送回PC,指令和数据均通过UART传送,波特率为115200。
2 接口说明
2.1 ZigBee模块接口说明
ZigBee模块采用创思通信设计的基于CC2530的 ZigBee节点。串口的等通信接口全部引出。
引脚如下图:
2.2 FPGA核心板接口说明
FPGA核心板采用Intel PSG的Cyclone IV EP4CE6芯片。内置EPCS存储器用于固化配置信息,能够上电自动配置FPGA。
Mini-USB:核心板通过Mini-USB供电,同时可以通过板载USB转UART芯片进行串口通信。
JTAG:下载配置文件或调试需要同时连接USB和Altera JTAG调试器。
自锁开关:自锁开关用于启动和关闭核心板电源。
2.3 电池监测与连接底板接口说明
电池监测与连接底板包含了MAX17362电池电量计IC电路以及固定其他模块的接口。三边的排针用于连接FPGA核心板。
外置NTC电阻:内置的NTC电阻位于电池温度测量区域中心,同时有冗余的外置NTC电阻接口(2.54mm排针)。
外接负载:本设计的负载主要是ZigBee模块,也设计了外置负载的接口,如果使用其余的锂电池供电的负载时可以接入此XH2.54接口。
充电座:在系统连接电池的情况下为锂电池充电,能够将配套的50mA或500mA充电器接入此DC5.5/2.1接口。
电池开关:开关拨至左侧(OFF/C)将断开电池与负载的连接,并且若接入充电器则开始充电;开关拨至右侧(ON)时电池开始为负载供电。
锂电池接口:此XH2.54接口用于连接锂电池。
FPGA供电开关:开关拨至左侧点断开底板(也就是锂电池)对FPGA核心板的供电,核心板只能通过其板载的Mini-USB供电;开关拨至右侧通过电池给FPGA核心板供电。
ZigBee插座:用于连接ZigBee模块,其天线方向与丝印白色箭头方向相同。
2.4 锂电池
软包锂离子电池采用中顺芯的带保护板动力聚合物锂电池,接口为XH2.54。
3 模块连接与实验平台搭建
3.1 模块连接
首先将电池开关拨至“OFF/C”,然后将电池接入锂电池接口,电池使用绑带固定在电池测温区域,如下图所示。
底板背面用于固定FPGA核心板。核心板三边的排针座与底板三边的排针对应连接。
最后将ZigBee模块插入底板的对应接口,注意方向。
3.2 实验平台搭建
两台设备互收发的实验平台包含以下组件:
- 无线体域网人体重心设备×2;
- Mini-USB线缆×2;
- PC×1。
首先将FPGA核心板自锁开关复位,并将FPGA供电开关拨至板内侧断开锂电池对FPGA核心板的供电。
两台无线体域网人体中心设备平行摆放至间隔一米的平台上,各接一条Mini-USB线缆,另一端均连接至PC,如下图所示。
4 实验过程
首先将底板上的电池开关拨至ON,此时蓝色指示灯“POW”常亮,ZigBee模块开始工作,即绿色收发指示灯闪烁。
将在PC上启动两个SSCOM串口助手,打开连接好Mini-USB线缆的两台设备中FPGA核心板上的自锁开关,在SSCOM串口助手中分别选择对应的端口号,波特率均为38400,选择“HEX显示”和“HEX发送”,选择“接受数据到文件”,选择“定时发送”并将发送间隔设置为“200ms/次”。A模块对应的发送指令为C5,B模块对应的发送指令为3A,设置好之后打开两个串口。
打开串口后,两个串口助手则会收到设备返回的信道建模和电池性能数据。根据FPGA内部电路设计,A设备收到的数据每字节高4bit都为0x5,而B设备收到的数据每字节高4bit都为0xA,如果由0x00则表明另一个设备未启动,若有其他数据则是串口传输数据出现错误,这种情况在有线串口传输中几乎不会发生,若使用无线串口透传则有一定几率出现。
收到的数据会以二进制的形式存在“*.DAT”文件中,A、B模块收到的数据分别存储,推荐使用Hex Editor Neo软件查看原始二进制数据。当电量耗尽,蓝色指示灯熄灭,先关闭串口助手,然后关闭电池开关,最后关闭FPGA核心板上的自锁开关,拔掉USB线缆。收拾东西实验结束。
5 数据处理
由上文可知,A、B模块接收到的原始数据分别存放在两个二进制文件中。每帧数据包含29字节数据,其格式为:
字节序号 | A模块 | B模块 |
---|---|---|
1 | {设备校验位(0x5),电池剩余容量百分比15~12bit} | {设备校验位(0xA),电池剩余容量百分比15~12bit} |
2 | {设备校验位(0x5),电池剩余容量百分比11~8bit} | {设备校验位(0xA),电池剩余容量百分比11~8bit} |
3 | {设备校验位(0x5),电池剩余容量百分比7~4bit} | {设备校验位(0xA),电池剩余容量百分比7~4bit} |
4 | {设备校验位(0x5),电池剩余容量百分比3~0bit} | {设备校验位(0xA),电池剩余容量百分比3~0bit} |
5 | {设备校验位(0x5),电池健康度15~12bit} | {设备校验位(0xA),电池健康度15~12bit} |
6 | {设备校验位(0x5),电池健康度11~8bit} | {设备校验位(0xA),电池健康度11~8bit} |
7 | {设备校验位(0x5),电池健康度7~4bit} | {设备校验位(0xA),电池健康度7~4bit} |
8 | {设备校验位(0x5),电池健康度3~0bit} | {设备校验位(0xA),电池健康度3~0bit} |
9 | {设备校验位(0x5),电池温度15~12bit} | {设备校验位(0xA),电池温度15~12bit} |
10 | {设备校验位(0x5),电池温度11~8bit} | {设备校验位(0xA),电池温度11~8bit} |
11 | {设备校验位(0x5),电池温度7~4bit} | {设备校验位(0xA),电池温度7~4bit} |
12 | {设备校验位(0x5),电池温度3~0bit} | {设备校验位(0xA),电池温度3~0bit} |
13 | {设备校验位(0x5),电池内阻15~12bit} | {设备校验位(0xA),电池内阻15~12bit} |
14 | {设备校验位(0x5),电池内阻11~8bit} | {设备校验位(0xA),电池内阻11~8bit} |
15 | {设备校验位(0x5),电池内阻7~4bit} | {设备校验位(0xA),电池内阻7~4bit} |
16 | {设备校验位(0x5),电池内阻3~0bit} | {设备校验位(0xA),电池内阻3~0bit} |
17 | {设备校验位(0x5),电池电压15~12bit} | {设备校验位(0xA),电池电压15~12bit} |
18 | {设备校验位(0x5),电池电压11~8bit} | {设备校验位(0xA),电池电压11~8bit} |
19 | {设备校验位(0x5),电池电压7~4bit} | {设备校验位(0xA),电池电压7~4bit} |
20 | {设备校验位(0x5),电池电压3~0bit} | {设备校验位(0xA),电池电压3~0bit} |
21 | {设备校验位(0x5),电池电流15~12bit} | {设备校验位(0xA),电池电流15~12bit} |
22 | {设备校验位(0x5),电池电流11~8bit} | {设备校验位(0xA),电池电流11~8bit} |
23 | {设备校验位(0x5),电池电流7~4bit} | {设备校验位(0xA),电池电流7~4bit} |
24 | {设备校验位(0x5),电池电流3~0bit} | {设备校验位(0xA),电池电流3~0bit} |
25 | {设备校验位(0x5),ZigBee丢包率十位} | {设备校验位(0xA),ZigBee丢包率十位} |
26 | {设备校验位(0x5),ZigBee丢包率个位} | {设备校验位(0xA),ZigBee丢包率个位} |
27 | {设备校验位(0x5),ZigBee丢包率十分位} | {设备校验位(0xA),ZigBee丢包率十分位} |
28 | {设备校验位(0x5),ZigBee RSSI十位} | {设备校验位(0xA),ZigBee RSSI十位} |
29 | {设备校验位(0x5),ZigBee RSSI个位} | {设备校验位(0xA),ZigBee RSSI个位} |
每字节的数据都有4bit是设备校验位,所以在得到以上格式的数据后,需要通过Matlab将校验位去除,并将拆分的各数据拼接起来。
得到的原始数据需要进一步处理转换为所需的实际数据,其中:
- fullcap:电池容量,除以2为实际值(mah);
- repcap:电池剩余容量,除以2为实际值(mah);
- repsoc:电池剩余容量百分比,除以256为实际百分比;
- age:电池健康度百分比,除以256为实际百分比;
- thrmtemp:热敏电阻温度,除以256为实际温度值;
- rcell:电池内阻,除以4096为实际电阻值(Ω);
- vcell:电池电压,乘以1.25除以16除以1000为实际电压值(V);
- curr:电池电流,补码转换为源码(反码?),再乘以0.15625为实际电流值(mA)。
有关数据处理的Matlab源代码见无线体域网人体中心通信设备数据处理源代码。
6 故障说明
电池监测与连接底板上用于电池升压芯片TPS61023DRLR会偶尔烧毁,且仅出现在设备B对应的电池监测与连接底板。起初认为是电池热插拔产生瞬间高压导致烧毁,于是在电池接口处并联TVS管限制电压为5.6V,之后烧毁次数明显改善,但还是出现过一次。
如果读取数据有误,可能是串口助手波特率不正确,进一步检查代码种的波特率与串口助手的波特率是否一致。
告辞。