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.

[参考译文] LAUNCHXL-F28069M:如何检测电机失速错误?

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/597550/launchxl-f28069m-how-to-detect-a-motor-stall-error

器件型号:LAUNCHXL-F28069M

尊敬的所有人:

我想根据 QEP 中断标志之一检测电机失速错误或编码器丢失错误。 在与 TripZone 相关的部分、我知道 EQEP1ERR 已连接到/TZ4、并且只要编码器信号丢失、它就会激活。 但在 eQEP 部分中进行全面读取时、我发现此处未描述任何 EQEP1ERR 标志。  

除了本节、我知道 QEP 的看门狗计时器可用于检测电机失速错误。 是否有人使用此看门狗模块来实现此目的?

感谢您分享知识以解决此问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QEP 状态寄存器(QEPSTS)和 QEP 中断标志寄存器(QFLG)显示出现的错误信号。 您可以设置相关寄存器、通过 TRIG 中断启用这些错误、或读取寄存器以了解错误信号。 如果 QEP1中有任何错误信号、则会将 QEP1ERR 触发为 TZ4。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Yanming:

    感谢你的答复。 根据 您的指南、我按如下方式设置 Qep1看门狗:

    在 hal.c 中、我添加了一个用于设置 QepWatchdog 的函数:

    void HAL_setupQepWatchdog (HAL_Handle handle、HAL_QepSelect_e QEP)
    {
    HAL_Obj * obj =(HAL_Obj *)句柄;
    
    //设置看门狗周期
    QEP_SET_Watchdog_period (obj->qepHandle[QEP]、USER_QEP_Watchdog_period);
    
    //启用 QEP 看门狗计时器中断
    QEP_ENABLE_INTERRUPT (obj->qepHandle[QEP]、QEINT_WTO);
    
    //启用看门狗计时器以检测电机堵转
    QEP_ENABLE_Watchdog (obj->qepHandle[QEP]; 

    //为 EQEP1INT 启用 PIE 组5中断1
    PI_enableInt (obj->压 电致、PI_GroupNumber_5、PI_InterruptSource_EQEP1);

    //为 QEP 中断启用 CPU 中断
    cpu_enableInt (obj->cpuHandle、cpu_IntNumber_5); 返回; }

    以及用于管理 Qep1Watchdog 事件的中断函数

    中断空 HAL_Qep1WatchdogISR (空)
    {
    HAL_Obj * obj =(HAL_Obj *) halHandle;
    
    //检查是否设置了看门狗超时标志?
    if (QEP_READ_INTERRUPT_FLAG (obj->qepHandle[0]、QEINT_WTO)== true)
    {
    //切换 LED 以验证中断
    LED_RED_TOGGLE ();
    }
    
    //清除 QEP1INT 中断标志
    QEP_CLEAR_All_interrup_FLAGS (obj->qepHandle[0]);
    
    来自 PIE 组5的//确认中断
    PI_clearInt (obj->压 电筒、PI_GroupNumber_5);
    
    返回;
    
    } 

    在 HAL_initVectorTable (HAL_Handle handle)中

    静态内联 void HAL_initIntVectorTable (HAL_Handle handle)
    {
    HAL_Obj * obj =(HAL_Obj *)句柄;
    PIE_Obj * PIE =(PIE_Obj *) obj->压 电式;
    
    #ifdef QEP
    PIE->EQEP1_INT =&HAL_Qep1WatchdogISR;
    #endif
    
    } 

    中断没有被触发!!! 我哪里出错了?

    非常感谢!