【嵌入式学习笔记】---- 快速入门ADC

前言

        本文章初步介绍在STM32主控芯片中的ADC开发调试,因本人尚在学习中,暂时只涉及了一些ADC的基本概念,目的是熟悉一下调试ADC的大致流程和方法,以便快速入门,ADC内核以及高级应用将会后续进行补充,若有不足,烦请大佬指正【抱拳】

1 ADC基本概念

        简单介绍一下常用的基本概念

1.1 电压转换

        ADC的数字存储是12位的 也就是说转换器通过采集转换所得到的最大值是4095 “111111111111”=4095 二进制的12位可表示0-4095个数, 对应着所测电压的实际值,转换的电压范围是0v-3.3v的话,转换器就会把0v-3.3v平均分成4096份。设转换器所得到的值为x,所求电压值为y=x/4096*3.3

1.2 分辨率

        读出的数据的长度,如8位就是最大值为255的意思,即范围[0,255];12位ADC的分辨率为[0,4095]

1.3 输入电压范围

        ADC所能测量的电压范围就是VREF-≤ VIN ≤ VREF+,把VSSA 和VREF-接地,把VREF+和VDDA 接3V3,得到ADC的输入电压范围为:0~3.3V。

1.4 输入通道

        ADC的信号时通过输入通道进入单片机内部的,单片机通过ADC模块将模拟信号转换为数字信号。  

1.5 转换通道

        外部的16个通道在转换时又分为规则通道注入通道,其中规则通道最多有16路,注入通道最多有4路

1.5.1 规则通道

        规则通道顾名思义就是,最平常的通道、也是最常用的通道,平时的ADC转换都是用规则通道实的。

1.5.2 注入通道

        注入通道是相对于规则通道的,注入通道可以在规则通道转换时,强行插入转换,相当于一个“中断通道”。当有注入通道需要转换时,规则通道的转换会停止,优先执行注入通道的转换,当注入通道的转换执行完毕后,再回到之前规则通道进行转换。

1.6 转换时间

        ADC 的转换时间跟 ADC 的输入时钟和采样时间有关。公式为:

Tconv = 采样时间(SampleTime) + 12.5 个周期

其中12.5个周期是采集12位AD时间是固定的,采样时间是确立在输入时钟上的,配置采样时间可以确定使用多少个ADC时钟周期来对电压进行采样。例如:当 ADCLK = 16MHZ ,采样时间设置为 3.5 周期,那么总的转换时间 Tconv = 3.5 周期 + 12.5 周期 = 16 周期 = 16* 1/16M = 1us。


2 ADC转换模式

        ADC开发调试中,需要根据数据的精度以及对数据采样的需求,选择合适的转换模式,从而提高数据的精确性以及数据处理的高效性

2.1 单次转换模式

        ADC只执行一次转换

2.2 连续转换模式

        转换结束之后马上开始新的转换

2.3 扫描模式

        ADC扫描被规则通道和注入通道选中的所有通道,在每个组的每个通道上执行单次转换。在每个转换结束时,这一组的下一个通道被自动转换。如果设置了CONT位(开启了连续 转换模式),转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。

2.4 间断模式

        触发一次,转换一个通道,在触发,在转换。在所选转换通道循环,由触发信号启动新一轮的转换,直到转换完成为止。


3 ADC转换的基本思想

模数转换,即将模拟信号转换为数字信号

        对于目前的STM32类MCU,几乎都是内部已经集成了ADC模数转换功能,对ADC外设进行相应的配置及编程即可开始采集外界模拟信号。 


4 ADC开发的基本流程

4.1 采样

        即采集外界模拟信号,将采集到的模拟信号通过输入通道输入给MCU进行下一步的ADC模数转换

        需要注意的是MCU无法识别负数信号,比如在采集正弦信号时,需要对正弦信号进行偏置,将信号抬到0轴以上,这样才能正常采集

        对于一些特殊的信号,尤其是音频信号这种跟频率有关的,采样的时间会有一定的要求,按照奈奎斯特的说法就是:采样频率需要大于原始信号频率的2倍(奈奎斯特采样定理)这样才能确保信号的完整性

4.2 模数转换

        在MCU的规则通道中对输入进来的模拟信号进行转换,得到MCU可使用的数字信号

        模数转换的数值大小根MCU里ADC的分辨率有关,如在12位MCU中,ADC转换的结果范围应在[0,4095]之间,HAL库开发中,根据库函数HAL_ADC_GetValue所得到的值便是该过程转换得到的值

4.3 电压转换(附加部分) 

        ADC常用的一种处理方式就是将转换得到的数字进行电压转换,以便检查ADC转换结果的准确性(将ADC得到的电压转换值跟实际传感器上的电压值对比),转换公式就是根据电压转换的基本概念来的

AD_value = HAL_ADC_GetValue(&hadc1);    //读取ADC转换结果	
ADC_Vol =(float) AD_value/4096*3.3;     //读取转换的电压值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Luminescence

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值