【Digikey得捷好物畅享】ADI EVAL-ADXL357Z 攻克高频采样 — STM32驱动开发

Digikey上看到ADIADXL357加速度计评估板,低噪声、最高4000Hz采样率、

20位分辨率,非常适合做电机振动监测,果断下单。

一、项目目标:

STM32F407通过SPI采集ADXL357数据,后续配合CMSIS-DSPFFT频域分析,最终用NanoEdgeAI实现电机堵转识别。本文先打通驱动层。

二、硬件连线与避坑:

SPI接线很简洁:PA4作软件片选、PA5-SCKPA6-MISOPA7-MOSI,再加3.3VGNDCubeMXSPI1配置为:Full-Duplex-MasterCPOL=0/CPHA=0MSB First8bit帧格式,时钟2.6Mbps左右即可。

有一个容易踩的坑:评估板P2排针上的V1p8anaV1p8dig是芯片内部LDO输出的1.8V,千万不要外接电源。只需给VDDVDDIO3.3V,这两个脚悬空就好。接反了可能烧芯片。

三、驱动ADXL357

ADXL357每轴数据为20位二进制补码、左对齐,分3个字节存放。读取时连续拉9字节(X/Y/Z3字节),拼出真实加速度值。

最早我采用采集1024->printf打印方案,发现波形突变不顺滑。分析后找到根因:1024ASCII浮点数约32KB,串口发送需要356ms,而ADXL357内部FIFO只够缓冲128ms的数据,所以每次printf期间FIFO溢出2-3次,过渡数据全部丢失。

所以我的解决方案是------Ping-Pong DMA架构:

1.放弃ASCIIprintf,改用VOFA+JustFloat协议------每个浮点数直接发4字节原始二进制,一帧仅16KB,传输量减少一半 。

2.4float后插入0x7F800000作为帧分隔符,VOFA+自动识别帧边 界。

3.开辟两份1024×4浮点的Ping-Pong缓冲区,CPU填充Buffer A时,DMA在后台发送Buffer B

4. DMA发送16KB仅需178ms,采集1024点需256msDMA总在下一帧满之前完成发送------实现了真正的4000Hz连续无丢帧采集。

关键代码:

四、上位机查看波形:

VOFA+上位机查看波形。将传感器在桌面90度翻转,能看到X/Y/Z轴交替跳变到1g附近的波形,在平放传感器的时候数据无波动:

五、开发心得:

这次驱动开发最大的收获是:高速传感器不能按来一个数据、处理一个数据的模式写代码。串口打印、格式化字符串这些看似无害的操作,在毫秒级采样面前都会成为瓶颈。所以更要关注数据的整体吞吐能力。