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

PWM控制舵机代码是什么?附完整代码与参数设置

发布时间: 2026-05-08

01PWM控制舵机代码的本质

输出周期为20ms(频率是50Hz)、高电平时间在0.5到2.5毫秒之间发生变化,通过这样的方波信号来驱动舵机旋转到指定角度,这就是PWM控制舵机的核心代码。所有型号的标准舵机都遵循这样的脉冲协议:0.5ms对应0°,1.5ms对应90°,2.5ms对应180°。下面将直接给出能够直接使用的代码模板以及参数计算方式。

02通用代码模板(适用于任何支持PWM的微控制器)

// 定义舵机参数
#     20000   // 周期20ms = 20000μs
#       500     // 0°对应高电平500μs
#      1500    // 90°对应高电平1500μs
#     2500    // 180°对应高电平2500μs
// 设置舵机角度(0~180°)
void ( angle,  ,  ) {
    // 将角度线性映射到脉冲宽度(μs)
      =  + (angle  (  ) / 180);
    // 调用硬件平台的PWM占空比设置函数(需替换为实际函数)
    s(, );
}
// 使用示例:设置舵机到90°
(90, , );

下面说明,上述代码当中的s(),需要替换成具体开发环境所对应的PWM输出函数伟创动力舵机,比如(),或者定时器比较值设置。核心原则是,要保证PWM周期恒定为20ms,仅仅改变高电平持续时间

03常见平台的实现案例

案例1:使用标准库产生50Hz PWM(以通用定时器配置为例)

// 定时器时钟 = 1MHz,周期20ms需计数20000
// 自动重装载值ARR = 20000  1
// 比较值CCR = 脉冲宽度(μs)  1 (例如1.5ms > 15001=1499)
void (void) {
    // 配置定时器为PWM模式1,周期20ms
     = 19999;           // 20ms周期
     = (时钟频率/1MHz)1; // 预分频使计数频率为1MHz
     = 1499;            // 初始90°(1.5ms)
}
// 改变角度只需更新CCR值
void ( ) {
     =   1;    // 更新比较值
}

案例2:产生平滑多舵机控制(避免同时更新引起抖动)

// 在PWM周期结束中断中更新下一个舵机的比较值
  [4]; // 存储4个舵机的脉冲宽度(μs)
void (void) {  // 周期中断
      idx = 0;
    // 当前通道输出当前舵机的脉冲宽度
    e(idx, [idx]);
    idx = (idx + 1) % 4;      // 轮询4个通道
}

pwm控制舵机代码是什么_如何用程序控制舵机_pwm控制舵机的基本原理

04参数调整与常见问题解决

1. 不同舵机的脉冲范围差异

并非所有舵机都是严格的0.52.5ms。实测

先输出0.5ms脉冲,记录舵机停止位置(可能是0°)

逐步去增加脉冲宽度,每次增加的幅度是50μs,一直持续这样做,直到舵机转到极限位置,这种极限通常是不会超过2.5ms的

查找最小脉宽,查找最大脉宽,对代码里的进行修改,对代码里的进行修改。

2. 舵机不转或剧烈抖动的原因

现象 最常见原因 解决方法
完全不动 供电电流不足 使用独立5V/2A以上电源,避免从单片机取电
左右抖动 PWM周期不是20ms 确认定时器周期精确为20ms(误差<0.5ms)
角度不准 高电平时间精度不够 使用硬件PWM,不要用软件延时模拟

3. 代码验证步骤(快速排查)

1. 针对测量信号,借助逻辑分析仪或者示波器去观测PWM引脚,进而确定周期为20000μs,并且高电平时间会依照角度呈现线性变化。

2. 对测试极限进行操作:将s(500)进行写死行为,随即舵机转到一个极限位置;接着把2500μs进行写死,之后舵机转到相反的极限位置。

pwm控制舵机代码是什么_如何用程序控制舵机_pwm控制舵机的基本原理

3. 逐步进行调试,起始于500微秒,之后每一次增加10微秒,留意舵机是不是能够持续呈平滑状态转动。

05完整可执行代码(硬件抽象层可替换)

// 假设硬件已提供以下函数:
// void ( );          // 初始化PWM频率
// void ( ); // 设置脉冲宽度(μs)
#   50         // 50Hz
#  500
#  2500
void (void) {
    ();      // 配置PWM频率50Hz
    ();
}
void ( angle) {
    if (angle > 180) angle = 180;
     pulse =  + ()angle  (  ) / 180;
    (pulse);
}
int main(void) {
    ();
    while(1) {
        (0);    // 转到0°
        (1000);
        (90);   // 转到90°
        (1000);
        (180);  // 转到180°
        (1000);
    }
     0;
}

06核心结论与行动建议

PWM控制舵机代码的关键核心仅有一个方面伟创动力,那就是要生成一种方波,这种方波具有固定的20ms周期,并且其高电平时间能够在0.5至2.5ms的范围内进行调整。在众多代码故障当中,有90%源自于周期不准确这一情况,或者是供电不足这种状况。

立即执行

1. 按照上文通用模板写出你的第一版代码。

2. 用示波器确认输出波形周期为20ms

3. 从零点五毫秒起始,每一步都增加二百微秒来测试舵机实际范围,记录下你所使用舵机精准极限脉宽。

4. 把所测得的脉宽代入代码里的以及,这样就能精确地控制从0°到180°的任意角度了。

为所有产品提供动力单元

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

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