为什么舵机的0度在单片机中代表500?180度代表2500?

一、先搞懂舵机的核心控制规则

舵机是通过PWM(脉冲宽度调制)信号来控制角度的,行业内主流的 180 度舵机有一个通用标准:

  • 舵机需要频率为50Hz的 PWM 信号(也就是信号周期 = 1/50=20ms=20000 微秒);
  • 脉冲的高电平宽度决定舵机角度:
    • 高电平 1ms(1000 微秒)→ 舵机转到 0 度;
    • 高电平 2ms(2000 微秒)→ 舵机转到 180 度;
    • 中间角度按线性比例计算(比如 1.5ms 对应 90 度)。

二、500 和 2500 的由来(数值转换逻辑)

你看到的 500、2500 并不是直接的时间值,而是单片机 PWM 定时器的计数值,这个转换和定时器的配置密切相关,我们以最常用的 STM32、Arduino 等平台为例拆解:

1. 定时器分频与计数周期(以 Arduino 为例)

Arduino 中控制舵机的Servo库,底层把 50Hz 的 PWM 周期(20ms)拆分成了4000 个计数单位(这是库的默认配置):

  • 20ms = 20000 微秒 → 每个计数单位 = 20000 / 4000 = 5 微秒;
  • 1ms(0 度)= 1000 微秒 → 计数值 = 1000 / 5 = 200?(这里注意:不同库 / 单片机配置不同,500/2500 是另一种常见配置)
2. 500/2500 的典型配置场景

更通用的是把 20ms 周期拆分为10000 个计数单位(比如 STM32 定时器分频后,计数频率为 500kHz,即每个计数单位 2 微秒):

  • 20ms = 20000 微秒 → 总计数单位 = 20000 / 2 = 10000;
  • 0 度对应的 1ms(1000 微秒)→ 计数值 = 1000 / 2 = 500;
  • 180 度对应的 2ms(2000 微秒)→ 计数值 = 2000 / 2 = 2500。

简单说:500 和 2500 是 "高电平时间" 转换后的定时器计数值,本质对应 1ms 和 2ms 的高电平宽度,而这两个时间正是舵机 0 度 / 180 度的标准控制信号。

3. 补充:不是所有舵机都严格对应
  • 部分舵机的角度范围可能超出 180 度(比如 270 度),此时 2500 可能对应更大角度;
  • 廉价舵机可能有误差,比如 0 度实际对应 450、180 度对应 2550,需要校准;
  • 不同单片机的定时器配置(分频系数、计数模式)不同,数值可能变化(比如有些平台用 0-180 直接对应角度,底层自动转换为 500-2500)。

总结

  1. 舵机的核心控制逻辑是:50Hz PWM 信号下,1ms 高电平→0 度,2ms 高电平→180 度;
  2. 500/2500 是 "1ms/2ms 高电平" 转换后的定时器计数值(和计数频率 / 分频有关);
  3. 这个数值是行业通用约定,不同平台 / 舵机可能有小幅偏差,但核心是 "计数值→高电平时间→舵机角度" 的转换关系。
相关推荐
金线银线还是铜线?19 小时前
米德方格MF9005/MF9006:低功耗光能利用的PMIC芯片解析
嵌入式硬件·物联网·iot·太阳能
Arciab20 小时前
51单片机_数码管显示
单片机·嵌入式硬件·51单片机
qq_4017004120 小时前
FreeRTOS用事件组替代全局变量实现同步
单片机
zhongvv20 小时前
8位应广单片机与32位M0单片机开发差异总结
经验分享·单片机·嵌入式硬件
咸蛋-超人21 小时前
聊一聊 - STM32的堆和栈空间怎么分配
stm32·单片机·嵌入式硬件
raindrops.1 天前
STM32之LL库使用(二)
stm32·单片机·嵌入式硬件
日更嵌入式的打工仔1 天前
单片机基础知识:内狗外狗/软狗硬狗
笔记·单片机
v先v关v住v获v取1 天前
12米折叠式高空作业车工作臂设计9张cad+三维图+设计说明书
科技·单片机·51单片机
单片机系统设计1 天前
基于STM32的水质检测系统
网络·stm32·单片机·嵌入式硬件·毕业设计·水质检测
唔好理总之好犀利1 天前
FreeRTOS中断内使用taskENTER_CRITICAL()进入临界区
单片机·嵌入式硬件