我在STM是一个乞丐。我有STM32 NUCLEO-F411RE, Pololu 1570 6V 2220RPM直流电机,L298N直流电机驱动器和6V 1,3 ah极限蓄能器。我希望我的电机只是旋转,例如80%占空比pwm。我把它连接在这张图中:这是我的连接图但不是2个电机,我有一个,而不是Arduino,我有STM。在我的情况下,从电机驱动器引脚ENA连接到PB6引脚,我设置TIM4通道1 PWM产生。电机驱动器的IN1引脚接PA11, IN2接PA12。下面是我自己添加到main()中的代码:
/* USER CODE BEGIN 2 */
HAL_GPIO_WritePin(GPIOA,Dir1_Pin,GPIO_PIN_SET); // Start motor clock wise rotation, Dir1_Pin is PA11 and Dir2_Pin is PA12
HAL_GPIO_WritePin(GPIOA,Dir2_Pin,GPIO_PIN_RESET);
HAL_TIM_Base_Start(&htim4);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
htim4.Instance->CCR1=????; //What number should I put here to have my motor rotating with 80% duty cycle?
}
/* USER CODE END 3 */
}
我已经在互联网上寻找解释,计算了一个星期,但没有找到任何适合我的情况。电机驱动器上的红灯亮着。根据我的一些计算结果,它是"滴答滴答"的。声音不错,但马达没有转动。我不知道确切的值可以发送到ENA引脚为我的特定直流电机。
占空比只是PWM时钟的高低比。
要计算CCR的值,您必须知道定时器时钟中的PWM长度,这通常在ARR中设置,并映射到Init。周期结构成员:
void PWM_SetDutyCycle(uint16_t dc_percent) {
// recalculate into pulse width
uint16_t dc = htim1.Init.Period * ((uint32_t)dc_percent) / ((uint32_t) 100);
htim4.Instance->CCR1 = dc;
}