STM32
直播中

王玲

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

想用ST MC电机库进行BLDC开发,电机无法快速切换正反转怎么解决?

想用ST MC电机库进行BLDC开发,实际要求电机可以快速切换正反转,但实际实验过程中却无法实现,两方向切换过程中必须要延时一些时间,否则反向无法正常启动。感觉就像是要“缓一下”才行,但这缓
的时间也太长了,我测试时则需500ms或以上(如下程序红色语句所示),想请教下这是什么原因。
开发套件为NUCLEO-IHM01,电机库版本为5.3,测试代码如下:

int main(void)
{
  /* USER CODE BEGIN 1 */
         int16_t Motor1Speed,Motor1SpeedAverage;
         int16_t Motor1Dir;
         uint16_t Motor1State,Motor1Faults;
  /* USER CODE END 1 */
  /* MCU Configuration--------------------------------------------------------*/
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
  /* USER CODE BEGIN Init */
  /* USER CODE END Init */
  /* Configure the system clock */
  SystemClock_Config();
  /* USER CODE BEGIN SysInit */
  /* USER CODE END SysInit */
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_DAC_Init();
  MX_TIM1_Init();
  MX_USART2_UART_Init();
  MX_MotorControl_Init();
  /* Initialize interrupts */
  MX_NVIC_Init();
  /* USER CODE BEGIN 2 */
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
                         MC_ProgramSpeedRampMotor1(100/6,600);
                         MC_StartMotor1();
                          HAL_Delay(2000);
                         Motor1Speed = MC_GetMecSpeedReferenceMotor1();
                         Motor1SpeedAverage = MC_GetMecSpeedAverageMotor1();
                         Motor1Dir = MC_GetImposedDirectionMotor1();
                         Motor1State = MC_GetSTMStateMotor1();
                         Motor1Faults = MC_GetOccurredFaultsMotor1();
                         if((Motor1State==10)||(Motor1State==11))
                        {
                                MC_AcknowledgeFaultMotor1();
                        }
                        MC_StopMotor1();
                        HAL_Delay(500);
                                
                         MC_ProgramSpeedRampMotor1(-100/6,600);
                         MC_StartMotor1();
                         HAL_Delay(2000);
                         Motor1Speed = MC_GetMecSpeedReferenceMotor1();
                         Motor1SpeedAverage = MC_GetMecSpeedAverageMotor1();
                         Motor1Dir = MC_GetImposedDirectionMotor1();
                         Motor1State = MC_GetSTMStateMotor1();
                         Motor1Faults = MC_GetOccurredFaultsMotor1();
                         if((Motor1State==10)||(Motor1State==11))
                        {
                                 MC_AcknowledgeFaultMotor1();
                        }
                        MC_StopMotor1();
                        HAL_Delay(500);                        
  }
  /* USER CODE END 3 */
}

回帖(1)

李川

2024-4-18 10:05:17
改一下STOPPERMANENCY_MS 宏的值就可以了
举报

更多回帖

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