本帖最后由 baisong1112 于 2018-3-21 18:50 编辑
SEED-DBS28377套件是ARROWSEED以TI的TMS320F28377D为主芯片,结合电机控制、工业驱动产品和电力线通信等方面的需求,设计完成的完整解决方案。该套件可以同时支持4路直流无刷电机,也可以同时支持双路千瓦伺服电机,未来还会支持EtherCAT等工业以太网协议。 作为SEED-DBS28377的开发者之一,笔者在调试过程中遇到了一些关于TMS320F28377D的典型问题,现将调试时的处理方法及思路记录如下,以便大家借鉴。
本期话题是奇怪的eQEP模块,总的来说TMS320F28377D的eQEP模块使用起来还是非常方便。但是,偶尔也会有奇怪的现象出现。在笔者参与开发千瓦伺服电机(伺服电机使用2500线增量式编码器)控制的过程中曾遇到一个现象。电机旋转、闭环控制都可以正常工作,仅当电机转子第一次旋转至编码器原点、输出索引信号(Z信号)时,电机会出现异常声音,音量每次不一样,而且偶尔会导致超调出现过流现象。 遇到问题笔者很是不爽——解决。决定解决这个问题,第一个想到的就是编码器的位置信息可能出现错误。可是会出现什么问题呢?抓状态吧,首先抓取以下3个参数的变化过程。这3个参数的主要作用是无论转子处于任何角度,当编码器第一次输出索引信号(Z信号)时,电机的角度变化可以保持连续。 l EQep1Regs.QPOSCNT :eQEP Position Counter l CalibratedAngle :Raw angular offset between encoder index and phase a l RawTheta :Raw angle from EQEP Postiion counter 三者在计算过程中的关系是: RawTheta = EQep1Regs.QPOSCNT + CalibratedAngle 当电机编码器索引信号(Z信号)出现时,这三者的状态应该是: l EQep1Regs.QPOSCNT :根据设置此寄存器值应初始化为0; l CalibratedAngle :索引信号出现时将EQep1Regs.QPOSILAT寄存器(有索引信号后锁存EQep1Regs.QPOSCNT的值)的值存储到CalibratedAngle中; l RawTheta :索引信号的出现不应影响原始角度值得过量变化;
抓取这三个变量的状态如下:
EQep1Regs.QPOSCNT
CalibratedAngle
RawTheta
通过以上三图可以观察到,只有RawTheta的状态出现了过量变化,肯定是EQep1Regs.QPOSCNT或者CalibratedAngle的状态在出现索引信号后异常导致的,笔者判断应该是EQep1Regs.QPOSCNT没有变为0。下面观看Buff可以更直观的验证。
DBUFF_4CH1[]存储索引信号状态: DBUFF_4CH1[714] = 1表示未检测到索引信号,DBUFF_4CH1[715]= 2代表已经检测到索引信号,即在第715个数据时已经有索引信号出现。
DBUFF_4CH2[]存储EQep1Regs.QPOSCNT的值; DBUFF_4CH2[715] = 3546,根据程序设定此时EQep1Regs.QPOSCNT的值应该为0。
DBUFF_4CH3[]存储CalibratedAngle的值; DBUFF_4CH3[714] = 0,DBUFF_4CH3[715]= 3546,证明在索引信号来临时EQep1Regs.QPOSILAT寄存器已经完成锁存EQep1Regs.QPOSCNT寄存器的动作,并将值赋给CalibratedAngle。
DBUFF_4CH4[]存储RawTheta的值; DBUFF_4CH4[715] = 7092,根据程序设定此时RawTheta的值应该为3546。
这就是导致异常声音以及超调过流的原因:在索引信号到来后EQep1Regs.QPOSCNT寄存器未初始化为0即参与角度的计算。 解决的办法是在判断索引信号来临时增加对EQep1Regs.QPOSCNT寄存器的判断,如下所示。 更改程序后的运行状态如图所示,异常声音及超调显现解决。 EQep1Regs.QPOSCNT CalibratedAngle RawTheta
|