天氣太熱,硬碟受不了就開始罷工了,資料無價,實驗的東東更是不敢動的,好在盡可能拷貝了部分資料,遺憾的是實驗結果全丢了。。。測了一個多月呢。
換了硬碟,重新裝了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:; // 0 IPM alarm
Uint16 AC_PE:; // 1 AC input phase error
Uint16 DC_LV:; // 2 DC bus voltage low
Uint16 DC_OV:; // 3 DC bus voltage over
Uint16 DR_BR:; // 4 discharge R broken
Uint16 MO_OC:; // 5 motor over current
Uint16 MO_OL:; // 6 motor over load
Uint16 I_ZE:; // 7 current ZERO error
Uint16 VEL_OE:; // 8 velocity error over
Uint16 POS_OE:; // 9 position error over
Uint16 rsvd1:; // 15:10 reserved
} FAULT_BIT_S;
值為256的錯誤意味着VEL_OE:1;出錯,也就是速度環出錯了,找到速度環控制子產品AdjSpdPi_ov;
該子產品的輸入值就出錯,也就是之前的濾波輸出有錯,有兩次濾波,平均–〉低通–〉速度環;
先找平均濾波,其輸入正确,但是輸出錯誤,問題出在這了!好像是編譯器優化問題,改變了濾波深度導緻結果不準确。
更改編譯器設定,也就是之前的2點。
重新編譯調試可執行。
總結:
折騰了這麼久,就是把之前改的,又改了回來,看似什麼工作都沒做呢,其實不然,有人說程式員的成長是從找蟲子開始的,這裡頭深層次的邏輯思維,需要長時間訓練累計呢。