DSP

ADC模块基本设置与扩展

2019-07-13 16:24发布

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.1ADCx_SC1n(x01nAB,复位0x1f) COCO[7]AD转化完成标志。ADCx_SC1n或者读取ADCx_Rn寄存器都回清除该位AIEN[6]AD转换完成中断使能。 DIFF[5]:输入模式选择。1为双端输入,0为单端输入。 ADCH[4-0]:输入通道选择 注: 0000000011:当DIFF=0时,分别是DADP0~3作为虚拟的AD0~3作为输入通道。当DIFF=1时,DAD0~3作为双端输入通道,每个DADx通道对应DADPxDADMx两个引脚。 0010010111:当DIFF=0时,分别是AD4~23 1100011110:暂时无用! 11111ADC输入通道直接关了。 3.2ADCx_CFG1(复位0x00) ADLPC[7]ADC低功耗工作使能位,代价是即将工作在最高的时钟周期。 ADIV[6-5]ADC时钟分频。分频系数是2ADIV次方。分频出来的就是工作时钟,简称ADCKADLSMP[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-ALTCLK11-ADACK 3.3ADCx_CFG2(复位0x00) MUXSEL[4]AD输入通道分a通道与b通道,这个位就是选择其中一个作为真正的输入通道用的。0a1bADACKEN[3]:异步时钟(就是ADACK)输出使能位。 ADHSC[2]:高速转化序列选择位。1选择,选了之后,转化时间会另外加上两个ADCKADLSTS[1-0]ADLSMP=1才有效。本来快速采样只要4ADCK就行了。00-加上20ADCK01-加上12ADCK10-加上6ADCK11-加上2ADCK 3.4ADCx_Rn(复位) DAT[x-0]AD转换结果,记住是右对齐3.5ADCx_CVn(复位0x00) CV[15-0]ACFE=1时才有效,用来将ADCx_Rn与其比较。   3.6ADCx_SC2(复位0x00) ADACT[7]:处于AD转化时的忙标志,转化完成清除。 ADTRG[6]AD转化触发方式选择。0为软件触发(SC1A写操作)1为硬件触发(ADHWTSn引脚一个脉冲) ACFE[5]AD转化比较使能位。 ACFGT[4]:比较结果较大使能。 ACREN[3]:比较结果超出范围检测使能。 DMAEN[2]ADCDMA功能使能位。AD转换完成(COCO位变为1)就会触发DMA传输。 REFSEL[1-0]:参考电压选择。00- VREFH VREFL引脚(默认VDDVSS)01-VALTH VALTL引脚。 3.7ADCx_SC3(复位0x00) CAL[7]:校准忙标志位,校准完成清除。 CALF[6]:校准失败标志位。 ADCO[3]:连续转换使能位! AVGE[2]AD转换硬件中值滤波使能。 AVGS[1-0]:硬件中值滤波次数,为22+AVGS次方。 3.8ADCx_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难度很大。以后应用时如有新体会,还会补充上来的。今天就这样吧!