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

查看: 2439|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版