天气太热,硬盘受不了就开始罢工了,数据无价,实验的东东更是不敢动的,好在尽可能拷贝了部分数据,遗憾的是实验结果全丢了。。。测了一个多月呢。
换了硬盘,重新装了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点。
重新编译调试可执行。
总结:
折腾了这么久,就是把之前改的,又改了回来,看似什么工作都没做呢,其实不然,有人说程序员的成长是从找虫子开始的,这里头深层次的逻辑思维,需要长时间训练累计呢。