fgp810420 发表于 2012-4-30 13:43:33

STM32的ADC采用的奇怪问题,求助解决办法

 我用STM32自带的的ad测量一个直流24V电压,如果系统上电后在接入24V时,测量的数据比较稳定,如果上电前就接入24V,测量的数据变化的很大,我采用分压电阻,后面加了一个跟随器,有高手知道怎么处理吗?
 
以下是我AD处理函数:
/*********************************************************************/

void ADC_Configuration(void)
{
        ADC_InitTypeDef ADC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
          /* Configure PA.00  (ADC Channel0) as analog input */
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
          GPIO_Init(GPIOA, &GPIO_InitStructure);
 
          ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // ADC1和ADC2工作在独立模式 ;
          ADC_InitStructure.ADC_ScanConvMode = ENABLE;  // 模数转换工作在扫描模式(多通道)模式 ;
          ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 模数转换工作在连续模式 ;
          ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        // 转换由软件而不是外部触发启动 ;
          ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // ADC数据右对齐 ;
          ADC_InitStructure.ADC_NbrOfChannel = 1; // 顺序进行规则转换的ADC通道的数目 1 ;
          ADC_Init(ADC1, &ADC_InitStructure);
 
        // 设置指定ADC的规则组通道1,设置它们的转化顺序和采样时间为55.5周期 ;
          ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1,ADC_SampleTime_239Cycles5);
 
          ADC_DMACmd(ADC1, ENABLE); // 使能指定的ADC的DMA请求 ;
          ADC_Cmd(ADC1, ENABLE); // 使能指定的ADC ;
 
          ADC_ResetCalibration(ADC1);        // 重置指定的ADC的校准寄存器 ;
          while(ADC_GetResetCalibrationStatus(ADC1)); // 获取ADC重置校准寄存器的状态 ;
 
          ADC_StartCalibration(ADC1);       // 开始指定ADC的校准程序 ;
          while(ADC_GetCalibrationStatus(ADC1)); // 获取指定ADC的校准状态 ;
     
          ADC_SoftwareStartConvCmd(ADC1, ENABLE);        // 使能指定的ADC的软件转换启动功能 ;       
}
/********************************************************************/

/*************************************************************
* 函数名: u16 ReadADC()
*功能描述:读取ADC的值,并进行软件滤波
*参数输入:无
*输出参数:电压值,返回数据为电压扩大100倍,24.33->2433
*************************************************************/
u16 ReadADC()
{
  u8 i,j,num=80;
  u16 value_buf;
  float ad_value,temp=0 ,sum=0;

  for(i=0;i
页: [1]
查看完整版本: STM32的ADC采用的奇怪问题,求助解决办法