AD7175-8与PIC18F87K22高精度数据采集系统设计

1. 项目背景与核心器件选型

在工业测量、医疗设备和精密仪器等领域,高精度模拟信号采集一直是系统设计的关键难点。AD7175-8作为Analog Devices公司推出的24位Σ-Δ型ADC,其出色的噪声性能和灵活的通道配置,使其成为精密测量系统的理想选择。这款ADC具有以下突出特性:

  • 8/16通道差分输入配置
  • 可编程数据输出速率从5SPS到250kSPS
  • 积分非线性误差(INL)仅为±0.0015%FSR
  • 内置可编程增益放大器(PGA),增益范围1~128
  • 多种数字滤波器选项(sinc3、sinc5+sinc1等)

与之搭配的PIC18F87K22微控制器是Microchip公司针对嵌入式控制应用推出的8位MCU,其特点包括:

  • 高达64MHz的工作频率
  • 128KB Flash程序存储器
  • 3.9KB RAM
  • 丰富的外设接口(5个SPI/I2C模块)
  • 低至1.8V的工作电压

这对组合能够满足大多数中高精度测量场景的需求,特别是在需要多通道采集的场合。AD7175-8通过SPI接口与PIC18F87K22通信,其硬件连接框图如下:

模拟信号源 → 信号调理电路 → AD7175-8(ADC) ↔ SPI ↔ PIC18F87K22(MCU)

2. 硬件系统设计与接口配置

2.1 信号输入电路设计

AD7175-8支持多种输入配置方式,在实际应用中需要根据信号特性选择合适的设计方案:

  1. 单端输入配置

    • 适用于对地参考的信号源
    • 最大输入电压范围:±VREF/增益
    • 典型应用电路:
      SIGNAL_IN → 10kΩ → AINx+ | 100nF → AGND
  2. 差分输入配置

    • 适合抑制共模噪声的场合
    • 输入阻抗典型值为200kΩ
    • 推荐使用仪表放大器作为前端:
      SIGNAL → INA128 → 100Ω → AINx+ | 100Ω → AINx-

关键提示:无论采用哪种配置,都应在ADC输入端添加RC低通滤波器(如1kΩ+100nF),以抑制高频噪声干扰。

2.2 SPI接口硬件连接

PIC18F87K22与AD7175-8的SPI接口连接需要特别注意时序匹配:

PIC18F87K22引脚AD7175-8引脚功能说明
RC3/SCKSCLKSPI时钟
RC5/SDODIN主机输出
RC4/SDIDOUT/RDY主机输入
RB2/CSCS片选信号

硬件设计要点:

  1. SPI时钟频率建议设置在1MHz以下以确保稳定通信
  2. CS信号线应添加10kΩ上拉电阻
  3. DOUT/RDY线可配置为中断触发模式,提高系统效率

2.3 参考电压设计

参考电压的稳定性直接影响ADC精度,推荐设计方案:

  1. 外部基准方案

    • 使用ADR445(5V)或ADR434(3.3V)等高精度基准源
    • 添加0.1μF+10μF去耦电容
    • 典型电路:
      VREF_OUT → 10Ω → AD7175-8 REFIN+ | 100nF → AGND
  2. 内部基准方案

    • AD7175-8内置2.5V基准(±5mV初始精度)
    • 需通过配置寄存器启用
    • 适合对成本敏感的应用

3. 固件设计与关键代码实现

3.1 SPI通信初始化

PIC18F87K22的SPI模块需要正确配置以匹配AD7175-8的时序要求:

void SPI_Init(void) { // 配置SPI主模式,时钟极性=1,相位=1 SSP1CON1 = 0b00110010; // SPI主模式,时钟=Fosc/64 SSP1STAT = 0b11000000; // 数据在时钟下降沿传输 // 配置引脚方向 TRISC3 = 0; // SCK输出 TRISC5 = 0; // SDO输出 TRISC4 = 1; // SDI输入 TRISB2 = 0; // CS输出 CS_ADC = 1; // 初始时取消选择ADC }

3.2 ADC寄存器配置

AD7175-8有丰富的配置寄存器,典型初始化流程如下:

void ADC_Init(void) { // 1. 复位ADC ADC_WriteRegister(REG_RESET, 0x00); __delay_ms(10); // 2. 配置接口模式 ADC_WriteRegister(REG_INTERFACE, 0x01); // 连续读取模式 // 3. 设置通道0为差分输入(AIN1+, AIN1-) ADC_WriteRegister(REG_CH0, 0x01); // AIN1+ -> AIN1- // 4. 配置采样率(10SPS)和滤波器类型 ADC_WriteRegister(REG_FILTER, 0x0A); // Sinc3滤波器 // 5. 启用内部基准 ADC_WriteRegister(REG_REF, 0x01); }

3.3 数据采集实现

高效的数据采集需要考虑RDY信号和SPI时序的配合:

uint32_t ADC_ReadData(void) { uint8_t buffer[3]; uint32_t result = 0; while(RDY_PIN == 1); // 等待数据就绪 CS_ADC = 0; // 选择ADC // 读取3字节数据(24位) buffer[0] = SPI_Transfer(0xFF); buffer[1] = SPI_Transfer(0xFF); buffer[2] = SPI_Transfer(0xFF); CS_ADC = 1; // 取消选择ADC // 组合数据 result = ((uint32_t)buffer[0] << 16) | ((uint32_t)buffer[1] << 8) | (uint32_t)buffer[2]; return result; }

4. 系统校准与性能优化

4.1 校准流程实现

AD7175-8支持多种校准模式,系统上电时应执行校准:

void ADC_Calibrate(void) { // 1. 内部零标度校准 ADC_WriteRegister(REG_MODE, 0x04); // 启动校准 while(ADC_ReadRegister(REG_STATUS) & 0x80); // 等待完成 // 2. 内部满标度校准 ADC_WriteRegister(REG_MODE, 0x08); while(ADC_ReadRegister(REG_STATUS) & 0x80); // 3. 系统校准(可选) if(DO_SYSTEM_CAL) { ADC_WriteRegister(REG_MODE, 0x0C); while(ADC_ReadRegister(REG_STATUS) & 0x80); } }

4.2 噪声抑制技巧

提高测量精度的实用方法:

  1. 数字滤波优化

    • 对于慢变信号,选择sinc5+sinc1滤波器组合
    • 调整输出数据速率(ODR)平衡噪声和响应速度
  2. 电源去耦设计

    • AVDD和DVDD分别添加10μF+0.1μF电容
    • 模拟和数字地单点连接
  3. PCB布局要点

    • 保持模拟信号走线远离数字线路
    • 使用地平面分割技术
    • 缩短ADC基准电压走线

5. 典型应用案例

5.1 温度测量系统

利用AD7175-8的高精度特性构建热电偶测量系统:

  1. 硬件配置

    • 通道0:热电偶输入(MAX31855作为冷端补偿)
    • 通道1:PT100温度传感器
    • 参考电压:外部4.096V基准
  2. 软件处理

    float Read_Temperature(void) { uint32_t adc_value = ADC_ReadData(); float voltage = (adc_value / 16777216.0) * 4.096; return (voltage - 1.25) / 0.005; // 热电偶转换公式 }

5.2 振动监测系统

多通道同步采集实现机械振动分析:

  1. 系统配置

    • 使用4个差分通道采集加速度计信号
    • 采样率设置为10kSPS
    • 开启50Hz/60Hz工频抑制滤波器
  2. 数据处理流程

    void Process_Vibration(void) { for(int i=0; i<4; i++) { ADC_SelectChannel(i); vib_data[i] = ADC_ReadData(); } FFT_Analysis(vib_data); // 执行频谱分析 }

6. 调试技巧与常见问题

6.1 典型故障排查

  1. 无数据输出

    • 检查SPI时钟极性/相位设置
    • 验证CS信号是否正常切换
    • 测量基准电压是否稳定
  2. 数据跳变严重

    • 检查输入信号是否超出范围
    • 验证电源去耦是否充分
    • 尝试降低SPI时钟频率
  3. 通道间串扰

    • 确保未使用通道被禁用
    • 检查多路复用器切换时间设置
    • 增加通道切换后的稳定时间

6.2 性能测试方法

  1. 静态参数测试

    • 使用高精度电压源输入直流信号
    • 记录100个采样点计算标准差
    • 绘制传递曲线分析非线性误差
  2. 动态性能测试

    • 输入1kHz正弦波信号
    • 采集1024点做FFT分析
    • 计算信噪比(SNR)和有效位数(ENOB)

在实际项目中,我发现AD7175-8的基准电压稳定性对系统精度影响极大。曾有一个案例,由于基准电源去耦不足,导致测量结果出现周期性波动。后来在基准引脚添加了10μF钽电容并联0.1μF陶瓷电容后,噪声水平降低了60%。这也提醒我们,高精度ADC设计必须重视电源质量。