1. 项目背景与核心需求在工业自动化、医疗设备和精密测量领域高精度模数转换ADC系统的需求日益增长。传统8位或12位ADC已无法满足现代应用对测量精度的严苛要求而24位Δ-Σ架构ADC凭借其优异的噪声性能和线性度成为首选。本项目基于TI的ADS131M02与ST的STM32F091RC构建了一套高性价比的高精度数据采集解决方案。ADS131M02作为TI新一代24位ADC具有以下突出特性双通道同步采样支持真正差分输入可编程增益放大器PGA增益范围1~128内置1.2V精密基准电压±0.2%初始精度数据速率从1kSPS到64kSPS可调超低噪声7nV/√Hz 增益1STM32F091RC作为主控MCU的优势体现在Cortex-M0内核最高48MHz主频硬件SPI接口支持主从模式内置DMA控制器减轻CPU负担5V耐受I/O口直接兼容ADC电平丰富的外设资源与低功耗特性2. 硬件系统设计2.1 原理图设计要点典型应用电路包含三个关键部分模拟前端调理电路Vin ──┬── 10kΩ ──┬── ADS131M02 AINP │ └── 100nF ── AGND Vin- ──┼── 10kΩ ──┬── ADS131M02 AINN │ └── 100nF ── AGND └── TVS二极管保护电源设计采用TPS7A4700低噪声LDO为模拟部分供电每个电源引脚配置10μF钽电容100nF陶瓷电容独立接地层处理单点连接模拟与数字地SPI接口连接ADS131M02 STM32F091RC SCLK ────── PA5(SPI1_SCK) DIN ────── PA7(SPI1_MOSI) DOUT ────── PA6(SPI1_MISO) CS ────── PA4(SPI1_NSS) DRDY ────── PC13(EXTI13)2.2 PCB布局关键准则分区布局原则严格分离模拟与数字区域时钟信号远离模拟输入走线电源走线宽度≥20mil接地策略采用星型接地拓扑模拟地覆铜面积最大化关键信号下方保留完整地平面信号完整性措施SPI时钟线串联33Ω电阻差分对走线长度匹配±5mm避免90°转角采用45°或圆弧走线3. 软件实现方案3.1 SPI通信配置STM32CubeMX生成初始化代码示例hspi1.Instance SPI1; hspi1.Init.Mode SPI_MODE_MASTER; hspi1.Init.Direction SPI_DIRECTION_2LINES; hspi1.Init.DataSize SPI_DATASIZE_8BIT; hspi1.Init.CLKPolarity SPI_POLARITY_LOW; // CPOL0 hspi1.Init.CLKPhase SPI_PHASE_1EDGE; // CPHA0 hspi1.Init.NSS SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler SPI_BAUDRATEPRESCALER_8; // 6MHz hspi1.Init.FirstBit SPI_FIRSTBIT_MSB;3.2 寄存器配置流程复位序列HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET); uint8_t reset_cmd[] {0x11, 0x00, 0x00}; HAL_SPI_Transmit(hspi1, reset_cmd, 3, 100); HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET); HAL_Delay(1);配置寄存器写入typedef struct { uint8_t cmd; uint8_t reg_addr; uint8_t reg_data[3]; } ADS131_Config; ADS131_Config config { .cmd 0x6A, // 写寄存器命令 .reg_addr 0x01, // 配置寄存器1地址 .reg_data {0x05, 0x00, 0x00} // PGA4, DR16kSPS };3.3 数据采集实现中断驱动采集流程void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin DRDY_Pin) { uint8_t tx_buf[3] {0x12, 0x00, 0x00}; // 读数据命令 uint8_t rx_buf[9] {0}; HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET); HAL_SPI_TransmitReceive(hspi1, tx_buf, rx_buf, 9, 100); HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET); // 解析24位数据 int32_t ch1 (rx_buf[3]16) | (rx_buf[4]8) | rx_buf[5]; int32_t ch2 (rx_buf[6]16) | (rx_buf[7]8) | rx_buf[8]; } }4. 系统校准与优化4.1 校准算法实现三点校准法示例代码typedef struct { float offset; float gain; } CalibrationParams; CalibrationParams calibrate(int32_t raw_low, int32_t raw_high, float actual_low, float actual_high) { CalibrationParams params; params.gain (actual_high - actual_low) / (raw_high - raw_low); params.offset actual_low - (raw_low * params.gain); return params; } float apply_calibration(int32_t raw, CalibrationParams params) { return (raw * params.gain) params.offset; }4.2 数字滤波设计移动平均滤波实现#define FILTER_WINDOW 8 typedef struct { int32_t buffer[FILTER_WINDOW]; uint8_t index; } MovingAverageFilter; int32_t filter_sample(MovingAverageFilter* filter, int32_t new_sample) { filter-buffer[filter-index] new_sample; filter-index (filter-index 1) % FILTER_WINDOW; int64_t sum 0; for(uint8_t i0; iFILTER_WINDOW; i) { sum filter-buffer[i]; } return (int32_t)(sum / FILTER_WINDOW); }5. 实测性能与问题排查5.1 性能测试数据在25℃环境下的实测结果参数规格值实测值INL±5ppm±3.8ppm动态范围110dB108.2dB通道隔离度-100dB-101dB功耗(32kSPS)5.2mW5.0mW5.2 常见问题解决方案SPI通信失败排查步骤检查CS信号时序建立/保持时间验证时钟极性/相位配置测量电源纹波应10mVpp确认PCB走线阻抗匹配数据跳变处理方案增加电源去耦电容优化接地策略启用ADC内部数字滤波器检查信号源阻抗匹配采样率不达标优化降低SPI时钟分频系数使用DMA传输替代轮询优化中断优先级设置关闭非必要外设时钟在实际部署中我们发现将ADS131M02的OVDD引脚连接到3.3V而非5V可显著降低数字噪声对模拟部分的影响。同时在高温环境下70℃建议将数据速率降至16kSPS以下以保证测量精度。