前言
本文章初步介绍在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,所求电压值为
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; //读取转换的电压值