STM32 HAL库快速实战【三】《pwm控制舵机》--基于黑龙江科技大学机电工业机器人实训
系列目录:
-
STM32 HAL库快速实战【一】《32点灯》--基于黑龙江科技大学机电工业机器人实训 - USTHzhanglu - 博客园 (cnblogs.com)
-
STM32 HAL库快速实战【三】《pwm控制舵机》--基于黑龙江科技大学机电工业机器人实训 - USTHzhanglu - 博客园 (cnblogs.com)
-
STM32 HAL库快速实战【四】《串口简单使用》--基于黑龙江科技大学机电工业机器人实训 - USTHzhanglu - 博客园 (cnblogs.com)
-
STM32 HAL库快速实战【五】《控制串口电机》--基于黑龙江科技大学机电工业机器人实训 - USTHzhanglu - 博客园 (cnblogs.com)
模块介绍
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具