STM32Cubemx PWM驱动SG90舵机

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

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chem4111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值