天天看點

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:;      // 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點。

重新編譯調試可執行。

總結:

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