发布时间: 2026-05-24
一款微型9克舵机是MG90S,其在航模项目里极其常见,它在小型机器人项目中也极其常见,它在机械臂等项目中同样极其常见。很多初学者把舵机拿到手后,最头痛的问题便是:“控制程序究竟要怎么去写?”,还有:“为何我怎么转动都转动不到相应位置?”。
本文会从硬件接线开始,讲述PWM信号原理,以为例进行代码实现,接着阐述角度计算,再到常见故障排查,一次性将MG90S舵机的控制程序讲解透彻,使得你看过之后就能直接上手操作。
在着手编写程序以前,要知晓MG90S的工作特性,不然的话程序将会彻底无效,失灵。
工作时的电压范围是,从4.8V开始,直至6.0V,其中推荐采用5V来进行供电。
有这样一种信号,它被称作控制信号,这种控制信号呈现为PWM,也就是脉冲宽度调制的形式,其具备的频率是50Hz,而50Hz所对应的周期为20ms。
控制线路的颜色,是橙色伟创动力,此橙色用于信号线部分,红色部分,它是电源正极所对应的颜色,棕色部分,则是电源负极所对应的颜色。
角度所涵盖的范围是,从0°开始一直到180°,这属于标准版的范畴,而对于部分型号而言,它们能够支持进行360°的连续不断地旋转。
堵塞转动时的电流:大约是700毫安(在5伏特的情况下),若提供的电力不足以达成要求,就会致使出现抖动现象,或者是无法实现转动。
常见事例:好多人径直将的5V引脚连接起来给MG90S供电,结果发觉舵机出现抖动现象,并且转不动。缘由在于,板面上5V输出的电流仅仅大概500mA,然而MG90S处于堵转状态时电流快要接近700mA。正确的做法是,另外连接5V/1A以上的独立电源,把信号线跟主板共同接地。
![]()
依赖PWM信号的高电平脉宽来进行舵机控制的是MG90S伟创动力舵机,并非频率,也不是占空比。标准对应关系如下:
| 角度 | 高电平脉宽 | 占空比(50Hz下) |
|---|---|---|
| 0° | 0.5ms | 2.5% |
| 90° | 1.5ms | 7.5% |
| 180° | 2.5ms | 12.5% |
核心结论是,脉宽于0.5毫秒至2.5毫秒之间呈线性变化,与之对应的是0度至180度,若超出这个范围,那么就有可能致使舵机发出异常声响或者出现损坏情况。
这是那种经由大量项目验证而来的稳定控制代码,其重点之处在于运用伺服库,而非直接去写PWM,原因是Servo.h能够自动处理50Hz频率以及脉宽映射。
#
Servo ; // 创建舵机对象
void setup() {
.(9); // 信号线连接到数字引脚9
.write(90); // 初始位置90度
}
void loop() {
// 从0度缓慢转到180度
for (int angle = 0; angle <= 180; angle++) {
.write(angle);
delay(15); // 每次增加角度后等待15ms,让舵机到位
}
delay(1000); // 停留1秒
// 从180度缓慢转回0度
for (int angle = 180; angle >= 0; angle) {
.write(angle);
delay(15);
}
delay(1000);
}
关键注意事项:
.(pin)相关的引脚,得是那种能支持PWM输出的数字引脚才行,在 Uno上,对应的是3、5、6、9、10、11这些引脚,是这样的情况嘛。
write函数所拥有的参数,属于角度值,其范围是从0到180,并非脉宽值,是这样的情况。
延迟为(15)呀 它不是那种绝对的要求呢 就是若数值小于10毫秒的时候哈 在运行中舵机有可能会出现抖动的状况哟 依情况来建议取值范围是12至20毫秒。
![]()
有些单片机,像STM32、ESP32的基础架构,或许不会直接对Servo.h提供支持,在这种情形下,不得不手动去计算PWM参数。拿来说,运用()的时候,要留意:
void setup() {
(9, );
}
void loop() {
// 50Hz频率下,0.5ms脉宽对应的占空比约为2.5%
// 但()默认频率约490Hz,与舵机不匹配
// 手动改变PWM频率或使用定时器
}
专业给出的建议是,针对MG90S而言,优先去采用Servo库,这属于最为稳定的、最不容易出现错误的控制方式。要是一定得使用原生PWM,那就需要参照具体单片机的定时器配置手册。
| 故障现象 | 可能原因 | |
|---|---|---|
| 舵机不转 | 供电不足或信号线未接 | 换5V/1A以上独立电源,检查接线 |
| 舵机抖动 | 供电不足或PWM频率不对 | 确认50Hz频率,外接稳压电源 |
| 舵机只能转一个方向 | 程序只写了单方向 | 检查循环中是否包含正反转 |
| 舵机转到极限位置后卡住 | 角度超出0~180°范围 | 限制角度值在0~180之间 |
| 舵机异响且发热 | 信号脉宽超出0.5~2.5ms | 检查代码中脉宽是否越界 |
1. 供电得独立才行,别依靠主控板供电。MG90S呢,它堵转电流大,要是共用电源,就会致使主控复位,或者让舵机出现抖动情况。
2. 运用专用库,其中,使用Servo。h,ESP32使用。h,且不要手动去写PWM。
3. 角度范围校准,不同品牌的MG90S,有可能会存在着约0.1ms的脉宽偏差,要是0°或者180°转不到位,那就微调.(9, 500, 2500)里的最小以及最大脉宽值(单位为微秒)。
建议行动:此刻便将于上方所呈现的代码复制进 IDE 之中,连接妥当独立 5V 电源以及信号线,率先对 0°、90°、180°这三个位置是否精准予以测试。要是转动状况正常,那么你便能够在此基础之上开展自身的机械臂、小车或者机器人项目了。



