DSP-AD模块学习的心得 1.AD采样的高级教程
经过这几天的忙碌,我感觉我对2812的AD模块又有了一些新的理解,感觉AD的框架已经被我架出,现在来说明这几天对其中的理解。 1.1.AD的结构
首先还是要接受一下AD的基本结构吧!把几个容易混淆哦概念重新的定位,让大家看看我自己的理解, ①双排序和级联工作模式 ②顺序采样和同步采样 ③启停/连续工作模式
这三个概念是我自己学习的时候容易混淆或是不知道如何才能很好运用的一个门槛
下面以一个图形来表示他们之间的关系
所以2812AD总共有8种工作方式可以实现,在实际运用中可以根据自己的需要选择合适的工作方式。
1.2.AD模块时钟问题的提出 ①高速时钟
②ADCLK-AD模块时钟
③事件管理器时钟(如果要用到EVA/B来触发AD启动的时候)
以上就是整个和系统、AD模块相关的所有时钟的信息。当然里面涉及很多寄存器,各个寄存器的设置可以查相关的资料得出自己想要的合适的时钟和相应的采样保持脉冲的宽度。 1.3几个基本概念
接下来解释几个常混的概念,但是都是本人个人的理解不一定准确。 ①AD采样频率 ②AD启动频率
③AD的采样保持宽度 ④AD的转换时间
以及这些跟ADCclk之间的联系?
首先来说明一下AD采样频率,我个人认为AD采样频率就是1S中采样多少个点,那么根据实际运用AD模块的经验,你自己启动几次AD模块,它就采样几次,意味着其实AD的采样频率就是AD的启动频率,如果你用事件管理器来触发的话,那么触发频率也同样是AD的采样频率,也就是你所用的通用定时器的定时时间。其次,AD的采样保持时间,这个是一定AD启动就马上开始采样,由于采样这个过程就是给电容充电的过程,那么就是意味着要需要一段的时间电容才可以电荷把电荷储存起来,采样保持时间就是起到这个作用的,但是和AD的启动频率有什么关系呢?个人认为AD的采样频率就是相邻两个采样点之间的时间间隔应该要大于采样保持器保持的时间,这样才可以保证在下一次采样触发到来之前把信号可靠的保持下来。最后讲到,AD的转换时间,这个就是采样保持后,要将保持的模拟量转换成数字量,就要通过内部的转换器,转换器的时间跟ADCclk有关。因为大家都知道AD转换器转换需要给他提供时钟,那么时钟频率越高,转换的速度越快,这样转换时间就越小。
这些关系希望大家可以理解清楚,不过以上都是本人自己的理解,希望可以帮我指出错误的地方。
⑤合理的安排计算这些频率和时间是AD采样的关键,比如一个正弦信号如果您要求他要在一个正弦波的一个周期内采样24个点,那么首先要确定AD
的启动频率也就是采样频率,即20毫秒内采样24点,那么就可以确定1秒内要采多少个点了,也就是可以确定相邻两个采样点之间的时间间隔,即20毫秒/24=0.8333毫秒;这样就可以根据EV事件管理器的时钟来确定通用定时器的周期寄存器的值(假设用周期匹配中断来触发)如果高速时钟的频率是75M赫兹,
其中EV时钟的分频系数为x,那么就可以知道count=75*8333.3/x来确定计数值了
⑥就是合理的安排采样的保持时间也是关键啊!不过对以咱们所有的50赫兹的低频来说在采样点很少的时候,比如几十个点可能会不重要,主要原因是如果高速时钟在75赫兹下,你把ADCCLKPS设为15,CPS设为1这样
ADCCLK=75/(ADCCLKPS*2*(1+CPS))MHz,则对应的采样窗口宽度,你即使将ACQ_PS设为15,这样宽度也只有,25.6us,除非你降低高速时钟的频率,但是降低了也会影响AD的装换速度。但是在采样频率高的时候即采样的点数多的时候,这个就要考虑了,采样点数多了,意味着采样点之间的间隔缩小了,如果多到一定的程度时候,可能之间的间隔会达到uSs级别,这样你就要考虑采样的间隔要大于采样保持的时间,因为这样才可以保证可靠的保持数据,否者就会出现采样出错。
⑦在采样过程中,要想让AD准确并且按照要求的点数进行采样的话,一定要配置好AD的分频时钟,至少要对它进行一次分频,然后在ACQ_PS内设置相应的保持参数,当然分频数再增大也无妨。要想按照自己的点数进行采样,建议不要用到AD本身的中断来进行出来,本人试了许久发现用AD本身的中断来进行采样你会发现不管你是如何设置你的点数,基本都是5、6个,根本改变不小,看了些论坛上说了,利用中断进行AD转换了可能会有些振荡,中断进出栈需要时间,中断返回不能肯定信息的原始化,等等,导致产生的结果不是很令人满意,所以建议采用外部中断来触发置标志位,根据标志位了进行控制AD的采样进行了。
1.4.ADC的加电顺序
这个不用我来细说了,因为你翻开任意一本参考书,都会说明这个东西,其中特别要提示的一点,也是我自己在编程中忽略的,①如果你看了AD很多例程你就会发现,在配置AD寄存器,或是加电ADC模块之前,都要对AD模块进行一次软件复位,这个复位不是复位排序器而是整个AD模块进行一次复位,复位之后要进行一个小的延时,这是一个要注意的地方。②就是已经复位完成,已经开始配置寄存器后,尤其是加电的这些寄存器,以后就不能出现AD模块整体复位指令,否则你要重新进行AD的所有寄存器的配置,包括加电寄存器。我忽略的就是在配置完寄存器后,对AD的进行再次的复位,但是没有对加电、其他寄存器进行重新配置,导致进行AD转换的时候没有反应。 1.5关于AD的触发集和相应的中断操作
看过DSP书的人都知道,到底有AD中排序器的作用,它是TI的AD的一 大特色,排序起着指挥的作用,安排着AD
的转换通道。
以上这个表格在任意一本DSP书都可以找到了,现在我要讨论的不是用那些来触发AD开始转换,我要说明了,这些信号发生后对于AD模块的很多寄存器是如何变化的,简单的说就是这些信号发生后,AD模块要如何进行动作,或是进行哪些必要的动作,在哪些情况下还可以进行另外什么其他的动作。
首先,我先说如果要用查询法来进行AD的转换的时候这部分的内容比不可少.原因就是很简单你不知道相应的动作你怎么去查找你的目标寄存器。
现在不管你用什么方法来触发AD的转换,一定一个触发信号触发了排序器,首先排序器的忙标志位置“1”(SEQ1_BUSY或是SEQ2_BUSY),然后AD开始转换,一开始忙标志位自动清零,在AD转换还没有完成时如果还有触发信号到来忙标志位继续置“1”,如果还有触发信号将被忽略。等待AD开始转换完毕,其中判断是否转换完毕还有一个标志位,就是排序器中断标志位,因为排序器完成一次全部的转换都会将中断标志位置“1”,如果使能中断则响应中断,否者不响应,所以如果用查询不用中断,那么就可以查询该位的状态INT_SEQ1/2来判断AD是否转换完毕。
以上说的都是在启停工作模式下
如果工作在连续工作模式下,那么忙标志位会一直为“1”;其他一样! 2.AD超高级教程
2.1采样幅值不变的直流信号(0~3V)确定ADCL0已经和DSP得板子的模拟地一起共接着!否者将采集不了数据。
先用AD模块采样幅值不变的直流信号,并且所要求的直流信号必须要在0~3V之间可以输入到DSP本身内部集成的AD输入口。
利用AD进行采样输入的信号,一般都是想利用DSP的处理速度,这样基本所有的AD转换都是以中断的方式进行的,一下实验过程就是以中断的方式进行不同触发方式下,不同的采样设置下,不同的通道下,等等,AD的工作情况的讨论。
其实,现在我对AD的认识是,在开始AD的过称中,你只要设置好以下几个寄存器或是其中的某些位即可。
以下记为我的实验过程(基本的初始化部分省略) 2.1.1利用事件管理器A
利用事件管理器A的通过定时器的下溢信号来触发中断(且AD排序器工作在启停模式、采样模式为顺序采样、并且要求只对A1进行采样)。首先 要分析,这个实验要包括哪些内容,要对那些东西进行设定。 ①要进行那个AD模块的复位
AdcRegs.ADCTRL1.bit.RESET=1;
之后延时一小段时间可以是10个空语句。
②要利用AD模块的中断进行AD的相应处理,则必须要给中断赋个入口地址,并且AD开中断,并且如果是受保护的,所以先要关闭保护,然后在进行赋值,最后在打开保护。
EALLOW;//ThisisneededtowritetoEALLOWprotectedregister PieVectTable.ADCINT=&adc_isr;
EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters//EnableADCINTinPIE
PieCtrlRegs.PIEIER1.bit.INTx6=1; IER|=M_INT1;//EnableCPUInterrupt1 EINT;//EnableGlobalinterruptINTM ERTM;
③要利用AD模块吧就要给AD的内核,带隙电路上电,要准确的采集信号也要对AD的参考电路进行上电
该模块的上电顺序请详见书本。
④要利用AD模块,首先要对AD的输入通道的最大转换通道、采样模式、排序器的工作模式进行配置,然后要对AD的控制进行配置,比如用什么启动AD、AD的采样模式、AD的排序器的工作模式等等 在这里首先部分的配置如下:
AdcRegs.ADCMAXCONV.all=0x0001;
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x01;
AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x01;
这里将该通道设置成为过采样的目的是,通过我自己的实验得出,如果采样的点数不多时,比如就几十个点,那么只用一次采样效果相当的令人不满意,但是利用了过采样那么效果基本可以达到满意程度,在该实验中我采样了12点,利用了过采样比没有利用过采样效果真是天壤之别,不信可以自己做。 然后就是然后得配置:
这里是利用EVA的T1进行触发AD采样: