你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2402|回复: 0

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

[复制链接]

2

主题

5

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-4-30 13:43:33 | 显示全部楼层 |阅读模式
 我用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[150];
  float ad_value[150],temp=0 ,sum=0;

  for(i=0;i
电路图.jpg
回复

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版