[Seed开发板及仿真器]

SEED-DBS28377调试笔记2--eQEP

[复制链接]
2823|7
手机看帖
扫描二维码
随时随地手机跟帖
baisong1112|  楼主 | 2018-3-21 18:47 | 显示全部楼层 |阅读模式
本帖最后由 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                           :索引信号的出现不应影响原始角度值得过量变化;

抓取这三个变量的状态如下:
035.png
EQep1Regs.QPOSCNT 036.png
CalibratedAngle
037.png

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。

039d.png

这就是导致异常声音以及超调过流的原因:在索引信号到来后EQep1Regs.QPOSCNT寄存器未初始化为0即参与角度的计算。
解决的办法是在判断索引信号来临时增加对EQep1Regs.QPOSCNT寄存器的判断,如下所示。
039e.png
更改程序后的运行状态如图所示,异常声音及超调显现解决。
040.png
EQep1Regs.QPOSCNT
041.png
CalibratedAngle
042.png
RawTheta




相关帖子

louhou| | 2018-3-21 18:48 | 显示全部楼层
沙发,学到了!

使用特权

评论回复
stillwaters| | 2018-3-21 18:48 | 显示全部楼层
本帖最后由 stillwaters 于 2018-3-21 18:50 编辑

好帖,可惜只抢了个板凳……

使用特权

评论回复
lvroubaozi| | 2018-3-22 08:52 | 显示全部楼层
还有续集。。

使用特权

评论回复
zgjs79er| | 2018-3-22 09:30 | 显示全部楼层
发现问题、分析问题、解决问题。有数据有图表真是好贴!

使用特权

评论回复
baisong1112|  楼主 | 2018-3-22 09:55 | 显示全部楼层

敬请期待哦

使用特权

评论回复
小清新941006| | 2019-3-22 17:32 | 显示全部楼层
你好,我想请问下在抓取变量值的时候怎么样把横坐标轴的时间加长呢?还有您是怎么通过DBUFF_4CH1观测每个变量的变化呢?  问的有点基础,希望能够回答一下 谢谢。

使用特权

评论回复
baisong1112|  楼主 | 2019-6-18 10:35 | 显示全部楼层
小清新941006 发表于 2019-3-22 17:32
你好,我想请问下在抓取变量值的时候怎么样把横坐标轴的时间加长呢?还有您是怎么通过DBUFF_4CH1观测每个变 ...

横坐标的时间是在CCS中设置的,但是要根据你Buffer的大小一同决定横坐标的时间长短。
DBUFF_4CH1是一个数组,可以在Watch window中打开进行观测。
不知道有没有帮到你。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

56

帖子

0

粉丝