首页 > 行业资讯 >舵机
TECHNICAL SUPPORT

STM32控制舵机左右转动的3种核心方法

发布时间: 2026-05-03

01STM32控制舵机左右转动的3种核心方法

你打算借助STM32促使舵机左右来回摆动,然而却不清楚该从哪里开始着手伟创动力,是?直接采用PWM信号进行控制,这可是最为快捷且最为可靠的办法。本文会为你呈上能够直接着手操作的三种实现方案。

核心原理:舵机如何响应左右转动指令

在舵机内部呀,装备着直流电机,还有减速齿轮组以及角度反馈电路呢。STM32 输出一种 PWM 信号,这种信号的周期是 20ms,也就是频率为 50Hz,其脉宽处于 0.5ms 到 2.5ms 这个范围之内,借助它来控制舵机转动到所指定的角度。

0.5ms脉宽:舵机转至最左侧(通常对应0度)

1.5ms脉宽:舵机转至中间位置(通常对应90度)

2.5ms脉宽:舵机转至最右侧(通常对应180度)

脉宽跟角度之间的对应关系呈现为线性映射,左右进行转动是借助循环去改变PWM脉宽值来达成的。

方案一:标准库PWM输出控制(最常用)

适用场景:系列等标准库开发环境

硬件连接

STM32引脚 舵机信号线
PA8() 橙色/黄色线
5V电源正极 红色线
公共地GND 棕色/黑色线

关键要点:舵机开启电流能够达到500mA至1A,千万不要直接从STM32的3.3V引脚或者5V引脚获取电力。一定要采用独立5V电源(像是模块或者手机充电头),并且要把STM32的GND与舵机电源GND进行共地连接。

代码实现

# ".h"
void (void) {
     ;
    Def e;
     ;
    // 1. 使能时钟
    md(   , );
    // 2. 配置PA8为复用推挽输出
    . = ;
    . = ;
    . = ;
    (GPIOA, &);
    // 3. 定时器基础配置:周期20ms
    e. = 20000  1;  // 自动重装值
    e. = 72  1;  // 预分频,72MHz/72=1MHz
    e. = 0;
    e. = ;
    (TIM1, &e);
    // 4. 输出比较通道配置
    . = ;
    . = le;
    . = 1500;  // 初始1.5ms,中间位置
    . = ;
    (TIM1, &);
    // 5. 使能TIM1
    (TIM1, );
    (TIM1, );  // 高级定时器需使能主输出
}
// 设置舵机角度(0180度)
void ( angle) {
    // 脉宽范围:500us到,对应角度0180
     pulse = 500 + (angle  2000 / 180);
    (TIM1, pulse);
}
// 实现左右循环摆动
void (void) {
    while(1) {
        // 从左向右转动
        for( angle = 0; angle <= 180; angle += 5) {
            (angle);
            (15);  // 等待舵机到达位置
        }
        // 从右向左转动
        for( angle = 180; angle >= 0; angle = 5) {
            (angle);
            (15);
        }
    }
}

常见故障排除:

stm32控制舵机正反转_舵机自动左右摇摆程序_stm32如何控制舵机左右转动

舵机不转动:检查共地连接,确认PWM频率是否为50Hz

这抖动的情况相当严重,是因为脉宽更新的间隔时间实在过短,所以要把()增加到20ms以上。

方案二:HAL库PWM控制(推荐新项目)

适用场景:图形化配置+HAL库开发

配置参数

配置项 设定值
TIM2 PWM CH1
72001
2001
PWM频率计算 72MHz / 7200 / 200 = 50Hz
Pulse宽度范围 5到25(对应500us)

核心代码

// 舵机控制:angle 0180度
void ( htim,  ,  angle) {
    // 脉宽计数值:最小值5(0度),最大值25(180度)
     pulse = 5 + (angle  20 / 180);
    (htim, , pulse);
}
// 主函数中实现左右摆动
int main(void) {
    ();
    ();  // 自动生成
    ();
    ();
    (&htim2, );
    while(1) {
        // 向右转动
        for( ang = 0; ang <= 180; ang += 5) {
            (&htim2, , ang);
            (20);
        }
        // 向左转动
        for( ang = 180; ang >= 0; ang = 5) {
            (&htim2, , ang);
            (20);
        }
    }
}

方案三:多舵机同步控制(扩展应用)

要在需要左右转动多个舵机的情形下,运用同一定时器的多个以供输出的通道。

// 假设使用TIM3的CH1、CH2、CH3同时控制3个舵机
 htim3;
// 初始化3个PWM通道
(&htim3, );
(&htim3, );
(&htim3, );
// 同步左右摆动
void (void) {
    for( ang = 0; ang <= 180; ang += 5) {
        (&htim3, , 5 + ang20/180);
        (&htim3, , 5 + ang20/180);
        (&htim3, , 5 + ang20/180);
        (20);
    }
}

实际应用案例验证

舵机自动左右摇摆程序_stm32如何控制舵机左右转动_stm32控制舵机正反转

案例:小型机械臂关节调试

某团队处于对于6自由度机械臂进行调试的阶段之时,舵机呈现出持续不断抖动的状况。经过排查之后发现,STM32这种开发板是借助USB来实现供电的情况,同时以此去驱动3个舵机。是,改换为采用12V 2A的电源适配器连接降压模块后输出5V/2A的电源,从而单独为舵机供应电力。与此同时,把PWM的频率从300Hz调整成为50Hz,问题得到了彻底的解决。

关键参数速查表

参数 标准值 注意事项
PWM周期 20ms (50Hz) 部分数字舵机支持更高频率
0度脉宽 0.5ms (500μs) 个别品牌舵机可能偏移
90度脉宽 1.5ms (1500μs) 中间校准位置
180度脉宽 2.5ms (2500μs) 最大转动范围
舵机供电 4.8V6.0V 切勿超过6V
信号线电压 3.3V5V STM32的3.3V完全兼容

行动建议

本质是精确产生周期为20ms、脉宽在0.5ms至2.5ms之间的PWM信号来控制舵机左右转动。建议按以下顺序推进:

1. 先用独立电源供电,并确保与STM32共地

2. 对PWM波形进行确认,可借助示波器,也可运用逻辑分析仪,其频率需在50Hz加上或减去1Hz这个范围伟创动力舵机,脉宽范围处于0.5ms至2.5ms之间。

3. 从90度中间位置开始测试,向左右各增加20度逐步验证

4. 遇到抖动时,优先检查电源和共地,而非修改代码

依照上述任意一种方案去进行操作,在30分钟之内就能够达成舵机的从左到右再从右到左循环转动,倘若遭遇到特定型号的舵机,像是连续旋转舵机、360度舵机,其控制逻辑存在差异,需要去查阅该型号的数据手册。

为所有产品提供动力单元

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

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