STM32Cubemx PWM驱动SG90舵机

发布时间:2024年01月11日

一、SG90相关介绍

名 称:9克舵机 180度

尺 寸:23mmX12.2mmX29mm
重 量:9克
扭 矩:1.5kg/cm
工 作 电 压: 4.2-6V
温 度 范 围:0℃--55℃
运 行 速 度:0.3秒/60度
死 带 宽:10微秒

?二、Cubemx配置

sys配置

RCC配置

?LED小灯

PWM输出一个周期时间为20ms,初始值为0.5ms

计算方法:Timer定时器时钟我们设置为72Mhz,这里我们将预分频设置为72-1,则一个周期为72Mhz/(71+1)=1Mhz(即1us),所以20ms的周期我们需要计数20000-1=19999个填入Counter Period参数中。

另外,我们还需要一个默认脉冲宽度为0.5ms的,0.5/20*20000=500


生成工程

?

?三、keil中代码配置

main.c

/* USER CODE BEGIN 0 */
void Set_SG90_angle(TIM_HandleTypeDef * htim,uint32_t Channel,uint8_t angle,uint32_t countPeriod,uint32_t CycleTime)
{
	uint16_t compare_value=0;
	if(angle<=180)
	{
		//角度转化为数值
		compare_value=0.5*countPeriod/CycleTime+angle*countPeriod/CycleTime/90;
		__HAL_TIM_SET_COMPARE(htim, Channel, compare_value);//调整占空比
	}

}

/* USER CODE END 0 */

初始化,此处舵机到达0度位置

  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
  /* USER CODE END 2 */

while

 /* USER CODE BEGIN WHILE */ 
 while (1)
  {
			HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
	
			//SG90从0°旋转到180°
			for(uint8_t i=0;i<180;i++)//从0到180°递增
			{
				Set_SG90_angle(&htim3,TIM_CHANNEL_2,i,20000,20);//此函数i设置舵机到达的角度
				HAL_Delay(5);				
			}	

			//SG90从180°旋转到0°
			for(uint8_t j=180;j>0;j--)//从180°到0°递减
			{
				Set_SG90_angle(&htim3,TIM_CHANNEL_2,j,20000,20);//此函数设置舵机到达的角度
				HAL_Delay(5);				
			}

    /* USER CODE END WHILE */

以上代码实现了舵机在180度水平方向反复运动效果。因为初始化默认舵机停留在-90度位置,可以先注释while中的占空比,调整舵机角度。一定注意舵机供电5V。

链接: https://pan.baidu.com/s/1Gk949glHw9BW_1QC6eFV2g?pwd=8swi 提取码: 8swi?

文章来源:https://blog.csdn.net/weixin_46286415/article/details/135527123
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。