天氣太熱,硬盤受不了就開始罷工了,數據無價,實驗的東東更是不敢動的,好在儘可能拷貝了部分數據,遺憾的是實驗結果全丟了。。。測了一個多月呢。
換了硬盤,重新裝了CCS,一樣的工程,一樣的驅動器,不一樣的系統(換win8了^_^),然後燒寫出問題了~~~
背景:最近在做課題《伺服驅動系統關鍵技術研究》的慣量在線辨識,仿真結果很舒坦吶,在電機上跑就是要調,影響的因素比較多,也就意味着任務量比較大,也不知道電機精度行不行呢~反正老師的絕對值電機效果說是還理想(我搞了這麼久,結果還是不穩定~~)。現在呢,要把工作整理成論文了,不料新做的系統不太和諧,重新裝的CCS貌似要把調試參數改改。
整理如下:
1. 將C:\ti\ccsv5\ccs_base\emulation\gel下f18335.gel文件打開,查找XINTF_Enable()函數,並將它打開。此函數用於初始化XINTF,否則外ram不能下載程序。
2.針對出現的程序燒寫錯誤,有可能更改了properties of project–>Build–>c2000 Compiler–>Optimization下的Optimization level,默認爲4即可。
問題解決思路:
servo_cmd = 2可設定sc_ov.vu.wSOnReq = TRUE;
找到sc_ov的ServoConUpdate,看程序執行到pOv->var.sc_sm==SC_ERROR
找到sc_ov->pu.pAlarm值爲256,查看其定義sys_conn_uint(ID_SC, 0, ID_FP, 0);// pAlarm
在ID_FP中找到 FAULT_REG oAlarm;結構體FAULT_REG的定義如下:
typedef struct { // bits description
Uint16 IPM:1; // 0 IPM alarm
Uint16 AC_PE:1; // 1 AC input phase error
Uint16 DC_LV:1; // 2 DC bus voltage low
Uint16 DC_OV:1; // 3 DC bus voltage over
Uint16 DR_BR:1; // 4 discharge R broken
Uint16 MO_OC:1; // 5 motor over current
Uint16 MO_OL:1; // 6 motor over load
Uint16 I_ZE:1; // 7 current ZERO error
Uint16 VEL_OE:1; // 8 velocity error over
Uint16 POS_OE:1; // 9 position error over
Uint16 rsvd1:6; // 15:10 reserved
} FAULT_BIT_S;
值爲256的錯誤意味着VEL_OE:1;出錯,也就是速度環出錯了,找到速度環控制模塊AdjSpdPi_ov;
該模塊的輸入值就出錯,也就是之前的濾波輸出有錯,有兩次濾波,平均–〉低通–〉速度環;
先找平均濾波,其輸入正確,但是輸出錯誤,問題出在這了!好像是編譯器優化問題,改變了濾波深度導致結果不準確。
更改編譯器設置,也就是之前的2點。
重新編譯調試可執行。
總結:
折騰了這麼久,就是把之前改的,又改了回來,看似什麼工作都沒做呢,其實不然,有人說程序員的成長是從找蟲子開始的,這裏頭深層次的邏輯思維,需要長時間訓練累計呢。