stm32F103——ADC与DMA(按键与光敏电阻)

本文深入介绍了ADC(模拟到数字转换器)的工作原理,包括通道选择、采保电容、采样时间和转换时间的影响,强调了参考电压的稳定性和分辨率的重要性。通过逐次逼近型ADC的转换过程,解析了ADC的转换规则。同时,讨论了ADC在实际应用中的参数配置,如采样间隔、DMA数据搬运和自校准,以及如何处理ADC读取的数据。最后,给出了ADC编程的实例,展示了ADC配置和数据处理的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ADC的基本介绍

ADC的基本定义

Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。

典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。

我们先来看ADC的工作原理:

 

        通道选择:1个ADC模块具有多个通道,不同的通道在不同的引脚上。所以,我们要采集哪个引脚上面的模拟量,需要我们去选择对应ADC通道。

        采保电容:采样保持电容。当开关闭合的时候,给采保电容进行充电,然后在规定的时间内断开开关,然后将采保电容上面的模拟量电压进行转换为数字量。这个就是ADC的采集原理。

        采样时间:当开关闭合的时候,给采保电容进行充电,然后在规定的时间内断开开关,然后将采保电容上面的电压进行转换。这个规定时间就是采样时间。采样时间是会变化的。

        转换时间:对采保电容中的存的电压进行转换,转换模块会花费一定的时间,这个就是转换时间。然后把转换的结果存入缓冲器,供程序员读取使用。转换时间是固定不可变的。

        注意:采样时间并不是固定不变的,采样时间需要做实验,根据实验结果来调整采样时间。

        采样时间不能过长,也不能过短。当采样数据过长,由于输入量是一直在变化的,所以就会导致采保电容上面的电压也是一直在变化的,如果电压值一直在变化我们采集出来的值也不是一个真实反映情况的值。我们采集出来的值,是需要有代表性作用的。

        当采样时间过短,假如输入电压是3V,那么当给采保电容充电到1.5V的时候,开关就断开了,此时就不能正确的反应输入的电压了。而且还有采样信号源内阻的问题,说白了就是对这个采保电容充电的电流够不够大,只有充电的电流大了,才能在最短的时间内充满,由于电容充满电后相当于开路,此时ADC内阻无穷大。如果充电的电流非常小,那么充电时间长,电容在充电的时候阻抗非常小,此时ADC内阻就非常小。如果此时恰恰配置的采样时间又很小,结果只有一个,采样不准确。我们经常看到,有的设计方案,做电压采样,分压电阻设计的阻值非常大,当这样的大阻抗遇到高速采样的时候,小电阻钳位大电阻,此时R1、R2电阻的分压就不准确了,那么采样就有可能会不准确。如下图:

        大家看上面的R1、R2设置大了,那么充电电流就小了,那么R1、R2的阻值设计小了,充电电流大了,那么带来的问题功耗就大了,当需要高速采样的时候,就需要注意这个阻值分配的问题,对功耗要求比较高的产品,如可穿戴产品,蓝牙耳机,智能手表等,这个就需要大的阻值了,一般情况下功耗要求不高的场合,我们基本上设计在1-2mA,所以从此可以得出一个结论,采样时间不是越快越好,也不是越慢越好,恰到好处即可,需要你去实际调试。

        如何从带有干扰杂波的信号中提取到有用的信号呢,一般情况下,我们会根据系统的特性进行定点采样,即避开干扰区来采样提取有用的信号,再配软件或者硬件滤波手段来提取有用信号。

        所以采集一个信号就有2个时间了:采集时间 + 转换时间,这两个时间也就反应了采集速度有多快,能不能快。这两个时间决定了ADC采样的速度问题,当需要高速AD采样的时候,这两个时间尤为重要,因为它决定了采样速度。

采保电容得到了准确的采样信号,就一定意味着转换结果准确吗?

        答案肯定是NO,这个和ADC模块的参考电压也有关系,参考电压就像一标准样品一样,举例来讲:老板说照着这个样品给我做100个,那首先前提是你的样品得准确,如果样品都不准确,那做出来的东西也必然会有偏差。

ADC的转换原理

逐次比较型ADC
        一般单片机里面都是用逐次比较型ADC转换。其基本原理是从高位到低位逐位试探比较,好像用天平称物体,从重到轻逐级增减砝码进行试探。逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置1,送入D/A转换器,经D/A转换后生成的模拟量送入比较器,称为 Vo,与送入比较器的待转换的模拟量Vi进行比较,若Vo<Vi,该位1被保留,否则被清除。然后再置逐次逼近寄存器次高位为1,将寄存器中新的数字量送D/A转换器,输出的 Vo再与Vi比较,若Vo<Vi,该位1被保留,否则被清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。

      

        上图是一个8位逐次逼近型ADC的框图,“输入的模拟量”是输入电压信号,“START”用来控制ADC启动转换,“CLOCK”是ADC模块的输入时钟,“EOC”是ADC转换结束信号,“OE”是ADC转换结果输出允许信号,“VREF”是参考电压。

        随着时钟信号的输入,启动信号的开始,控制模块会逐次控制逐次比较寄存器产生不同的数据,数据产生后会送给D/A转换器(即DAC),D/A转换器会依据参考电压,把这个数字量转化为模拟量送给比较器,比较器比较D/A转换器送出来的模拟量和输入模拟量的大小,产生的结果给控制单元电路,控制单元电路根据上一次的结果再次控制产生不同的数据,让D/A变成模拟量,再去比较,以此这样循环,每次比较,比较器会得出一个结果高或者低,根据这个结果决定当前产生的数字量是大了还是小了,一次一次的比较,找到那个和输入模拟量最接近的数字量,最后把这个数字量控制送到输出缓冲器,并且控制送出EOC输出转换完成信号,这就是一个大致的逐次逼近工作原理。

        详细过程,请查看视频:【张飞实战电子】剖析影响ADC结果关键因素-第二集_哔哩哔哩_bilibili

        从上面的描述中,我们抓住一个重点是:D/A转换器会依据参考电,把生成的数字量变为模拟量,在转

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值