FreeEEG32-同步ADC采集系统硬件设计

乐活   2025-01-22 22:31   内蒙古  

FreeEEG32-32通道同步ADC生物电采集系统

关于32通道同步ADC采集系统答疑

同步STM32的SAI外设传输普通数据

这篇文章放很久了,是这个采集系统的硬件部分。简单来说,硬件部分就是一个STM32H7,上面的SPI用来控制ADC的配置和初始化,至于ADC的转换数据通过SAI外设读取,在内部有俩种编码方式,二进制流和OpenVIBE的编码方式。ADC转换的时候需要一个准确的基准,使用了一个ADI的REF。然后为了提高系统的信噪比,在电源输入路径上面使用了变压器驱动,避免电源轨道上面的耦合,在输出数据的时候,可以使用UART以及USB外设(USB-CDC)。

上面的陀螺仪是有一个结论,这个运动伪像可以被接收到的,可以被在信号里面减掉。

电源除了MicroUSB输入以及也可以在独立的引脚输入

右边就是串口上面的隔离,这里也有一个SPI的输出,都是隔离的

多通道的隔离器,这个是串口

这个是TI的,为SPI做隔离器

USB隔离器

就是这样

我这里想说的是,因为电源会供给所有器件,为了安全和减少一些噪音,就使用了小型的变压器。

芯片配变压器

内部的样子

参数

  1. 电感值: 最主要的电气参数,表示元器件在特定频率下的阻抗。
  2. 匝数比: 表示初级绕组和次级绕组的匝数比
  3. 直流电阻: 表示导线的电阻,会影响能量损耗。
  4. 电压-时间积: 表示元器件所能承受的最大电压变化率,对于抑制电压尖峰有意义。
  5. 绝缘耐压: 表示元器件能够承受的最大电压,对于防止击穿有意义。
很明显就是原样隔离转换的。

在最终输入还加了保护的二极管

可以通过TI的

里面长这样

我们看一个X光的拍片子的样子

这个是共模电压点

上下都是一对儿差分

SWD就可以

有一个数字地

链接SWD和电源,所以在烧录的时候就要连接

编译无错误

使用V2就可以了

调试

每一个数组里面都有内容

一个线程

经常有人问,这个东西是真同步吗?所以要讨论延时,就是来自于体系架构的延时性:

这个是和总线的连接延时

APB2-120MHz

还有一个SAI居然在APB4上面,速度最大可以跑到100MHz

AD7771使用ADI的一个demo,就是SAI外设读取数据,在精密转换这里

IIO项目

精密转换固件

SAI的外设

虚拟的串口

链接图

uint8_t datas[uint8_ad_adc_number][uint8_ad_number];

使用2维数组来储存ADC的数据:

uint8_t:这是数组元素的数据类型,表示无符号8位整数。也就是说,数组中的每个元素都可以存储一个0到255之间的数值。

datas:数组名称,用来标识这个数组。

[uint8_ad_adc_number][uint8_ad_number]:这是数组的维度,表示这是一个二维数组。

  1. uint8_ad_adc_number: 表示数组的第一维的长度,也就是数组的行数。这个值是一个预先定义好的常量,代表ADC的通道数量。
  2. uint8_ad_number: 表示数组的第二维的长度,也就是数组的列数。这个值是一个定义好的常量,代表每次ADC采样获取的数据点数。
二维数组的每一行: 代表一个ADC通道采集到的数据。
二维数组的每一列: 代表一次采样中,所有ADC通道采集到的一个数据点。
uint8_t datas[4][10];
这个数组中有4行,10列。第一行存储第一个ADC通道的10个采样数据,第二行存储第二个ADC通道的10个采样数据。
// 访问第一个ADC通道的第二个采样数据uint8_t value = datas[0][1];
通过索引来访问数组中的元素。

这个就是SAI数据的接收

使用这样的代码获取所有的数据块

这个是源码

32字节长的数据

在源码里面,一旦这个标志位出现,就开始捕获。

代码这段是切换数据流的方式

OpenVIBE的打包方式,有头有尾,里面包装ADC,和陀螺仪

然后使用USB的口输出

我们也可以打开这个开关,把数据装到SD卡里面的

现在设备还有一台,2k售价,感兴趣来~

http://sim.okawa-denshi.jp/en/Fkeisan.htm

云深之无迹
纵是相见,亦如不见,潇湘泪雨,执念何苦。
 最新文章