STM32
直播中

孔朱磊

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

STM8L151C8T6使用ADC采样,发现数据没有规律的乱变是怎么回事?

芯片型号STM8L151C8T6
使用ADC,内部1.225V参考电压采样,计算电源电压。采样50次,发现数据没有规律的乱变,网上能找到的例子都试过了,甚至库函数中使用到的寄存器也都查看过了,找不到问题原因。

void ADC_Config_VCC(void)
{

  CLK_PeripheralClockConfig(CLK_Peripheral_ADC1,ENABLE);  //开启ADC1时钟

  ADC_VrefintCmd(ENABLE);   //使能内部参考电压
  ADC_Init(ADC1,ADC_ConversionMode_Single,ADC_Resolution_12Bit,ADC_Prescaler_1);   //连续转换,12位,转换时钟1分频

  ADC_ChannelCmd(ADC1,ADC_Channel_Vrefint,ENABLE);   //使能内部参考电压通道
  ADC_Cmd(ADC1,ENABLE);//ADC使能
}


void ADC_dispose(void)
{

uint8_t temp_i;
  uint16_t adc_data1[50];


ADC_Config_VCC();//ADC初始化,采样1.225V的参考电压,来反推出电源电压
  adc_data =0;
for(temp_i=0;temp_i<50;temp_i++)
  {
    ADC_SoftwareStartConv(ADC1);    //开启软件转换
    while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));    //等待转换结束
    ADC_ClearFlag(ADC1,ADC_FLAG_EOC);    //清除对应标志
    adc_data1[temp_i]=ADC_GetConversionValue(ADC1);    //获取转换值

  }

}
这是采集到的数据

回帖(2)

石飞鹏

2024-4-25 16:15:52
开启AD后,稍加点延时,然后再判断转换标志。

初始化中加一条,ADC_SamplingTimeConfig(ADC1, ADC_Group_SlowChannels, ADC_SamplingTime_384Cycles);
举报

杨平

2024-4-25 17:02:10
STM8L151C8T6使用ADC采样时,数据没有规律的乱变可能是由多种原因导致的。以下是一些可能的原因及解决方法:

1. 采样速率过高:如果采样速率过快,可能导致ADC没有足够的时间稳定,从而产生不稳定的采样数据。尝试降低采样速率,例如使用ADC_Prescaler_2或更高的预分频器。

2. 输入信号不稳定:确保输入信号稳定,没有噪声干扰。如果可能,使用去耦电容和滤波器来减少噪声。

3. 电源电压不稳定:检查电源电压是否稳定。不稳定的电源电压可能导致ADC采样数据不稳定。使用稳压器和去耦电容来确保电源电压稳定。

4. 内部参考电压不稳定:确保内部参考电压稳定。可以使用外部参考电压来提高测量精度。

5. ADC配置问题:检查ADC配置是否正确。确保选择了正确的ADC通道、分辨率、转换模式和时钟设置。

6. 软件问题:检查代码是否有逻辑错误,例如错误的数据读取或处理。

7. 硬件问题:检查硬件连接是否正确,例如ADC输入引脚是否正确连接到待测信号。

8. 环境干扰:确保测量环境没有强电磁干扰,这可能影响ADC采样数据。

9. 温度变化:温度变化可能影响ADC性能。确保测量环境温度稳定。

10. 芯片质量问题:如果以上方法都无法解决问题,可能是芯片本身存在质量问题。尝试更换芯片。

综上所述,要解决STM8L151C8T6使用ADC采样时数据乱变的问题,需要从多个方面进行排查和优化。希望这些建议能帮助您找到问题的原因并解决它。
举报

更多回帖

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