Part Number:TMS320F280049COther Parts Discussed in Thread:C2000WARE
电机的编码器接驱动器,驱动器上的280049C对脉冲进行解码,但POSCNT的值在0和POSMAX(即10000)跃变,不存在中间值,并且方向标志位QDF在0和1变化(电机一直正转,方向并不改变)请问是什么原因?电机转速为45rpm;QFLG(PCE)=1即计数器发生错误
电机的编码器信号用示波器看是正确的,下面是我EQEP部分的配置程序
EQep1Regs.QDECCTL.bit.QSRC = 0; // 正交计数模式(Quadrature count mode)
EQep1Regs.QEPCTL.bit.FREE_SOFT = 2;
EQep1Regs.QUPRD = 1000000; // Time unit为1/100(即100HZ)
EQep1Regs.QPOSMAX = 10000; // 编码器为2500线
EQep1Regs.QPOSINIT = 0; // 计数器reset后的值
EQep1Regs.QEPCTL.bit.PCRM = 0; // counter的Reset mode设置为on index event
EQep1Regs.QEPCTL.bit.IEI = 3; // falling edge of index录入init寄存器的值
//EQep1Regs.QEPCTL.bit.IEL = 1; // 在index信号的上升沿锁存CNT的值至QPOSILAT、QPOSSLAT
EQep1Regs.QEPCTL.bit.UTE = 1; // enable unit timeout
EQep1Regs.QEPCTL.bit.QCLM = 1; // Latch on unit time out
EQep1Regs.QEPCTL.bit.QPEN = 1;
EQep1Regs.QPOSCTL.bit.PCSHDW = 0; // 采用立即计数模式
EQep1Regs.QCAPCTL.bit.CEN = 1; // enable capture
EQep1Regs.QCAPCTL.bit.UPPS = 5; // 1/32的QCLK
EQep1Regs.QCAPCTL.bit.CCPS = 7; // 1/128的SYSCLK,QCLK是SYSCLK频率的1/4
EQep1Regs.QEINT.bit.UTO = 1; // 使能 Unit Time-out引发的中断
应当如何解决这个问题?
fang ziqin:
我看了一下接收A和B信号的寄存器,用手非常缓慢转,发现它们的电平组合变化规律应该是对的,是(00)(10)(11)(01)(00);在AB电平切换的同时,我发现计数器在(00)向(10)切换时从0阶跃到10000;(01)向(00)切换也一样;其他时候保持不变。这应该是有问题的,因为我设置的是index信号来的时候POSCNT才归零,我把POSCNT重置的模式都尝试了一下,计数都是有问题的
,
Cherry Zhou:
您好,我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!
,
Cherry Zhou:
您好,建议您先从 C2000Ware 的示例开始,依次查看是否能观察到计数器按预期递增。
C:\ti\c2000\C2000Ware_<version>\driverlib\f28004x\examples\eqep
将示例中的配置与您的配置进行比较看看。以下黄框内的文档对每个示例进行了说明: