stm32cubemx HAL库编写舵机程序

1.基本配置一下cubemx

  1. 我们配置的TIM2,所以时钟源为48MHZ

  1. 舵机要求的周期是20ms,也就是50HZ。那么我们设置48MHZ/48/20000=50HZ,也就是0.02s=20ms.

2. keil5编写

 在tim.c下插入
/* USER CODE BEGIN TIM2_Init 2 */
    HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END TIM2_Init 2 */

main.c下

/* USER CODE BEGIN PD */
#define SERVO_MIN_ANGLE     0   // 舵机最小角度
#define SERVO_MAX_ANGLE     180 // 舵机最大角度
#define PWM_PERIOD          20000 // PWM周期,单位为us
/* USER CODE END PD */
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4);
/* USER CODE END 2 */
  1. 因为舵机需要高电平时间为0.5ms-2.5ms之间,所以当高电平为0.5ms,周期为20ms时,这时的Duty=0.5/20=2.5%。2.5%=CCR/(AAR+1),所以CCR=500.

  1. 所以当高电平为2.5ms,周期为20ms时,这时的Duty=2.5/20=12.5%。12.5%=CCR/(AAR+1),所以CCR=2500.

  1. 所以CCR的范围在500-2500。而角度代表0°-180°。

500 0

2500 180

因为一一对应的关系我们可以得到公式。angle=(CCR-500)(180°-0°)/(2500-500)

CCR=(angle /180°-0°)*(2500-500) + 500;

for(int angle = SERVO_MIN_ANGLE; angle <= SERVO_MAX_ANGLE; angle += 10)
        {
            /* 计算占空比 */ 
            float duty_cycle = (angle * 11.11f) + 500.0f; // 角度转换为占空比

            /* 设置PWM占空比 */
            __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, (uint32_t)duty_cycle);
            
            HAL_Delay(100); // 延时一段时间

        }
          for(int angle = SERVO_MAX_ANGLE; angle >= SERVO_MIN_ANGLE; angle -= 10)
        {
            /* 计算占空比 */ 
            float duty_cycle = (angle /180.0f)*2000.0f + 500.0f; // 角度转换为占空比  angle/180*2000+500

            /* 设置PWM占空比 */
            __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, (uint32_t)duty_cycle);
            HAL_Delay(100); // 延时一段时间
        }

注: __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_4, (uint32_t)duty_cycle);

这个函数其实就是改变CCR的值,以达到改变占空比的目的

3.实验现象

当我设置CCR的值为1500时,现象应该是高电平时间为1.5ms。duty=1500/20000*20ms=1.5ms

所以实验现象成功

感想:学了很久的hal库,都写在笔记里了,后面会陆续发出来整理出来,给stm32阶段画一个句号,后面开始学习freertos。

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值