发布时间: 2026-04-28
舵机所在位置方面,简而言之,那便是舵机输出轴此刻所停留的角度,对于机器人、航模、机械臂等等应用而言,精确地进行设置以及读取舵机位置,乃是促使设备能够正常运作的关键所在。要是舵机位置控制不准确,那么对于机械臂来说将会无法抓取物体,对于车轮而言将会无法直行,对于摄像头来讲将会无法对准目标。在文中会径直给出从信号原理一直到实际校准的完整方案,以此来助力你充分掌握舵机位置控制。
对于标准舵机而言,其位置是全然由输入的脉宽调制信号也就是PWM信号的高电平时间来决定的,并且和电压、转速不存在关联关系,此乃工业领域通用的一种控制方式。
| 舵机类型 | 最小角度对应的脉宽 | 中间角度(90°)对应的脉宽 | 最大角度对应的脉宽 | 脉冲周期 |
|---|---|---|---|---|
| 标准舵机(180°) | 0.5ms(0°) | 1.5ms(90°) | 2.5ms(180°) | 20ms(50Hz) |
| 360°连续旋转舵机 | 1.5ms(停止) | 0.5ms(全速逆时针)/ 2.5ms(全速顺时针) | 20ms(50Hz) |
从数据的源头来看以国际遥控器以及与之配合的舵机这项从事产业所依从的作为普遍通行的标准为依据,这里所说标准具体是像、Hitec这些在该领域占据主流地位的生产厂家所采用的技术规范。
核心结论是:对舵机位置加以控制,其本质实际上就是产出对应角度的脉宽信号。举例来说,要是想要使舵机转而到达45°这个角度 ,那就需要进行输出脉宽的操作 ,具体计算为脉宽等于0.5ms加上括号里45°除以180°后再乘以括号2.5ms减去0.5ms的结果 ,最终得出脉宽等于1.0ms。
平常状况下,你装配了一个机械手臂,所下达的命令是让舵机把角度转动到一百二十度,然而实际上仅仅转动到了一百度,最终致使抓取操作失败了。
原因排查(按频率排序):
1. 舵机零点未校准,其中约占比百分之八十皆为此问题,不同批次的舵机,其机械零位以及这电子零位,有着正负五度的偏差。
2. PWM信号呈电压不足状况(此状况占比为15%),3.3V的单片机直接推动舵机这种行为,有可能致使脉宽精度出现下降这种结果。
3. 在电源供电不稳定的状况下(此情况占比为5%),当多个舵机一同进行动作的时候,电流会突然下降,舵机位置会出现跳变。
解决步骤:
1. 手动进行零点校准,要先将舵机臂拆卸下来,接着给舵机发送脉宽为1.5ms的信号(从理论上来说是90°),随后朝着最趋于90°的方向再度安装舵机臂,以此让机械角度与电子角度达成对齐。
2. 使用示波器,测量实际脉宽,记录0°的对应角度伟创动力舵机,再用逻辑分析仪,测量实际脉宽,记录45°的对应角度,然后多次重复操作,测量实际脉宽,记录90°的对应角度,接着再次测量实际脉宽,记录135°的对应角度,又一次测量实际脉宽,记录180°的对应角度,依据这些记录,生成校准曲线。
![]()
3. 代码补偿,假如发觉发送九十度指令却得到八十五度,那么在代码里要把目标角度映射成,输出角度等于目标角度乘以括号里九十度除以八十五度。
审视那个舵机标签亦或是说明书,标准的舵机一般来说表明着「0°~180°」或者「±90°」。
若标签呈现模糊状态,那么需进行手动测试,即发送脉宽为1.5毫秒的信号,与此同时记录位置,之后发送0.5毫秒以及2.5毫秒脉宽的信号,观察是否转到极限位置并且不存在异常声响。
硬件方案(最稳定):
运用的Servo.h库,.write(angle)进行角度到脉宽的自动转化。
以STM32定时器用于PWM输出,来计算占空比,其计算公式为,占空比等于,脉宽除以周期,再乘以100%。
软件模拟方案(不推荐用于精确控制):
通过运用()去进行模拟脉宽,然而却会遭受中断的干扰,在现代项目之中几乎不会被使用。
写测试代码,按顺序输出零度、四十五度、九十度、一百三十五度、一百八十度所对应的脉宽,借助量角器或者角度传感器去读取实际角度,记录实际和预期的差值,从而形成如下表格:
| 预期角度(°) | 实际角度(°) | 偏差(°) |
|---|---|---|
| 0 | 2 | +2 |
| 45 | 43 | 2 |
| 90 | 88 | 2 |
| 135 | 132 | 3 |
| 180 | 177 | 3 |
根据偏差数据,计算补偿系数。若偏差基本线性,使用:
![]()
输出脉宽 = 标准脉宽(目标角度) + (偏差脉宽修正)
或更简单:在代码中建立查表映射。
| 问题现象 | 根本原因 | 立即 |
|---|---|---|
| 舵机抖动,位置不稳 | 供电不足或PWM信号噪声 | 1. 使用独立稳压电源,舵机与逻辑电路分开供电。2. 信号线加10kΩ上拉电阻。 |
| 转到指定位置后继续缓慢移动 | 内部电位器磨损或脏污 | 打开外壳,用精密电子清洁剂清洗电位器;无效则更换舵机。 |
| 两个相同型号舵机同一指令位置不同 | 个体制造公差±3~5° | 分别校准,每个舵机单独保存校准参数。 |
| 舵机只能朝一个方向转 | 误用360°连续旋转舵机 | 360°舵机无法定位角度,只能控制转速和方向;请换为标准舵机。 |
| 数字舵机与模拟舵机的位置控制差异 | 控制信号频率不同 | 数字舵机支持更高频率(最高400Hz),但接收1.5ms脉宽仍为中间位置,控制方法相同。 |
1. 关于回读法,众多数字舵机具备位置回读的特性,比如说借助单总线协议达成此功能。先是发送读取指令,而后获取内部电位器的ADC值,接着将其换算成角度。
2. 用于外部的角度的传感器伟创动力,其安装方式是将磁编码器或者该电位器用于呈现出外部反馈情形,采用的是PID闭环控制手段进行操作控制,借助这种方式所实现的精确度,能够达成正负0.1°。
再一次着重声明,唯一起到决定作用的关于舵机位置控制的参数乃是PWM脉宽,然而机械进行装配、供电所具备的质量以及个体存在的公差均会对最终实际呈现的位置造成影响。若不经过校准便加以使用,那就等同于舍弃了精度。
立即行动建议:
1. 从你手中选取最为经常使用的那枚舵机,借助发送时长为1.5ms的脉宽,对实际角度予以测量,随后进行记录。
2. 偏差一旦超过两度,那就需要依照本文第二节之中“手动校准零点”的步骤,再次去安装舵机臂。
3. 对于所有处于同一项目里的舵机,要去建立起独立的用于校准的参数表,将其存储于代码中的里面,或者存储在配置文件之中。
4. 要优先去使用硬件PWM,比如说像 Servo库或者STM32定时器这类的,以此来避免软件模拟所产生的延迟。
若依照上述方案,那你舵机位置控制的精度便会十足契合航模舵面、机器人关节、摄像头云台等绝大多数应用的工程需求。要是碰到本文没涵盖的特殊问题,那就去查阅对应舵机型号的官方数据手册里的“脉宽 角度特性图”。



