STM32F030R8与ADS122U04高精度数据采集系统设计
1. 项目背景与核心需求在工业测量和嵌入式系统开发中将模拟信号转换为数字信号是一个基础但至关重要的环节。ADS122U04作为TI公司推出的24位Δ-Σ型ADC芯片配合STM32F030R8这款性价比极高的Cortex-M0微控制器能够构建高精度、低功耗的模拟信号采集系统。这个组合特别适合需要精确测量温度、压力、应变等慢变信号的场景比如工业传感器变送器、医疗设备或环境监测装置。ADS122U04的核心优势在于其24位无失码分辨率、内置可编程增益放大器(PGA)和低至50nV的输入噪声。这意味着它可以直接连接热电偶、RTD等微弱信号传感器无需额外信号调理电路。而STM32F030R8则提供了灵活的数字接口和足够的处理能力可以实时处理ADC数据并通过UART、SPI等接口上传至上位机。2. 硬件设计与关键配置2.1 电路连接方案典型的硬件连接如下图所示注实际设计中需根据具体需求调整传感器 - 信号调理 - ADS122U04 │ ├── SPI_SCK - PA5(STM32) ├── SPI_MISO - PA6(STM32) ├── SPI_MOSI - PA7(STM32) ├── CS - PA4(STM32) └── DRDY - PA0(STM32)关键提示ADS122U04的模拟电源(AVDD)必须与数字电源(DVDD)隔离建议使用铁氧体磁珠连接并在靠近芯片处放置10μF0.1μF去耦电容组合。2.2 基准电压选择基准电压源的选择直接影响系统精度。对于不同应用场景内置2.048V基准适合大多数常规应用温漂典型值5ppm/°C外部基准如REF5025(2.5V)可获得更高稳定性1ppm/°C比率式测量当传感器采用电桥结构时可直接使用激励电压作为基准基准电压的噪声滤波电路示例// 基准引脚滤波设计 VREF ──╳── 10Ω ───┐ │ │ 4.7μF 0.1μF │ │ GND GND2.3 抗干扰设计要点PCB布局原则模拟走线远离数字信号线采用星型接地AGND与DGND单点连接敏感信号使用保护环(Guard Ring)包围输入保护电路传感器 ────╳── 100Ω ────┐ │ │ TVS 10nF │ │ GND GND3. 软件实现与寄存器配置3.1 STM32 SPI初始化使用STM32CubeMX配置SPI1hspi1.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; // ADS122U04要求 hspi1.Init.CLKPhase SPI_PHASE_1EDGE; hspi1.Init.NSS SPI_NSS_SOFT; hspi1.Init.BaudRatePrescaler SPI_BAUDRATEPRESCALER_32; // 约1MHz HAL_SPI_Init(hspi1);3.2 ADS122U04寄存器配置典型工作模式配置流程复位寄存器发送0x06RESET命令配置寄存器00x00PGA增益000增益1~101增益128数据速率根据噪声和功耗需求选择配置寄存器10x01工作模式连续转换或单次模式温度传感器使能启动连续转换发送0x08START/SYNC命令示例配置函数void ADS122U04_Init(void) { uint8_t config[3] {0}; // 寄存器0: PGA128, DR20SPS, 连续转换模式 config[0] 0x05; // 寄存器1: 启用内部2.048V基准禁用温度传感器 config[1] 0x04; // 寄存器2: 通道0差分输入50Hz陷波 config[2] 0x10; HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(hspi1, config, 3, 100); HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_SET); // 发送启动命令 uint8_t start_cmd 0x08; HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Transmit(hspi1, start_cmd, 1, 100); HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_SET); }4. 数据采集与处理4.1 DRDY中断处理利用STM32的外部中断检测ADS122U04的数据就绪信号// GPIO中断回调函数 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin ADS_DRDY_Pin) { uint8_t rx_data[3] {0}; HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Receive(hspi1, rx_data, 3, 100); HAL_GPIO_WritePin(ADS_CS_GPIO_Port, ADS_CS_Pin, GPIO_PIN_SET); int32_t raw_value (rx_data[0] 16) | (rx_data[1] 8) | rx_data[2]; if(raw_value 0x800000) { // 处理24位有符号数 raw_value | 0xFF000000; } // 转换为实际电压值 float voltage (raw_value * 2.048f) / (8388607.0f * 128); // PGA128时 } }4.2 噪声抑制技术数字滤波采用移动平均或IIR滤波#define FILTER_SIZE 8 float moving_avg_filter(float new_val) { static float buffer[FILTER_SIZE] {0}; static uint8_t index 0; static float sum 0; sum - buffer[index]; buffer[index] new_val; sum new_val; index (index 1) % FILTER_SIZE; return sum / FILTER_SIZE; }工频干扰抑制配置ADS122U04内置的50Hz/60Hz陷波滤波器采样周期设置为工频周期的整数倍5. 校准与性能优化5.1 系统校准流程偏移校准短接AINP和AINN读取100个样本取平均作为偏移值后续测量中减去该偏移增益校准施加已知精确电压如满量程的90%计算增益系数理论值/测量值校准数据存储示例typedef struct { float offset; float gain; uint32_t crc; } CalibData; void Save_Calibration(CalibData *data) { >