ADC(模数转换器)

ADC(模数转换器)Converter 即模数转换器 是一种逐次逼近型模拟数字转换器

大家好,欢迎来到IT知识分享网。

ADC介绍

ADC:(Analog to Digital Converter),即模数转换器,是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。

ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。 它的一般工作过程为:采样——保持——量化——编码。

ADC框图

STM32F103中ADC模块的引脚,分为三个部分,红色框住的是参考电压引脚和器件工作所需电压的引脚;

蓝色和黄色框表示ADC的通道,每个ADC具有多达18个复用通道,可测量来自16个外部源(蓝色框住的,测量从GPIO端口输入的信号)、两个内部源和VBAT通道的信号(黄色框住的,是内部已经接好了的内部输入信号通道)。

ADC(模数转换器)

 ADC引脚
ADC(模数转换器)

STM32F10X ADC特点

  • 12位(位数决定精度)逐次逼近型的模拟数字转换器。
  • 最多带3个ADC控制器(每个控制器有多个通道)
  • 最多支持18个通道,可最多测量16个外部和2个内部信号源。
  • 支持单次和连续转换模式
  • 转换结束,注入转换结束,和发生模拟看门狗事件时产生中断。
  • 通道0到通道n的自动扫描模式
  • 自动校准
  • 采样间隔可以按通道编程
  • 规则通道和注入通道均有外部触发选项
  • 转换结果支持左对齐或右对齐方式存储在16位数据寄存器
  • ADC转换时间:最大转换速率 1us。(最大转换速度为1MHz,在ADCCLK=14M,采样周期为1.5个ADC时钟下得到。)
  • ADC供电要求:2.4V-3.6V(通常0-3.3)
  • ADC输入范围:VREF​ ≤ VIN ​≤ V0REF+​

ADC通道选择

ADC(模数转换器)

单次转换模式

ADC(模数转换器)

连续转换模式

ADC(模数转换器)

ADC时序图

ADC(模数转换器)

STM32F1x ADC(库函数)

先开启ADC外设时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

设置ADCCLK的预分频器

ADC(模数转换器)

ADCCLK预分频器,ADC最多只能14MHz,APB2位72MHz,选择6分频,72/6得到12MHz

RCC_ADCCLKConfig(RCC_PCLK2_Div6);

初始化ADC

ADC(模数转换器)

初始化ADC,参数一:指定使用哪个ADC资源,可选ADC1、ADC2、ADC3。

                      参数二:传入ADC_InitStruct类型变量的地址。

ADC_Init(ADC1,&ADC_InitStruct);

ADC(模数转换器)

ADC_Mode 选择工作模式,仅用单个ADC的话,那我们选择ADC_Mode_Independent
ADC_ScanConvMode

是否开始扫描模式,ENABLE或是DISABLE,不开启的话,仅转换

待转换队列的第一个通道,开启之后会自动按照顺序来转换每个配置过

的通道,一般扫描模式配合DMA转运一起,因为ADC转换速度极快,而

所有通道的转换结果都是放到同一个寄存器里的,因此手动转移结果太慢

的话就会被覆盖,太快的话就会拿到错误数据。

ADC_ContinuousConvMode

是否开启连续模式,ENABLE或是DISABLE,不开启的话每次转换

完一次待转换队列的通道之后就会停下,等待下次转换指令。

开启的话就会不断地一次次自动转换所有配置过的通道。

ADC_ExternalTrigConv

是否使用外部触发,不使用则软件触发,一般使用

软件触发ADC_ExternalTrigConv_None,触发函数下面会介绍。

ADC_DataAlign

数据对齐方式,ADC转换的结果是12位的,而存放结果的

寄存器是16位的,因此有4位的空白位,我们可以选择左对齐或是右对齐,

一般选择右对齐ADC_DataAlign_Right

ADC_NbrofChannel

通道数目,1 to 16  配置多少就写多少。

 配置规则组的输入通道

ADC(模数转换器)

参数一:指定ADC资源

参数二:指定通道,参考引脚定义表

参数三:此参数介于1到16之间,理解为ADC转换通道需要排队,按顺序来转换

参数四:选择转换时间。实际上是选择用几个周期去采样时间,使用的周期越多采样时间越长,得到的数据也就更稳定,没有特殊要求的话可以随意选择一个选项。

ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_239Cycles5);

 以内部的温度传感器为例计算这个选项该如何选择

ADC(模数转换器)

参考手册里说推荐采样时间为17.1us,而采样时间的计算公式为:

(1s/12MHz)*x。x为我们选择的采样花费的周期数,经过计算我们可以知道,x至少要为205.2,因此如果我们要采样内部的温度传感器的话,我们应该选择ADC_SampleTime_239Cycles5

使能ADC

ADC(模数转换器)

参数一:选择ADC资源

参数二:选择是否使能

ADC_Cmd(ADC1,ENABLE);

校准 

ADC 有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。在

校准期间,在每个电容器上都会计算出一个误差修正码 ( 数字值 ) ,这个码用于消除在随后的转换

中每个电容器上产生的误差。

ADC(模数转换器)

ADC(模数转换器)

ADC(模数转换器)

ADC(模数转换器)

参数:传指定ADC资源

    ADC_ResetCalibration(ADC1);                                              //复位校准
    while(SET==ADC_GetResetCalibrationStatus(ADC1));        //等到复位校准完成
    ADC_StartCalibration(ADC1);                                                //开始校准
    while(SET==ADC_GetCalibrationStatus(ADC1));                  //等待校准完毕


 取值

ADC(模数转换器)

参数一:指定要读取的ADC资源

读取对应的ADCDR寄存器(读取转换完的数据的前提是转换完了,如果不是连续模式的话,我们是需要先触发转换并且等待转换完毕之后再读取的)

ADC_GetConversionValue( ADC1 );

 软件触发转换

ADC(模数转换器)

参数一:指定触发转换的ADC资源

参数二:是否开启触发转换

ADC_SoftwareStartConvCmd(ADC1,ENABLE);

 获取ADC标志位

ADC(模数转换器)

参数一:指定ADC资源

参数二:指定要获取的标志位,转换是否结束,获取的标志位:ADC_FLAG_EOC 

ADC_GetFlagStatus( ADC1 ADC_FLAG_EOC )

 使用内部温度传感器

ADC(模数转换器)

参数:是否开启

ADC_TempSensorVrefintCmd(ENABLE);

 如果要使用内部的温度传感器的话,使用上面的函数把功能打开,并且这个传感器只能为ADC1使用,通道为第17个通道,也就是 ADC_Channel_16。并且上面说了,推荐的采样时间为17.1us,需要根据这个来配置采样周期。

ADC(模数转换器)

假设得到的值为x,那么转换为摄氏度的公式为: (1.43-(x*(3.3/4096)))/0.0043+25

最后接线调试。

简述ADC流程

  • 首先需要打开外设时钟,使用ADC1就把对应的时钟打开。
  • 如果外接模拟信号的话,就把对应的GPIO口配置为模拟输入模式,同时对应的外设时钟也要打开。
  • 配置ADCCLK的分频器,因为不能超过14MHz,所以至少是6分频。
  • 初始化ADC,参考上面的函数。
  • 配置输入通道(一般使用规则组的通道)。
  • 使能,上电完之后校准(非必须,但是加上不碍事)
  • 在需要的时候触发转换(如果是连续模式的话就不用手动触发了),然后获取值。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/140608.html

(0)
上一篇 2025-05-25 17:26
下一篇 2025-05-25 17:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信