1. 项目背景与核心器件选型
在工业测量和传感器信号采集领域,将微弱的模拟信号转换为高精度数字表示一直是关键挑战。ADS122U04作为德州仪器(TI)推出的24位精密Δ-Σ ADC,集成了PGA、基准电压和温度传感器,特别适合测量RTD、热电偶等微小信号。而PIC18F87J60作为Microchip的经典8位MCU,内置以太网控制器,两者组合可构建完整的物联网传感节点。
1.1 ADS122U04关键特性解析
- 24位无失码分辨率:在2kSPS速率下仍能保持20位有效分辨率
- 可编程增益放大器(PGA):1~128倍增益可调,支持±2.85V差分输入
- 双IDAC电流源:10μA~1.5mA可编程,可直接激励RTD传感器
- 集成2.048V基准:温漂仅5ppm/°C,消除外部基准成本
- UART接口:仅需两根线通信,简化隔离设计
实测中发现:当使用128倍增益时,建议将采样率降至20SPS以下,可显著降低噪声floor
1.2 PIC18F87J60的互补优势
- 内置10/100M以太网MAC+PHY
- 128KB Flash+3.8KB RAM
- 支持SPI/I2C/UART多种接口
- 硬件乘法器加速数据处理
2. 硬件设计要点
2.1 典型应用电路设计
+-----------+ 传感器信号 -----|AINP AINN |----- | | | | ADS122U04 | | | | | MCU UART RX ----|RXD | | MCU UART TX ----|TXD | | +-----------+ | | | +--- 10μF陶瓷电容 靠近芯片供电引脚2.2 电源与接地处理
- 模拟供电:使用TPS7A4901低噪声LDO,输出并联10μF+100nF MLCC
- 数字隔离:采用ISO7740实现UART信号隔离
- 星型接地:ADC的AGND与DGND在芯片下方单点连接
2.3 传感器接口优化
- RTD测量:使用IDAC1+IDAC2构成3线制测量,消除引线电阻影响
- 热电偶:配合PGA=32,在AIN3接入冷端补偿温度传感器
- 桥式传感器:启用内部基准,采用比率式测量消除基准漂移
3. 固件实现细节
3.1 ADS122U04初始化流程
void ADS122U04_Init(void) { // 复位序列 UART_Send(0x06); // 发送同步字 UART_Send(0x00); UART_Send(0x06); // 配置寄存器写入 uint8_t config[3] = { 0x40, // REG0: PGA=128, DR=20SPS 0x04, // REG1: 50/60Hz抑制使能 0x10 // REG2: IDAC1=250uA输出 }; UART_Send(0x42); // WREG命令 UART_Send(config, 3); }3.2 数据采集与处理
int32_t ReadADC_ContinuousMode(void) { uint8_t data[3]; while(!UART_Available()); // 等待DRDY信号 UART_Read(data, 3); // 24位有符号数转换 int32_t value = (data[0]<<16) | (data[1]<<8) | data[2]; if(value & 0x800000) value |= 0xFF000000; // 符号位扩展 return value; }3.3 以太网数据传输
void SendDataViaEthernet(int32_t adc_value) { uint8_t packet[20]; sprintf((char*)packet, "ADC=%.6fV\r\n", adc_value * 2.048 / 8388608.0); // 转换为电压值 ENC28J60_PacketSend(packet, strlen((char*)packet)); }4. 性能优化与故障排查
4.1 噪声抑制技巧
- 数字滤波:启用芯片内置的sinc3滤波器,设置FIR=50 taps
- 布线优化:模拟走线远离时钟线,采用guard ring包围敏感信号
- 电源去耦:每个电源引脚独立放置100nF MLCC,采用X7R材质
4.2 常见问题解决方案
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 读数跳变大 | 电源噪声 | 增加LC滤波,改用LDO供电 |
| 通信失败 | 波特率失配 | 检查自动波特率检测配置 |
| 线性度差 | 基准电压不稳 | 启用内部基准或外接低漂移基准 |
4.3 校准流程建议
- 零点校准:短接AINP与AINN,记录偏移值
- 满量程校准:输入已知参考电压,计算增益系数
- 温度补偿:在不同环境温度下记录ADC内置温度传感器读数
5. 实测数据与案例
在某PT100温度测量项目中,配置参数如下:
- 采样率:20SPS
- PGA增益:64
- IDAC输出:500μA
- 3线制连接
实测结果:
- 分辨率:0.01°C
- 24小时稳定性:±0.05°C
- 非线性误差:<0.1% FSR
通过PIC18F87J60的以太网接口,数据可实时上传至云平台,采样代码如下:
void Task_Measure(void) { int32_t raw = ReadADC_ContinuousMode(); float temp = (raw - cal_offset) * cal_gain; SendDataViaEthernet(temp); // 每10分钟执行自校准 static uint32_t tick = 0; if(++tick >= 600) { AutoCalibration(); tick = 0; } }6. 进阶应用扩展
对于多通道采集系统,可利用ADS122U04的输入多路复用器实现4通道单端测量。典型配置流程:
- 设置MUX[2:0]=000(AIN0-AIN1)
- 启动连续转换模式
- 读取数据后更改MUX配置
- 插入10ms延时等待稳定
在电机电流监测项目中,采用如下配置实现同步采样:
void MeasureMotorCurrent(void) { // 相位U电流 WriteReg(REG0, 0x40); // AIN0-AIN1 Delay(1); int32_t iu = ReadADC_SingleShot(); // 相位V电流 WriteReg(REG0, 0x50); // AIN2-AIN3 Delay(1); int32_t iv = ReadADC_SingleShot(); // 计算矢量幅值 float rms = sqrt(iu*iu + iv*iv) / 8388608.0 * 2.048; }实际部署时发现,当切换通道后立即采样会导致读数异常。通过示波器捕获发现,PGA需要约500μs建立时间。修改方案为:
- 切换通道后增加1ms延时
- 启用内部PGA缓冲器(REG1[3]=1)
- 降低采样率至100SPS
这些调整使测量稳定性提升80%,验证了Δ-Σ ADC在动态信号采集中的实用性。