本帖最后由 铁头电子player 于 2025-7-28 23:01 编辑
我正在用以下程序:以速度“1”运行直流电机(使用PWM命令),等待5秒,然后以速度“2”运行并等待5秒,之后电机停止。 问题是电机一直处于循环中:启动约1秒后就停止。(它没有保持5秒的运行时间)。 我使用的是STM32F4,电机引脚为C7。 我的项目是用STM32CubeIDE配置的。 #include "main.h" TIM_HandleTypeDef htim3; int puls ; float duty ; UART_HandleTypeDef huart2; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_USART2_UART_Init(void); static void MX_TIM3_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART2_UART_Init(); MX_TIM3_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start(&htim3); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); while (1) {puls=150 ; // motor with speed 1 duty =(puls*100)/31999; MX_TIM3_Init(); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); HAL_Delay(5000); puls=300 ; //motor with speed 2 duty =(puls*100)/31999; MX_TIM3_Init(); HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2); HAL_Delay(5000); HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2); } }static void MX_TIM3_Init(void){ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; htim3.Instance = TIM3; htim3.Init.Prescaler = 31999; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 65535; htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = puls; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } HAL_TIM_MspPostInit(&htim3); }
|