首页 > 行业资讯 >减速电机
TECHNICAL SUPPORT

舵机转动代码怎么写?三步实现精准角度控制

发布时间: 2026-05-05

01舵机转动代码完整指南:从接线到角度控制

文章给出舵机转动操控的规范化代码以及操作流程,它适配于、STM32等主要开发平台。不管您此刻是在制作机器人手臂,或者是打造智能小车,又或者是塑造舵面,依据以下指南能够迅速达成从零度至一百八十度的精确角度控制。

一、舵机转动核心原理(30秒速览)

舵机的转动角度由PWM信号的高电平脉宽决定:

0°位置:高电平持续 0.5ms(毫秒)

90°中间位置:高电平持续 1.5ms

180°位置:高电平持续 2.5ms

PWM信号的周期是固定的,其固定值为20ms,此周期对应的频率是50Hz。控制代码的本质所在,便是输出那种符合上述所讲脉宽规则的方波。

二、最常用代码方案(平台)

以下代码经过了验证,在SG90、MG995、等常见舵机上,验证的结果是通过,此代码可以直接进行复制,然后使用着

2.1 基础转动代码(让舵机转到指定角度)

# 
Servo ;  // 创建舵机对象
void setup() {
  .(9);  // 将舵机信号线连接到的9号引脚
}
void loop() {
  .write(0);    // 转到0度
  delay(1000);         // 保持1秒
  .write(90);   // 转到90度
  delay(1000);         // 保持1秒
  .write(180);  // 转到180度
  delay(1000);         // 保持1秒
}

使用说明

1. 把舵机红色的线,连接到5V电源上,小舵机连接的5V,大舵机需要进行外接电源。

2. 棕色/黑色线接GND

舵机旋转代码_舵机指令_舵机转动代码

3. 橙色/黄色信号线接数字引脚9

4. 上传代码后,舵机自动循环转动

2.2 平滑转动代码(匀速扫描)

# 
Servo ;
int pos = 0;  // 当前角度变量
void setup() {
  .(9);
}
void loop() {
  // 从0度缓慢转到180度,每次增加1度,间隔15毫秒
  for (pos = 0; pos <= 180; pos += 1) {
    .write(pos);
    delay(15);  // 控制转动速度伟创动力舵机,数值越小越快
  }
  // 从180度缓慢转回0度
  for (pos = 180; pos >= 0; pos = 1) {
    .write(pos);
    delay(15);
  }
}

三、其他开发平台代码示例

3.1 (适用于 Pi Pico/ESP32)

from   Pin, PWM
 time
# 设置PWM引脚和频率
servo = PWM(Pin(0))  # GP0引脚
servo.freq(50)       # 50Hz频率
def (angle):
    """角度转脉宽:0°=0.5ms,180°=2.5ms,周期20ms"""
    duty = int((angle / 180)  (2500  500) + 500)
     = int(duty / 20000  65535)
    servo.()
# 测试转动
while True:
    (0)     # 转到0度
    time.sleep(1)
    (90)    # 转到90度
    time.sleep(1)
    (180)   # 转到180度
    time.sleep(1)

3.2 STM32 HAL库 (适用于等)

// 使用定时器2通道1输出PWM,引脚PA0
# ".h"
 htim2;
void ( angle) {
    // 0°对应500个计数,180°对应2500个计数,周期20000计数
     pulse = 500 + (angle * 2000 / 180);
    E(&htim2, , pulse);
}
int main(void) {
    ();
    // 初始化定时器2为PWM模式,频率50Hz,周期20000计数
    // ... 标准初始化代码(此处省略,实际使用需完整配置)
    while (1) {
        (0);
        (1000);
        (90);
        (1000);
        (180);
        (1000);
    }
}

四、常见问题与

4.1 舵机抖动或不转动

因为大舵机瞬间电流能够达到2A以上的缘故,电源不足,如果那样的话,就绝对不可以直接使用开发板USB供电,而是要使用独立电源,像4.8V 6V电池或者稳压模块等都是可以考虑的选择。

信号干扰:PWM信号线尽量远离电机线,长度不超过50cm

角度出现超限情况:有部分舵机仅仅只是支持从0度到180度,要是写入超出这个范围的数值,那么就会致使产生异响。

4.2 舵机转到指定角度后持续发热

原因:普通舵机到达目标角度后仍会持续输出扭矩保持位置

出现这样的情况:当处于需要维持该角度的状况时,展现出无法解决的态势,此乃是舵机本就具备的特性;而当存在不需要保持该角度的情形时,促使舵机停止供电,或者将其驱动至设定为0度的空闲位置处。

4.3 代码上传后无反应

检查引脚号是否与()参数一致

检查舵机信号线是否插反(通常黄色/橙色为信号线)

于setup()里,增添.begin(9600)伟创动力,以及.("Start")展开调试输出操作。

五、关键参数速查表

舵机类型 工作电压 脉宽范围 转动角度 代码写入值范围
标准舵机 (SG90) 4.8V6.0V 0.5ms2.5ms 0180° 0180
大扭矩舵机 (MG995) 4.8V7.2V 0.5ms2.5ms 0180° 0180
360°连续旋转舵机 4.8V6.0V 1.0ms2.0ms 连续旋转 0180 (90°停止)
高压舵机 6.0V8.4V 0.5ms2.5ms 0270° 0270

要特别留意,360°连续旋转的舵机没办法控制确切的角度,仅仅可以控制转速以及方向,将使其状态设定为写入90°时停止,当角度小于90°时逆时针方向加速,而角度大于90°时则顺时针方向加速。

六、核心操作结论与行动建议

舵机转动的本质:是什么呢,是输出周期20ms的信号,并且脉宽在0.5ms到2.5ms之间的PWM信号,代码里的write(角度)函数呢会做什么,会把这样的规则封装成直观的角度值

立即行动建议

1. 先进行第一步,要使用以及基础代码,也就是第二节示例里的代码,去驱动您手头的小舵机,以此来验证接线以及电源是正常的。

2. 第二步,逐行去修改,在.write()里的角度值,然后观察舵机实际转动的位置,进而建立起角度与物理位置的对应感

3. 第三步:把舵机角度控制代码整合到您的项目内,(像是联合超声波传感器使得舵机能够自动进行扫障)。

若是您运用并非平台的情况,那就去参照第三节相应的代码,仅仅略微调整一下脉宽计算函数,便能够适配超过95%的舵机型号了

为所有产品提供动力单元

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

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