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.

[参考译文] LAUNHXL-F28069M:ECAP 3捕获不起作用

Guru**** 2589300 points
Other Parts Discussed in Thread: TIDA-00643

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1074466/launchxl-f28069m-ecap-3-capture-doesn-t-work

部件号:LAUNHHXL-F28069M
《线程》中讨论的其他部件: Tida-00643测试

您好,

我正在寻找一款采用 LAUNHXL-F28069M + DRV830的 ESC。

我找到了一种使用参考设计  TIDA-00643的方法,其中显示了许多修改,以使用 eCAP 速度参考接收器。

关于 LAUNCJXL-F28069M,我选择了 GPIO26 (Ecap3)。我添加了以下修改以激活 ECAP,但连接功能从未调用过。

我在调试模式下仔细检查寄存器,ecap3时钟已启用。

需要进行哪些更改?

谢谢

源代码:

/************************ HAL.C.***************************** /

 //初始化 eCAP
 obj->capHandle = cap_init((void *) CAP3_base_ADDR, sizeof(Cap_Obj));

...

// ECAP
void HAL_setupeCAP (HAL_handle 句柄)

   HAL_Obj *OBJ =(HHAL_Obj *)句柄;


   cap_setModeCap (obj->capHandle);//将模式设置为 CAP

   //禁用计数器同步
   cap_disableSyncIn(obj->capHandle);

   //设置捕获事件的极性
   cap_setCapEvtPolarity (obj->capHandle,cap_Event_1,cap_polyarity_Rising);

   //设置捕获事件的极性
   cap_setCapEvtPolarity (obj->capHandle,cap_Event_2,cap_polyal_Falling);

   //设置捕获事件计数器重置配置
   cap_setCapEvtReset (obj->capHandle, cap_Event_1,cap_Reset_Disable);

   //设置捕获事件计数器重置配置(在此处重置计数)
   cap_setCapEvtReset (obj->capHandle,cap_Event_2,cap_Reset_Enable);

   //连续计时器
   cap_setCapContinued(obj->capHandle);

   //将停止/环绕模式设置为2个事件
   cap_setStopWrap(obj->capHandle, cap_Stop_Wrap_CEVT2);
   //允许在捕获事件上加载 CAP1-4

   cap_enableCaptureLoad(obj->capHandle);
   //启用时间戳计数器运行

   cap_enableTimestampCounter(obj->capHandle);
   //启用捕获(CAP)中断源

   cap_enableInt (obj->capHandle,cap_Int_Type_CEVT2);
   //启用 eCAP 中断

   PI_enableInt (obj->压 电式,PI_GroupNumber_4,PI_InterruptSource_ECAP3);
   //启用 CPU ECAP 组中断

   CPU_enableInt(nob->cpuHandle,CPU_IntNumber_4);

   返回;
}// HAL_setupCAP()函数的末尾

 clk_enableEcap2Clock(obj->clkHandle);

/**** Hal.h ***/

// ECAP
外部中断 void ecapISR(void);

...

 enable_protected_register_write_mode;

 PI->ADCINT1 =维护 ISR (&M);

 // ECAP
 PI->ECAP3_INT =&ecapISR;

 disable_protected_register_write_mode;

/*** main.c ***/

Long test_ECAP = 0;
_interrupt void ecapISR(void)

   //清除捕获(CAP)中断标志
   cap_clearInt (halHandle->capHandle,cap_Int_Type_all);

   test_ECAP++;

   //计算 PWM 的高周期(从上升边缘到下降边缘)
   UINT32_t 普华永道=(UINT32_t) Cap_getCap2(HalHandle->capHandle)-(UINT32_t)
   cap_getCap1 (halHandle->capHandle);
   //指定适当的速度命令,将0-5%和95-100%组合在一起
   //0-100%速度与1-2毫秒的高周期成比例
   // 80MHz * 2ms = 160000

   //0-1%
   IF (普度<= 81333)// 61000
   {
       gSpeedRef_OK = 0;
       gSpeedRef_Duty =_IQ (0);
       //gMotorVars.Flag_Run_Identify = 0;
   }
   //1-99%
   如果((普华永道> 81333)&&(普华永道< 158666)// 61000和119000
   {
       gSpeedRef_OK = 0;
       gSpeedRef_Duty =_IQdiv (普华永道- 80000,80000);
       //gMotorVars.Flag_Run_Identify = 1;
   }
   //99-100%
   否则,如果(PwmDuty >=158666)// 119000
   {
       gSpeedRef_OK = 0;
       gSpeedRef_Duty =_IQ (1.0);
       //gMotorVars.Flag_Run_Identify = 1;
   }
   //捕捉所有内容
   否则
   {
       gSpeedRef_Duty =_IQ (0);
       gMotorVars.Flag_Run_Identify = 0;
   }
   //清除由组号定义的中断
   PI_CLEARInt (halHandle->压 电,PI_GroupNumber_4);
}//结束 ecapISR()函数

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

    安东尼

    为每个客户预制深入的代码调试将占用太多的带宽。 不过,我可以帮助您调试此处的运行系统,并让您深入了解应从何处查看。

    到目前为止,您进行了哪些调试?

    此致,
    Cody