This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F28375D:eQEP QCTMRLUT 关于最大值

Guru**** 2442090 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/881584/ccs-tms320f28375d-eqep-qctmrlut-about-the-maximum-value

器件型号:TMS320F28375D

工具/软件:Code Composer Studio

针对每个中断检查脉冲计数和 QCTMRLUT。
设置如下:
================================================================================================================ ===
GpioCtrlRegs.GPAQSEL2.bit.GPIO20 = 2;//将 GPIO20与 SYSCLK 6样本同步(EQEP1A)
GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 2;//将 GPIO21与 SYSCLK 6样本同步(EQEP1B)
GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 2;//将 GPIO23与6个 SYSCLK 采样同步(EQEP1I)

EQep1Regs.QDECCTL.bit.QSRC = 00;    //正交计数模式
EQep1Regs.QEPCTL.bit.free_soft = 2;
EQep1Regs.QEPCTL.bit.PCRM = 01;

EQep1Regs.QEPCTL.bit.UTE = 0;            //非 UTE
EQep1Regs.QEPCTL.bit.QCLM = 0;         //读取 QPOSCNT = TMRLAT
EQep1Regs.QCAPCTL.BIT.UPPS = 0xF;    //防止 UPEVNT 的产生
EQep1Regs.QPOSMAX = 0x0000FFFF;   //最大位置= 0xFFFF

EQep1Regs.QCAPCTL.bit.CCPS = 3;
EQep1Regs.QCAPCTL.bit.CEN = 1;//启用 QEP 捕捉
EQep1Regs.QEPCTL.bit.QPEN = 1;// QEP 被启用
================================================================================================================ ===

使用该设置确认操作后、
QPOSCNT 的值将正确递增、但 QCTMRLUT 的值可能会被跳过。
增加脉冲数会增加发生的可能性。

请告诉我如何正确读取 QCTMRLUT 的值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您无法配置  EQep1Regs.QCAPCTL.BIT.UPPs = 0xF;    //阻止生成 UPEVNT; 这是无效配置并被标记为保留。 此外、通过将其设置为0xF、不会阻止 UPEVNT 的生成。  

    根据日志、每4096个 QCLK 周期生成一次 UPEVNT、这将复位 QCTMR。 因此、您将得到无效计数(以红色突出显示)。

    使用 QCTMR 的目的是什么? 如果您只是打算将其用作计时器、则可以使用 CPU 计时器或单位时间(在 eQEP 内部)。

    此致、

    Nirav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Nirav。

    感谢你的答复。
    我知道生成 UPEVENT 并进行复位。

    使用 QCTMR 确定每个中断的 PWM。
    如果脉冲数相差很远、则计算补偿过程。
    QCTMRLUT 认为这是从上次采集 QPOSCNT 到采集此 QPOSCNT 的最准确时间。

    是否有办法抑制 UPEVENT?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉耽误你的回答。 要回答您的问题-根据设计、UPEVENT 不能被抑制。

    另一种解决方案是:

    -配置  EQep1Regs.QCAPCTL.bit.UPPS = 0xB; 这是最大值。 这将每2048个 QCLK 周期生成一次 UPEVENT 并复位 QCTMR。

    现在知道了 TMR+-和 CNT+-之间的比率并且通过累加 QPOSCNT 值你可以估算出、在什么 QCTMR 计数上将发生下一个 UPEVENT (正如你知道的那样、它将在每2048个 QCLK 周期后发生)。  

    不确定此解决方案是否可在您的系统中使用、但基于 eQEP 设计、无法抑制 UPEVENT。

    此致、

    Nirav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否澄清实际用例?

    您能否使用 eCAP 来捕获事件之间的时间?

    此致、

    Nirav