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.

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中斷時間嗎?

謝謝!