STM32
直播中

李皓圳

7年用户 1065经验值
私信 关注
[问答]

STM8S103两路ADC单次转换AD值不对的原因?怎么解决?

STM8S103 两路ADC单次转换AD值不对,分别为第2路、第5路,单独采集任何一路AD值都正常正确,但两路轮询就两路AD值都不正确。

void ADC_Data_Read(unsigned int *AD_Value,unsigned char ch)
{
  ADC_CR1_bit.ADON = 0;
  ADC_CSR_bit.CH=ch;
  delay(1000);
  ADC_CR1_bit.ADON = 1;       //启动ADC
  
  delay(1000);
  ADC_CR1_bit.ADON = 1;       //启动ADC
  
  while(ADC_CSR_bit.EOC == 0);  //等待转换结束
  *AD_Value = ADC_DRH;          //先读取高8位
  *AD_Value = (unsigned int)((*AD_Value << 8) + ADC_DRL);   
  ADC_CSR_bit.EOC=0;
}


  while(1)
  {
   delay(1300);
   ADC_Data_Read( adc_2,2);
   delay(1300);
   ADC_Data_Read( adc_6,6);
  }

回帖(1)

木頭瓶子

2024-5-10 17:15:27
STM8S103两路ADC单次转换AD值不对的原因可能有以下几点:

1. 采样时间不足:在进行ADC转换时,需要确保每个通道的采样时间足够长,以便获得准确的AD值。如果采样时间太短,可能会导致AD值不准确。

2. 通道切换延迟不足:在进行多通道ADC转换时,需要在切换通道时留出足够的时间,以便ADC能够稳定并准备好下一个通道的转换。如果切换速度过快,可能会导致AD值不准确。

3. 电源和模拟地线不稳定:如果电源和模拟地线不稳定,可能会影响ADC的转换精度。确保电源和模拟地线稳定且无干扰。

4. 外部干扰:外部电磁干扰可能会影响ADC的转换结果。检查电路板布局,确保ADC输入信号线远离可能产生干扰的元件。

5. 程序逻辑问题:检查程序逻辑,确保在进行多通道ADC转换时,正确地设置了通道和采样时间。

针对以上可能的原因,可以尝试以下解决方案:

1. 增加采样时间:在ADC_Data_Read函数中,增加delay时间,确保每个通道的采样时间足够长。

2. 优化通道切换逻辑:在切换通道时,增加适当的延时,确保ADC有足够的时间稳定并准备好下一个通道的转换。

3. 检查电源和模拟地线:确保电源和模拟地线稳定且无干扰。如果需要,可以使用去耦电容来提高稳定性。

4. 减少外部干扰:检查电路板布局,确保ADC输入信号线远离可能产生干扰的元件。如果需要,可以使用屏蔽电缆来减少干扰。

5. 检查程序逻辑:仔细检查程序逻辑,确保在进行多通道ADC转换时,正确地设置了通道和采样时间。

6. 检查硬件连接:确保ADC输入信号线连接正确,没有松动或接触不良。

通过以上方法,应该能够解决STM8S103两路ADC单次转换AD值不对的问题。如果问题仍然存在,建议进一步检查硬件和软件,或者寻求专业人士的帮助。
举报

更多回帖

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