发布时间: 2026-09-26
驱动51单片机来操控舵机这件事, 它的核心部分, 实际上仅仅只涉及三根线, 这三根线的名字分别是电源正极、电源地线与PWM信号线, 在这篇文字里面, 我们直接把这个最小规模的驱动程序电路图里面的那些接线关系都给列出来了, 同时也给出了关于PWM参数的计算方式, 还有一些比较常见的错误接线情况也指了出来, 这样做是为了帮助大家在进行实际的动手操作之前, 能够做到一次性就把所有接口都接正确, 不至于出现什么需要返工的大麻烦。
最小驱动电路图接线关系
舵机, 以大家常常用得上的SG90这个规格为例, 它引出了三根线, 这些线需要按照下面的方法来对应连接起来:
红色的那个线, 也就是VCC这个标注所对应的线, 是需要连接到五伏特电源的正极上去的。
棕色的线是接地线, 也就是GND线, 这条线要接到五伏电源的负极去, 同时呢, 还要和单片机的接地端连在一起, 让它们处于共地的状态。
将橙色的信号线, 也就是这根线, 连接到51单片机内部, 随便哪一个能够输出PWM信号的I/O接口上去, 比如说使用P1.0这个引脚。
整个电路的设计方案是非常精简的, 它仅仅需要用到一个5V稳压模块, 还需要有一只舵机作为执行部件, 再加上一块51开发板来进行控制,只需要借用三根杜邦线进行连接就可以构成完整驱动回路了, 这一过程完全无需借助额外的驱动芯片来协助工作。
PWM参数怎么算
![]()
控制舵机的信号用的是脉宽调制, 这种方式的频率是50Hz, 周期是固定的20ms。
| 脉宽 | 角度 |
|---|---|
| 1.0 ms | 0° |
| 1.5 ms | 90° |
| 2.0 ms | 180° |
对于使用<12MHz>晶振的51单片机, 我们可以考虑一下利用定时器1来产生PWM信号这个情况。
定时器的初始赋值等于六万五千五百三十六减去五万, 得出的结果是15536, 在十六进制里写作3CB0H, 这代表着定时器会每一次到达20毫秒的时间点发生溢出动作。
每次出现中断, 并且电平变为高电平时, 就让计数值加上 1;等到数值达到了目标宽度对应的那个中断次数之后, 就把信号拉低;一直维持到周期结束, 然后再重新开始加载。
比如在90°这个角度下, 其时间值是1.5ms, 这就意味着第75个中断会让电平拉高, 而第75个中断也会让电平拉低。因为在一个20ms的时间周期里, 总共有100个计数点, 1.5ms正好对应这中的75个计数点。
常见接错情况(实际调试中高频出现)
1. 舵机VCC接3.3V会出现转动无力、卡顿, 乃至干脆不转的情况, 这里得使用5V的独立供电方式才可以。
![]()
2. 信号线未做电平转换, 若单片机I/O口输出3.3V, 部分舵机对低电平的识别可能出现异常的情况, 建议把信号线经过MOS管或者二极管来进行整流处理, 最终转换成5V。
3. GND未共地: PWM波形会出现随机的毛刺, 舵机的角度也会发生抖动。大家要把舵机的GND和单片机的GND给短接起来。
行动建议
在焊接之前, 一定要先用杜邦线连接面包板进行验证, 只有当确认舵机能够根据角度指令做出正确的响应动作之后, 才能把电路板固定住。
当驱动2只及以上舵机时, 5V电源输出电流需≥1.5A×数量。这是为了防止电压跌落导致单片机复位。
在定时器中断这个程序里面, 仅仅只做切换那个标志位这一个动作, 而至于把I/O端口的电平状态进行高低翻转的工作, 应该全部都放在主循环那个地方去最终完成, 这么做的主要目的就是为了避免让程序在中断执行的过程当中再去进行除法运算或者去执行延时操作。
核心结论, 51驱动舵机这个事, 就是要把“5V供电”, “50Hz PWM信号”, 还有“共地”这三大要素给做到位。
它的电路图其实是非常非常简单, 真正的难点并不是接线, 而是在PWM信号的脉宽精度方面, 以及在电源电流的预留裕量方面。如果你能把这三点都接对了, 舵机就可以稳定地响应从0°到180°的全角度转动, 完全不需要任何额外的外围驱动电路。



