STM32 HAL库快速实战【三】《pwm控制舵机》--基于黑龙江科技大学机电工业机器人实训
作者:互联网
模块介绍
TBS-K210舵机
- 数字舵机,采用PWM控制输出角度
- 工作频率 50-330HZ
- 脉冲宽度范围 500-2500us
- 控制角度 270°
- 中立位置 1500us
通过计算可得,步进角为270/2000=0.135°
PWM控制介绍
- 参考文章 PWM频率与占空比详解
对于本次控制的舵机,当工作频率为50HZ,即周期为20ms,20000us时,500us对应的占空比为500/20000=2.5%,2500/20000=12.5%,也就是控制占空比在该区间内变换,即可改变舵机角度。
接线
在这里使用DJ0接口,即PB3。
配置CubeMX
可以使用上节配置好的demo复制后继续配置,也可以重新生成,这里不多赘述。
点击PB3,勾选TIM2_CH2定时器
Pinout & Configuration > A-Z > TIM2
Channel2 > PWM Generation CH2
然后配置如下参数
参数 | 作用 |
---|---|
PSC | 预分频,定时器计数的频率。当主频为72Mhz,PSC为71时,计数频率为72/(71+1)=1Mhz,即每个周期1us |
计数模式 | 递增计数或者递减计数 |
ARR | 自动重载值,当计数到这个值时,计数器清零,重新计数。计数周期为1us,ARR为19999时,PWM周期为1us*(19999+1)为20ms,即50HZ |
Pulse | 翻转计数值,当计数到达这个值时,电平翻转 |
Polarity | 输出极性,即计数到达Pulse前的电平状态 |
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