本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

可穿戴的震颤分析仪

发布时间:2021-07-11
分享到:

可穿戴的震颤分析仪

发布时间:2021-07-11
分享到:

该项目所设计的震颤分析仪,可用于患有帕金森病 (PD)、多发性硬化症 (MS) 或特发性震颤 (ET) 的人。该设备可观察他们的症状,来表明病情的严重程度。

在这个项目页面中,将构建一个可穿戴设备来实时分析身体振动或颤抖活动。使用 nRF5340 开发套件上的 DSP 支持库监控振动的频率和幅度。通过使用振动传感器,可以检测到这些微小的震动。

这些数据将提供有关疾病随时间进展的关键见解。例如,帕金森病患者的震颤频率一般在 3-8 赫兹之间,如果频率出现偏差,则可能表明病情正在恶化。

硬件:

振动感应:将使用Kemet VS-BV203振动传感器单元。它是一种模拟传感器,可根据其感测到的振动幅度输出变化的电压。

使用微控制器上的 ADC,连接数据并通过快速傅立叶变换算法获得信号的基频。

将硬件焊接到原型板屏蔽上,OLED 显示器连接到 I2C 引脚,振动传感器有一个连接到模拟引脚的连接器。

原理图:

设置nRF Connect 桌面工具

首先从此页面下载并安装nRF Connect for Desktop

  • 设置

  • 安装后,在这里可以管理与 nRF 系统相关的不同应用程序。

设置工具链和 IDE

打开工具链管理器,这里安装了SEGGER Embedded Studio IDE附带的最新 SDK

完成后,通读“构建的第一步”说明,然后单击“打开 IDE”

编译 Blinky 示例代码

将通过将 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项目:

C:\Users\[用户名]\ncs\v1.5.0\zephyr\samples\basic\

可以随意命名项目。在该项目中,复制blinky到hackster-wearable.

将修改项目以包含该应用程序的一些库

这些项目使用 Zephyr RTOS,它具有非常强大的构建系统,它有许多配置,您可以在prj.conf.

在该项目中,使用GPIO、ADC 和 I2C 设备外设。此外,使用CMSIS-DSP 库(该库也需要浮点支持)( Zephyr 配置选项(北欧半导体)

(编译的文件)

再次回到Open nRF Connect SDK Project ,会看到一下项目文件夹:

选择板名称为nrf5430dk_nrf5430_cpuapp 。也将构建目录更改为较短的路径(将其放在 C:/ 驱动器的根目录中)

如果构建目录路径太长,可能会遇到编译问题

安装 CMSIS-DSP 包:

由于 CMSIS-DSP 库由 ARM 提供,因此默认情况下未将其捆绑在项目中。

要安装它,需转到工具 > 包管理器

右键单击并安装CMSIS 5 CMSIS-DSP 支持包

安装后

GPIO 代码:

该板有 4 个 LED,在电路板上标记为LED1至LED4 。然而,在代码中,它们标记LED0至LED3 

  • LED1 = P0.28 (led0)
  • LED2 = P0.29 (led1)
  • LED3 = P0.30 (led2)
  • LED4 = P0.31 (led3)

这是设置 LED 的代码部分

(在左侧,LED0的定义是示例的一部分,为LED1复制了该段代码,右边是对LED0\LED1的初始函数)

ADC 代码:

将使用 ADC 连接到振动传感器模块

对于 ADC,将使用开发板上的 A0 输入引脚

设置 ADC 的代码部分

I2C 代码:

I2C OLED 显示器将用于显示信息

将 OLED 显示器连接到 I2C 的专用引脚

  • SDA = D14 (P1.02)
  • SCL = D15 (P1.03)

这是设置 I2C 的代码部分

定时器代码:

定时器用于定期触发 ADC,这样就可以获得一致的 FFT 分析读数。这里的代码设置为具有 512Hz 的频率。这是因为稍后将使用 1024 个样本的 FFT 大小,这意味着更新每个结果需要 2 秒。

为了确认定时器工作正常,使用了 PPK2 套件中的逻辑分析仪,将它连接到 LED 引脚,在这里确认频率为 512Hz(约 1.95ms)

CMSIS DSP FFT 代码

现在对 FFT 分析过程进行编码,确保安装了 CMSIS DSP 包

UART 代码:

这部分代码负责使用printk()函数将数组中的 FFT 结果发送到 PC 

每次在 while 循环中处理 FFT 时都会发送它

产品构建:

代码(点击查看

关键组件:

用橡皮筋将振动传感器牢牢地固定在手腕上

随着震颤频率分析相应地更新

数据绘制:

传感器数据可以使用 UART 从 nRF5340 中提取。在 nRF5340 上,JLink 处理微控制器和 PC 之间的 UART 通信。

可以使用TeraTerm或PuTTY等串行软件接收它。在设备管理器下,记下JLink CDC UART Port。

在 TeraTerm 中连接到设备:

  • 文件 > 创建新连接 > 串行 >(选择 COM 端口)

nRF5340 SDK 示例的默认串口设置如下:

  • 速度:115200
  • 数据:8位
  • 奇偶校验:无
  • 停止位:1位

在 TeraTerm 中,进入串口设置设置并进行相应设置

数据将开始在终端中流动

使用 Google Sheets 来绘制图表,可以将逗号分隔的数据分成 2 列

  • 数据 > 将文本分列 > 分隔符:逗号

创建了一个面积图来可视化结果

  • 插入 > 图表 > 面积图

此处图形的峰值是5 Hz 手颤的结果

通过将数据范围更改为前 50 个值来放大,确认振幅峰值在 5Hz 处。

模拟 7-10Hz 之间颤动的动画

设置 Power Profiler Kit 2 (PPK2)

使用 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%)

带有 PPK2 的逻辑分析仪:

还可以使用逻辑分析仪功能

(探测P0.29,找到LED2的频率)

  • 红线= 逻辑5V
  • 黑线=逻辑GND
  • 蓝线 = 逻辑D0

这是通道 0 上方波(LED 闪烁)的测量值

将定时器频率设置为 512Hz。并且在每次定时器中断时,LED 都会切换。我们看到 2 次切换之间的时间约为 1.95ms (512Hz)

 nRF5340 DK 与 PPK2 一起使用:

剪一个跳线SB40,它位于标有“nRF 电流测量”的插头引脚旁边

将在电流源模式下使用 PPK2,只有VOUT与GND一起进入电路板的电源

使用 PPK2 进行测量:

电流消耗的结果:

从结果来看,平均电流消耗为3.83mA 。大部分电流来自 OLED 显示器。

每次计算 FFT 结果时都会看到4.69mA的电流尖峰,由于 nRF5430 中 DSP 硬件功能的效率,这是一个非常短的过程。

项目演示:

 

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论