单片机/MCU论坛
直播中

啃胡萝卜第一名

3年用户 8经验值
擅长:模拟技术
私信 关注
[问答]

ADS8699模数转换读取模拟电压数值不正确

我用STM32F103C8T6主控芯片,ADS8699模数转换芯片对模拟电压进行采集。现在遇到的问题1是对控制芯片输入范围的寄存器写不进去数据;2是如果我将ADS的输入AIN-P和AIN-GND短接,就可以读取到0V,如果不短接就读取不到正确的电压,而且浮动在0.5V左右。下面是我的配置采样范围写寄存器的代码以及硬件部分连接。希望能有友友提供一些思路或者看法,谢谢!image.pngimage.png

已退回30积分

回帖(1)

李丽

2025-3-27 17:54:27

针对你遇到的ADS8699与STM32F103C8T6的配置问题,以下是逐步排查和解决方案:


问题1:输入范围寄存器无法写入




  1. SPI通信验证



    • 时序与模式:确认STM32的SPI配置为模式1(CPOL=0, CPHA=0)或模式3(CPOL=1, CPHA=1),ADS8699通常支持这两种模式。检查数据手册确认具体模式要求。

    • 速率设置:确保SPI时钟速率不超过ADS8699的最大支持频率(通常为15 MHz)。

    • 数据格式:ADS8699采用MSB优先传输,数据帧格式为16位或24位(需根据寄存器操作类型确定,例如寄存器写入可能需要24位帧:8位命令 + 16位数据)。




  2. 片选信号(CS)时序



    • 确保在传输数据时CS保持低电平,并在传输结束后拉高。使用示波器或逻辑分析仪观察CS信号的波形,避免过早释放。




  3. 寄存器地址与数据格式



    • 输入范围寄存器的地址为每个通道独立配置,例如通道0的地址可能是0x05(需查阅手册确认)。

    • 写入命令格式示例:0x02 << 24 | (REG_ADDR << 16) | DATA(24位帧,包含写命令位、寄存器地址和16位数据)。




  4. 电源与参考电压



    • 检查AVDD(模拟电源)和DVDD(数字电源)是否为5V或3.3V(根据芯片要求)。

    • 确认参考电压(REFIO引脚)是否稳定在4.096V(典型值),若使用内部参考需通过寄存器启用。




  5. 读取寄存器验证



    • 发送读命令(例如0x01 << 24 | (REG_ADDR << 16))读取寄存器值,确认写入是否成功。




问题2:输入未短接时读数异常




  1. 输入范围配置



    • 若未正确配置输入范围,默认范围可能不匹配实际信号。例如,若实际输入为0-5V单极性,需将寄存器设置为UNIPOLAR 0-5V模式(对应数据值参考手册)。




  2. 输入信号处理



    • 悬空噪声:当AIN-P未连接时,输入端可能引入噪声。建议在AIN-P和AIN-GND之间添加10kΩ下拉电阻或0.1μF滤波电容。

    • 信号源验证:使用已知电压源(如分压电路)测试ADC读数,排除信号源问题。




  3. 硬件连接检查



    • 确认AIN-P与信号源的连接无断路或接触不良。

    • 检查模拟地(AGND)和数字地(DGND)是否单点共地,避免地环路干扰。




  4. 转换模式与触发



    • 确认ADC工作模式(软件触发/连续转换)。在软件触发模式下,需手动发送启动转换命令;在连续模式下需确保时序正确。




  5. 过压保护(OVP)



    • 检查是否启用OVP功能,若输入超过设定范围可能导致钳位。通过寄存器禁用OVP(如必要)或调整输入范围。




代码示例修正(关键部分)


// SPI发送函数示例(24位数据帧)
void ADS8699_WriteReg(uint8_t reg_addr, uint16_t data) {
    uint32_t tx_data = (0x02 << 24) | (reg_addr << 16) | data; // 写命令 + 寄存器地址 + 数据
    HAL_SPI_Transmit(&hspi1, (uint8_t*)&tx_data, 3, 100); // 发送24位数据
}

// 配置通道0输入范围为±5V
ADS8699_WriteReg(0x05, 0x0004); // 假设0x05为通道0范围寄存器,0x0004对应±5V

总结



  • SPI通信:优先验证时序和寄存器读写操作,使用工具抓取波形确认数据正确性。

  • 硬件设计:确保电源、参考电压稳定,输入信号路径可靠,避免悬空噪声。

  • 寄存器配置:严格遵循数据手册的寄存器地址和数值定义,必要时通过回读确认配置生效。


通过以上步骤逐一排查,应能解决寄存器写入失败和输入读数异常的问题。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分