ADC的概念
Analog-to-Digital Converter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。
ADC的作用
采集传感器的数据,测量输入电压,检查电池电量剩余,监测温湿度等。
典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。
量程:能测量的电压范围
分辨率:ADC的分辨率通常以输出二进制数的位数表示,位数越多,分辨率越高,一般来说分辨率越高,转化时间越长。
转化时间:模拟输入电压在允许的最大变化范围内,从转换开始到获得稳定的数字量输出所需要的时间称为转换时间
STM32F4-ADC配置
STM32F40X有3个ADC,每个可配置 12 位、10 位、8 位或 6 位分辨率
每个ADC 有16个外部通道。另外还有两个内部 ADC 源 和 V BAT 通道挂在 ADC1上
这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。
ADC具有独立模式、双重模式和三重模式,对于不同 AD转换要求几乎都有合适的模式可选
ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。
ADC 输入范围为:V REF-≤ V IN ≤ V REF+ 。由 V REF- 、VREF+ 、V DDA 、V SSA 、这四个外部引脚决定。
我们在设计原理图的时候一般把 V SSA 和 V REF- 接地,把 VREF+ 和 V DDA 接 3.3V,得到ADC 的输入电压范围为:0~3.3V
如果我们想让输入的电压范围变宽,去到可以测试负电压或者更高的正电压,我们可以在外部加一个电压调理电路,把需要转换的电压抬升或者降压到 0~3.3V,这样 ADC 就可以测量了
每个ADC 有16个外部通道。另外还有两个内部 ADC 源和 V BAT 通道挂在 ADC1上
规则通道组:
顾名思意,规则通道就是很规矩的意思,我们平时一般使用的就是这个通道。相当正常运行的程序。最多16个通道。规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中
注入通道组:
注入,可以理解为插入,插队的意思,是一种不安分的通道。相当于中断。最多4个通道。
注入组和它的转换顺序在ADC_JSQR寄存器中选择。注入组里转化的总数应写入ADC_JSQR寄存器的L[1:0]中
ADC时钟
ADC 输入时钟ADC_CLK由 PCLK2经过分频产生,最大值是36MHz,典型值为30MHz。对于 STM32F407我们一般设置PCLK2=HCLK/2=84MHz。所以程序一般使用4分频或者 6分频。
规则数据寄存器 ADC_DR
ADC_DR只有一个,是一个 32 位的寄存器,只有低16 位有效并且只是用于独立模式存放转换完成数据。因为 ADC 的最大精度是 12 位,ADC_DR 是16 位有效,这样允许 ADC存放数据时候选择左对齐或者右对齐,具体是以哪一种方式存放,由ADC_CR2的 11 位 ALIGN 设置。
使用 DMA
由于规则通道组只有一个数据寄存器,因此,对于多个规则通道的转换,使用DMA非常有帮助。这样可以避免丢失在下一次写入之前还未被读出的 ADC_DR 寄存器中的数据。
在使能 DMA 模式的情况下(ADC_CR2 寄存器中的 DMA 位置 1),每完成规则通道组中的一个通道转换后,都会生成一个 DMA请求。
转换结束
中断规则通道和注入通道的数据转换结束后,都可以产生中断
模拟看门狗
中断当被ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断
溢出中断
如果发生DMA传输数据丢失,会置位 ADC状态寄存器 ADC_SR的OVR位,如果同时使能了溢出中断,那在转换结束后会产生一个溢出中断。
DMA请求
规则和注入通道转换结束后,除了产生中断外,还可以产生DMA请求,把转换好的数据直接存储在内存里面。
软件触发
ADC转换可以由ADC控制寄存器 2:ADC_CR2的ADON这个位来控制,写 1的时候开始转换,写 0的时候停止转换
外部事件触发
触发包括内部定时器触发和外部 IO触发。触发源有很多,具体选择哪一种触发源,由 ADC控制寄存器ADC_CR2的 EXTSEL[2:0]和JEXTSEL[2:0]位来控制