搜索
bottom↓
回复: 24

请教:请帮忙看看 STM32 ADC转换结果偏低,大概是什么原因

[复制链接]

出75入90汤圆

发表于 2018-3-2 10:17:46 | 显示全部楼层 |阅读模式
芯片换过,程序也看不出问题,折腾了两天一点头绪都没有,请帮我分析下大概问题出在哪里?不胜感激。
芯片 STM32F103VCT6 ;Vref=2.5V; VDDA=3.3V;VDD=3.5V,采样时间都调到最大了。

取了几个点的转换结果,如列表所示,输入电压约接近VREF,偏差就越小。
输入电压由一台HP的数控电源提供,然后用高位表直接测得ADC引脚与AGND的电压



ADC部分原理图如下:


初始化程序是参考正点原子的:
void  Adc_Init(void)
{          
        GPIOC->CRL&=0XFFFFFFF0; //  PC0 ADC10 anolog输入          
        GPIOC->CRL|=0X00000000;
        //通道10/11设置                         
        RCC->APB2ENR|=1<<9;            //ADC1时钟使能          
        RCC->APB2RSTR|=1<<9;           //ADC1复位                APB2 外设复位寄存器 (RCC_APB2RSTR)
        RCC->APB2RSTR&=~(1<<9);        //复位结束            
        RCC->CFGR&=~(3<<14);           //分频因子清零       
        RCC->CFGR|=3<<14;                  //SYSCLK/DIV2=9M ADC时钟设置为9M,ADC最大时钟不能超过14M!                 
        ADC1->CR1&=0XF0FFFF;           //工作模式清零
        ADC1->CR1|=~(1<<16);          //独立工作模式  
        ADC1->CR1&=~(1<<8);            //非扫描模式       
        ADC1->CR2&=~(1<<1);            //单次转换模式
        ADC1->CR2&=~(7<<17);          
        ADC1->CR2|=7<<17;                   //软件控制转换  
        ADC1->CR2|=1<<20;              //使用用外部触发(SWSTART)!!!        必须使用一个事件来触发
        ADC1->CR2&=~(0<<11);           //DATA左对齐         
        ADC1->SQR1&=~(0XF<<20); //这4位定义规则通道转换序列中的通道数目;0000=1个转换--1111=16个转换
        ADC1->SQR1&=0<<20;             //1个转换在规则序列中 也就是只转换规则序列1;具体要转换哪个通道后面再定义
        ADC1->SMPR1&=~(7<<0);          //通道10采样时间清空          
        ADC1->SMPR1|=7<<0;            //通道10  239.5周期,提高采样时间可以提高精确度
        ADC1->CR2|=1<<0;                   //开启AD转换器                       
        ADC1->CR2|=1<<3;               //初始化校准寄存器                                使能复位校准  ,可以修正内部电容器组产生的误差
        while(ADC1->CR2&1<<3);         //等待校准寄存器完成初始化                                                                等待校准结束
        ADC1->CR2|=1<<2;        //开启AD校准          
        while(ADC1->CR2&1<<2)   //等待校准结束       
        }
       

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-3-2 10:41:54 | 显示全部楼层
是不是,应该把 GND 和AGND 分开呢?

感觉可能是地线的问题吧..

出0入4汤圆

发表于 2018-3-2 10:57:38 | 显示全部楼层
分压电阻1K?  是不是太小了, 与片内阻抗不匹配?

出0入4汤圆

发表于 2018-3-2 11:01:47 | 显示全部楼层
注意,单片机AD输入阻抗也就几十K,前级加运放应没问题!

出0入0汤圆

发表于 2018-3-2 11:08:39 | 显示全部楼层
问题可能是: VDDA=3.3V;VDD=3.5V,
我记得VDDA要大于VDD.

出20入12汤圆

发表于 2018-3-2 11:13:54 | 显示全部楼层
如果ADC_IN有劲儿的话,减小R42和R45,并增大C40

出0入0汤圆

发表于 2018-3-2 13:33:55 | 显示全部楼层
su33691 发表于 2018-3-2 11:08
问题可能是: VDDA=3.3V;VDD=3.5V,
我记得VDDA要大于VDD.

5楼正解。

出75入90汤圆

 楼主| 发表于 2018-3-2 14:06:18 | 显示全部楼层
su33691 发表于 2018-3-2 11:08
问题可能是: VDDA=3.3V;VDD=3.5V,
我记得VDDA要大于VDD.

谢谢,但你记错啦。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-3-2 14:11:19 | 显示全部楼层
AD输入阻抗电阻有几十k,分压电阻参数小了,试试不要分压电阻R45,然后输入一个小电压(小于2.5v)。

出0入0汤圆

发表于 2018-3-2 14:19:16 | 显示全部楼层
先不要管外部了,读一下内部参考电压,看看数据如何

出0入0汤圆

发表于 2018-3-2 14:51:53 | 显示全部楼层
楼主VDD≥VDDA

出0入0汤圆

发表于 2018-3-2 15:03:11 来自手机 | 显示全部楼层
估计是阻抗匹配问题!

出0入17汤圆

发表于 2018-3-2 20:44:10 | 显示全部楼层
如果功耗要求不高,把R31减小些吧

出0入0汤圆

发表于 2018-3-2 20:58:26 | 显示全部楼层
zpywz 发表于 2018-3-2 14:06
谢谢,但你记错啦。

要看原厂的资料。附图仅供参考。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2018-3-2 21:14:19 | 显示全部楼层
上面的图片怎么显示不全?
VDDA=3.3V,VDD=3V。

出0入16汤圆

发表于 2018-3-2 22:01:23 来自手机 | 显示全部楼层
示波器看一下电压输入管脚,r42c40震荡了吧

出0入0汤圆

发表于 2018-3-3 10:20:06 | 显示全部楼层
你试一下就知道了,把VDD和VDDA接一起看看。

F1的规格可能没有下面这段话,其它一些系列有以下文字:
1. All main power (VDD, VDDA) and ground (VSS, VSSA) pins must always be connected to the external power supply, in the
permitted range. The following relationship must be respected between VDDA and VDD:
VDDA must power on before or at the same time as VDD in the power up sequence.
VDDA must be greater than or equal to VDD.

出0入0汤圆

发表于 2018-3-4 09:47:43 来自手机 | 显示全部楼层
受教,谢谢各位。

出0入0汤圆

发表于 2018-3-29 20:43:14 | 显示全部楼层
楼主问题解决没?到底是啥问题?

出75入90汤圆

 楼主| 发表于 2018-3-29 21:09:05 | 显示全部楼层
yanjian305 发表于 2018-3-29 20:43
楼主问题解决没?到底是啥问题?

不是STM32 ADC的事,是我自己犯了低级错误:
自编的求平均的函数,用于12位ADC。这次开始改为8位ADC,后来发现8位不够用,又改回16位。
其中一个常量的定义从0xffff变更为0xff。需要改回的时候忘了把它改回来。好些天了具体记不清了。

出0入0汤圆

发表于 2018-3-30 07:28:51 来自手机 | 显示全部楼层
哈哈哈!

出0入0汤圆

发表于 2018-3-30 09:03:51 | 显示全部楼层
zpywz 发表于 2018-3-29 21:09
不是STM32 ADC的事,是我自己犯了低级错误:
自编的求平均的函数,用于12位ADC。这次开始改为8位ADC,后 ...

好吧,学习了,至少知道这个路是通的!

出0入0汤圆

发表于 2018-3-30 09:38:05 | 显示全部楼层
很羡慕楼主有高端的测量仪表。

出0入0汤圆

发表于 2018-3-30 22:27:04 | 显示全部楼层
也学习下,谢谢各位。

出35入0汤圆

发表于 2019-10-14 15:04:58 | 显示全部楼层
学习了,最后的误差是多少?模拟电源和数字电源是分开的还是隔离的?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 07:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表