(环境)
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(等待最大延迟)。
(问题)
- 这是缺陷还是预期的功能?
- 如果有缺陷,删除上面的代码是否足够好?