ADC
Analog-to-Digital
指模/数转换器或者模拟/数字转换器
是指将连续变量的模拟信号转换为离散的数字信号的器件

典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号


实验原理
STM32有一个内部的温度传感器,可以用来测量CPU及周围的温度(TA)。该温度传感器在内部和ADCx_IN16输入通道相连接,此通道把传感器输出的电压转换成数字值。温度传感器模拟输入推荐采样时间是17.1μs。STM32的内部温度传感器支持的温度范围为:-40~125℃,精度为±1.5℃左右。

STM32F207 ADC特点

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

ADC通道和引脚的对应:

小于144脚芯片只有16个外部通道

STM32CubeMX温度 stm32承受温度_寄存器

ADC引脚:
VREF+:输入,模拟参考正极,ADC使用的高端/正极参考电压,2.4V<=VREF+<=VDDA

VDDA(1): 输入,模拟电源,等效于VDD的模拟电源且:2.4V<=VDDA<=VDD(3.6V)

VREF-:输入,模拟参考负极,ADC使用的低端/负极参考电压,VREF-=VSSA

VSSA:输入,模拟电池地


STM32CubeMX温度 stm32承受温度_寄存器_02

STM32CubeMX温度 stm32承受温度_寄存器_03


参考电压电压和地

STM32CubeMX温度 stm32承受温度_温度传感器_04


负参考电压连接到地,正参考电压连接到VDDA

STM32CubeMX温度 stm32承受温度_温度传感器_05


规则通道相当于正常运行的程序,最多有16个通道。从上往下执行,从上往下执行。

注入通道相当于中断,最多4个通道。规则通道跳到注入通道再转回规则通道。

STM32CubeMX温度 stm32承受温度_温度传感器_06


转换结果存入寄存器

STM32CubeMX温度 stm32承受温度_STM32CubeMX温度_07


转换结果的标志位

STM32CubeMX温度 stm32承受温度_温度传感器_08


如果用扫描模式需要DMA请求

STM32CubeMX温度 stm32承受温度_STM32CubeMX温度_09


ADC预分频

STM32CubeMX温度 stm32承受温度_寄存器_10


注入通道和规则通道的转换可以通过外部的一些事件来触发。

STM32的ADC各通道可以单次,连续,扫描或者间断模式进行。

单次转换模式
ADC只执行一次转换,设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动,也可以通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。

如果一个规则通道被转换:
一旦选择的通道转换完成,转换数据会存储在ADC_DR寄存器里,EOC转换结束标志位被设置为1,如果设置EOCIE则产生中断。

如果一个注入通道被转换:
转换数据会被存储在ADC_DRJ1寄存器中,JEOC注入转换结束标志被设置,如果设置了JEOCIE位,则产生中断。

连续转换模式
前面ADC转换一结束马上就启动另一次转换。自动转换,如果是单次需要手动。

扫描模式
此模式用来扫描一组模拟通道。
扫描模式可通过设置ADC_CR1寄存器的SCAN位来选择。一旦这个位置被设置,ADC扫描所有被ADC_SQRX寄存器(对规则通道)或ADC_JSQR(对注入通道)选中的所有通道。在每个组的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设置了CONT位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。
如果设置了DMA位,在每次EOC后,DMA控制器把规则组通道的转换数据传输到SRAM中。而注入通道转换的数据总是存储在ADC_JDRx寄存器中。

ADC中断
规则和注入组转换结束时能产生中断。都有独立的中断使能位。


ADC时钟

STM32CubeMX温度 stm32承受温度_扫描模式_11


不要让ADC时钟超过14MHz,否则可能不准。


STM32CubeMX温度 stm32承受温度_温度传感器_12


STM32CubeMX温度 stm32承受温度_寄存器_13


SCAN:扫描模式的选择 0关闭,1使用

JEOCIE:允许产生注入通道转换结束中断,0禁止JEOC中断,1允许JEOC中断。

EOCIE:允许产生EOC中断 0禁止,1允许


STM32CubeMX温度 stm32承受温度_STM32CubeMX温度_14


STM32CubeMX温度 stm32承受温度_温度传感器_15


ALIGN数据对齐,左对齐1,右对齐0

CONT连续转换,0单次转换模式,1连续转换模式

ADON开/关A/D转换器,

STM32CubeMX温度 stm32承受温度_扫描模式_16


选择外部事件


STM32CubeMX温度 stm32承受温度_温度传感器_17


STM32CubeMX温度 stm32承受温度_温度传感器_18


选择通道的采样时间,选择采样时间为多少个周期。


ADC的采样时间
可编程通道的采样时间
ADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过ADC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位更改。每个通道可以分别用不同的时间采样。
总换算时间为:
TCONV=采样时间+1.25个周期
比如当ADCCLK为14MHz,采样周期为1.5周期
TCOBV=1.5+12.5=14周期=1μs 也是最小的转换时间


规则序列寄存器

STM32CubeMX温度 stm32承受温度_扫描模式_19


L是规则通道序列长度,由软件定义在规则通道转换序列中的通道数目。最多16个前面说过。

STM32CubeMX温度 stm32承受温度_温度传感器_20


STM32CubeMX温度 stm32承受温度_STM32CubeMX温度_21


第几个转换对应哪个通道。


注入序列寄存器

STM32CubeMX温度 stm32承受温度_STM32CubeMX温度_22


和上面规则的差不多。


规则通道数据寄存器

STM32CubeMX温度 stm32承受温度_温度传感器_23


状态寄存器

STM32CubeMX温度 stm32承受温度_STM32CubeMX温度_24


一些标志位



内部温度传感器

STM32CubeMX温度 stm32承受温度_扫描模式_25


温度传感器固定连接到ADCx_IN16,并且需要使能TSVREFE位。

温度值转换为电压值。

STM32有一个内部的温度传感器,可以用来测量CPU及周围的温度(TA)。
温度传感器模拟输入推荐采样时间是17.1μs。
STM32的内部温度传感器支持的温度范围为:-40~125度。精度比较差,为±1.5摄氏度左右。
内部温度传感器更适合于检测温度的变化,而不是测量绝对温度。如果需要测量绝对温度,应该使用一个外部温度传感器。