Part Number:TMS320F28377D
如题
EPWM触发ADC采样,我希望通过Timer0来控制EPWM的freeze/un-freeze,也就是在Timer0中断进行时,关闭EPWM,不生成event trigger,不允许ADC采样,当Timer0中断结束时,再打开EPWM,开始ADC采样.
但是采样到的结果会发生变化,在打开EPWM后,ADC采样的结果会略高于上一次采样的值.请问是什么原因,怎么避免.
ps: 我的设计是,利用28377D的CLA处理ADC采样,经过160次采样后,Timer0中断发生,进行一次控制,并修改参数,但是实际的系统根据Timer0的周期频率,并不能准确的在160次时进入中断,在Timer0中断时,CLA依然处理ADC采样,待Timer0中断后,执行一次CLA中断,然后继续CLA处理并中断.这部分的数据会打乱我的数据,我希望能去掉,所以在Timer0中断中加入了开关ADC采样,并清除了CLA中断,重置了CLA的数据然后开始新一轮的循环.
如图是我用DAC输出了ADC采样的结果,中间信号中断的部分是进行了Timer0中断,DAC未更新输出,当Timer0中断后,重新开始采样时,信号的峰值会与前次采样的峰值不等,略高或略低,会不会是因为开关了EPWM/ADC导致采样结果的不正确
Green Deng:
你好,描述的内容很多,有些内容我一下子也没理解。
一个是你是通过什么方式来执行“通过Timer0来控制EPWM的freeze/un-freeze”这个操作的?
另外,“在Timer0中断中加入了开关ADC采样,并清除了CLA中断”,就是说进入Timer0中断后,一方面会关闭ePWM的中断触发信号,一方面还会关闭ADC?
最后回到波形上,我看你的DAC输出波形其实是有一个正弦弧度的上升和下降的,会不会是这个波形的上升下降导致你感觉采样到的值变高/低了?
,
Songxiaobai:
在Timer0中断任务中,用TBCTL.CTRMODE位置00或11控制开关,打开EPWM或关闭EPWM,使触发信号产生或不产生,进而控制ADC是否采样.
信号是标准的正弦信号,在Timer0中断前后,两段波形的峰值会略有不同
我测试过如果不开Timer0中断,采样的波形是稳定的正弦信号,但是开了Timer0中断,并控制ADC采样后,波形不变,但是信号的幅值会略有变化
是否是因为我开关EPWM的触发信号而影响了采样的结果.
或者说采样结果会因为什么而出现了偏置
另外,控制ADC是否采样,是否有其他的控制方式,可能其他的方式对于ADC采样的结果会影响很小?
,
Songxiaobai:
另外,我有一点不太明白. 在我的系统中,CLA读取ADC采样值,Timer0定时中断,当Timer0中断任务发生时,CLA继续进行计算,然后进入中断,但此时Timer0中断任务未结束,需要等待结束后,CLA中断任务才能进入,也就是说,CLA在Timer0中断任务时,仅进行了一次读取ADC采样?
,
Green Deng:
理论上PWM的开关不会影响采样值的结果,ADC的触发条件有好几种,如下所示:
• Multiple trigger sources – S/W – software immediate start – All ePWMs – ADCSOC A or B – GPIO XINT2 – CPU Timers 0/1/2 (from each C28x core present) – ADCINT1/2
如果采样和PWM没有相关性的话你可以考虑直接用Timer0来控制ADC采样。