You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32 HAL控制I2C/ADC时voltage通道始终返回0值求助

ADS112C04采集电压始终为0的排查与解决

硬件层面排查

  • 确认ADS112C04供电正常:测量VDD引脚电压,确保符合芯片规格(3.3V或5V)
  • 检查I2C总线接线:SDA/SCL引脚是否接对,上拉电阻(通常4.7kΩ)是否正确焊接
  • 验证外部参考电压:若配置了外部参考(ADS112C04_VREF_EXT_REF_PINS),需确认REFp和REFn之间接入了2.048V精准参考源;未外接则需修改代码为内部参考
  • 检查AIN0输入:确认被测电压正确接入AIN0和AVSS,电压范围需匹配PGA增益后的输入上限(增益1时为0~Vref)
  • DRDY引脚电平验证:用示波器查看转换过程中DRDY的电平变化,确认数据就绪时的电平状态

代码逻辑修正

1. DRDY等待条件反向问题

ADS112C04的DRDY引脚默认转换完成后拉低(数据就绪时为低电平),你的代码中错误等待引脚变高,导致超时后跳过数据读取,raw24保持初始0,最终电压为0。修改如下:

// 原错误代码
while (HAL_GPIO_ReadPin(DRDY_GPIO_Port, DRDY_Pin) == GPIO_PIN_RESET)
{
  if ((HAL_GetTick() - start) > ADS112C04_CONVERSION_TIMEOUT) break;
}

// 修改为:等待DRDY低电平(数据就绪)
while (HAL_GPIO_ReadPin(DRDY_GPIO_Port, DRDY_Pin) == GPIO_PIN_SET)
{
  if ((HAL_GetTick() - start) > ADS112C04_CONVERSION_TIMEOUT) break;
}

2. 确认设备初始化状态

检查ADS112C04_begin(&hi2c1, 0x40)的返回值,若返回false说明I2C地址错误或设备未响应:

  • 匹配硬件ADDR引脚连接:ADDR接GND对应0x40,接VDD为0x41,接SDA为0x42,接SCL为0x43
  • 添加调试代码打印ads_present值,确认设备是否被正确识别

3. 转换数据读取验证

在ADS112C04_getConversionData(&raw24)后添加调试输出,查看raw24实际值:

  • 若raw24始终为0,说明未读到有效数据,需排查I2C通信或设备配置
  • 若raw24非零,再检查电压转换公式是否正确

4. 转换模式配置

ADS112C04默认是单次转换模式,每次ADS112C04_start()仅执行一次转换;若需要连续采集,需添加模式配置:

// 在ADS112C04_begin后添加
ADS112C04_setOperatingMode(ADS112C04_MODE_CONTINUOUS);

初始化配置检查

  • 参考电压匹配:若未外接2.048V参考源,需修改参考配置为内部源:
ADS112C04_setVoltageReference(ADS112C04_VREF_INT_2V048);

同时确保ADS_VREF常量与配置一致

  • PGA增益同步:确认ADS_GAIN与实际配置的PGA增益匹配,若修改增益(如设为2),需同步更新该常量

调试建议

  • 抓取I2C通信包:用逻辑分析仪或STM32CubeIDE的I2C调试功能,确认寄存器配置和数据读取命令是否正确
  • 断点调试:在主循环中设置断点,查看adc_ch0和voltage_ch0的实时值,确认代码是否进入数据读取分支

内容的提问来源于stack exchange,提问作者Brii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 22:38:08