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.

[参考译文] Starterware/STARTERWARE-Sitara:eQEP 驱动程序

Guru**** 2563960 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/610160/starterware-starterware-sitara-eqep-driver

器件型号:STARTERWARE-Sitara

工具/软件:Starterware

大家好、

我在尝试使用 BeagleBone White 的 eQEP 模块时遇到了一些问题。 我的目标是打印编码器旋转了多少。

下面是我的代码中成功构建的一部分、但当加载到连接到正交编码器的电路板上时、它不能按预期工作。

//
#define eQEP_QPOSCNT(0x0)
#define eQEP_QPOSINIT(0x4)
#define eQEP_QPOSMAX(0x8)
#define eQEP_QPOSCNT(0x28)
#define eQEP_QPOSPCTL(0x2A)
#define eQEP_QEP_QEP_QEP_REG+Q000+ QEP_QEP_QEP_TRF_Q0001



(0xQEP_QEP_QEP_TRF_QEP_QEP_QEP_QEP_TRF_Q0001)#define (0xQEP_QEP_QEP_QEP_QEP_TRF_QEP_QEP_TRF_QEP_QEP_QEP_QEP_QEP_QEP_QEP_QEP_TRF_QEP_TRF_QEP_QEP_TRF_Q0001)#define #define (0xQEP_QEP_QEP_QEP_QEP_QEP_QEP_





HWREG (SOC_eQEP_1_regs+eQEP_QDECCTL)=(HWREG (SOC_eQEP_1_regs+eQEP_QEP_QRECTL)&(~
~eQEP_QEP_QEP_QREGH

)= 0xQEP_QEP_QEP_1eQEP_eQEP_TRL (eQEP_QEP_QEP_QREGH)= 0xQEP_QEP_QEP_QEP_QEP_QREGH)|(eQEP_QEP_QEP_QEP_QEP_QEP_QEP_QEP_TRL (eQEP_QREGH)+ QEP_QEP_QEP_QEP_QEP_QEP_QEP_TRL = 0xQEP_QEP_QEP_QEP_QEP_QEP_TRL (eQEP_QEP_QEP_QREGH)+ 1)(eQEP_QEP_QEP_QEP_QEP_QEP_QEP_Q




CURRENT_pos = HWREG (SOC_eQEP_1_regs+eQEP_QPOSCNT);
UARTprintf ("计数=%d \n"、CURRENT_pos);
} 

尽管我打印的消息是 Count=0或者我给 eQEP_QPOSINIT 寄存器的任何值、不管编码器旋转了多少...

假设我已经启用了所有必要的模块(例如 UART、电源域、时钟、GPIO 模块等)并且 我已经完成了正确的引脚复用、那么上述情况是否有问题?
我的意思是、根据这个代码、 我不应该打印位置计数器的递增(这是我的目标)
有人有什么建议或可以指出任何错误吗?
此外、我是否有任何方法来检查 eQEP 模块是否已被实际正确启用?
请,我迫切希望得到一些帮助。

提前感谢。

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

    以下代码对我来说工作顺利:

    PWMSSModuleClkConfig (1);//对于 EHRPWM1和 EQEP1
    
    、//初始化
    HWREGH (SOC_eQEP_1_regs+QEP_QPOSICTL)=0x0800;
    HWREGH (SOC_eQEP_1_regs+QEP_QEPCTL)=0x1038;HWREGH (SOC_eQEP_QEP_QEP_REGH
    )=0x7QEP_QEP_QEP_REGH
    ;HW1_QEP_QEP_QEP_QEP_REGH (0xQEP_QEP_QEP_QEP_QEP_QEP_REGH)
    
    
    //启用时钟
    HWREG (SOC_PWMSS1_regs + PWMSS_clock_config)|= PWMSS_QEP_CLK_EN;
    
    //针对 QEP
    MUX_VAL (CONTROL_PADCONF_LCD_DATA13、(
    IEN | PD | MODE2)的引脚多路复用器;//未
    
    
    
    
    使用 QEP_QEP_QEP_RESET_QEP_QEP_0X12+ QEP_MODEF;当 CMOPA+QEP_QEP_QEP_RESET_QEP_QEP_QEP_POST_POR = 0X0X0X0X0X0_QEP_QEP_QEP_POR = QEP_POST_QEP_POST_QEP_POST_POST_POR = 0X0X+QEP_QEP_POST_POST_POST_POR = 0X+QEP_POST_QEP_POST_POR = 0X+QEP_QEP_POST_POR
    
    
    

    最后、currQEPosition 包含正交编码器计数-因此重复调用最后一行应该是您的解决方案。

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

    非常感谢您的回复!

    我将尽快对其进行测试、但如果对您来说没有问题、您能否澄清我对您的代码存在的一些问题、以便我更好地理解?
    首先、我注意到您将计数器复位两次、是错误还是有目的?或者、我是否需要多次复位、也许是在某些特定条件下?
    此外、您能否向我解释为何从 QPOSCNT 值中提取0x7ffffff?
    此外、您还使用了 MUX_VAL 函数...我不确定我可以在 starterware 中的某个位置找到该函数...它是否是您创建的自定义函数?它是否像 GpioPinMuxSetup?

    我真的很感谢你的帮助!!!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    重置计数器不必执行两次、这是因为我只是复制了我的现有代码。

    0x7ffffffff 特定于我的应用、但也可能对您有用-当 currQEPosition 是一个有符号整数且编码器开始反向计数时、您也会看到负位置值。

    MUX_VAL 函数实际上与引脚多路复用相关、如果您尚未将它们启用为 eQEP 的输入、则不会接收任何用于计数的脉冲。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 qxc!

    我的错误是没有完全激活 eQEP 模块和 qepctl 寄存器的值...总之、您的帮助非常有用!!!

    再次感谢