data/attach/1907/xuumnw4eakrvx5bhuyj4rw8spwg4ddsv.jpg
犹豫了好久,今天终于有勇气写自己的技术博客了,其实之前有写过应用笔记,包括STM32的Cortex-M3内核系列的笔记以及自己做车这么久的学习笔记等。不管怎么说,今天都是一个新的开始新的尝试,话不多说,还是先介绍一下自己对k60的ADC的应用心得吧。
1 k60的ADC模块主要特征:
1.1线性逐次逼近算法可以达到16位的采样精度。
1.2有4个差分和24个单端外部模拟输入通道。
1.3输出模式:有 16 位、13 位、11 位、9 位的差分模式,或者 16 位、12位、10位、8位的单端模式。 (16位精度采集陀螺仪但是如果时钟频率过高,误差会很大)
1.4差分模式以16位扩展的有符号补码形式输出, 单端模式以右对齐无符号输出。
1.5单端或者持续转换模式,采样时间和转换速率/电压可配置。转换完成/硬件计算采样平均值完成的标志和中断。
1.6输入时钟ADICLK可从四个时钟源选择(异步时钟(ADACK)、总线时钟、总线时钟二分频、ALTCLK(根据 MCU定义))。
1.7可选择的电压:外部电压或可选电压。 自校对模式。 (精度=参考电压/2的采样位数次方)
2 模块示意图
3 寄存器一共有25个,其中常规的状态控制寄存器3个、工作模式配置寄存器2个以及数据寄存器1个,这三类寄存器基本可以满足常规应用。
3.1
ADCx_SC1n(x为0或1,n为A或B,复位0x1f)
COCO[7]:
AD转化完成标志。写ADCx_SC1n或者读取ADCx_Rn寄存器都回清除该位。
AIEN[6]:
AD转换完成中断使能。
DIFF[5]:输入模式选择。
1为双端输入,
0为单端输入。
ADCH[4-0]:输入通道选择
。
注:
00000—00011:当
DIFF=0时,分别是DADP0~3作为虚拟的AD0~3作为输入通道。当DIFF=1时,
DAD0~3作为双端输入通道,每个
DADx通道对应
DADPx和
DADMx两个引脚。
00100—10111:当
DIFF=0时,分别是AD4~23。
11000—11110:暂时无用!
11111:
ADC输入通道直接关了。
3.2
ADCx_CFG1(复位0x00)
ADLPC[7]:
ADC低功耗工作使能位,代价是即将工作在最高的时钟周期。
ADIV[6-5]:
ADC时钟分频。分频系数是2的ADIV次方。分频出来的就是工作时钟,简称
ADCK。
ADLSMP[4]:长采样时间使能位。
MODE[3-2]:
AD转换精度选择(转化位数)
DIFF=0:
00-11分别为8位,
12位,
10位,
16位。
DIFF=1:
00-11分别为9位,
13位,
11位,
16位。
ADICLK[1-0]:时钟源选择。
00-
总线时钟,01-
总线时钟的一半,10-ALTCLK
,11-ADACK
。
3.3
ADCx_CFG2(复位0x00)
MUXSEL[4]:
AD输入通道分a通道与b通道,这个位就是选择其中一个作为真正的输入通道用的。0选a,1择b。
ADACKEN[3]:异步时钟
(就是ADACK)
输出使能位。
ADHSC[2]:高速转化序列选择位。
1选择,选了之后,转化时间会另外加上
两个ADCK。
ADLSTS[1-0]:
ADLSMP=1才有效。本来
快速采样只要4个ADCK就行了。
00-
加上20个
ADCK,01-
加上12个
ADCK,10-
加上6个
ADCK,11-
加上2个
ADCK。
3.4
ADCx_Rn(复位?)
DAT[x-0]:
AD转换结果,记住是右对齐!
3.5
ADCx_CVn(复位0x00)
CV[15-0]:
ACFE=1时才有效,用来将
ADCx_Rn与其比较。
3.6
ADCx_SC2(复位0x00)
ADACT[7]:处于
AD转化时的忙标志,转化完成清除。
ADTRG[6]:
AD转化触发方式选择。0为软件触发
(SC1A写操作)
,1为硬件触发
(ADHWTSn引脚一个脉冲)
。
ACFE[5]:
AD转化比较使能位。
ACFGT[4]:比较结果较大使能。
ACREN[3]:比较结果超出范围检测使能。
DMAEN[2]:ADC的DMA功能使能位。AD转换完成(即COCO位变为1)就会触发DMA传输。
REFSEL[1-0]:参考电压选择。
00- VREFH
和VREFL引脚(默认VDD和VSS),01-VALTH
和VALTL引脚。
3.7
ADCx_SC3(复位0x00)
CAL[7]:校准忙标志位,校准完成清除。
CALF[6]:校准失败标志位。
ADCO[3]:连续转换使能位!
AVGE[2]:
AD转换硬件中值滤波使能。
AVGS[1-0]:硬件中值滤波次数,为
2的
2+AVGS次方。
3.8
ADCx_OFS(复位0x00)
OFS[15-0]:校准失败后,会令转化结果减去它,再次装入
ADCx_Rn之中。如果还超出范围,就去临界值。
4 功能介绍
4.1时钟介绍基本如上,得到ADICLK后由ADIV进行分频,得到最终的ADCK。不管选择哪种时钟,时钟的频率必须为下降到 ADCK 要求的频率区域内。
如果有效时钟太慢,ADC 可能不按照规定的条件运行。
![]()
不必深究只知道可以用使能长采样时间ADLSMP和ADLSTS设置采样时间就好。
4.2关于连续转换与DMA传输,很常规问题,知道STM32的DMA应用的,这个不难理解。
4.3初始化顺序:
![]()
暂时介绍到这里吧,具体代码无需介绍,参考野火库或者拉普兰德库等均可。要是水平足够也可以用寄存器编写,但个人感觉这个较STM32难度很大。以后应用时如有新体会,还会补充上来的。今天就这样吧!