TI论坛
直播中

李志刚

7年用户 189经验值
私信 关注
[问答]

F28335的公板进行马达控制出现误差的解决办法?

我使用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=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=clock();,利用示波器觀察GPIO8可以發現中斷時間是準確的20us,但是,加入if (i<100) start1=clock();再觀察GPIO8會發現中斷時間不準確,這樣利用clock()所得到的值會是準確的嗎?
2.假設clock()所得到的值會是準確,F28335為150MHz,因此,中斷時間計算為(1/150MHz)*1370=9.13us,和我設定的中斷時間不相符,我的計算有錯誤嗎?
3.還有其他方式可以檢測ePWM中斷時間嗎?

謝謝!

回帖(1)

李志刚

2020-6-2 17:19:23
我設定timer0,利用CpuTimer0Regs.TIM.all這個暫存器就可以計數!
因此,我後一筆減前一筆的值為7500,7500*(1/150MHz)=50us。
謝謝你的回答。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分