Skip to content

Time_PWM_SG90舵机控制

1. 本章硬件准备

SG90 舵机一个 alt text

舵机的控制是通过不同的PWM占空比去调整电机角度,PWM则是通过定时器去实现

舵机演示

1.1 硬件连接

alt text

名称信号
负极接GND
正极接3V3或者5V
信号线接PA15

2. stm32cubmx 生成代码

2.1 配置定时器

TIM2配置 定时器2 配置为1通道输出,
舵机需要配置20ms的周期,20ms = 0.02s = (720*2000)/72000000
所以代码配置的信息,只需要修改其中的计数值即可
t = 0.5ms——————-舵机会转到 0 °-------对应计数值50
t = 1.0ms——————-舵机会转到 45°
t = 1.5ms——————-舵机会转到 90°
t = 2.0ms——————-舵机会转到 135°
t = 2.5ms——————-舵机会转到 180° ------对应计数值250

2.2 整体配置

alt text 这里配置了定时器,外部时钟,Debug口,串口,

3. 编写代码

代码只有两个流程

  1. HAL_TIM_PWM_Start 配置定时器启动
  2. __HAL_TIM_SET_COMPARE 配置定时器的占空比,可以根据自己的需要去灵活调整
C
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM1_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  /* USER CODE END 2 */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /*
  t = 0.5ms——————-舵机会转到 0 °
		t = 1.0ms——————-舵机会转到 45°
		t = 1.5ms——————-舵机会转到 90°
		t = 2.0ms——————-舵机会转到 135°
		t = 2.5ms——————-舵机会转到 180°

		*/
		__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,50);//0
		HAL_Delay(1000);
		__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,150);
		HAL_Delay(1000);
		__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,250);//180
		HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
}