使用STM32 HAL库控制SG90舵机(F103C8T6)

1.软件准备 

(1)编程平台:Keil5

(2)CubeMX

2.硬件准备

(1)F1的板子,本例使用经典F103C8T6

(2)一个捡来的舵机

(3)ST-link 下载器

(4)杜邦线若干

 3.关于舵机控制原理

        舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:

 

4.CubeMX配置

(1)芯片选择

 (2)配置RCC、SYS、时钟树

配置RCC

配置SYS

配置时钟树

(3)配置定时器产生PWM波形

                         此时产生PWM波形频率:72M / 719 / (1999+1) = 50HZ     

                        波形周期:1  / 50 = 20ms

                        初始占空比为:0%

(4)设置路径、生成代码工程

5、Keil5代码

(1)main函数

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* 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_TIM2_Init();
  /* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//***定时器初始化
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  { 
      int i=1000; //循环时间间隔1s
      
      __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,50); //相当于一个周期内(20ms)有0.5ms高脉冲
      HAL_Delay(i);
      __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,250); //相当于一个周期内(20ms)有2.5ms高脉冲
      HAL_Delay(i);

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

        可以通过修改句柄__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,250)里的参数可以实现舵机角度控制。

6.接线图及效果

 本例程源码下载:本例程源码下载:点击跳转

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32 HAL库控制SG90舵机(F103C8T6)

发表评论