天天看点

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点。

重新编译调试可执行。

总结:

折腾了这么久,就是把之前改的,又改了回来,看似什么工作都没做呢,其实不然,有人说程序员的成长是从找虫子开始的,这里头深层次的逻辑思维,需要长时间训练累计呢。