CCS燒寫28335失敗

天氣太熱,硬盤受不了就開始罷工了,數據無價,實驗的東東更是不敢動的,好在儘可能拷貝了部分數據,遺憾的是實驗結果全丟了。。。測了一個多月呢。

換了硬盤,重新裝了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點。
重新編譯調試可執行。

總結:

折騰了這麼久,就是把之前改的,又改了回來,看似什麼工作都沒做呢,其實不然,有人說程序員的成長是從找蟲子開始的,這裏頭深層次的邏輯思維,需要長時間訓練累計呢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章