做无人机的对ICM-42688-P应该很熟的,六轴IMU,3轴陀螺加3轴加速度计。这玩意现在涨价到一颗80-90了,当然,有渠道的肯定有低的拿货价格。

前段时间看到别人给我分享了一个开源项目。一块板上焊了32颗ICM-42688-P,正中央是Lattice的FPGA,型号iCE40UP5K。四周一圈全是ICM-42688-P,算了一下光传感器料钱就有三千了。板上还留了个22pin的FPC座,插的是树莓派相机那种排线,数据从这出去。

项目叫IMU Array,在github上以MIT协议全开源,我截图时这个开源仓库有351个星。原理图、Gerber、BOM、FPGA的Verilog代码、MicroPython代码,一样不缺。

打开BOM看了一下,这个BOM使用iBOM做的,直接打开一个网页文件,左边列表里选择元器件的时候,右边会在装配图上显示元器件的位置。比较适合diy手工焊接或者手工摆件。

开源资料里找到一个《BOM_JLCSMT.xlsx》,打开看了一下,估计这板子应该就是在嘉立创贴的了。

做这个的目的是干嘛?他要替代地震仪里的检波器。传统方案是动圈式检波器,机械结构,想探到低频还得配负阻抗变换器加一堆运放。设计文档里作者明说,就是想甩掉那些昂贵的ADI模拟芯片组。
但是,但是,MEMS的噪声天生比检波器大,怎么办?数学上有个笨办法,但是真管用。N颗一样的传感器测同一个物理量,取平均,随机噪声降到√N分之一。32颗,就是可以把噪声降低到5.66分之一。
ICM-42688-P加速度计的噪声密度是70ug每根号赫兹。除以5.66约等于12ug,这已经是地震观测圈才聊的量级。一颗不够就上32颗,以量取胜,就这么直白。
但是这么多传感器不是焊上去就完事,32颗芯片零偏各不同,灵敏度各不同,安装角度差半度输出就不一样。于是布局上他学索尼大法:4颗一组,组内每颗旋转90度,让轴灵敏度误差互相抵消。毕竟索尼那块16颗IMU的阵列板,按照作者原话,强到被出口管制。
还有一个最致命的问题:32颗传感器怎么接?
一根SPI总线中SCK、MOSI、CS是共享的,每颗传感器单独一根MISO,加起来36根IO。

这个就是框图,画得明明白白:32根MISO进FPGA,SPI四根线出到主控。

这是原理图。

可是如果仔细看这个框图,就会发现这个FPGA并不是主机。传感器的片选CS不是归他管,最离谱的是,这32个传感器共用一个CS,也就是说只能同时读取。那么,我们梳理一下这个读取逻辑。
连接到FPC的主控通过CS拉低32个传感器的CS信号,然后通过连接32个传感器的MOSI信号发起读取传感器的指令。32个传感器同时采集并通过MISO把数据传输出去,但是这个数据传输到了FPGA的32个管脚。这里就体会到了为啥要用FPGA,它可以并行采集完这32个传感器的数据,然后编码之后等待MCU找它一次读完。
所以这个项目最关键的地方就是,32个传感器是同时采样的。

框图里还有一个32kHz时钟信号,看看ICM-42688-P的原理图就知道了,这个信号给到了9脚,而9脚的功能有同步。这样就可以做到内部逻辑同步,同一瞬间采样。毕竟如果采样时间对不齐,那么采样就是不同时刻完成的,这样的阵列没卵用。

这是逻辑分析仪抓下来的时序。

工作台实拍,传感器板和树莓派Pico通过排线连接,完成采集处理。
我算了一下。32颗IMU价值两三千。FPGA不到50,再加6层PCB板、排线、树莓派Pico,加上SMT焊接,这一套硬件可能要到四五千。换来的,理论层面把噪声降低到了5.66分之一。不对啊,我怎么感觉这比直接用ADI的方案更贵了呢。
不过话说回来,前几年还真有一个搞前沿研究的老哥找我画一个板子,当时他的想法是用FPGA驱动16个BMI088,我没太理解为啥这么做,现在算是理解了,这事是可以做的,而且有很大的探索价值。我有几千颗BMI270,回头试试。
这是github仓库地址:github.com/will127534/IMU_Array。