舵机的介绍和如何使用Arduino控制舵机的详细概述2025-08-253012XQ-POWER舵机UID: 26208
13文章0粉丝0获取喜欢0AI 快速预览详细 收起 本文介绍了舵机的基础知识,包括其核心结构(电机、减速齿轮组、电位器和控制电路)以及工作原理(通过PWM信号控制)。文章详细讲解了Arduino控制舵机的两种方法:使用官方Servo库和手动生成PWM信号。示例代码展示了如何通过Arduino控制180°微型舵机(如SG90)和360°连续旋转舵机。此外,还提供了硬件连接图和常见问题解决方案,帮助读者快速上手。
[backcolor=var(--chat-bg-color,transparent)][color=var(--s-color-text-secondary)][color=var(--color-text-primary)]舵机(Servo)全面介绍与 Arduino 控制详解[color=var(--md-box-samantha-normal-text-color) !important]舵机是一种[color=var(--md-box-samantha-deep-text-color) !important]闭环控制的高精度执行元件,核心优势是能精确控制旋转角度(或连续旋转时的转速 / 方向),广泛应用于机器人关节、无人机云台、RC 模型(车 / 船 / 飞机)、智能小车转向等场景。本文将从舵机的基础原理、分类入手,逐步讲解 Arduino 控制舵机的硬件连接、软件实现及常见问题解决方案。
一、舵机基础介绍1. 舵机的核心结构[color=var(--md-box-samantha-normal-text-color) !important]舵机本质是 “电机 + 减速机构 + 位置反馈 + 控制电路” 的集成体,各组件功能如下:
[color=var(--md-box-samantha-deep-text-color) !important]直流电机(DC Motor):提供原始动力,转速快但扭矩小。[color=var(--md-box-samantha-deep-text-color) !important]减速齿轮组:降低电机转速(通常减速比 1:100~1:300),同时大幅提升输出扭矩(满足负载需求)。[color=var(--md-box-samantha-deep-text-color) !important]电位器(位置传感器):与输出轴机械联动,实时反馈当前舵机的旋转角度(闭环控制的关键)。[color=var(--md-box-samantha-deep-text-color) !important]控制电路:接收外部 PWM 控制信号,对比 “目标角度”(来自 PWM)与 “当前角度”(来自电位器),驱动电机正转 / 反转,直到两者一致后停止。
2. 舵机的工作原理(核心:PWM 信号控制)[color=var(--md-box-samantha-normal-text-color) !important]舵机通过[color=var(--md-box-samantha-deep-text-color) !important]特定频率的 PWM(脉冲宽度调制)信号确定目标角度,标准控制逻辑如下:
[color=var(--md-box-samantha-deep-text-color) !important]PWM 周期固定:绝大多数舵机的 PWM 周期为 [color=var(--md-box-samantha-deep-text-color) !important]20ms(即每秒发送 50 个脉冲,50Hz)。[color=var(--md-box-samantha-deep-text-color) !important]高电平时间决定角度:PWM 信号中的高电平持续时间(T)与舵机旋转角度(θ)呈线性对应关系,常见范围:T = 0.5ms → θ = 0°(舵机转到最左端)T = 1.5ms → θ = 90°(舵机转到中间位置)T = 2.5ms → θ = 180°(舵机转到最右端)
[color=var(--md-box-samantha-normal-text-color) !important][color=var(--md-box-samantha-deep-text-color) !important]闭环控制过程示例:
当外部发送 “1.5ms 高电平” 的 PWM 信号时,控制电路会:
读取电位器反馈的当前角度(假设为 0°);对比 “目标角度 90°” 与 “当前角度 0°”,判断电机需正转;驱动电机正转,同时通过电位器实时监测角度;当角度达到 90° 时,电机停止转动,实现 “精准定位”。
3. 舵机的常见分类[color=var(--md-box-samantha-normal-text-color) !important]根据应用场景,舵机主要按以下维度分类:
分类维度常见类型特点与应用场景
[color=var(--md-box-samantha-deep-text-color) !important]旋转角度1. 有限角度舵机(90°/180°/270°)
2. 连续旋转舵机(360°)1. 精准控角(如机器人关节、云台)
2. 控速 / 控方向(如小车驱动轮)
[color=var(--md-box-samantha-deep-text-color) !important]输出扭矩1. 微型舵机(1~5kg・cm,如 SG90)
2. 标准舵机(5~20kg・cm,如 MG995)
3. 大扭矩舵机(>20kg・cm,如 MG996R)1. 轻负载(小型机器人)
2. 中负载(RC 模型)
3. 重负载(机械臂)
[color=var(--md-box-samantha-deep-text-color) !important]供电电压1. 5V 舵机(如 SG90)
2. 6V 舵机(如 MG995)
3. 7.4~12V 高压舵机电压越高,扭矩 / 转速通常越大(需匹配电源)
[color=var(--md-box-samantha-deep-text-color) !important]齿轮材质1. 塑料齿轮(低成本、轻负载)
2. 金属齿轮(高耐磨、高扭矩)1. 入门场景(SG90)
2. 高负载 / 长期使用(MG996R)
4. 舵机的关键参数(选型参考)[color=var(--md-box-samantha-normal-text-color) !important]选型时需关注以下参数,避免 “力不足” 或 “性能过剩”:
[color=var(--md-box-samantha-deep-text-color) !important]工作角度:确认需求角度(如机械臂关节需 180°,小车转向需 90°)。[color=var(--md-box-samantha-deep-text-color) !important]输出扭矩:单位为 “kg・cm”(指在距离输出轴 1cm 处能带动的最大重量),需大于实际负载扭矩(建议预留 20% 余量)。[color=var(--md-box-samantha-deep-text-color) !important]响应速度:单位为 “s/60°”(指舵机从 0° 转到 60° 的时间),速度越快,动态响应越灵敏(如云台跟踪需快响应)。[color=var(--md-box-samantha-deep-text-color) !important]工作电压:需与电源匹配(如 SG90 接 5V,MG996R 接 6V 时扭矩最佳)。
二、Arduino 控制舵机的详细实现[color=var(--md-box-samantha-normal-text-color) !important]Arduino 控制舵机的核心是 “生成符合舵机要求的 PWM 信号”,主要有两种方法:[color=var(--md-box-samantha-deep-text-color) !important]使用官方 Servo 库(简单高效) 和 [color=var(--md-box-samantha-deep-text-color) !important]手动生成 PWM 信号(灵活可控)。以下以最常见的 “180° 微型舵机(SG90)” 和 “Arduino UNO” 为例,分步讲解。
1. 硬件准备组件名称规格 / 型号作用说明
Arduino 主板Arduino UNO/Nano核心控制单元,发送 PWM 信号
舵机SG90(180°,5V,2.5kg·cm)执行元件,接收信号并旋转到指定角度
杜邦线公对母(3 根)连接 Arduino 与舵机
外接电源(可选)5V/2A 直流电源(如充电宝)若舵机负载大(如带机械臂),需外接电源(避免 Arduino USB 供电不足)
2. 舵机与 Arduino 的硬件连接[color=var(--md-box-samantha-normal-text-color) !important]首先明确舵机的 3 根线定义(不同品牌颜色可能略有差异,以 datasheet 为准):
[color=var(--md-box-samantha-deep-text-color) !important]电源线(VCC):通常为红色,接 Arduino 的 5V 或外接电源的 5V;[color=var(--md-box-samantha-deep-text-color) !important]地线(GND):通常为棕色 / 黑色,接 Arduino 的 GND(必须与电源共地,否则信号紊乱);[color=var(--md-box-samantha-deep-text-color) !important]信号线(Signal):通常为橙色 / 黄色 / 白色,接 Arduino 的数字引脚(如 9 号引脚)。
连接示意图(以 SG90 为例):舵机引脚(颜色)Arduino UNO 引脚外接电源(若使用)
红色(VCC)5V5V 输出
棕色(GND)GNDGND
橙色(Signal)9(数字引脚)-
[color=var(--md-box-samantha-normal-text-color) !important][color=var(--md-box-samantha-deep-text-color) !important]关键注意事项:
若舵机抖动、不转或 Arduino 重启,大概率是[color=var(--md-box-samantha-deep-text-color) !important]供电不足:此时需将舵机 VCC 接外接 5V 电源,舵机 GND 与 Arduino GND 相连(共地),Arduino 仍通过 USB 供电。信号线切勿接错到电源 / 地线,否则可能烧毁舵机或 Arduino 引脚。
3. 软件实现:两种控制方法方法 1:使用 Arduino 官方 Servo 库(推荐入门)[color=var(--md-box-samantha-normal-text-color) !important]Servo 库是 Arduino 官方提供的舵机控制库,已预装在 Arduino IDE 中,无需额外安装。其核心函数简洁,可快速实现角度控制,支持最多 12 个舵机(不同主板数量有差异)。
示例 1:舵机从 0° 转到 180°,再转回 0°(循环)[backcolor=var(--chat-bg-color,#fff)][color=var(--code-header-icon-color)][color=var(--code-header-text-color)]cpp
[color=var(--code-header-icon-color)]运行
[color=var(--code-doc_v3)]// 1. 包含Servo库#include
示例 2:通过串口控制舵机角度(手动输入角度)[color=var(--md-box-samantha-normal-text-color) !important]通过串口监视器输入 0~180 的数字,舵机实时转到对应角度,适合调试:
[backcolor=var(--chat-bg-color,#fff)][color=var(--code-header-icon-color)][color=var(--code-header-text-color)]cpp
[color=var(--code-header-icon-color)]运行
#include
Servo 库核心函数说明:函数功能描述
Servo 对象名.attach(引脚)绑定舵机信号线引脚,初始化舵机(必须在 setup () 中调用)
Servo 对象名.write(角度)设置舵机目标角度(0~180°,连续旋转舵机需特殊处理)
Servo 对象名.read()读取舵机当前的角度(返回 0~180 的整数,用于反馈检测)
Servo 对象名.detach()解除舵机与引脚的绑定(释放引脚资源,后续需重新 attach 才能控制)
方法 2:手动生成 PWM 信号(进阶,灵活可控)[color=var(--md-box-samantha-normal-text-color) !important]若 Servo 库与其他库(如电机驱动库)存在定时器冲突,或需更精确控制 PWM 参数(如调整周期),可手动通过digitalWrite()和delayMicroseconds()生成 PWM 信号。
[color=var(--md-box-samantha-normal-text-color) !important]核心逻辑:按 “20ms 周期” 循环,在每个周期内输出 “0.5~2.5ms 高电平”(对应 0~180°),其余时间为低电平。
示例:手动控制舵机转到 90°(1.5ms 高电平)[backcolor=var(--chat-bg-color,#fff)][color=var(--code-header-icon-color)][color=var(--code-header-text-color)]cpp
[color=var(--code-header-icon-color)]运行
[color=var(--code-doc_v3)]// 定义舵机信号线引脚const int servoPin [color=var(--code-variable_v3) !important]= [color=var(--code-number_v3)]9[color=var(--code-text_v3)];void [color=var(--code-function_v3)]setup[color=var(--code-text_v3)]([color=var(--code-text_v3)]) [color=var(--code-text_v3)]{ [color=var(--code-doc_v3)]// 设置舵机引脚为输出模式 [color=var(--code-function_v3)]pinMode[color=var(--code-text_v3)](servoPin[color=var(--code-text_v3)], OUTPUT[color=var(--code-text_v3)])[color=var(--code-text_v3)];[color=var(--code-text_v3)]}void [color=var(--code-function_v3)]loop[color=var(--code-text_v3)]([color=var(--code-text_v3)]) [color=var(--code-text_v3)]{ [color=var(--code-doc_v3)]// 1. 输出高电平(1.5ms,对应90°) [color=var(--code-function_v3)]digitalWrite[color=var(--code-text_v3)](servoPin[color=var(--code-text_v3)], HIGH[color=var(--code-text_v3)])[color=var(--code-text_v3)]; [color=var(--code-function_v3)]delayMicroseconds[color=var(--code-text_v3)]([color=var(--code-number_v3)]1500[color=var(--code-text_v3)])[color=var(--code-text_v3)]; [color=var(--code-doc_v3)]// 高电平时间(单位:微秒) [color=var(--code-doc_v3)]// 2. 输出低电平(20ms - 1.5ms = 18.5ms,凑整为18ms,误差可忽略) [color=var(--code-function_v3)]digitalWrite[color=var(--code-text_v3)](servoPin[color=var(--code-text_v3)], LOW[color=var(--code-text_v3)])[color=var(--code-text_v3)]; [color=var(--code-function_v3)]delay[color=var(--code-text_v3)]([color=var(--code-number_v3)]18[color=var(--code-text_v3)])[color=var(--code-text_v3)]; [color=var(--code-doc_v3)]// 低电平时间(单位:毫秒) [color=var(--code-doc_v3)]// 若需调整角度,修改delayMicroseconds的参数: [color=var(--code-doc_v3)]// 0° → 500us,90°→1500us,180°→2500us[color=var(--code-text_v3)]}
[color=var(--md-box-samantha-normal-text-color) !important][color=var(--md-box-samantha-deep-text-color) !important]手动控制的优缺点:
优点:不依赖 Servo 库,避免定时器冲突;可自定义 PWM 周期(如部分特殊舵机需 19ms 周期)。缺点:占用 CPU 资源(delayMicroseconds()会阻塞程序);多舵机控制需复杂的时序管理(需用非阻塞方法,如millis())。
4. 360° 连续旋转舵机的控制(特殊说明)[color=var(--md-box-samantha-normal-text-color) !important]360° 舵机无 “角度控制” 功能,而是通过 PWM 信号控制[color=var(--md-box-samantha-deep-text-color) !important]转速和方向,其控制逻辑与 180° 舵机不同:
[color=var(--md-box-samantha-deep-text-color) !important]1.5ms 高电平:舵机停止旋转;[color=var(--md-box-samantha-deep-text-color) !important]<1.5ms 高电平(如 1.0ms):舵机正转(高电平越短,转速越快);[color=var(--md-box-samantha-deep-text-color) !important]>1.5ms 高电平(如 2.0ms):舵机反转(高电平越长,转速越快)。
360° 舵机控制示例(正转→停止→反转):[backcolor=var(--chat-bg-color,#fff)][color=var(--code-header-icon-color)][color=var(--code-header-text-color)]cpp
[color=var(--code-header-icon-color)]运行
#include
[color=var(--md-box-samantha-normal-text-color) !important][color=var(--md-box-samantha-deep-text-color) !important]注意:360° 舵机的write()函数无效,需用writeMicroseconds()直接控制高电平时间。
三、常见问题与解决方案问题现象可能原因解决方案
舵机无反应,完全不转1. 接线错误(如信号线接 GND)
2. 供电不足
3. 舵机损坏1. 重新核对接线(VCC→5V,GND→GND,Signal→数字引脚)
2. 外接 5V/2A 电源
3. 更换舵机测试
舵机抖动严重,角度不稳定1. 电源电压波动(如 USB 供电不足)
2. 信号线受干扰(如与电机线并行)
3. 角度超出舵机量程1. 外接稳定电源,确保共地
2. 用屏蔽线或远离电机线
3. 用constrain()限制角度 0~180
Arduino 重启或报错1. 舵机启动电流过大,导致 USB 供电过载
2. 引脚短路(如 Signal 接 VCC)1. 舵机独立供电,禁止舵机 VCC 接 Arduino 5V
2. 检查引脚是否短路,更换损坏引脚
舵机角度与指令偏差大1. 舵机本身精度低(如廉价塑料齿轮舵机)
2. 未校准初始角度1. 更换高精度舵机(如金属齿轮舵机)
2. 手动调整write()参数(如目标 90° 实际 85°,则写 85)
四、总结[color=var(--md-box-samantha-normal-text-color) !important]舵机的核心是 “PWM 信号 + 闭环反馈”,Arduino 控制的关键在于:
[color=var(--md-box-samantha-deep-text-color) !important]正确接线:确保 VCC 供电充足、GND 共地、Signal 接数字引脚;[color=var(--md-box-samantha-deep-text-color) !important]选择合适的控制方法:入门用 Servo 库(简单),进阶用手动 PWM(灵活);[color=var(--md-box-samantha-deep-text-color) !important]规避供电问题:负载大时必须外接电源,避免损坏 Arduino 或舵机。
[color=var(--md-box-samantha-normal-text-color) !important]通过本文的介绍,你可以实现从 “舵机选型” 到 “Arduino 控制” 的完整流程,后续可结合传感器(如超声波、红外)实现更复杂的功能(如自动跟踪云台、避障机器人关节控制)。
编辑
分享
[color=var(--s-color-text-secondary,rgba(0,0,0,.8))][color=var(--s-color-text-secondary,rgba(0,0,0,.7))]用Arduino控制舵机时,如何计算PWM信号的高电平时间?
[color=var(--s-color-text-secondary,rgba(0,0,0,.8))][color=var(--s-color-text-secondary,rgba(0,0,0,.7))]介绍一下Arduino控制舵机的代码示例。
[color=var(--s-color-text-secondary,rgba(0,0,0,.8))][color=var(--s-color-text-secondary,rgba(0,0,0,.7))]推荐一些关于舵机和Arduino控制的教程或学习资源。
创作许可协议
本项目采用 None(不开放任何权利,保留所有权利) 进行许可。
机器人其他平台添加到合集0相关推荐
基于PID调节的电机平稳正反转与换向控制艾思控驱动器10电机快速响应与小反冲的协调控制艾思控驱动器21PID 怎么调都抖?先怀疑电流采样被功率回路干扰了艾思控驱动器121评论(0)- 没有更多了 -