STM32 HAL库快速实战【三】《pwm控制舵机》--基于黑龙江科技大学机电工业机器人实训

模块介绍

TBS-K210舵机

  • 数字舵机,采用PWM控制输出角度
  • 工作频率 50-330HZ
  • 脉冲宽度范围 500-2500us
  • 控制角度 270°
  • 中立位置 1500us

通过计算可得,步进角为270/2000=0.135°

PWM控制介绍

对于本次控制的舵机,当工作频率为50HZ,即周期为20ms,20000us时,500us对应的占空比为500/20000=2.5%,2500/20000=12.5%,也就是控制占空比在该区间内变换,即可改变舵机角度。

接线

STM32 HAL库快速实战【三】《pwm控制舵机》--基于黑龙江科技大学机电工业机器人实训
在这里使用DJ0接口,即PB3。

配置CubeMX

可以使用上节配置好的demo复制后继续配置,也可以重新生成,这里不多赘述。
点击PB3,勾选TIM2_CH2定时器
STM32 HAL库快速实战【三】《pwm控制舵机》--基于黑龙江科技大学机电工业机器人实训
Pinout & Configuration > A-Z > TIM2
Channel2 > PWM Generation CH2
STM32 HAL库快速实战【三】《pwm控制舵机》--基于黑龙江科技大学机电工业机器人实训
然后配置如下参数

参数 作用
PSC 预分频,定时器计数的频率。当主频为72Mhz,PSC为71时,计数频率为72/(71+1)=1Mhz,即每个周期1us
计数模式 递增计数或者递减计数
ARR 自动重载值,当计数到这个值时,计数器清零,重新计数。计数周期为1us,ARR为19999时,PWM周期为1us*(19999+1)为20ms,即50HZ
Pulse 翻转计数值,当计数到达这个值时,电平翻转
Polarity 输出极性,即计数到达Pulse前的电平状态

STM32 HAL库快速实战【三】《pwm控制舵机》--基于黑龙江科技大学机电工业机器人实训

GENERATE CODE >Open Project

编写代码

配置完PWM后,若要开启PWM,需要用到HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2)来打开TIM_CH2的定时器通道。同时舵机归零时需要一定时间,最好加个延时。

  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
	HAL_Delay(2000);
	HAL_GPIO_WritePin(led_GPIO_Port,led_Pin,GPIO_PIN_RESET);
  /* USER CODE END 2 */

注意到这里我们设置的ARR为20000,对应了20ms,调整占空比为2.5%即为500,因此只需要在500-2500之间改变Pulse值即可进行调节角度。
int 一个speed变量用来调整角度(原则上不能使用这个单词,会造成读者迷茫,”这个变量究竟控制什么?“,这里代码已经上传,因此就不想改了)
通过__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,speed)进行修改占空比。
每次改变完占空比后,舵机转到指定角度需要一定时间,因此需要根据改变角度幅度设置延时,也可以通过共同改变占空比变化量和延时时间来调节速度。delay减半,速度翻倍(
建议加一个翻转led来判断运行情况。
注意,当speed范围不在[500,2500]时舵机不会转动,因此建议限定speed的范围。

  /* USER CODE BEGIN WHILE */
  int speed=500;
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,speed);
	 HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
	  speed+=3;
	  HAL_Delay(100);
  }
  /* USER CODE END 3 */

工程源码

国内用户请使用gitee克隆或是使用代理访问Github
https://github.com/USTHzhanglu/stm32-hal/tree/main/pwm

上一篇:学习STM32的自我记录之时钟体系(简略)


下一篇:基于stm32单片机酒精检测仪设计——个人项目