TI中文支持网
TI专业的中文技术问题搜集分享网站

F28335 ePWM中斷時間檢測!

我使用F28335的公板進行馬達控制,設定ePWM的中斷頻率為20kHz(50us),當馬達在等速時,理論上每一個epwm中斷時所得到的encoder counts應該大致相同,但是卻發生會有誤差50counts的情形,因此,懷疑中斷時間的準確性,想要檢測中斷時間是否相同。

有使用以下的方式進行測試,

1. 開啟CCS6.0 clock
run->clock->enable
run->clock->setup,cycle

2. 程式碼:.
#include <time.h>

clock_t start,stop,substraction,start1[100];

main{

   start=clock();
   stop=clock();
   substraction=stop-start;  //檢測過約等於430

}

interrupt void epwmisr(void)

{

   GpioDataRegs.GPADAT.bit.GPIO8=1;
   if (i<100) start1[i]=clock();
   /*我的程式*/     EPwm1Regs.ETCLR.bit.INT = 1;      PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;     GpioDataRegs.GPADAT.bit.GPIO8=0;

}

3.將start1[100]中的資料,後一個減掉前一個,例如,start1[1]-start[0],這一百筆資料相減的結果大致都會為1800~1835間,再減掉substraction=430,結果為1370~1405。

想請問的是。

1.若中斷程式未加if (i<100) start1[i]=clock();,利用示波器觀察GPIO8可以發現中斷時間是準確的20us,但是,加入if (i<100) start1[i]=clock();再觀察GPIO8會發現中斷時間不準確,這樣利用clock()所得到的值會是準確的嗎?

2.假設clock()所得到的值會是準確,F28335為150MHz,因此,中斷時間計算為(1/150MHz)*1370=9.13us,和我設定的中斷時間不相符,我的計算有錯誤嗎?

3.還有其他方式可以檢測ePWM中斷時間嗎?

謝謝!

Tim Huang:

回复 囧:

我設定timer0,利用CpuTimer0Regs.TIM.all這個暫存器就可以計數!

因此,我後一筆減前一筆的值為7500,7500*(1/150MHz)=50us。

謝謝你的回答。

赞(0)
未经允许不得转载:TI中文支持网 » F28335 ePWM中斷時間檢測!
分享到: 更多 (0)