一、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



















