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.

[参考译文] MSPM0G3107:如何捕获 QEI 通道的占空比和周期。

Guru**** 2398695 points
Other Parts Discussed in Thread: LP-MSPM0G3507, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1320267/mspm0g3107-how-to-capture-duty-and-period-of-qei-channel

器件型号:MSPM0G3107
主题中讨论的其他器件:MSPM0G3507SysConfig

嗨、大家好!

我不熟悉 MSPM0器件。 我从这个论坛中学到了很多东西。  

我的任务是测量电机输出- 2个正交编码器信号通道 、以了解电机方向以及 PWM 周期和占空比。

我使用 LP-MSPM0G3507评估板。 根据"timg_qei_mode" 示例、我将两个 QE 信号连接到 PA29/30、并且在稍微修改一下示例代码后成功获得方向结果。

现在我不知道如何测量  QE 信号的周期和占空比(任何通道都正常)。

我的第一个问题:

我很好奇 QEI 库中是否有函数 可以直接测量 QE 信号的周期和占空比。

我看到另一个"timx_timer_mode_capture_duty_and_period"示例。 据介绍,在 SysConfig 中,我已经尝试 设置一个新的定时器捕获 任务 CAPTURE_0 ,但我无法从 TIMA0将"Selected Peripheral"项更改为 TIMG8 (for QEI )。

那么我的第二个问题:

如何更改     CAPTURE_0任务的"所选外设"项?

 

非常感谢大家提供宝贵 意见。

莱奥

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

    尊敬的 Leo:

    1.我认为您无法同时为 WE 函数以及周期和占空比计算配置相同的引脚 PA29/30。 例如、您可以使用 timerA0 PA29/30作为 QE 函数、然后 timerA1 PA27/28用于周期捕获函数。 并将这些引脚外部连接。  

    2.您需要先更改 PinMux 功能  

    此致、

    现金豪

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

    你好、Cash (我喜欢你的名字 LOL)、
    感谢你的帮助。
    有没有方法可以获得 QEI 信号的速度? 或者我将必须使用另一个通道来进行采集、就像您在前面提到的那样?  
    此致、

    莱奥

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

    另一个问题。

    我正在尝试读取 TIMG8的 CTR 值。

    我修改了  "timg_qei_mode"示例作为附加的代码、添加了一行以读取 Timercount 值:

    gTimercount_cnt = DL_Timer_getTimerCount (QEI_0_INST);

    但始终会得到0。  


    现在 DL_TimerG_getQEIDirection ()函数运行良好。  请参见"图25-19"。  MSPM0 G 系列80MHz 微控制器 技术参考手册"中25.2.3.1.3.1第2个信号 QEI 运行"、TIMx。 CTR 应在 PHA/PHB 状态改变后执行+1或-1。 因此、 TIMx 应该有一些值。 CTR 。

    感谢 您发送编修。  

    莱奥


    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    #include "ti_msp_dl_config.h"

    Volatile uint32_t gTimercount_last = 0;
    Volatile uint32_t gTimercount_cnt = 0;
    Volatile uint32_t gTimercount = 0;

    int main (空)
    {
    SYSCFG_DL_init ();

    NVIC_EnableIRQ (QEI_0_INST_INT_IRQN);

    DL_TimerG_startCounter (QEI_0_INST);

    while (1){

    gTimercount_cnt = DL_Timer_getTimerCount (QEI_0_INST);
    //gTimercount_cnt = DL_Timer_getCounterValueAfterEnable (QEI_0_INST);
    //gTimercount = gTimercount_cnt - gTimercount_last;
    delay_cycles (1000);
    gTimercount_last = gTimercount_cnt;

    __ WFI ();


    void QEI_0_INST_IRQHandler (void)
    {
    开关(DL_TimerG_getPendingInterrupt (QEI_0_INST)){
    案例 DL_TIMER_IIDX_DIR_CHANGE:
    如果(DL_TimerG_getQEIDirection (QEI_0_INST)= DL_TIMER_QEI_DIR_DOWN)
    DL_GPIO_clearPins (GPIO_LEDS_PORT、GPIO_LEDS_USER_LED_1_PIN);
    否则
    DL_GPIO_setPins (GPIO_LEDS_PORT、GPIO_LEDS_USER_LED_1_PIN);
    默认值:
    中断;

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

    您好!

    我正在运行 QEI 示例代码、计数器值仅在方向发生变化时发生变化。 下周请我再做更多测试和反馈。  

    此致、

    现金豪

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

    谢谢你。

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

    您好,

    附加了测试代码、我将使用两个 GPIO 来生成 QEI 信号。 并移除 LP 上未使用的跳线。 我可以使用此代码正确地得出计数器值。  

    e2e.ti.com/.../timg_5F00_qei_5F00_mode_5F00_LP_5F00_MSPM0G3507_5F00_nortos_5F00_ticlang.zip

    此致、

    现金豪

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

    谢谢,它工作!