《线程》中讨论的其他部件: 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()函数