(本文均出于个人理解而写,仅用于学习和交流,某些过程可能不一定正确,希望各位提出意见进行交流,共同进步)
TI的参考方案是采用AFE4300芯片 同时进行生物阻抗身体成分测量和体重测量,以MSP430F5528 微控制器用于保留校准数据并计算重量、TBW、ECW 以及身体成分分析,采用 TI CC2541 的 BLE 模块连接。因为我们没有MSP430,所以我们没有直接套用他的方案,我们主处理器采用的是STM32(仅用来实验)。
AFE4300简介
AFE4300 是一款低成本模拟前端, 此模拟前端组装有两个独立的信号链: 一个信号链用于体重计 (WS) 测量, 而另外一个信号链用于体成分测量 (BCM) 分析。也就是说,我们使用此芯片,便不用自己去搭运放去测量人体阻抗了,TI帮我们把他集成为一个芯片,这样一来降低了我们开发的难度,另一方面,由于直接集成,外部干扰会更加小,性能一般会比自己搭的更好。
AFE4300的特性如下图(来源于datasheet)
AFE4300 datasheet
首先我觉得,一般生产芯片的公司肯定是希望他们公司的芯片让更多的工程师去使用,因此所设计的芯片肯定是非常注重易用性的,只有让工程师是好上手,易开发,他们的芯片才会比较有销量,如果一款芯片很多工程师都不会用,觉得很难开发,那么这款芯片销量应该不会很多。TI是芯片大商,不会神神秘秘隐藏一些东西不让别人知道,所以我们更应该有这个信心去开发这个芯片。
管脚分配
一般拿到一个芯片的datasheet时,我总是习惯于先看芯片的引脚说明,我觉得这样能够让我们对整个芯片有个整体的印象。AFE4300的datasheet第7面,芯片的管脚图如下:
一共有80个管脚,看似很多,第7面和第8面是管脚分配说明。从管脚分配说明那里我们可以得到管脚如下的一些信息。
关键引脚:
时钟引脚(79):要外接1M的时钟
RST(59):复位引脚
INM1到INM4(3,5,11,13):体重测量模式的4个通道的差分输入
INP1到INP4(2,4,10,12):体重测量模式的4个通道的差分输入(与INM各成一对)
OUTM_I_FILT(47),OUTP_I_FILT(48),OUTM_Q_FILT(49),OUTP_Q_FILT(50):分别连接I信道和Q信道解调器的低通滤波器,datasheet里是说接10uf电容,参考电路连的是4.7uf。
IOUT5到IOUT0(22,23,24,25,26,27):电流输出电极,用于人体成分测量,由寄存器设置正负
VSENSE5到VSENSE0(33,34,35,36,37,38):从电极输入到差分放大器,用于测量电压,由寄存器设置正负
STE(54),SCLK(54),SDIN(58),SDOUT(56):用于SPI通信。
VLDO(16):是电桥的正极。
VREF(17):参考电压(供测量)
INM_R(8),INP_R(7):连接放大器增益设置电阻
此外还有另外一些引脚用于连接校准电阻。
其硬件的电路图我们可以参考TI给的参考电路图设计。其中硬件上需要注意的是
(1)时钟引脚接的时钟信号要尽可能的好,这影响后面输出激励电流的波形。
(2)电路做出来后上电,稳压电源的电流示数为0,此时不用紧张,因为AFE4300是低功耗芯片,我做的时候开体重模式才有0.03A的电流,开人体阻抗测量的时候电流示数还是为0
SPI读写
电路如果做出来了,那么SPI这一步便很关键了,如果SPI调不成功,其他的就很难办了。AFE4300 SPI的时序图如下:
其中要注意的是串行同步时钟的空闲状态为低电平,这个在SPI的初始化中应当注意。
内部原理
了解了AFE4300内部的测量原理,才能对其寄存器的配置有整体的了解,便于程序的编写。AFE4300内部的整体框图如下:
其中各个信号的选择均由寄存器控制。
体重测量部分
体重测量部分的框图如下:
体重部分还是比较简单的,涉及的寄存器不多。
其中VLDO是电桥的正极,由寄存器ADC_REF_SEL控制,该寄存器可以控制两个电压,VLDO用于体重测量,VREF用于人体阻抗测量
寄存器BRIDGE_SEL用于选择使用哪一路进行体重测量
寄存器WS_PGA_GAIN用于增益控制,增益由电阻Rg和电阻Rfb2决定
寄存器OFFSET_DAC_VALUE(WEIGHT_SCALE_CONTROL)用于设置ADC的偏置
使用体重测量模式时,按照如下步骤配置寄存器即可:
(1)寄存器DEVICE_CONTROL1 :第0位WS_PDB位置1,开启体重测量模式(此时,电流大志为0.03A)
(2)寄存器ADC_CONTROL_REGISTER2:ADCREF连接到VLDO作为电桥正极,即ADC_REF_SEL位置为00(默认的)
(3)寄存器ADC_CONTROL_REGISTER2:将体重测量的结果连到ADC,即PERIPHERAL_SEL位置为0000(默认的)
(4)寄存器DEVICE_CONTROL2 :选择两个通道连接到电桥,由BRIDGE_SEL位设置。
其他一般不用设置或者采用默认值即可,设置好后,直接读取ADC的转换结果即可进行后续的数据处理,更多的设置详见datasheet。
人体阻抗测量部分
人体阻抗测量部分的框图如下所示:
相对于体重部分的测量显得比较复杂一点。他首先需要产生正弦激励信号,所以里面有一个DDS,震荡的时钟是由时钟引脚外接的1M时钟分频而来的,因此前面说外接的时钟信号要尽可能好一点。由DDS产生的正弦信号通过IOUT加到人体上,然后通过VSENSE采集回来后进行处理,其中有两种模式,一种是全波整流模式,这种模式比较简单,另一种是IQ解调模式,稍微复杂一点,但是IQ模式的效果会比较好一点。
寄存器IQ_MODE_ENABLE用于模式选择,由第11位IQ_MODE_ENABLE决定
寄存器DEVICE_CONTROL2 中的IQ_DEMOD_CLK_DIV_FAC用于确定分频数由一条公式计算(IQ_DEMOD_CLK = fCLK / (IQ_DEMOD_CLK_DIV_FAC) = BCM_DAC_FREQ × 4)
寄存器BCM_DAC_FREQ用于设置产生激励电流的频率,当时钟是 1 MHz时,往DAC位填入不同的置可获得不同的频率, 如: DAC = 0x00FF → 255 kHz, DAC = 0x0001 → 1 kHz。但是如果是IQ模式的话,其频率收到分频数的影响,可由公式IQ_DEMOD_CLK = fCLK / (IQ_DEMOD_CLK_DIV_FAC) = BCM_DAC_FREQ × 4推算。
寄存器ADC_CONTROL_REGISTER2中的PERIPHERAL_SEL位可用于选择I通道或Q通道,使用时分别设置为I,Q通道并读取其ADC的值,后经过换算可得阻抗。
寄存器ISW_MUX和VSENSE_MUX分别用于设置哪个通道用于激励信号和电压采集。
以IQ模式为例,使用IQ模式进行阻抗测量时,可按如下的步骤配置寄存器:
(1)寄存器DEVICE_CONTROL1 第1位BCM_PDB置1,开启阻抗测量前端
(2)寄存器ADC_CONTROL_REGISTER2:ADC_REF_SEL位置为11,将ADCREF连到VREF,此时测量VREF引脚应该得到1.7V的电压
(3)寄存器IQ_MODE_ENABLE:第11位 IQ_MODE_ENABLE置1,开启IQ模式
(4)决定产生激励的频率,结合公式设置寄存器DEVICE_CONTROL2和BCM_DAC_FREQ
(5)设置寄存器ISW_MUX和VSENSE_MUX选择所使用的通道
(6)寄存器ADC_CONTROL_REGISTER2的PERIPHERAL_SEL位:设为00011读取I通道,设为00101读取Q通道
可以通过寄存器ADC_CONTROL_REGISTER1适当设置ADC的模式及读取的速率。
寄存器读写
datasheet中第20到26面开始是寄存器的说明,了解了芯片内部大致的来龙去脉后,来配置寄存器是一件比较容易的事情。
第一个寄存器是ADC结果的读取,使用SPI直接读取地址0x00即可获得结果。
下面看一个寄存器当做例子,其他寄存器的配置与此类似。这是一个用于设置激励电流的寄存器,地址是0x0A,默认值0x0000,该寄存器是16位的,其中,10到15位表示将哪一路设置为输出激励的负极,0表示关,1表示开,7到2位是表示连接到正极,同样式1表示开,0表示关。9,8,1,0是用于校准的(参考电路中有电路连到这些引脚)。使用的时候设置一路IOUP和一路IOUN即可。
比如SPI的读写接口是
void spiWrite (unsigned char spiAddr, unsigned short spiData)
apiAddr是寄存器的地址,spiData是要写入的数据,加入我们要把IOUT0设为负极,IOUT1设为正极,则只需要把第3位和第10位置为1即可,所以 执行语句
spiWrite(0x0A,0x0408);
即可完成配置,其他寄存器的配置与此类似,具体见datasheet。
智能称体脂称实现(datasheet篇)相关推荐
- 智能称体脂称实现(基本原理解释篇)
(本文均出于个人理解而写,仅用于学习和交流,某些过程可能不一定正确,希望各位提出意见进行交流,共同进步) 项目简介 前段时间接触到一个项目,类似于现在网上热卖的那种智能称,如下图所示 于是便顺便了解了 ...
- 智能称体脂称实现(代码与基本数据处理篇)
(本文均出于个人理解而写,仅用于学习和交流,某些过程可能不一定正确,希望各位提出意见进行交流,共同进步) AFE4300的配置是比较简单的,从配置到处理基本的数据,主要有3个方面:SPI配置,AFE4 ...
- 智能体脂称方案的实现
一.概述 随着现在人生活越来越注重生活品质,智能体脂称的出现可以通过测出体脂,人体水分,体重,等一系列数据提供给用户参考.来达到检测健身成果或者是健康指标的目的. 二.电源电路设计 电源电路设计:采用 ...
- 云麦 体脂称 华为 哪个好_现在市面上的体脂称哪个牌子的最好?
展开全部 体脂称品62616964757a686964616fe58685e5aeb931333433616230牌推荐小米.云麦.华为.有品.欧姆龙五个牌子. 1.小米:小米的产品在测量方面十分精准 ...
- python分支案例-体脂称案例优化
# 首先要考虑python的版本问题,涉及到编程代码的不同 # 思路,语法 -> 工具 # 选用python3x版本 # 使用注释,理清楚具体的实现步骤,然后再填充代码. # 1.输入: # 1 ...
- 云麦小米华为体脂秤怎么样_测评华为智能体脂秤,比小米智能体重秤贵30元到底差别在哪里?...
"流浪的好奇"每天更新最新科技资讯和产品测评内容,欢迎您关注订阅! 我们之前说过华为可不仅仅只有5G通讯技术和智能手机,华为杂货铺里的产品虽然不如小米杂货铺那么的丰富,但是也不是空 ...
- 云麦体脂秤华为体脂秤_华为、小米和有品体脂秤哪个品牌好?三款智能体脂秤横评结果排行...
如今生活水平的提高,也让更多人开始关注健康问题.由于大部分时间都忙于工作,本身就运动少.体重超标等等.如果长期得不到控制的话,会造成日后脂性肝炎.肝纤维化.肝癌,想想都可怕,在意识到这样的严重性,不得 ...
- 微型计算机智能体重评测,荣耀智能体脂秤WiFi版评测:17项身体指标 比你更懂你...
本帖最后由 艾玛伍兹122 于 2019-8-16 16:45 编辑 2.不正经搞机社-660x200.jpg (104.36 KB, 下载次数: 0) 2019-8-16 16:25 上传 现代生活 ...
- 斐讯智能体脂秤S7,实时告诉你为什么胖?胖在哪里?
说到体重秤大家绝对都不陌生,对想要减肥的你来说每天上称的过程也是心惊胆战,如果称的准确度不高,那么每次你在称重后的重量没有很好的对比性,非常不利于减肥.工欲善其事必先利其器,在夏天露腿,露腰的季节,还 ...
最新文章
- 打破情感分类准确率80分天花板!更充分的知识图谱结合范式
- mysql 一周一月_mysql查询当天、本周,本月,上一个月的数据
- thinkphp 5.0.3 rce getshell_关于ThinkPHP的一些渗透方式
- UCenter创始人密码正确但是登录不了
- 一、linux驱动理论
- 计组第六章——计算机的运算方法重点总结
- Exchange Server 2016管理系列课件50.DAG管理之激活数据库副本
- 字符串之将整数字符串转成整数值
- oracle更换rac节点,Oracle-rac 更改VIP地址—2节点的
- DOS中切换盘符(直接CD不行)
- thinkphp 模板显示display和assign的用法
- C语言:简单计算器多次使用代码实现
- 利用模板导出文件(一)之XLSTransformer导出excel文件
- 基于STM32的双向DC-DC变换器(论文+原理图+PCB+源码)
- windows11右键恢复完整右键菜单
- 京东商城禁止一淘网蜘蛛抓取内容
- xposed框架安装使用步骤
- DBeaver 连接 人大金仓以及其他国产数据库
- win11在计算机管理中添加用户发现没有本地用户和组,命令方式添加用户以及查看用户
- 如何将.keystore 文件转成.key文件
热门文章
- 导入物联网、大数据分析及云计算的第四次医疗革命
- 「数据看世界」做自媒体有多难?
- 使用burp插件实现图片验证码的识别
- mysql与mysqli的区别
- C语言基础知识总结大全(一)
- 搭建Vue3开发微信小程序
- 一文让你彻底搞懂浏览器的渲染流程
- zoomeye用户使用手册
- 全场景零售时代,拥有数字化引擎的苏宁未来更具想象!
- TS类型体操 之 字符串的妙用