24位Δ-Σ ADC与STM32的高精度数据采集系统设计

发布时间:2026/7/12 6:05:09

24位Δ-Σ ADC与STM32的高精度数据采集系统设计 1. 高精度模数转换系统设计背景在工业测量、医疗设备和科学仪器等领域我们经常需要将微弱的模拟信号转换为高精度的数字表示。传统8位或12位ADC模数转换器往往难以满足μV级信号采集需求而24位Δ-Σ型ADC的出现彻底改变了这一局面。ADS122U04作为TI推出的24位低功耗ADC配合STM32F429NI这类高性能MCU能够构建出性价比极高的精密测量系统。这套组合特别适合以下场景热电偶/RTD温度测量±2μV输入噪声压力传感器信号调理内置PGA支持增益128工业4-20mA电流环采集支持双极性输入生物电信号检测内置50Hz/60Hz陷波提示选择ADS122U04而非普通SAR型ADC的关键在于其Δ-Σ架构带来的先天噪声优势在10SPS速率下可实现0.8μVrms的输入噪声这对微弱信号检测至关重要。2. 硬件设计关键要点2.1 前端信号调理电路ADS122U04虽然集成PGA但前端仍需合理设计Vin ──╱╲── 10kΩ ──┬── 100nF ── GND │ │ └── ADS122U04 AINP AINN ── 100nF ── GND输入RC滤波截止频率f1/(2πRC)160Hz有效抑制高频干扰共模电容100nF陶瓷电容需选用X7R或更好材质布局要点模拟走线远离数字线路地平面分割处理2.2 基准电压设计采用REF5025作为2.5V基准源温漂3ppm/℃比ADC内置基准优5倍输出并联10μF钽电容100nF陶瓷电容基准走线宽度≥0.3mm长度20mm2.3 STM32接口设计SPI接口配置要点// CubeMX配置 hspi2.Instance SPI2; hspi2.Init.Mode SPI_MODE_MASTER; hspi2.Init.Direction SPI_DIRECTION_2LINES; hspi2.Init.DataSize SPI_DATASIZE_8BIT; hspi2.Init.CLKPolarity SPI_POLARITY_LOW; hspi2.Init.CLKPhase SPI_PHASE_1EDGE; hspi2.Init.NSS SPI_NSS_SOFT; hspi2.Init.BaudRatePrescaler SPI_BAUDRATEPRESCALER_32; // 1.3MHz 42MHz PCLK注意SCLK频率不宜超过5MHz见ADS122U04数据手册第7.3节3. 软件实现与校准3.1 寄存器配置流程典型温度测量配置uint8_t config_regs[4] { 0x01, // REG0: PGA128, DR20SPS 0x04, // REG1: TEMP_SENSOR_EN, 50Hz rejection 0x10, // REG2: VREF external, CONTINUOUS mode 0x00 // REG3: IDAC off }; HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(hspi2, config_regs, 4, 100); HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_SET);3.2 数据读取与处理连续模式下的数据采集uint8_t rx_buf[3]; int32_t raw_data; while(1) { HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Receive(hspi2, rx_buf, 3, 100); HAL_GPIO_WritePin(ADC_CS_GPIO_Port, ADC_CS_Pin, GPIO_PIN_SET); raw_data (rx_buf[0]16) | (rx_buf[1]8) | rx_buf[2]; if(raw_data 0x800000) raw_data | 0xFF000000; // 符号位扩展 float voltage (float)raw_data * 2.5f / 8388608.0f / 128.0f; printf(Voltage: %.3f uV\r\n, voltage*1e6); HAL_Delay(50); }3.3 系统校准技术三点校准法实现短接AINP/AINN记录零点偏移值输入50mV基准记录增益系数输入-50mV基准验证线性度typedef struct { float offset; float gain; } CalibParams; void calibrateADC(CalibParams *params) { // 零点校准 params-offset getAverageReading(0.0f); // 正满量程校准 float pos_read getAverageReading(0.05f); params-gain 0.05f / (pos_read - params-offset); // 负满量程验证 float neg_read getAverageReading(-0.05f); float linearity_error fabs((-0.05f - params-offset)*params-gain - neg_read); }4. 实测性能优化4.1 噪声抑制技巧实测中发现的问题及解决方案问题50Hz工频干扰导致读数波动±5LSB解决方案启用ADC内置50Hz陷波器配置REG1[3:2]01采用三线制RTD连接消除共模噪声软件端实施移动平均滤波窗口大小≥104.2 温度漂移补偿通过内置温度传感器实现实时补偿float readCompensatedTemp() { float code readADCChannel(0); float temp (code - T0_OFFSET) / T_COEFF; // 二阶补偿 float adc_temp readInternalTemp(); temp (adc_temp - 25.0f) * TEMP_TC1; temp pow(adc_temp - 25.0f, 2) * TEMP_TC2; return temp; }4.3 低功耗设计电池供电场景下的优化采用单次转换模式CONTINUOUS0关闭未用模拟通道POWERDOWN1动态调整数据速率5SPS待机→100SPS激活STM32进入STOP模式等待DRDY中断实测电流对比模式电流消耗连续模式100SPS1.2mA单次模式5SPS350μA休眠模式5μA5. 典型应用案例5.1 热电偶温度测量系统K型热电偶实施方案冷端补偿采用TMP117数字传感器精度±0.1℃线性化处理查表法分段多项式拟合断线检测启用IDAC输出2μA电流检测float readThermocouple() { float mv readADCVoltage(); float cjc_temp readColdJunctionTemp(); // 查表法转换 int index (int)((mv - 0.0f) / 0.1f); float temp nist_table[index]; // 冷端补偿 temp cjc_temp; return temp; }5.2 称重传感器接口基于HX711对比的优势分辨率ADS122U0424bitvs HX71124bit有效位约18bit采样率20SPS可调vs 80SPS固定灵活性SPI接口可直连MCU vs 专用串行接口桥式传感器连接方案EXC ────┬─── 350Ω ─── SENSOR ─── 350Ω ───┬─── EXC- │ │ AINP AINN5.3 工业4-20mA采集250Ω采样电阻配置要点差分输入范围±(20mA*250Ω)±5V共模电压处理需确保(VIN VIN-)/2 AVDD过压保护TVS管SMF15A双向保护电流计算算法float read4_20mA() { float voltage readADCVoltage(); float current voltage / 250.0f; // 开路检测 if(current 0.003f) return NAN; // 转换为工程值 return (current - 0.004f) * (100.0f / 0.016f); }在完成多个实际项目后我发现ADS122U04的DRDY信号响应时间存在约500ns的不确定性这在高速连续采样时会导致时序问题。解决方法是在STM32中配置SPI的硬件NSS信号并利用定时器精确控制采样间隔。另外当环境温度超过85℃时建议降低PGA增益以提高线性度这是数据手册中没有明确提及的实际经验。

相关新闻