前 言
本文仅供个人参考记录复习,如有错误或者模糊的地方欢迎指教.
ADC模数转换器是一种电子器件,用于将模拟信号转换为数字信号。在嵌入式系统中,ADC模数转换器主要用于将传感器等模拟信号转化为数字信号,便于在数字处理器中进行分析和处理。
ADC模数转换器
在STM32中,ADC通常包含多个通道,每个通道可以读取并转换一个引脚上连续变化的模拟信号成数字变量并存储在内存中。通过配置寄存器,可以设置转换精度、采样时间等参数。ADC模块还支持DMA传输,可以将转换结果直接传输到内存中。且ADC的输入通道分为规则组和注入组,可以根据需求配置。
逐次逼近型ADC
逐次逼近ADC是一种常见的模数转换器。
其包括一个8通道选择开关,由地址锁存和译码来控制通道的选择,这样只需控制开关选择即可实现处理多路信号,而不需要配置多个ADC。通道中接收到的信号会进入电压比较器,电压比较器可以判断两个输入信号电压的大小关系,逐次逼近逻辑将DAC的输出与待转换信号进行比较。根据比较结果,逼近逻辑会将DAC输出调整为更接近待转换信号的值,通过对DAC输入的增减,逐步逼近待转换信号的值。当逼近完成后,逐次逼近逻辑将最终的DAC输出值作为转换结果,并存储到AD数据寄存器中,同时定时和控制模块输出结束信号(EOC)。
DAC电压范围即为ADC电压范围。
ADC基本结构
上图中蓝色代表规则通道,红色代表注入通道。其中规则组最多可以转换16个通道,但是规则寄存器只有一个,即一次只能存一个结果,导致数据覆盖丢失:而虽然注入组只能转换4个通道,不过有4个注入寄存器,所以不会出现数据覆盖问题。
在左下的触发转换部分中,蓝色框起的是规则组的触发源,红色框起的是注入组的触发源。触发源主要是定时器,不过也有外部中断的引脚可以选择配置触发。
ADC的工作流程
电压信号经16个GPIO口以及两个内部通道进入AD转换器,在收到触发控制后,AD转换器通过逐次逼近的方法将模拟信号转换为对应的数字信号,数据会发送到AD数据寄存器中。这时AD数据寄存器会通过中断输出控制向NVIC申请中断;或是配置看门狗监测结果范围,如果超出阈值便向NVIC申请中断。
AD转换器分为规则组和注入组,在AD数据寄存器中规则组寄存器只有一个而注入组寄存器有4个。AD转换器逐次逼近逻辑由RCC时钟推动。
AD转换步骤
采样
ADC首先对输入的模拟信号进行采样。采样是指在一定的时间间隔内获取并保持模拟信号的值,通常使用采样保持电路来实现。采样的目的是将连续变化的模拟信号转换为离散的采样点,以便进行后续的转换处理。
量化
量化是将采样得到的模拟信号值映射为离散的数字码。ADC通过将连续的模拟信号值映射到一个离散的数值集合中来实现量化。常见的量化方法是使用比特位数进行分级量化,将模拟信号的幅度分成若干个区间,并将每个区间映射为一个数字码。
编码
编码是将量化后的模拟信号值转换为相应的数字编码形式。根据ADC的不同类型,编码可以是直接二进制编码或其他编码形式。编码的目的是将量化后的数值表示为一种特定的数字形式,以便于存储和处理。
转换模式
单次非扫描转换模式
在单次非扫描转换模式下,ADC只进行一次转换,并且仅转换一个指定的通道。转换开始后,ADC按照设定的通道顺序对一个信号进行采样和转换,然后输出相应的数字结果。这种模式适用于只需要转换一个特定通道的场景,例如单个传感器的数据采集。
连续非扫描转换模式
连续非扫描转换模式下,ADC进行连续的转换操作,但仅转换一个指定的通道。一旦启动转换命令后,ADC会持续对同一个通道进行采样和转换,然后输出数字结果。这种模式适用于需要连续监测某个信号变化的场景,例如实时监测系统。
单次扫描转换模式
单次扫描转换模式下,ADC进行一次转换,同时转换多个预先设定的通道。转换开始后,ADC按照设定的通道顺序依次对多个信号进行采样和转换,并将每个通道的转换结果存储到相应的寄存器中。这种模式适用于需要同时转换多个通道的场景,例如多路传感器数据采集。
连续扫描转换模式
连续扫描转换模式是连续转换模式的一种扩展,它可以持续地转换多个预先设定的通道。一旦启动转换命令后,ADC会持续按照设定的通道顺序循环执行采样和转换操作,并将每个通道的转换结果存储到相应的寄存器中。这种模式适用于需要连续监测多个信号变化的场景,例如多通道数据采集系统。
触发控制
触发控制分为软件触发和硬件触发:软件触发是通过编程控制ADC模块的开始转换寄存器来启动ADC的转换过程。在这种情况下,ADC模块只有在程序中明确要求才会开始采样和转换;硬件触发是通过外部引脚或外部中断来触发ADC的转换过程。ADC模块可以配置为等待外部触发信号并在接收到触发信号时开始转换。
数据对齐
左对齐
在左对齐方式下,ADC的最高有效位对应于数据字中的最高位,而最低有效位则对应于数据字中的最低位。这意味着转换后的数字数据在数据字中的存储是从高位到低位的顺序。例如,一个12位的ADC转换结果为0x123,则在左对齐方式下,数据字为0x1230。
右对齐
在右对齐方式下,ADC的最高有效位对应于数据字中的最低位,而最低有效位则对应于数据字中的最高位。这意味着转换后的数字数据在数据字中的存储是从低位到高位的顺序。例如,一个12位的ADC转换结果为0x123,则在右对齐方式下,数据字为0x0123。
数据校准
为了确保其输出准确性和精度,通过对ADC进行修正或调整来消除误差。
寄存器
ADC状态寄存器(ADC_SR)
用于存储和读取ADC的状态信息的寄存器。它包含了多个状态位,每个状态位表示了不同的ADC状态。
EOC
表示转换完成的标志位。当一个转换周期完成后,该位将被置位。
AWD
模拟看门狗的触发标志位。当转换结果超过或低于预设的阈值时,该位将被置位。
OVR
溢出标志位。当转换结果未能及时读取而导致新的转换结果被覆盖时,该位将被置位。
JEOC
注入通道转换完成的标志位。当注入通道的转换周期完成后,该位将被置位。
JEOC
表示注入通道转换开始的标志位。当注入通道的转换周期开始时,该位将被置位。
ADC控制寄存器(ADC_CR)
用于配置和控制ADC的工作模式和参数。
ADEN:使能ADC模块。
ADDIS:禁用ADC模块。
ADSTART:启动ADC转换。
JADSTART:启动注入通道的转换。
ADIE:使能ADC中断。
ADC采样时间寄存器(ADC_SMPR)
用于设置ADC的采样时间。采样时间决定了ADC对模拟输入信号进行采样的时长,以保证足够的准确性。该寄存器通常包含多个位字段,每个位字段对应一个通道或组通道。