基础知识
现在很多传感器的反馈信号都为电压信号,是将我们需要测量采集的信号转化为电压大小进行反馈,而对于我们单片机来说,我们就需要将电压大小再方向换算位实际的数据,所以 ADC
对于我们来说至关重要。
ADC 是 STM32
中自带的数模转换器,具有高达 12 位的转换精度。并且具有多达 18 个测量通道,其中 16 个为外部测量通道,2 个为内部测量通道。各通道的 AD 转换都可以进行单次、连续、扫描或间断的模式执行。并将扫描结果存储在 16 位的数据寄存器中。
需要注意的是,我们的 ADC
输入时钟不得超过 14MHZ ,采集范围为 0~3.3V 电压。如果我们对于采集精度有很高的需求的话,需要提供准确的
V
R
E
F
V_{REF}
VREF 或者使用专门的 AD
转换器模块。
在使用的过程中,我们需要关注 ADC
的以下的一些方面:
- 采集模式
- 输入时钟频率
- 多 AD 采集模式等等
- 通道选择
通道选择
通道选择时候我们有 16 个通道。我们可以将其分为两大组:规则组和注入组。然后可以在多通道上以任意顺序进行转换。
- 规则组
最多 16 个转换组成。推荐用于长时间不间断采集需求使用。 - 注入组
最多 4 个转换组成。推荐用于短时间间断采集时候使用,相当于中断一样
双 ADC 模式
在双 ADC 模式下,一共有 6 种可能的模式:
- 同步注入模式
- 同步规则模式
- 快速交叉模式
- 慢速交叉模式
- 交替触发模式
- 独立模式
具体每个模式的内容请查阅相关手册
输入时钟频率
手册上强调了,输入 ADC
的时钟频率最高不得超过 14MHZ, 所以在后续库函数配置的时候需要额外注意。
寄存器
ADC状态寄存器(ADC_SR)
此寄存器可获取当前 ADC
状态
ADC控制寄存器 1(ADC_CR1)
该寄存器用于相关 ADC
配置使用
ADC控制寄存器 2(ADC_CR2)
此寄存器主要用于配置一些 ADC
的 DMA
等额外功能等等
ADC 采样时间寄存器 1 (ADC_SMPR1)
ADC采样时间寄存器 2(ADC_SMPR2)
ADC 注入通道数据偏移寄存器 x (ADC_JOFRx)(x=1…4)
ADC规则序列寄存器 1(ADC_SQR1)
ADC规则序列寄存器 2(ADC_SQR2)
ADC规则序列寄存器 3(ADC_SQR3)
ADC注入序列寄存器(ADC_JSQR)
ADC 注入数据寄存器x (ADC_JDRx) (x= 1…4)
ADC规则数据寄存器(ADC_DR)
标准库函数
对 ADC
的标准库函数操作主要按照以下的几个步骤来:
- 初始化
ADC
时钟线 - 配置
ADC
参数并初始化 - 配置
ADC
采样周期 - 配置
ADC
的DMA
功能 (如有) - 开启
ADC
功能 - 进行
ADC
校准 - 设置
ADC
软件自动触发 (如果触发模式为软件自动触发模式)
ADC_Init
老样子,肯定是一个结构初始化方法。
ADC_Mode
ADC_ScanConvMode
ADC_ScanConvMode 规定了模数转换工作在扫描模式(多通道)还是单次(单通道)模式。可以设置这个参数为 ENABLE 或者 DISABLE。
ADC_ContinuousConvMode
ADC_ContinuousConvMode 规定了模数转换工作在连续还是单次模式。可以设置这个参数为 ENABLE 或 者 DISABLE。
ADC_ExternalTrigConv
ADC_DataAlign
ADC_NbrOfChannel
ADC_NbreOfChannel 规定了顺序进行规则转换的 ADC 通道的数目。这个数目的取值范围是 1 到 16。