ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-04 21:31:31  阅读:267  来源: 互联网

标签:HAL 舵机 -- STM32 TIM 计数 占空比 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%,也就是控制占空比在该区间内变换,即可改变舵机角度。

接线

image
在这里使用DJ0接口,即PB3。

配置CubeMX

可以使用上节配置好的demo复制后继续配置,也可以重新生成,这里不多赘述。
点击PB3,勾选TIM2_CH2定时器
image
Pinout & Configuration > A-Z > TIM2
Channel2 > PWM Generation CH2
image
然后配置如下参数

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

image

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

标签:HAL,舵机,--,STM32,TIM,计数,占空比,PWM
来源: https://www.cnblogs.com/USTHzhanglu/p/15643282.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有