This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
大家好,、我对 SDFM 和 ePWM 有几个问题。
我们使用 ePWM1-3作为电机 PWM 输出、并使用 ePWM12来同步复位 SDFM 模块、但我们希望 SDFM 模块在每次 ePWM1-3启动触发时都能获取数据。 如何同步 ePWM1和 ePWM12?
在 TI 演示(D:\ti\controlSUITE\development_kits\TMDSIDDK_v2.0\IDDK_PM_Servo_F2837x_v2_00_00_00)中、我找到以下设置:
"EPwm11Regs.CMPC = EPwm11Regs.TBPRD - SDFM_TICK*(OSR_RAT+1)*3/2;
EPwm11Regs.CMPA.bit.CMPA =(SDFM_TICK*(OSR_RATE + 1)*3/2)+ 500;// 500是任意的
EPwm11Regs.CMPD = 0;"
当我们想要在 ePWM1-3启动触发时获取 SDFM 数据、但 SDFM 模块需要 延迟(延迟为38.9us)时、我设置 ePWM11:CMPC/D = CMPA = 0;在100us-MotorControlISR 模块中、我添加"while"、等待(大约38.9us) SDFM.SDIFLG.AF1、然后清除所有标志。 但我没能找到程序在几秒钟后停止运行。 为什么?
3.根据28379的规范,我不太理解 CMPC 和 CMPA 值的设置:sinc 滤波器延迟= sinc 滤波器的阶数* OSR /调制器数据速率,然后在 CMPC 和 CMPA 中的公式应为(3*(OSR_RAT+1)/SDFM_TICK/2 )*100,但为什么 TI 演示将值设置为上述值?
谢谢大家。
感谢您的回复。
是的、3个滤波器通道的配置方式相同。 比较器:Sinc3滤波器、OSR_32。 数据滤波器:Sinc3、OSR_128、DATA_16位、SHIFT_6_BIT。 启用 MFE、启用 EXTERNAL_RESET、 启用 MFIE 中断、启用 AE 中断。
您好,Ramesh
您好,Manoj、
非常感谢。 我错误地采用了频率为5MHz 的频率。 根据20MHz 频率、"sinc 滤波器的数据速率"等于156.25K 样本/秒(6.4us)、"sinc 滤波器延迟"等于19.2us (=3*6.4us)。 如规范所述、Sinc3滤波器的前两个样本不正确、因此我可以将时间值19.2us 理解为采样时间的三倍、以获取正确的数据。 但是、如果我想与点 PWM1-3触发器(ET_CTRL_PRD)同步、CMPC vale 不应该为"EPwm11Regs.TBPRD-(SDFM_TICK*(OSR_RAT+1)*3*2/3)"、即 EPwm11Regs.TBPRD--(6.4 2 = 12.8)?
使用 SINC3滤波器时、您的案例所需的总样本数为384 (OSR=128、OSR_RATE = 127)。 (总时间为19.2us、中点为9.6us)。 要将中点与 EPWM PRD 事件同步、SDFM 应在 PRD 事件之前的9.6us 开始。
9.6us =>(SDFM_TICK*(OSR_RATE + 1)*3/2
因此、CMPC = PRD - 9.6us
=> EPwm11Regs.TBPRD-(SDFM_TICK*(OSR_RATE + 1)*3/2)
希望这对您有所帮助。
您好、Ramesh、
很抱歉、我刚才看到了您的回复、但我仍然不清楚。
是的、我同意总时间为19.2us、但"在载波峰值点之前的 N/2样本开始新转换"使我感到困惑。 我认为19.2us = 3*6.4us、6.4us、这意味着 SDFM 采样周期(我对吗?)。 根据规范、sinc3的前2个样本不正确、因此、如果我想使 SDFM 数据与 ePWM PRD 事件同步、 为什么它不是“在载波峰值点之前开始 N*2/3个样本的新转换,并在峰值点之后等待 N*1/3个样本来读取数据”?
期待您的回复。
您好、Ramesh
非常感谢您对患者的解释。 我明白了。