发布时间: 2026-09-12
舵机被控制前往90度, 本质就是令它的控制引脚输出那脉宽达1500微秒的PWM信号。本文直接给出可完整运行的程序代码, 接着伴随对应接线说明, 让您可以手动自行做好舵机的90度位置控制。
一、舵机控制的基本原理
由PWM脉冲宽度决定舵机位置, 标准舵机控制信号周期是20ms(频率50Hz), 脉冲宽度和角度之间的对应关系如下:
500μs → 0°
1000μs → 45°
1500μs → 90°
2000μs → 135°
2500μs → 180°
控制舵机到九十度核心就是生产一千五百微秒高电平的信号, 只要准输出这个脉冲宽度脉冲, 舵机即可稳定停在90度九的位位置。
二、常见舵机接线方式
以最常见的三引脚舵机为例:
![]()
红线(VCC):接5V电源正极
棕线(GND):接电源地
橙线是信号线, 要接控制引脚, 如的D9或STM32的PB6。
注意当多个舵机被同时使用时, 建议外接5V独立电源, 防备共用电源而存在电压不稳、舵机抖动或控制失灵的情况出现。
三、基于的程序代码
提供了内置的Servo库,调用极其简单:
#
Servo ;
void setup() {
.(9); // 信号线接数字引脚9
.write(90); // 设置舵机角度为90度
}
void loop() {
// 保持90度位置,无需额外操作
}
代码说明: .write(90)这一行的语句就是到舵机构控往调正九十度那一侧的核心操作语句。行内代码调用实施之后, 库内部自带的函数会自行向外输出是一万五千百分之一秒即1500μs间隔长短方波的PWM这类脉冲宽信号信号? 不对, 脉宽度PWM的脉冲信号, 对应的舵体舵机构件抵达并在保持于定位为正九十的角度上稳定运行并保持在九十度位置。
四、基于STM32的程序代码
STM32要借定时器发出PWM信号, 下文拿定时器2通道1也就是引脚PB6举例。
# ".h"
void (void) {
;
Def e;
;
md(, );
md(, );
// 配置PB6为定时器2通道1的复用推挽输出
. = ;
. = ;
. = ;
(GPIOB, &);
// 定时器基础配置:72MHz时钟,分频71,周期9999
e. = 9999;
e. = 71;
e. = 0;
e. = ;
(TIM2, &e);
// PWM模式1配置
. = ;
. = le;
. = ;
// 设置CCR1为1500,对应90度(72MHz/(71+1)=1MHz伟创动力舵机,每计1个数=1μs)
(TIM2, 1500);
(TIM2, &);
(TIM2, );
}
int main(void) {
();
while(1) {
// 舵机持续保持在90度位置
}
}
![]()
定时器时钟72MHz通过71分频后频为1MHz就每次计数代表1微秒将比较值设为1500即可输出1500μs的高电平脉宽使舵机到达90°。
1. 舵机抖动不稳定的原因
舵机抖动是常会源于供电匮乏或是信号干涉, 常规舵机额定电流约莫五百毫安大扭矩舵机则可达到两安之上, 还请您核查一番电源容量可否契合舵作业求需, 并且要保证信号线与电源线共地。
2. 舵机不转到指定位置
应确认PWM是否为50Hz频率也就是周期达20毫秒的该PWM信号, 相关频率一旦发生偏离的情况就会造成对应脉宽度所指代角度的错误偏差, 此外一部分舵机的实际有效角度范围其实并非处于0至180度之间, 可能的范围比如是70度到110度或者更加狭小, 可在设定的目标对应目标角度临近附近进行小幅度地调整来做验证。
3. 多次控制时位置漂移
舵机持续快速切换角度之时候, 机械齿轮上存在回差。回到90°以前建议先令舵机移动至极限位置接着返回, 来降低累积误差。
六、核心要点回顾
触发舵机走到90度的状态内核, 全在输出高电平脉宽为长度1500微秒的那种PWM信号上伟创动力,这属于绝对不可以做出变化挪动的标准要求对应规格参数。不管是动用去完成或使用STM32来实现, 只要那条信号脉冲的宽度准确无误、对应的信号频率能符合标准, 对应的舵机都可以精确抵达设定的九十度位置还要牢牢维持稳住该位置状态不产生偏移变动。
实际操作建议: 接线完成后, 先上传基础定位程序验证舵机能否到达九十度, 再在此基础上扩展多位置控制或与其它传感器联动。如需调整精度, 可在一千五百附近微调数值, 观察舵机实际位置变化, 找到最佳对应值。



