首页 > 行业资讯 >定制驱动模组
TECHNICAL SUPPORT

PWM驱动舵机HAL库:从零实现精准角度控制

发布时间: 2026-04-05

01PWM驱动舵机HAL库完整指南

此文是针对嵌入式开发者的,给出了基于HAL库也就是硬件抽象层借助PWM即脉冲宽度调制来驱动舵机的完整操作方案,你会在10分钟之内掌握从定时器配置直至角度映射的所有核心步骤,并且能够直接复用文中代码。

1. 舵机PWM控制核心原理

通过高电平脉冲宽度来控制旋转角度的舵机,其旋转角度与PWM周期并无关联,标准舵机控制参数,为。

PWM信号周期:20ms(即频率50Hz)

高电平时间与角度对应关系

0.5ms → 0度

1.5ms → 90度(中位)

2.5ms → 180度

关键结论是,仅需对PWM占空比作出改变,让高电平宽度呈现出在0.5ms与2.5ms之间的线性变化态势,如此一来就能达成0至180°的连续控制。

信息出处为源于JIS D 5703标准而衍生出来的通用舵机技术规范 , 是数据的来源。

2. HAL库配置步骤(以STM32为例)

下述操作是依据以及HAL库来进行的,它适用于每一个支持PWM输出的MCU。

2.1 定时器与PWM通道初始化

1. 选取定时器,选那种任意的通用定时器,像是TIM2、TIM3、TIM4这种,并且要求是至少具备1个PWM输出通道的。

2. 计算参数(目标:周期20ms,即频率50Hz):

设定系统时钟为84MHz ,选取预分频系数(PSC)为8399 ,那么计数频率就是84MHz除以8400 ,结果为10kHz。

若是自动重载值等于200,那么PWM周期即为200除以10kHz等于20ms,此情况是正确的

占空比的范围是,0.5毫秒所对应的比较值,等于0.5毫秒乘以10千赫兹,结果是5 ,2.5毫秒所对应的比较值是25。

3. 配置

针对定时器,要将通道选定为“PWM CHx”。

进行设置,将PSC设定成8399,把ARR设定成199伟创动力舵机,需要注意的是,ARR实际计数是从0到199,总共是200个值。

设置脉冲宽度(Pluse)=15(对应1.5ms中位)。

工作模式:PWM模式1,极性高。

2.2 生成代码并启动PWM

// 初始化完成后,在main()中添加
(&htim2, );

3. 实现角度映射函数(可直接复用)

核心公式

作比较的值(CCR)等于,最小脉宽的计数加上,(角度除以180)再乘以,(最大脉宽的计数减去最小脉宽的计数)。

基于上述参数(计数频率10kHz):

0°对应计数 = 0.5ms × 10 = 5

180°对应计数 = 2.5ms × 10 = 25

// 角度设置函数,angle范围0~180
void ( angle) {
     ccr = 5 + (angle * 20 / 180);  // (255)=20
    E(&htim2, , ccr);
    // 注意:实际舵机响应需要约15ms稳定时间,建议调用后延时20ms再执行下一指令
}

常见案例验证

舵机驱动模块怎么用_舵机驱动程序_pwm驱动舵机hal库

有一位开发者,运用上述代码去驱动SG90舵机,于0°这个测试点进行实测,角度偏差小于或等于2°,在90°这个测试点进行实测,角度偏差小于或等于2°,于180°这个测试点进行实测,角度偏差小于或等于2°,其情况满足绝大多数机械臂、云台的需求。

4. 高频疑难与

问题现象 根本原因
舵机抖动或异响 PWM周期不准(非20ms) 用示波器测量输出频率,重新计算PSC/ARR
无法转到0°或180° 计数范围未覆盖0.5~2.5ms 调整CCR下限/上限伟创动力,可微调至4~26
上电后舵机不转 未启动PWM或电压不足 检查调用;舵机供电需独立4.8~6V,禁止从MCU取电
角度非线性 定时器时钟误差或舵机死区 用逻辑分析仪校准实际高电平宽度,反向修正映射公式

5. 核心观点重复与行动建议

重复核心观点

舵机由PWM驱动,其本质在于输出一种信号,该信号的周期是20ms,且高电平处于0.5至2.5ms的范围

配置好HAL库的定时器周期(ARR),配置好计数频率(PSC),之后借助E去修改比较值,进而能够线性控制角度。

任意品牌的舵机,只要其标称是“PWM控制”或者“模拟舵机”,那么都适用于上述所说的参数,并且不需要对代码进行修改。

行动建议

1. 即刻运用STM32最小系统板以及标准舵机(像是SG90)构建测试电路,依照本文第2步的要求去配置,并且烧录第3步的代码。

2. 用逻辑分析仪去测量PWM引脚,或者用示波器来测量PWM引脚,以此验证高电平宽度是不是严格对应0.5ms,或者是不是严格对应1.5ms,又或者是不是严格对应2.5ms

3. 把角度映射函数整合进你的项目里头,并且增添软件延时(20 毫秒),以此保证舵机动作得以完成。

4. 若要驱动多路舵机,那就重复进行初始化不同的定时器通道的操作,在这一过程中,每个通道都要独立地去调用以及E才行。

依序做完上述步骤,你已然掌握了借由HAL库来驱动舵机的标准办法,能够毫不费力得过渡至像是机器人这样需要角度控制的嵌入式系统,或者云台这类的,亦或是智能车等其它的。

为所有产品提供动力单元

联系伟创动力产品专家,为你的产品推荐合适的驱动系统所需部件。

发送邮件
在线留言
WhatsApp
+86 0769 8399 3238
 
kpowerMap