主题中讨论的其他器件: TMS320F28335、 TMS320F28379D、 C2000WARE
工具与软件:
问题描述:DSP TMS320F28379D 上的 eQEP 频率计算异常
我当前使用的是 LAUNCHXL-F28379D 开发板、连接到控制电机的三相逆变器。 系统设置如下:
- 电流频率 :10 Hz
- ADC 中断频率 :10 kHz
- 电机规范 :8极、预期速度为150 RPM (使用转速计验证)
- 编码器分辨率 :10000 CPR、仅使用 A/B 相位输入、不使用索引信号
- eQEP 初始化 :基于官方实例
Eqep_pos_speed.c - 手动将电机旋转一整圈时、示波器会显示正确且完整的波形、从而确认编码器信号没有故障
问题:
- 在输出时 QPOSCNT 数值作为模拟信号、预期的频率为 2.5 Hz (对应于150 RPM)、但实际测量频率是 6.8 Hz .
- 将当前频率增加到20Hz 时、频率对应于 QPOSCNT 越大 7.8 Hz 仍然比理论值高得多。
- 相同的 eQEP 初始化配置(包括 QUALPRD、UPP、CCP 等)在上正确工作 TMS320F28335 输出频率与理论值匹配。
尝试的解决方案:
- 调整了 QUALPRD (单位周期寄存器)设置为各种值。
- 已修改 UPP (采棉头位置预分频器)和 CCP (捕获时钟预分频器)参数。
- 已验证电机的实际速度、消除了机械问题。
- 测试了 TMS320F28335上的示例代码、确认它在该平台上的正确性。
请求协助:
- 是否存在任何已知问题 TMS320F28379D eQEP 模块 导致此类频率异常、是什么呢?
- 仅使用 A/B 相位输入时、是否需要特定的配置 QEPCTL (eQEP 控制寄存器)或其他参数?
- 是否有其他调试建议、例如分析中断、寄存器状态或潜在的硬件相关问题?
其他信息: 我可以提供信号波形测量或进一步介绍 DAC 输出设置以供分析。
我希望能得到社会人士的意见、以解决这个问题。 谢谢!


void POSSPEED_Init (void)
{
EALLOW;
EQep2Regs.QUPRD = 2000000;
EQep2Regs.QDECCTL.bit.QSRC = 00;
EQep2Regs.QDECCTL.bit.XCR = 0;
EQep2Regs.QEPCTL.bit.free_soft = 2;
EQep2Regs.QEPCTL.bit.PCRM = 01;
EQep2Regs.QEPCTL.bit.UTE = 1;
EQep2Regs.QEPCTL.bit.QCLM = 1;
EQep2Regs.QPOSMAX = 10000;
EQep2Regs.QEPCTL.bit.QPEN = 1;
EQep2Regs.QCAPCTL.bit.CEN = 1;
EQep2Regs.QCAPCTL.bit.CCP = 6;
EQep2Regs.QCAPCTL.bit.UPP = 2;
EQep2Regs.QPOSCNT = 0;
EDIS;
}
void InitEQep2Gpio (void)
{
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO24 = 1;// Disable pull-up on GPIO24 (EQEP2A)(禁用 GPIO24上拉电阻)
GpioCtrlRegs.GPAPUD.bit.GPIO25 = 1;// Disable pull-up on GPIO25 (EQEP2B)(禁用 GPIO25上的上拉)
GpioCtrlRegs.GPAPUD.bit.GPIO26 = 1;// Disable pull-up on GPIO26 (EQEP2S)(禁用 GPIO26上的上拉电阻)
GpioCtrlRegs.GPAPUD.bit.GPIO27 = 1;// Disable pull-up on GPIO27 (EQEP2I)(禁用 GPIO27上的上拉)
//将输入同步到 SYSCLK
//用户可以启用或禁用同步。
//注释掉其他不需要的行。
//
GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 0;//将 GPIO24同步到 SYSCLK (EQEP2A)
GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 0;//将 GPIO25同步到 SYSCLK (EQEP2B)
GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 0;//将 GPIO26同步到 SYSCLK (EQEP2S)
GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 0;//将 GPIO27同步到 SYSCLK (EQEP2I)
GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 2;//将 GPIO24配置为 EQEP2A
GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 2;//将 GPIO25配置为 EQEP2B
GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 2;//将 GPIO26配置为 EQEP2S
GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 2;//将 GPIO27配置为 EQEP2I
EDIS;
}






