深入解析STM32的ADC模块工作原理

目录

  • ADC特点介绍
  • ADC功能框图讲解
  • ADC输入引脚电压输入范围
  • ADC输入通道和引脚对应关系(F1系列,没有PF)
  • ADC通道转换模式与转换顺序
  • ADC通道转换时间计算
  • ADC中断
  • 电压计算
  • 双ADC模式是否开启(一般不开启)
  • 数据对齐方式
  • 实验
  • ADC特点介绍

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

    功能框图

    ADC输入引脚电压输入范围

    电压

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

    ADC输入通道和引脚对应关系(F1系列,没有PF)

    引脚对应关系

    外部通道(16个)分为规则通道注入通道,其中规则通道最多有16路,注入通道最多有4路(注入通道使用不多)
    规则通道注入通道

    规则通道组:相当正常运行的程序,平时的ADC转换都是用规则通道实现的。规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的JL[3:0]中

    注入通道组:注入通道可以在规则通道转换时,强行插入转换,相当于中断,注入组和它的转换顺序在ADC_JSQR寄存器中选择。注入组里转换的总数应写入ADC_JSQR寄存器的JL[1:0]中

    ADC通道转换模式与转换顺序

    三种转换模式:单次,连续,扫描模式。
    单次与连续转换模式单次CONT
    连续ADON扫描模式
    扫描SCAN

    如果ADC只使用一个通道来转换,那就很简单,但如果是使用多个通道进行转换就涉及到一个先后顺序了,毕竟规则转换通道组只有一个数据寄存器。在扫描模式中就需要设置转换的顺序
    两个通道组的转换顺序可分为规则通道组的转换顺序注入通道组的转换顺序

    规则通道转换顺序由三个寄存器控制:SQR1、SQR2、SQR3,它们都是32位寄存器。SQR寄存器控制着转换通道的数目和转换顺序,只要在对应的寄存器位SQx中写入相应的通道,这个通道就是第x个转换。具体的对应关系如下:规则通道

    注入通道转换顺序和规则通道转换顺序的控制一样,注入通道的转换也是通过注入寄存器来控制,只不过只有一个JSQR寄存器来控制。需要注意的是JL位,只有当JL=11B的时候,注入通道的转换顺序才会按照JSQ1、JSQ2、JSQ3、JSQ4的顺序执行。当JL<11B时,比如JL=10B,从(4-JL)=2开始执行顺序为:JSQ2、JSQ3、JSQ4。JL=01B是时,从(4-JL)=3开始执行顺序为:JSQ3、JSQ4。注入通道

    ADC通道转换时间计算

    转换时间
    理想情况下,ADCCLK为14M,计算出通道的转换时间为1us。但是,实际应用中APB2为72M,经过8分频得到ADCCLK为12M。最短转换时间为1.17us。

    ADC中断

    中断

    从框图中可以知道数据转换完成之后可以产生中断,有三种情况:
    规则通道转换完成中断
    规则通道数据转换完成之后,可以产生一个中断,可以在中断函数中读取规则数据寄存器的值。这也是单通道时读取数据的一种方法。
    注入通道转换完成中断
    注入通道数据转换完成之后,可以产生一个中断,并且也可以在中断中读取注入数据寄存器的值,达到读取数据的作用。
    模拟看门狗事件
    当输入的模拟量(电压)不再阈值范围内就会产生看门狗事件,就是用来监视输入的模拟量是否正常。
    中断位

    当然,在转换完成之后也可以产生DMA请求,从而将转换好的数据从数据寄存器中读取到内存中。

    电压计算

    要知道,转换后的数据是一个12位的二进制数,我们需要把这个二进制数代表的模拟量(电压)用数字表示出来。比如测量的电压范围是0~3.3V,转换后的二进制数是x,因为12位ADC在转换时将电压的范围大小(也就是3.3)分为4096(2^12)份,所以转换后的二进制数x代表的真实电压的计算方法就是:y=3.3 / 4096* x

    双ADC模式是否开启(一般不开启)

  • 同步注入模式
  • 同步规则模式
  • 快速交叉模式
  • 慢速交叉模式
  • 交替触发模式
  • 独立模式:此模式里,双ADC同步不工作,每个ADC接口独立工作。
  • ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;	//ADC工作模式:ADC1和ADC2工作在独立模式
    

    数据对齐方式

    数据对齐

    ADC_CR2寄存器中的ALIGN位选择转换后数据储存的对齐方式。数据可以左对齐或右对齐.

    实验

    物联沃分享整理
    物联沃-IOTWORD物联网 » 深入解析STM32的ADC模块工作原理

    发表评论