请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28379D 工具/软件:Code Composer Studio
你(们)好。
我想了解如何将 QEP 模块与简单的正交编码器连接 起来,从而生成 A-B 信号并上拉至3V3:我探测到这些信号,它们都正常[ A 连接至 QEP1A-GPIO20,B 连接至 QEP1A-GPIO21]。
I 启用 QEP 时钟:
CpuSysRegs.PCLKCR4.bit.EQEP1 = 1;
和配置的 GPIO 引脚:
void InitQEPGpio() { GpioCtrlRegs.GPAPUD.bit.GPIO20 = 1;//禁用 GPIO20上的上拉电阻(EQEP1A) GpioCtrlRegs.GPAPUD.bit.GPIO21 = 1;//禁用 GPIO21 (EQEP1B)上的上拉 电阻// GpioCtrlRegs.GPAPUD.bit.GPIO22 = 1;//禁用 GPIO22上的上拉电阻(EQEP1S) // GpioCtrlRegs.GPIO23 = 1;//禁用 GPIO23。 GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 0;//将 GPIO20与 SYSCLK 同步(EQEP1A) GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 0;//将 GPIO21同步到 SYSCLK (EQEP1B) // GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 0;//将 GPIO22 同步到 SYSCLK (EQEP1S)// GpioCtrl.GPIO23 = 0;GPQEQCL23 = 0 GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 1;//将 GPIO20配置为 EQEP1A GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 1;//将 GPIO21配置为 EQEP1B // GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 1;//将 GPIO22配置为 EQEP1S // GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 1;//将 GPIO22配置为 EQEP123}
我想指定编码器不会生成 索引或选通、因此我没有配置该引脚。
此外、我将 QEP 模块设置如下:
void QEP_init() { EQep1Regs.QEPCTL.bit.free_soft = 2; // DB -位置计数器在仿真模式下自由运行 EQep1Regs.QEPCTL.bit.SWI = 1; // DB -软件位置计数器初始化 EQep1Regs.QEPCTL.bit.QPEN = 1; // DB -启用正交位置计数器 EQep1Regs.QEPCTL.bit.UTE = 0; // DB -禁用单位计时器 EQep1Regs.QEPCTL.bit.WDE = 0; // DB -禁用 QEP 看门狗 EQep1Regs.QDECCTL.bit.QSRC = 0; // DB -正交计数模式模块 EQep1Regs.QDECCTL.bit.swap = 0; // DB - CLK 输入未交换 EQep1Regs.QDECCTL.bit.QAP = 0; // DB -输入 A 未反转 EQep1Regs.QDECCTL.bit.QBP = 0; // DB -输入 B 未反转 EQep1Regs.QCLR.bit.INT = 1; // DB -清除 QEP 中断 EQep1Regs.QCLR.bit.QDC = 1; // DB -清除方向改变标志 EQep1Regs.QEINT.BIT.QDC = 1; // DB -启用方向更改 INT }
此外、我配置了一个 QEP ISR、当我强制 QFRC 寄存器中的 QDC 位时将其触发:我的第一个任务是检测方向变化、然后读取位置计数器[QPOSCNT]。
因此、我的问题是:
1) 1)在 TMR 页图17-4中有一个 EQEPxENCLK 引用。 该开关是归属于 CpuSysRegs.PCLKCR4.bit.EQEP1位还是另有一个位?
2) 2)当我更改 HW 编码器位置时、我不会注意到 QPOSCNT 和 QFN 中有任何变化。 是否有其他配置? QD 模块似乎无法正常工作、但中断部分工作正常。 如何调试这种情况[生成良好的 QCLK 和 QDIR 信号]?
感谢你的帮助。