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

STM32L451ADC读数有问题

[复制链接]
古德猫宁 提问时间:2024-5-16 13:26 / 已解决

使用的是STM32L451 就使用了一个通道PC0 使用的CubeMX配置的ADC通道1 发现了几个问题

1 :读出的数据不对 比用万用表测量的数据高

2 :当我使用万用表测量数据的时候同时也使用adc读数的时候 就比不加万用表读取的数值低 比如我正常读取的电压值为0.61V 但是当我设备上电读取数据时同时使用万用表读取电压时 万用表读数为0.51V ADC读数为0.35V 不知道是什么原因 理论上加不加万用表不影响ADC读取数据啊

3 :我使用的是单次读取非连续读取 当我在每次读取数据前都校准一次后 读取的数据值就会比不加校准值低 而且当我软件上 设置的读取次数增加后数值也会变化 但是我用万用表测量万用表读取的数据一直没问题

我感觉可能是我的分压电路使用的电阻是不是太大了造成的?因为我需要低功耗所以设计电路的时候没考虑输入阻抗直接用了兆级的电阻

下面是我的软件配置以及硬件电路:

hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;//ʱÖÓ1·ÖƵ hadc1.Init.Resolution = ADC_RESOLUTION_12B;//ÅäÖÃadcµÄ·Ö±æÂÊΪ12λ hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;//ÓÒ¶ÔÆë hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;//²»Ê¹ÓÃɨÃèģʽ hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE;//µ¥´ÎÖ´ÐÐ hadc1.Init.NbrOfConversion = 1;//¹æÔò×éת»»¸öÊý hadc1.Init.DiscontinuousConvMode = DISABLE;//²»Ê¹Óüä¶Ïģʽ hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;//´¥·¢Ô´ Èí¼þ³ö·¢ hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;//Êý¾Ý±£ÁôÐÐΪ Êý¾Ý±£Áô¶ø·Ç¸²¸Ç hadc1.Init.OversamplingMode = DISABLE; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /* Configure Regular Channel / sConfig.Channel = ADC_CHANNEL_1; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5;//²É¼¯ÖÜÆÚÑ¡ÓÃ×î´óÖÜÆÚ È·±£¾«È·¶È sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0;

image.png

收藏 评论3 发布时间:2024-5-16 13:26

举报

3个回答
xmshao 最优答案 回答时间:2024-5-16 14:49:31
做ADC重点注意电源,尤其参考电压的稳定,再就是采用时间参数。
具体到你现在的应用,输入阻抗太大了。


ADC模块对输入阻抗是有最大值限制的,不同系列可能不一样,手册上有明确出来,
对于L4 系列,一般不要超过50K欧。


换成K级吧。有低功耗需求也不至于让一个电池使用万年吧。何况功耗是个整个概念,
或许即使这个地方再怎么省,别的地方不省也白搭。


要不,改成运放做跟随后再接到ADC。这样的话,电路就得调整。
butterflyspring 回答时间:2024-5-16 14:55:58
原因可能有如下几点:

1. 首先是信号的阻抗巨大,换句话说,就是电流小。 所以万用表接上,消耗一点点电流电压就下降。

2. 同理,对于ADC来说,消耗电流也会导致电压变化,同时充电速度满以及电容放电等,都会影响电压结果。

3. 所以电路要调整一下,如下图,增加一电容,同时增大采样时间。具体可以参考官方AN2834.
    代码部分可以使用库中例程。

Stm32l431 high impetance input ADC.PNG



古德猫宁 回答时间:2024-5-16 16:13:00

xmshao  发表于 2024-5-16 14:49
做ADC重点注意电源,尤其参考电压的稳定,再就是采用时间参数。
具体到你现在的应用,输入阻抗太大了。

好的 感谢 我把分压电阻换小了 果然问题解决了

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版