图1 ADC外设模块框图
ADC模块是一个12位逐次逼近(SAR)风格的ADC。ADC由一个核心和一个封装器组成。其核心由模拟电路组成,包括通道选择MUX、采样保持(S/H)电路、逐次逼近电路、电压基准电路和其他模拟支持电路。封装器由配置和控制ADC的数字电路组成。这些电路包括可编程转换逻辑、结果寄存器、模拟电路接口、外设总线接口、后处理电路和其他片上模块接口。
每个ADC模块由一个采样保持(s/h)电路组成。ADC模块被设计为在同一芯片上被复 制多次,允许同时采样或多个独立操作ADC。
学习ADC模块的实现目的:1、首先需要彻底搞懂ADC采样模块原理和相关的寄存器的配置;
2、熟悉控制板上ADC模块的硬件原理图;3、软件设计ADC实现相关的功能。
实际使用中的DSP和单片机等只能处理数字信号,用一个将模拟信号转换为数字信号的介质—模数转换器(ADC),而F28335芯片内部含有ADC外设。这样当需要采集外部信号时(外部信号多为模拟信号),如电压、电流、压力、温度等(ADC模块处理幅值随着时间连续变化的模拟信号;eCAP和eQEP处理开关类信号和脉冲类信号),都可以用F28335芯片实现。
a、使能ADC外设时钟即设置ADC的工作时钟;
要使用ADC外设,则需要开启相应的时钟,开启ADC外设时钟代码如下:
系统时钟为150MHz,不能直接供给ADC当工作时钟,所以需要分频后才可以给到ADC。前面介绍过ADC最大的工作时钟为25MHz。
b、ADC初始化设置,包括对ADCREFSEL和ADC0FFTRIM寄存器设置等;
前面介绍过,使用ADC时除了开启外设时钟外,还需要对参考电压寄存器进行设置,并且在ADC开始转换前需要一定的延时。TI已经提供了一个函数完成ADC模块的初始化。调用ADC初始化函数。
c、ADC工作方式设置,包括采样方式、工作频率、采样通道等;
上一步是对ADC内部参考源及校准等设置,只需要调用TI提供的函数即可,对于ADC工作方式的设置需要通过编程实现。这里以实验代码为例:
d、选择ADC的触发方式,开启转换(SOC);
上述配置好后,接下来需要设置ADC的触发方式,前面介绍过ADC触发方式有几种:软件触发、PWM触发等,本实验采用软件触发:
e、读取ADC的转换值。
通过上面的几步配置,ADC就开启工作了,接下来就是等待转换结束后,读取转换结果值就可以了。通过前面的介绍可知,ADC转换后的数据存储在结果寄存器中,只需要读取相应的结果寄存器即可,并且有效数据是高12位,所以读取后的值要降低4位移除。比如读取结果寄存器0的转换结果的代码如下:
首先断开电机连接,使用仿真器连续读取AD采样结果寄存器的值,此时的采样值即为电流零点。观察电流零点的稳定性,一般来说,如果电流采样的稳定性较好,AD结果寄存器中只会有最后一两位在波动。若电流零点波动得较严重,说明采样稳定性很差,此时需要在程序中增加滤波算法。理论值为2252。(为什么?)3/4096=1.65/x,x=2252.