震颤是某些疾病或失调的症状。难以控制肌肉运动,导致持续颤抖。它包括患有帕金森病 (PD)、多发性硬化症 (MS) 或特发性震颤 (ET)的人。观察这些震颤很重要,因为它将表明病情的严重程度。
在这个项目页面中,我将构建一个可穿戴设备来实时分析身体振动或震颤活动。我将使用 nRF5340 开发套件上的 DSP 支持库监控振动的频率和幅度。通过使用振动传感器,可以检测到这些微小的震动。
这些数据将提供有关疾病随时间进展的关键见解。例如,帕金森氏症的震颤频率一般在 3-8 赫兹之间,如果频率出现偏差,则可能表明病情正在恶化。
对于振动感测,将使用Kemet VS-BV203振动传感器单元。它是一种模拟传感器,可根据其感应到的振动幅度输出变化的电压。
使用微控制器上的 ADC 连接数据,并通过快速傅里叶变换算法获得信号的基频。在这里,我们了解到振动频率是我们想要为震颤健康分析分析的频率。
在这里,我还将必要的硬件焊接到原型板屏蔽上。OLED 显示器连接到 I2C 引脚,振动传感器有一个连接到模拟引脚的连接器。
请在下面找到系统的引脚连接
首先从这个页面下载并安装nRF Connect for Desktop
这是设置的样子
安装后,程序应如下所示。在这里,您可以管理与 nRF 系统相关的不同应用程序。
在我的情况下,首先单击Toolchain Manager应用程序的“安装”,这是对示例代码进行编程以测试板的 IDE。
稍后,也安装Power Profiler应用程序,因为我们将使用 Power Profiler Kit 2 (PPK2) 进行一些测量。
打开工具链管理器。在这里,我们安装了SEGGER Embedded Studio IDE附带的最新 SDK
完成后,阅读说明“构建的第一步”并单击“打开 IDE”。
我们将通过将 Blinky 示例代码下载到板上来测试 nRF5340 DK 板。这些示例是 nRF Connect SDK 的一部分。
要导入样本:
文件 → 打开 nRF Connect SDK 项目…
选择“ blinky ”作为项目,选择“ nrf5430dk_nrf5430_cpuapp ”作为板子。
构建项目 hex 文件
构建 → 构建 zephyr/zephyr.elf (F7)
将开发板连接到 PC 并将其连接到 IDE:
目标 → 连接 J-Link (Ctrl+T, C)
将十六进制文件下载到板上:
目标 → 下载 zephyr/zephyr.elf (Ctrl+T, L)
检查板右上角的 LED 是否闪烁
您可以使用示例来熟悉环境。
为了制作我们自己的应用程序,我们将从示例中修改并从那里构建。从此位置复制项目:blinky
您可以随意命名项目。对我来说,我复制blinky
到hackster-wearable
.
现在我们将修改项目以包含我们的应用程序的一些库。
这些项目使用具有非常强大的构建系统的 Zephyr RTOS。它有许多配置,您可以在prj.conf
.
从这里开始,考虑项目需求很重要。在这个项目中,我决定使用GPIO、ADC 和 I2C 设备外设。另外,我将使用CMSIS-DSP 库(这个库也需要浮点支持)
有了这个,我编辑我的文件是这样的:
请参阅此页面是配置选项的完整列表:- Zephyr 配置选项(北欧半导体)
再次返回Open nRF Connect SDK Project ,这一次您将看到您的项目文件夹。
选择板名称为nrf5430dk_nrf5430_cpuapp 。还将构建目录更改为较短的路径(我将其放在 C:/ 驱动器的根目录中)
如果构建目录路径太长,您可能会遇到编译问题。这就是我们必须缩短它的原因(我只是删除了中间的文件夹,并且该文件夹位于 C:/ 驱动器的根目录)
有关此错误的信息,请参见此论坛主题:- https://devzone.nordicsemi。 com/f/nordic-qa/50935/http-application-update-problem-compiling
导入工程后,可以测试是否可以编译下载到板子上。
注意:如果您对prj.conf
文件进行进一步修改,则需要再次重新导入项目以更新依赖项。
由于 CMSIS-DSP 库由 ARM 提供,默认情况下不捆绑在项目中。
要安装它,请转到工具 > 包管理器
右键单击并安装CMSIS 5 CMSIS-DSP 支持包。
安装后,它看起来像这样
我们现在准备开始我们的应用程序!
该板有 4 个 LED,在电路板上标记为LED1到LED4 。但是,在代码中,它们被标记为led0到led3 。请注意这个区别!
这是设置 LED 的代码部分
我们将使用 ADC 连接到振动传感器模块。
对于 ADC,我将使用开发板上的 A0 输入引脚。
这是设置 ADC 的代码部分。
I2C OLED 显示屏将用于显示信息
将 OLED 显示器连接到 I2C 的专用引脚。
这是设置 I2C 的代码部分。
定时器用于定期触发 ADC,这样我们就可以为 FFT 分析获得一致的读数。此处代码设置为具有 512Hz 的频率。这是因为稍后我将使用 1024 个样本的 FFT 大小,这意味着更新每个结果需要 2 秒。
为了确认定时器工作正常,我使用了 PPK2 套件中的逻辑分析仪。我将它连接到 LED 引脚,在这里我们确认频率为 512Hz(约 1.95ms)。稍后我将更详细地解释如何设置 PPK2。
现在对 FFT 分析过程进行编码...确保安装了 CMSIS DSP 包。
这部分代码负责使用printk()函数将数组中的 FFT 结果发送到 PC。
每次在 while 循环中处理 FFT 时都会发送它。
综上所述,我将最终代码上传到我的 Github 帐户。
这些是最终构建中的关键组件
我用橡皮筋将振动传感器牢牢地固定在手腕上。
并且显示会随着震颤频率分析而相应更新。
OLED 显示屏的特写
可以使用 UART 从 nRF5340 中提取传感器数据。在 nRF5340 上,JLink 处理微控制器和 PC 之间的 UART 通信。
我们可以使用TeraTerm或PuTTY等串行软件接收它。在设备管理器下,记下JLink CDC UART Port。
在 TeraTerm 中连接到设备:
nRF5340 SDK示例的默认串口设置如下:
在 TeraTerm 中,转到串行端口设置设置并进行相应设置
它应该看起来像这样。
数据将开始在终端中流动。你可以从这里复制出来进行分析。
对我来说,我决定使用 Google Sheets 来绘制图表,我们可以将逗号分隔的数据分成 2 列
创建了一个面积图来可视化结果。
此处图表的峰值是5 Hz 手颤的结果。
通过将数据范围更改为前 50 个值来放大。我们确认幅度峰值在 5Hz 处。
这是一个模拟7-10Hz之间震颤的动画
未来改进:
由于学习曲线陡峭,我无法在比赛前及时启动 BLE 功能。将来,数据可以通过BLE发送来制作实时数据分析仪表板
使用 nRF Connect 启动 Power Profiler 工具
将 PPK2 设备连接到 PC,然后单击“选择设备”。
在这里,您将看到可用的设备,选择您的 PPK2 设备。
您可以在源表和安培表之间进行选择。这取决于您希望被测设备 (DUT) 的功率如何。
在安培计中,PPK2 将简单地测量电流。PPK2 将亮起蓝色。电源由 DUT 本身提供。
在源表中,PPK2 将为 DUT 提供电压并从那里测量电流。PPK2 将亮起红色。
您必须选择从 0.8V 到 5.0V 的电源电压。注意不要选择错误的电压而损坏 DUT。
我将提供 3.3V 电源并在两端放置一些电阻以测量电流作为测试用例。这是我在软件中的选择
我只是在 PPK2 的电源电压上连接了一个电阻器和一个电位器。(选择的值是任意的)
单击“开始”开始记录数据。当我将电位器从最大电阻扫到最小值并返回到最大值时,图表将更新。带电电流波形会在 PC 上做出相应反应。
在这里,我们看到的结果是最大值为 2.88mA,最小值为 2.00mA。我们可以通过一些计算来验证这一点(请注意,电阻器的容差约为 5%)
如您所见,结果与我们的计算相符(请注意,电阻器的容差约为 5%)。
您还可以使用逻辑分析仪功能。在这张照片中,我正在探测 P0.29 以找到 LED2 的频率。
这是通道 0 上方波(闪烁的 LED)的测量值。
如本文前面所述,我将定时器频率设置为 512Hz。并且在每次定时器中断时,都会切换 LED。我们看到两次切换之间的时间约为 1.95ms (512Hz)
参考官方硬件指南准备nRF5340 DK板测量电流-准备DK(Nordic Semiconductor)
我们将不得不剪掉一个跳线 SB40。它位于标有“nRF 电流测量”标签的插头引脚旁边。
用小刀小心地划线。花点时间,因为该地区的空间有限!剪完后应该是这个样子。
我们将在电流源模式下使用 PPK2,因此像这样连接 PPK2。只有VOUT和GND一起连接到电路板的电源。
测量后,这是电流消耗的结果。
从结果来看,平均电流消耗为3.83mA 。它也是低功耗的,为持久的可穿戴设备应用打开了大门。尤其是在医疗和保健领域,电池寿命对于减少对患者和护理人员的不便非常重要。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !