mirror of
https://github.com/YuTaoV5/YuEEG.git
synced 2025-09-26 23:09:24 +08:00
Merge branch 'main' of https://github.com/YuTaoV5/YuEEG
This commit is contained in:
commit
1cc29403d1
167
README.md
167
README.md
@ -1,4 +1,3 @@
|
||||
|
||||
<h1 align = "center">🌟YuEEG 8通道脑机接口设备🌟</h1>
|
||||
|
||||
<p align = "center">
|
||||
@ -13,20 +12,23 @@
|
||||
</p>
|
||||
|
||||
> [!CAUTION]
|
||||
> 项目基于自定义的MIT协议,除本项目拥有者以外该项目不允许用来参加任何商业比赛。
|
||||
> 项目基于自定义的 MIT 协议,除本项目拥有者以外该项目不允许用来参加任何商业比赛。
|
||||
|
||||
> [!NOTE]
|
||||
> 项目尚未完全更新【SSVEP范式】,建议Star后,会添加更多内容。
|
||||
> 项目尚未完全更新【SSVEP 范式】,建议 Star 后,会添加更多内容。
|
||||
|
||||
> [!NOTE]
|
||||
> 项目尚未完全更新【SSVEP 范式】,建议 Star 后,会添加更多内容。
|
||||
|
||||
## 概述 🧠🔌
|
||||
|
||||
本项目旨在利用TI的ADS1299芯片构建一个8通道的脑机接口(BCI)设备。项目涵盖硬件电路设计、芯片驱动开发以及数据接收和显示的上位机程序。
|
||||
本项目旨在利用 TI 的 ADS1299 芯片构建一个 8 通道的脑机接口(BCI)设备。项目涵盖硬件电路设计、芯片驱动开发以及数据接收和显示的上位机程序。
|
||||
|
||||
## 项目亮点
|
||||
|
||||
- **8通道高分辨率EEG采集**,适合科研和创客项目。
|
||||
- **定制3D打印脑电帽外壳**,设计舒适,便于精确放置电极。
|
||||
- **兼容Arduino的驱动代码**,便于集成和控制,支持多种EEG应用和项目开发。
|
||||
- **8 通道高分辨率 EEG 采集**,适合科研和创客项目。
|
||||
- **定制 3D 打印脑电帽外壳**,设计舒适,便于精确放置电极。
|
||||
- **兼容 Arduino 的驱动代码**,便于集成和控制,支持多种 EEG 应用和项目开发。
|
||||
|
||||
## 目录 📁
|
||||
|
||||
@ -41,43 +43,43 @@
|
||||
|
||||
## 项目背景 📝
|
||||
|
||||
脑机接口(Brain-Computer Interface, BCI)是一种直接连接大脑和外部设备的系统,用于读取大脑活动信号并将其转换为机器指令。本项目使用ADS1299芯片,该芯片具有高分辨率和低噪声特性,非常适合EEG(脑电图)信号的采集。
|
||||
脑机接口(Brain-Computer Interface, BCI)是一种直接连接大脑和外部设备的系统,用于读取大脑活动信号并将其转换为机器指令。本项目使用 ADS1299 芯片,该芯片具有高分辨率和低噪声特性,非常适合 EEG(脑电图)信号的采集。
|
||||
|
||||
## 硬件设计 🔧
|
||||
|
||||
### 主要组件:
|
||||
|
||||
- **ADS1299芯片**:用于EEG信号采集。
|
||||
- **ADS1299 芯片**:用于 EEG 信号采集。
|
||||
- **模拟前端电路**:包括滤波和放大电路。
|
||||
- **电源管理模块**:提供稳定的电源供应。
|
||||
- **数据传输接口**:用于与上位机通信。
|
||||
|
||||
### 电路设计图:
|
||||
|
||||
>嘉立创链接:[https://oshwhub.com/protodrive000/1299_pro](https://a360.co/3AnxQdK%20)
|
||||
访问密码:yutaov5
|
||||
> 嘉立创链接:[https://oshwhub.com/protodrive000/1299_pro](https://a360.co/3AnxQdK%20)
|
||||
> 访问密码:yutaov5
|
||||
|
||||
| 正面 | 反面 |
|
||||
| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
|
||||
|  |  |
|
||||
|
||||
|正面|反面|
|
||||
|-|-|
|
||||
|||
|
||||
### 外壳模型设计图:
|
||||
|
||||
>3D外壳文件:https://a360.co/3AnxQdK
|
||||
访问密码:yutaov5
|
||||
|
||||
|单外壳|外壳+脑电帽|仰视图|
|
||||
|-|-|-|
|
||||
||||
|
||||
|
||||
|
||||
> 3D 外壳文件:https://a360.co/3AnxQdK
|
||||
> 访问密码:yutaov5
|
||||
|
||||
| 单外壳 | 外壳+脑电帽 | 仰视图 |
|
||||
| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
|
||||
|  |  |  |
|
||||
|
||||
## 上位机程序 📊
|
||||
|
||||
> 目前仅提供串口通讯的 plot_only.py 界面程序
|
||||
|
||||
### 功能:
|
||||
|
||||
- **数据接收**:通过串口接收来自硬件设备的数据。
|
||||
- **数据展示**:实时显示EEG信号。
|
||||
- **数据展示**:实时显示 EEG 信号。
|
||||
- **数据存储**:保存数据以便后续分析。
|
||||
|
||||
### 使用技术:
|
||||
@ -86,22 +88,23 @@
|
||||
- **图形库**:pyqt + fluent
|
||||
|
||||
### 界面截图:
|
||||
|正常采集模式|测试信号模式|
|
||||
|-|-|
|
||||
|||
|
||||
|
||||
| 正常采集模式 | 测试信号模式 |
|
||||
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
||||
|  |  |
|
||||
|
||||
## 使用指南 📚
|
||||
|
||||
### 硬件连接:
|
||||
|
||||
1. 本项目支持两种供电模式:
|
||||
- USB接入XiaoESP32S3直接供电使用,同时串口发送数据
|
||||
- 背面焊接TPS63070锂电池转5V模块,然后电源接口接入3.7V锂电池即可
|
||||
1. 将EEG电极正确连接到被测试者。
|
||||
2. 使用USB线连接设备和电脑。
|
||||
- USB 接入 XiaoESP32S3 直接供电使用,同时串口发送数据
|
||||
- 背面焊接 TPS63070 锂电池转 5V 模块,然后电源接口接入 3.7V 锂电池即可
|
||||
1. 将 EEG 电极正确连接到被测试者。
|
||||
1. 使用 USB 线连接设备和电脑。
|
||||
|
||||
### 引脚连接
|
||||
|
||||
```c++
|
||||
// 定义引脚
|
||||
#define CS_PIN A3
|
||||
@ -113,37 +116,43 @@
|
||||
#define RESET_PIN A1
|
||||
```
|
||||
|
||||
|
||||
### 硬件设置
|
||||
|
||||
驱动代码是为支持ESP32的Arduino IDE编写的,代码通过SPI与ADS1299进行数据采集。
|
||||
驱动代码是为支持 ESP32 的 Arduino IDE 编写的,代码通过 SPI 与 ADS1299 进行数据采集。
|
||||
|
||||
### 先决条件
|
||||
|
||||
- **Arduino IDE**:从[Arduino官方网站](https://www.arduino.cc/en/software)下载最新版本。
|
||||
- **ESP32开发板包**:在Arduino IDE中通过开发板管理器添加ESP32开发板支持。
|
||||
- **Arduino IDE**:从[Arduino 官方网站](https://www.arduino.cc/en/software)下载最新版本。
|
||||
- **ESP32 开发板包**:在 Arduino IDE 中通过开发板管理器添加 ESP32 开发板支持。
|
||||
|
||||
### 加载代码:
|
||||
|
||||
打开Arduino IDE,选择 `文件` > `打开` 并选择 `ino 文件`。
|
||||
在 `工具` > `开发板` 下选择你的ESP32开发板。
|
||||
在 `工具` > `端口` 下设置正确的COM端口。
|
||||
### 上传代码:
|
||||
>如果是第一次下载,上电前按住boot再上电后松开,然后正常下载
|
||||
打开 Arduino IDE,选择 `文件` > `打开` 并选择 `ino 文件`。
|
||||
在 `工具` > `开发板` 下选择你的 ESP32 开发板。
|
||||
在 `工具` > `端口` 下设置正确的 COM 端口。
|
||||
|
||||
### 上传代码:
|
||||
|
||||
> 如果是第一次下载,上电前按住 boot 再上电后松开,然后正常下载
|
||||
|
||||
编译并将代码上传到 ESP32 开发板。
|
||||
|
||||
编译并将代码上传到ESP32开发板。
|
||||
### 上位机代码使用方法
|
||||
上传完成后,ESP32开发板将开始与ADS1299芯片进行通信,并将EEG数据输出到串口监视器。
|
||||
|
||||
上传完成后,ESP32 开发板将开始与 ADS1299 芯片进行通信,并将 EEG 数据输出到串口监视器。
|
||||
|
||||
- 模式切换:使用以下串口命令或者左下方按钮切换不同模式:
|
||||
- 1:连续读取模式
|
||||
- 3:自检模式
|
||||
|
||||
>示例用法
|
||||
上传完成后,在Arduino IDE中打开串口监视器,波特率设为115200。你将看到来自每个通道的实时EEG数据。
|
||||
``` C
|
||||
> 示例用法
|
||||
> 上传完成后,在 Arduino IDE 中打开串口监视器,波特率设为 115200。你将看到来自每个通道的实时 EEG 数据。
|
||||
|
||||
```C
|
||||
// 数据格式如下
|
||||
Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
```
|
||||
|
||||
### 上位机安装步骤
|
||||
|
||||
1. **克隆此仓库**:
|
||||
@ -161,16 +170,22 @@ Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
```bash
|
||||
python plot_only.py
|
||||
```
|
||||
|
||||
## 贡献指南
|
||||
|
||||
欢迎社区贡献!请随时提交问题、功能请求或拉取请求。
|
||||
|
||||
## 未来改进
|
||||
|
||||
- 增加对不同微控制器的支持。
|
||||
- 扩展脑电帽设计,以便调整电极位置。
|
||||
|
||||
## 致谢
|
||||
特别感谢德州仪器提供ADS1299芯片,并感谢开源社区的启发与支持。
|
||||
|
||||
特别感谢德州仪器提供 ADS1299 芯片,并感谢开源社区的启发与支持。
|
||||
|
||||
## 项目结构 🗂️
|
||||
|
||||
```
|
||||
├── hardware
|
||||
│ ├── schematics
|
||||
@ -181,24 +196,25 @@ Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
│ └── bci_gui.py
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## 软件开发 💻
|
||||
|
||||
### 芯片驱动:
|
||||
|
||||
- **SPI通信**:实现与ADS1299的SPI通信。
|
||||
- **数据读取**:从芯片读取EEG数据。
|
||||
- **SPI 通信**:实现与 ADS1299 的 SPI 通信。
|
||||
- **数据读取**:从芯片读取 EEG 数据。
|
||||
- **数据处理**:初步处理和滤波。
|
||||
|
||||
### 引脚定义
|
||||
|
||||
| 引脚名称 | 描述 |
|
||||
| --------- | ------------------------------- |
|
||||
| ---------- | -------------------------------- |
|
||||
| CS_PIN | 片选引脚,低电平有效 |
|
||||
| SCLK_PIN | SPI时钟引脚 |
|
||||
| MOSI_PIN | SPI主设备输出从设备输入引脚 |
|
||||
| MISO_PIN | SPI主设备输入从设备输出引脚 |
|
||||
| SCLK_PIN | SPI 时钟引脚 |
|
||||
| MOSI_PIN | SPI 主设备输出从设备输入引脚 |
|
||||
| MISO_PIN | SPI 主设备输入从设备输出引脚 |
|
||||
| DRDY_PIN | 数据就绪引脚,低电平表示数据可读 |
|
||||
| CLKSEL_PIN| 时钟选择引脚 |
|
||||
| CLKSEL_PIN | 时钟选择引脚 |
|
||||
| START_PIN | 启动转换引脚 |
|
||||
| RESET_PIN | 重置引脚 |
|
||||
| PWDN_PIN | 省电模式引脚 |
|
||||
@ -206,7 +222,7 @@ Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
### 命令定义
|
||||
|
||||
| 命令 | 描述 |
|
||||
| ------- | --------------------- |
|
||||
| ------- | ---------------- |
|
||||
| WAKEUP | 唤醒芯片 |
|
||||
| STANDBY | 进入待机模式 |
|
||||
| RESET | 重置芯片 |
|
||||
@ -220,7 +236,7 @@ Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
|
||||
### 定时器中断
|
||||
|
||||
代码中使用ESP32的定时器来定时读取数据和导联检测状态:
|
||||
代码中使用 ESP32 的定时器来定时读取数据和导联检测状态:
|
||||
|
||||
- `onDataTimer`: 检查数据是否就绪,如果就绪则设置标志位`startRead`。
|
||||
- `onImpedanceTimer`: 读取导联检测状态。
|
||||
@ -231,10 +247,10 @@ Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
|
||||
- 初始化串口通信。
|
||||
- 初始化引脚模式。
|
||||
- 初始化SPI通信参数。
|
||||
- 调用`initADS1299`函数初始化ADS1299。
|
||||
- 获取并打印设备ID。
|
||||
- 配置ESP32的定时器用于数据读取和导联检测。
|
||||
- 初始化 SPI 通信参数。
|
||||
- 调用`initADS1299`函数初始化 ADS1299。
|
||||
- 获取并打印设备 ID。
|
||||
- 配置 ESP32 的定时器用于数据读取和导联检测。
|
||||
|
||||
### 主循环
|
||||
|
||||
@ -248,7 +264,7 @@ Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
`startContinuousReadMode`函数:
|
||||
|
||||
- 设置必要的标志位。
|
||||
- 重置并初始化ADS1299的寄存器。
|
||||
- 重置并初始化 ADS1299 的寄存器。
|
||||
- 启动连续数据读取模式。
|
||||
- 启动数据读取定时器,停止导联检测定时器。
|
||||
|
||||
@ -257,14 +273,14 @@ Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
`startLeadOffDetectionMode`函数:
|
||||
|
||||
- 设置必要的标志位。
|
||||
- 重置并初始化ADS1299的寄存器用于导联检测。
|
||||
- 重置并初始化 ADS1299 的寄存器用于导联检测。
|
||||
- 启动导联检测定时器,停止数据读取定时器。
|
||||
|
||||
### ADS1299初始化
|
||||
### ADS1299 初始化
|
||||
|
||||
`initADS1299`函数:
|
||||
|
||||
- 启动ADS1299的时序。
|
||||
- 启动 ADS1299 的时序。
|
||||
- 重置芯片。
|
||||
- 停止连续数据读取模式。
|
||||
- 配置必要的寄存器。
|
||||
@ -280,12 +296,12 @@ Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
|
||||
`readData`函数:
|
||||
|
||||
- 从ADS1299读取数据。
|
||||
- 从 ADS1299 读取数据。
|
||||
- 将数据转换为电压并打印。
|
||||
|
||||
### 寄存器读写
|
||||
|
||||
包含`writeRegister`和`readRegister`函数,用于向ADS1299写入和读取寄存器。
|
||||
包含`writeRegister`和`readRegister`函数,用于向 ADS1299 写入和读取寄存器。
|
||||
|
||||
### 数据转换
|
||||
|
||||
@ -293,30 +309,33 @@ Channel 1: 0.123456, Channel 2: 0.654321, ..., Channel 8: 0.345678
|
||||
|
||||
- 将读取的字节数据转换为电压值。
|
||||
|
||||
这个代码框架基本涵盖了ADS1299的初始化、数据读取、导联检测等主要功能。在实际应用中,可能需要根据具体需求调整寄存器配置和定时器的时间间隔。确保ADS1299手册中的寄存器配置正确无误,以实现所需的功能。
|
||||
这个代码框架基本涵盖了 ADS1299 的初始化、数据读取、导联检测等主要功能。在实际应用中,可能需要根据具体需求调整寄存器配置和定时器的时间间隔。确保 ADS1299 手册中的寄存器配置正确无误,以实现所需的功能。
|
||||
|
||||
### REF和偏置电压(BIAS)的工作原理及电路连接
|
||||
### REF 和偏置电压(BIAS)的工作原理及电路连接
|
||||
|
||||
#### 1. 参考电极(REF)
|
||||
|
||||
参考电极是所有测量电极电位的基准点。它的作用是提供一个稳定的参考电压,以确保各个测量电极的电位能够被正确地采集。ADS1299提供了灵活的配置选项,可以将任意电极设置为参考电极。
|
||||
参考电极是所有测量电极电位的基准点。它的作用是提供一个稳定的参考电压,以确保各个测量电极的电位能够被正确地采集。ADS1299 提供了灵活的配置选项,可以将任意电极设置为参考电极。
|
||||
|
||||
#### 2. 偏置电压(BIAS)
|
||||
|
||||
偏置电压用于提供共模电压稳定性和干扰抑制。在EEG测量中,人体容易受到共模干扰,如电源线频率的干扰(50/60Hz)。偏置电压通过向病人施加一个控制的电压,帮助将测量电极的共模电压保持在ADS1299输入范围内。ADS1299的偏置放大器(BIAS amplifier)提供了一个内部的反馈回路,用于减少共模干扰。
|
||||
偏置电压用于提供共模电压稳定性和干扰抑制。在 EEG 测量中,人体容易受到共模干扰,如电源线频率的干扰(50/60Hz)。偏置电压通过向病人施加一个控制的电压,帮助将测量电极的共模电压保持在 ADS1299 输入范围内。ADS1299 的偏置放大器(BIAS amplifier)提供了一个内部的反馈回路,用于减少共模干扰。
|
||||
|
||||
#### 3. SRB引脚
|
||||
#### 3. SRB 引脚
|
||||
|
||||
SRB(Signal Reference Buffer)引脚在ADS1299中用于信号参考电极的配置。
|
||||
SRB(Signal Reference Buffer)引脚在 ADS1299 中用于信号参考电极的配置。
|
||||
|
||||
- **SRB1**:当SRB1引脚用于参考时,所有通道的负输入可以连接到SRB1。设置`MISC1`寄存器的SRB1位可以实现这种配置。
|
||||
- **SRB2**:SRB2引脚可以选择单独的电极作为参考电极,并通过设置`CHnSET`寄存器的SRB2位,将该电极的电位作为其他通道的参考。
|
||||
- **SRB1**:当 SRB1 引脚用于参考时,所有通道的负输入可以连接到 SRB1。设置`MISC1`寄存器的 SRB1 位可以实现这种配置。
|
||||
- **SRB2**:SRB2 引脚可以选择单独的电极作为参考电极,并通过设置`CHnSET`寄存器的 SRB2 位,将该电极的电位作为其他通道的参考。
|
||||
|
||||
## 贡献 🤝
|
||||
欢迎大家对本项目进行贡献!请提交pull request或创建issue以报告问题。
|
||||
|
||||
欢迎大家对本项目进行贡献!请提交 pull request 或创建 issue 以报告问题。
|
||||
|
||||
## 许可 📜
|
||||
本项目采用基于MIT的许可。
|
||||
|
||||
本项目采用基于 MIT 的许可。
|
||||
|
||||
```
|
||||
MIT License with Restrictions
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user