ST意法半导体
直播中

李建设

7年用户 1319经验值
私信 关注
[问答]

在R3_2_TIMx_UP_IRQHandler()中出现双驱动检查是怎么回事

(环境)
MC_SDK 5.Y.3 + STM32CubeMX 6.3.0 带 HAL + IAR EWARM 8.5
(硬件)
基于F446RE的定制板+定制电源板+带编码器的低压BLDC电机
(控制模式)
速度控制
(我发现了什么)
  • 我配置了一个驱动器,其中使用了 tiM1(PWM)、TIM2(Encoder)、ADC1/2(Current Feedback)。
  • 在R3_2_TIMx_UP_IRQHandler()中,有几行注释为“双驱动检查”。
================================================ ========================
/* 双驱动检查 */
ADCInjFlags = ADCx_1->SR & (LL_ADC_FLAG_JSTRT|LL_ADC_FLAG_JEOS);
如果(ADCInjFlags == LL_ADC_FLAG_JSTRT)
{
  /* ADC 转换正在进行第二个电机 */
  做
  {
   /* 等待转换结束 */
   ADCInjFlags = ADCx_1->SR & (LL_ADC_FLAG_JSTRT|LL_ADC_FLAG_JEOS);
  }
  while ( ADCInjFlags != (LL_ADC_FLAG_JSTRT|LL_ADC_FLAG_JEOS) );
}
否则如果(ADCInjFlags == 0)
{
  /* 第二个电机上的 ADC 转换尚未开始 */
  while ( ( TIMx->CNT ) < ( pHandle->pParams_str->Tw ) )
  {
   /* 等待最大延迟 */
  }
   
  ADCInjFlags = ADCx_1->SR & (LL_ADC_FLAG_JSTRT|LL_ADC_FLAG_JEOS);
  如果(ADCInjFlags == LL_ADC_FLAG_JSTRT)
  {
   /* ADC 转换正在进行第二个电机 */
   做
   {
    /* 等待转换结束 */
    ADCInjFlags = ADCx_1->SR & (LL_ADC_FLAG_JSTRT|LL_ADC_FLAG_JEOS);
   }
   while ( ADCInjFlags != (LL_ADC_FLAG_JSTRT|LL_ADC_FLAG_JEOS) );
  }
}
别的
{
  /* 第二个电机上的 ADC 转换完成 */
}
================================================ ========================
  • 实际上,在上面的代码中,“else if(ADCInjFlags==0) { }”一直被执行,然后被阻塞在while() for(等待最大延迟)。

(问题)
  • 这是缺陷还是预期的功能?
  • 如果有缺陷,删除上面的代码是否足够好?






回帖(1)

李高歌

2022-12-14 10:09:22
你是完全正确的。这部分代码也涵盖了单电机和双电机。
双驱动部分对单电机无用,但不妨碍单驱动工作。
是的,您可以删除上面的代码。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分