13818|18

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求助:为什么我STM32L152的单通道连续AD采集数据不稳定 [复制链接]

如题两次数据有时候正好是1024 可能是丢位
但是具体还不清楚是怎么回事
请高人指教
此帖出自stm32/stm8论坛

最新回复

我也碰到了类似的问题,请具体说一下究竟是什么解决的,谢谢  详情 回复 发表于 2011-7-22 18:54
点赞 关注
 

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
void ADCInit(void)
{
   ADC_InitTypeDef ADC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
   /* ADC Configuration -------------------------------------------------------*/
   
  RCC_HSICmd(ENABLE); // Enable HSI Clock
   
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);  // Enable the AHB peripheral clock
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); // Enable the APB2 peripheral clock
  
  GPIO_InitStructure.GPIO_Speed= GPIO_Speed_40MHz;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  ADC_StructInit(&ADC_InitStructure);
  ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;//精度为12位
  ADC_InitStructure.ADC_ScanConvMode = DISABLE; //扫描模式
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//是否连续转换
  ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;//外部触发转换
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //右对齐
  ADC_InitStructure.ADC_NbrOfConversion = 1;
  ADC_Init(ADC1, &ADC_InitStructure);


  ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_96Cycles ); // ADC1 regular channel20 configuration

  //ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE); //中断使能

  //ADC_EOCOnEachRegularChannelCmd(ADC1, ENABLE);

  ADC_TempSensorVrefintCmd(ENABLE);//温度传感器

  //ADC_DelaySelectionConfig(ADC1,ADC_DelayLength_Freeze);

  ADC_Cmd(ADC1, ENABLE); //Enable ADC1
                                  
  while (ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET)          // Wait until ADC1 ON status 设置完成
  {
  }

  ADC_SoftwareStartConv(ADC1);
}


//采集电压值//
uint16_t Get_Battery_voltage(void)
{
     __IO uint16_t ADCdata = 0;        //转换完的结果

         while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET)// Wait until ADC Channel 20 end of conversion
    {
    }
         
         ADCdata = ADC_GetConversionValue(ADC1);             // Read ADC conversion result

                  if(ADCdata>4000||ADCdata<3000)
             wrong1++;

                         wrong3++;



   //ADC12_Off();
   //ADC12_DeInit();//复位
//        while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESET)
//        {
//        }

         
  return ADCdata;
}

以上是我的初始化函数,和读取函数~请各位帮忙看看
此帖出自stm32/stm8论坛
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 哪位高人指点我一下……………………苦求…………
此帖出自stm32/stm8论坛
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

4
 
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//是否连续转换

使用 连续转换的方式?
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 无论使用哪种转换模式 都会产生很大的波动
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
无论使用哪种转换模式 都会产生很大的波动
很大的波动,有多大?
使用STM32的 AD,需要注意一下阻抗匹配。保险起见,可以设置最大的采样时间。
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
正常采样的数据是3300——3400之间
但是波动的值能到1000多~~这个让我很郁闷~怎么匹配阻抗?
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

8
 


LZ,注意你的信号源内阻,STM32的AD输入阻抗不是固定的,采样率高,阻抗低,采样率低,阻抗高,这个其实很好理解,采样电路,相当于对一个电容充电,想采样的快,就需要充电速度快,也就是充电电流大,所以需要信号源内阻小,如果信号源内阻大,充电电流小,充电速度慢,在启动AD转换时,电容还没充到信号电压,转换后的值就小了。所以在AD输入之前加缓冲驱动还是比较好的

烦请楼主回答下:这个芯片的百片价格,看中了LCD驱动,但是带usb,估计比较贵,在网上没查到价格,请LZ答疑
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 
芯片是我们公司直接订购的,具体的内容我也不是特别了解。我现在在这家公司实习,所以也不太方便去打听。真是抱歉。

这个AD转换 我们主要用来转换电池电压。

我在错误数据中,找到了一些规律。 就是采集的结果可能丢失了 最高位或者其他位。

例如采集到的错误结果是 1000    正确的采样值应该是3048    希望大家能帮我找处这个问题的所在。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
你还是先交叉验证是哪儿的问题吧,比如用低内阻的信号源验证是否是信号源内阻的原因,用稳定的电压验证是否是被测电压存在毛刺,用稳定的参考电压验证电压基准源,这些弄完了基本上就知道是硬件的还是软件的问题了,然后再针对地处理
顺便说下,一般AD转换值需要进行数字滤波再用
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 我估计是软件问题
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
我估计是软件问题
建议LZ用 ST提供的例程,先试试
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

13
 
芯片是我们公司直接订购的,具体的内容我也不是特别了解。我现在在这家公司实习,所以也不太方便去打听。真是抱歉。

这个AD转换 我们主要用来转换电池电压。

我在错误数据中,找到了一些规律。 就是采集的结果可能 ...
如果AD直接 接电池,应该阻抗匹配不成问题。
如果电池通过电阻分压接AD,应该检查阻抗匹配问题
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

14
 
烦请楼主回答下:这个芯片的百片价格,看中了LCD驱动,但是带usb,估计比较贵,在网上没查到价格,请LZ答疑 ...
印象里,STM32L在淘宝上有卖。
另外,印象里ST官方的STM32L发布价格,在2$左右。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 
通过实验 进一步发现就是丢失了最高位~~导致数据错误 但是不知道为什么会丢失最高位

电路方面,我并没有直接连接电源,而是做了一个简单的分压电路,并且通过示波器  发现波形还是很稳定的………


弱弱的问一下 哪里有例程?
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

16
 
                                 找到例程…………………………里面的方法 我都试过了~~还是一样的不给力啊
此帖出自stm32/stm8论坛
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

17
 
                                 把ADC_SoftwareStartConv(ADC1);去掉试下
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

18
 
                                 问题终于解决了,秀娥该了PMW里一个选项,变成1.2v就搞定了
此帖出自stm32/stm8论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

19
 
我也碰到了类似的问题,请具体说一下究竟是什么解决的,谢谢
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表