单片机如何处理ADC采样数据?
单片机工程师在面试的过程中,经常会碰到一些相同的问题,笔者总结了十个提问率较高的问题,供大家参考。现在我们来分析单片机工程师常遇面试问题之五:单片机如何处理ADC采样数据?
前面作者有文章介绍了单片机是如何采样电压和电流的,如有不了解单片机ADC采样原理的小伙伴可以点击我的头像进入我的主页查看文章"单片机是如何采样电流?"。
首先一定有小伙伴有疑问,为什么还要对采样的数据进行处理呢?直接拿来用不行吗?对于这个问题,我的回答是不建议这样做,因为任何系统都会存在干扰,不进行处理就会有数据存在一定的误差。那么我进行数据处理就是要尽量避免因外界干扰引起的误差。
在这里作者推荐两种方法,第一种方法是多次采样加权取平均,我相信很多朋友都可以想到这种方法,但在写程序的时候可以运用一些技巧,作者分享给你。首先我们ADC采集8次数据并且对这8次数据累加(可以每1ms调用该函数),累加完成后将累加结果右移3位得到最后的采样结果。当然这个方法还可以进一步改善,比如取样10次,然后去掉最大值和最小值,再对剩下的8次进行取平均。下面贴出参考程序供小伙伴参考。
图(1)参考程序
当然,第一种取平均的方法能够有效抑制干扰,但因为需要多次采样,更新数据的时间会很长,比如取样8次,每1ms取样一次,那么更新数据就需要8ms时间,所以对采样的数据实时性要求不是很高的系统才可以用这种方法。所以我们第二种方法就是用在实时性比较高的系统。作者推荐的是中值滤波的方法,实现思想就是取5个数据,每次采样的新数据替换掉最老的数据,然后把中间的那个数据当做是采样数据,这样不仅可以有效抑制干扰,而且响应速度快。
如文章存在问题,麻烦大家指正,如文章对你有帮助,欢迎关注作者,后面作者将为你推送更有价值的文章!如大家如有疑问,请把问题发到评论区,我们一起讨论。如各位路过的大佬有更好的方法,欢迎发到评论区分享给大家,谢谢~~
单片机如何通过ADC模块采集模拟信号
单片机的ADC接口属于模数转换接口,将外部的模拟量信号转化为数字信号,单片机属于数字器件,需将模拟信号转化为数字信号才能够为单片机处理。目前市场的很多单片机都自带ADC转换接口,若无ADC转换接口,可以使用ADC数模转换芯片外扩。
ADC模块是将模拟信号转化位数字信号,数字信号用0和1表示,ADC模块有参考电压,假设给的参考电压是5V,ADC是12位的(几位表示用二进制几位数存储模拟量转化后的数字量,12位的ADC则可储存数字量范围为:(二进制)000000000000~111111111111,转换为十进制数字范围为0~2^12即0~4095。
也就是说把参考电压分为2^12份即4096份,最小分辨率为VREF/4096。
也就是说二进制的000000000000代表输入模拟量0V,而111111111111代表最大值VREF。
下面以上图C8051单片机为例子,如原理图所示,该单片机工作电源为3.3V,参考电压为2.048V,所以模拟量的输入范围为0~2.048V。若所需采集的电压范围大于参考电压值时,可以使用电阻分压进行降压或者使用运放进行缩小等。
该单片机ADC为12位的。也就是说输入电压为0时,单片机转换后的数字量结果为000000000000(二进制),当输入电压为2.048V时,单片机转换后的数字量结果为111111111111(二进制),十进制为4095。
也就是说,输入电压的值V=2.048×ADC采集到的数字量÷4095。
比如我们要采集一个0~10V范围的模拟量电压进行显示,那么,可以先将0~10V的电压缩小5倍,可以使用电阻分压,也可以采用运放缩小等方式,然后接入单片机的ADC采样口,可以接入上图的P2.2口。
最后换算公式为:V = result * 2.048/ 4095 * 5;其中 result为单片机采集到的数字量。
相关问答
单片机 与 adc 之间如何连接?单片机与ADC之间可以通过多种方式进行连接,包括并行接口、串行接口、SPI接口等。其中,最常用的方式是通过SPI接口进行连接,通过SPI接口可以实现快速、稳定的数...
单片机 中 adc 是干啥的?单片机中的ADC是Analog-to-DigitalConverter的缩写,指模/数转换器或者模数转换器。ADC是指将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模...
单片机 对 ADC 的控制有几种?这个东西和单片机有关的主要是D0~D7ADDA、ADDB、ADDCALESTARTEOCOE相应的作用看下面ADC0809芯片有28条引脚,采用双列直插式封装,下面说明各引脚功能。.....
单片机 是10位的AD如何通过 程序 的方法达到12位的分辨率?单片机是10位ADC,是能用软件扩成12位结果的。方法其实很简单,但却是伪12位的结果。下面通过实例进行扩位演算,看看伪12位结果,在使用上的局限性。10位二进...
adc 采集信号的方法?放大经霍尔传感器采集的信号往往是小电流信号,需要经过放大后变成电压信号输入到单片机4/7ADC转换芯片经过放大后的芯片需要经过AD芯片,如AD7656等,将模...
12位 adc单片机 有哪些?1.C8051F020,集成了一个12bit的ADC和8bit的ADC,飞思卡尔十六位的单片机MSP430F5系列单片机;2.stm32f系列单片机;3.picf18系列单片机;等等。在使用的时...
单片机 AD和 ADC 的区别?主要区别如下:1.AD通常指模拟量到数字量的转换过程,是一种广义的概念。ADC则特指执行AD转换的硬件模块,是AD概念的一种实现方式。2.单片机中的ADC模块内置...
51 单片机 怎么和 adc 0808相连?你好,要将51单片机与ADC0808相连,需要进行以下步骤:1.连接引脚:将ADC0808的引脚与51单片机的引脚相连接。具体连接方式如下:-将ADC0808的VCC引脚连接到5...
请各位高手讲解一下 单片机 中 ADC 模块中的数据左对齐和右对齐是啥意思?把大概的工作原理讲下啦.谢谢啦?一般高于八位的ADC才会出现这种情况比如说AD转换后数字量保存在ADCH,ADCL两个寄存器中左对齐就是AD值的最高位就是ADCH的最高位了,ADCL的低位就会有的用不到...
adc 0809是什么 单片机 ?ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式A/D模数转换器。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟...