STM32控制舵机SG-5010转动,HAL库

基础知识:

舵机可以通过控制PWM波占空比来调节相应角度

关于SG-5010舵机,我自己测得的它的工作脉冲宽度范围为0.4ms ~2.6ms


参数自定义:

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。

所以我们5ms脉宽,period是5000,那么有这么一个对应表:


脉宽-------------角度----------pulse

0.5ms-------------0度----------500;
  1.0ms------------45度---------1000;
  1.5ms------------90度---------1500;
   2.0ms-----------135度---------2000;
   2.5ms-----------180度---------2500;

(其实pulse值为400和2600也可以转到)

代码:

1、先定义一个全局变量count

2、然后在main函数里:

按键设置占空比的代码(写在while里):

if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == GPIO_PIN_RESET)
  {
    count++;//增

    if(count <500)
        {count = 500;}
    else if(count>=2500)
        {count = 2500;}//if-else是为了让计数器被设置的值不超过工作范围

    __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,count);//设置占空比

    //为了区分是在加占空比还是减占空比,两个led灯
    HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
    HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);
  }


else if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin) == GPIO_PIN_RESET)
  {
    count--;//减
    if(count <500)
        {count = 500;}
    else if(count>=2500)
        {count = 2500;}
    __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,count);
    HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
    HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET);
   }


OLED_ShowNum(3,1,((count-500)*9)/100,5);//把旋转角度打印在oled屏上
HAL_Delay(1);//为了防止count值增减太快

OK,就这样^v^!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值