datasheet中描述最高12 位可编程分辨率的SAR ADC,多达10 路外部输入通道。 这句话怎么理解呢?也就是说有10个IO可以设置为ADC口线了。内部两路是属于内部通道了。
1. 首先ADC转换要明确目标,我要转换谁?
这个由通道转换选择寄存器(ADC_ADCHS)来选择要转换的通道,将相关的bit置位就使能,将相关的位复位就失能。
例如将bit0 和bit1 置位 就等于告诉ADC模块,喂 ADC 听好了哦 我接下来要转换通道0 和通道1 。 当然了也可以设置每个通 道的转换周期。
2. 怎么转换啊?
转换目标明确了,该怎么转换? 有3种模式:
1. 单次转换模式
用户设置ADST=1 开始转换“序号最小”的通道, 你可以在第1步使能 转换通道0 和通道1。但是抱歉只对通道0做转换
,通道1 我可不转换。转换完成后 ADST=0 ,需要用户设置 ADST=1来启动第2次转换!你不启动我就不转换了。
2. 单周期扫描模式
用户设置ADST=1 开始转换ADC_ADCHS寄存器中使能的通道(第一步我们设置了通道0 和通道1),简单的说就是将 通道0和1都做转换,转换完成后会自动设置ADST=0,并将结果保存到对应通道的数据保存寄存器 ADDR0 和 ADDR1。 DMA搬运时就是从ADDR0和ADDR1中取出数据搬走!
总结单周期扫描模式: 就是转换你选择的N个通道转换,转换完N个通道后进入ADC空闲状态。需要需要用户设置 ADST=1 来启动第2次转换!你不启动我就不转换了。
3. 连续扫描模式
连续扫描模式,也是转换你所选择的N个通道。和单周期扫描唯一不同的是,转换完N个通道后不会复位ADST
需要用户手动清除ADST才能停止! 换句话说就是只要用户没有清除ADST,那么ADC就会一直 转换通道0 --> 转换
通道1,继续 转换通道0 --> 转换 通道1 。。。 周而复始的扫描转换选择的通道。
4. 切换选择通道
我们经常在运行中需要重新选择转换通道, 只要修改ADC_ADCHS中的值即可。 值得注意的是修改选择通道需要在 ADC空闲状态下才能修改,也就是ADST=0时才能修改。 除了连续扫描模式其他两种模式都会在转换完成后,硬件自动设 置ADST=0。
最后来个总结: 3种模式可以混搭,例如只在ADC_ADCHS中只使能一个通道(例如通道5)。 当采用连续扫描模式时, ADC将不停的(对通道5)进行转换。加入DMA和TIMER后,就可以实现定时对某路信号采集N次后再处理。典型应用是
对某路信号采集2n个点做FFT处理,例如对信号采集512个点后做FFT。ADST=1 的动作可以由用户代码设置,也可以由外部引脚信号触发来设置,当然了还可以由定时器事件设置。
|