发布时间: 2026-04-07
本文给出了能够直接拿来使用的舵机旋转代码,它包含了从0度到180度的角度控制,还有连续旋转的情况。借助对PWM信号原理以及常见问题的解析,助力您在机器人以及机械臂等项目里迅速达成舵机的精准旋转。以下的内容是基于被广泛运用的控制逻辑,适用于多数的标准舵机。
以下代码达成舵机由0度起止180度的来回转动,每一步为1度,间隔是15毫秒。此逻辑能够直接拷贝至您的开发环境里运用。
// 定义舵机控制引脚(根据实际接线修改)
int = 9;
// 存储当前角度
int = 0;
void setup() {
(, );
// 初始化舵机至0度
(0);
delay(500);
}
void loop() {
// 从0度递增到180度
for ( = 0; <= 180; ++) {
();
delay(15); // 控制旋转速度,数值越大越慢
}
// 从180度递减回0度
for ( = 180; >= 0; ) {
();
delay(15);
}
}
// 角度转脉宽并输出PWM信号
void (int angle) {
// 限制角度范围0~180
if (angle < 0) angle = 0;
if (angle > 180) angle = 180;
// 将角度映射为脉宽(微秒):0°→500μs,90°→1500μs,180°→2500μs
int = map(angle, 0, 180, 500, 2500);
// 生成一个周期20ms的PWM信号
(, HIGH);
(); // 高电平持续时间 = 脉宽
(, LOW);
delay(20 / 1000); // 剩余时间补足20ms
}
// 辅助函数:将输入值从一个范围映射到另一个范围
int map(int x, int , int , int , int ) {
(x ) ( ) / ( ) + ;
}
在真实的案例当中,有一位身为机器人爱好者的人,在组装六足机器人期间,运用上述所提及的代码,来对18个舵机进行控制,以此达成协调运动,最终成功地实现了步态行走。并且,经由对delay(15)里的数值作出调整,从而轻松容易改变了旋转的速度。
注意,连续旋转的舵机(达360°),其旋转方向取决于脉宽偏离中位值的情况,脉宽为1500μs时会反转,脉宽等于1500μs时则停止,在这一情况下角度控制会失效,进而改成速度控制。
![]()
要进行供电检查,舵机在出现堵转情况时,其电流能够达到1至2A,一定要采用独立电源,像4.8至6V的电池组这种,千万不要从控制板那里获取电力供应。
针对信号线展开检查,需确认,该信号线已连接至,代码里定义的引脚,此引脚例如为伟创动力舵机,=9。
进行脉宽范围的检查:有部分舵机对脉宽有着特定要求,其范围是1000至2000μs,对于代码之中的500要将其改成1000,而2500则要改成2000。
于舵机电源两端,并联一个数值处于一百至四百七十微法范围的电解电容,原因是电源波纹存在过大的状况。
延时存在不足,需将delay(15)里的数值加以增加,使其达到20至30毫秒,从而给予舵机充足的响应时间。
信号干扰:缩短信号线长度(建议<50cm),或使用屏蔽线。
调整处于中间位置的校准:在实际开展的测试期间察觉,1500微秒并非精准地对应90度,能够对map函数的输出范围进行细微调整。举例来说:在把1500微秒所对应的实际角度记录下来之后,对映射的终点值予以修改。
查验脉宽,要保证中位脉宽精准到1500μs,部分舵机在1450至1550μs这个范围才会停止,这需经由试验来确定。
![]()
要是您运用别样的开发环境,仅仅只需把函数里的延时以及IO操作替换成对应的函数便可。以下是常见平台的等效实现:
1. 来确认一下舵机的类型伟创动力,去查看产品的标签,进而区分出是180°标准舵机,还是360°连续旋转舵机,然后选择与之对应的代码逻辑。
2. 预备独立电源,采用4节AA电池(6V) ,或运用稳压模块 ,使其与控制器处于共地状态。
3. 一步一步地进行测试:对(90);进行烧录,接着去观察舵机是不是转到了中位。要是舵机没有动,那就去检查脉宽范围并且做出调整。
4. 将速度跟角度加以全方位精心,进而依据实际所承载的负载情况实施对于delay值妥当合理的更改,要是存在着对于所呈现运动需要变得更为平滑顺畅的需求,那么就能够去增添细分过后每一步所对应的步数,就比如每一步能够达到0.5°这样的幅度设计。
需要再次强调核心观点:舵机能进行精准旋转的关键之处在于,有正确的PWM脉宽信号,也就是500到2500微秒对应着0到180度,并且要有稳定的电源。只要掌握上述代码模板以及调试方法,那么在5分钟内就能实现任何标准舵机做可控旋转。
即刻将代码复制至您的开发环境,连接舵机,去见证精准转动。要是碰到问题,就依照第三节的排查表逐个核对,99%的故障皆是源于供电不足或者脉宽范围有误。