首页 > 行业资讯 >舵机
TECHNICAL SUPPORT

51单片机舵机控制程序:三种常用代码示例

发布时间: 2026-04-16

0151单片机控制舵机的完整程序方案

本文是面向电子爱好者以及初学者的,给出了基于51单片机的舵机控制程序的完整方案。舵机控制的关键在于生成周期为20ms、脉宽处于0.5ms至2.5ms之间的PWM信号。最常被使用的控制程序存在三种,分别是按键调节角度程序、固定角度程序、串口指令程序。

一、舵机控制核心原理

经对应关系可知,舵机凭借PWM信号的脉宽达成对角度的控制,像如SG90、MG995这般的标准舵机伟创动力舵机,其对应关系为如下所述那般。

脉宽时间 对应角度 占空比(周期20ms)
0.5ms 2.5%
1.0ms 45° 5%
1.5ms 90° 7.5%
2.0ms 135° 10%
2.5ms 180° 12.5%

具权威性的来源表明,上述所提及的数据,是依据舵机行业里普遍通用的PWM控制协议而来的,并且各个品牌的舵机数据手册当中,都存有这样的标准。

二、最常用的三种舵机控制程序

程序一:固定角度控制(适用于上电后锁定特定位置)

# 
sbit servo = P1^0;  // 舵机信号线接P1.0
void delay( int t) {
    while(t);
}
void main() {
    while(1) {
        servo = 1;
        delay(150);   // 产生1.5ms高电平(90°)
        servo = 0;
        delay(18500); // 剩余周期时间(20ms1.5ms)
    }
}

应用场景: 智能车转向轮居中、机械臂初始位姿固定。

程序二:按键角度调节(适用手动调试)

# 
sbit servo = P1^0;
sbit  = P3^0;   // 增加角度按键
sbit  = P3^1;   // 减少角度按键
 int  = 150; // 初始1.5ms对应90°
// 范围:50(0°)到250(180°)
void delay( int t) {
    while(t);
}
void () {
    if( == 0) {
        delay(1000); // 消抖
        if( == 0) {
            if( < 250)  += 10;
            while(!);
        }
    }
    if( == 0) {
        delay(1000);
        if( == 0) {
            if( > 50)  = 10;
            while(!);
        }
    }
}
void main() {
    while(1) {
        ();
        servo = 1;
        delay();
        servo = 0;
        delay(20000  );
    }
}

基于51单片机的舵机控制程序有哪些_单片机控制舵机的程序_单片机基于程序控制舵机有哪些

平常会遇到的问题处理办法:按下按键一次就跳跃好多角度,一般来讲是由于消除抖动的延迟时间不够,把delay(1000)改成delay(5000)就行。

程序三:串口指令控制(适用电脑/上位机控制)

# 
sbit servo = P1^0;
 int  = 150; // 默认90°
void delay( int t) {
    while(t);
}
void () {
    TMOD = 0x20;  // 定时器1模式2
    TH1 = 0xFD;   // 9600波特率(11.晶振)
    TL1 = 0xFD;
    TR1 = 1;
    SCON = 0x50;  // 串口模式1,允许接收
    ES = 1;       // 开启串口中断
    EA = 1;       // 开启总中断
}
void ()  4 {
     char cmd;
    if(RI) {
        cmd = SBUF;
        RI = 0;
        (cmd) {
            case '0':  = 50; break;  // 0°
            case '1':  = 100; break; // 45°
            case '2':  = 150; break; // 90°
            case '3':  = 200; break; // 135°
            case '4':  = 250; break; // 180°
        }
    }
}
void main() {
    ();
    while(1) {
        servo = 1;
        delay();
        servo = 0;
        delay(20000  );
    }
}

利用串口调试助手来发送指令,发送字符'0',发送字符'1',发送字符'2',发送字符'3',发送字符'4',通过这些字符就能控制舵机转到对应角度

三、程序选型对照表

程序类型 适用场景 所需外设 代码复杂度
固定角度 单一位置锁定
按键调节 手动现场调试 2个按键
串口指令 上位机远程控制 串口模块 中高

四、硬件接线与常见故障排查

标准接线(以SG90舵机为例):

舵机的红线,连接到5V电源,要注意,由于51单片机IO口电流不足,所以外接5V供电。

舵机棕线 → GND(与单片机共地)

舵机橙线 → 单片机P1.0

三大常见故障及解决:

故障现象 根本原因
舵机抖动不转 供电电流不足 使用独立5V/2A以上电源,电池最佳
角度范围不足180° 脉宽未校准 调整delay参数伟创动力,用示波器实测脉宽
程序无反应 未共地 确认舵机GND与单片机GND连接

五、核心结论与行动建议

单片机控制舵机的程序_单片机基于程序控制舵机有哪些_基于51单片机的舵机控制程序有哪些

主要理念反复:51单片机操控舵机的实质是制造周期为20ms的PWM信号,并且脉宽处于0.5ms至2.5ms范围,借助调节高电平时间能够控制角度从0°至180°。

行动建议:

1. 初学者:先烧录固定角度程序,验证硬件接线正确

2. 项目开发:根据控制方式(手动/远程)选择按键或串口程序

3. 故障排查:优先检查供电是否≥5V/2A,以及共地是否可靠

做了上述任意一个程序的烧录,并且正确完成接线之后,舵机应该在1秒之内做出响应,进而转到指定的角度。要是需要更为精确的角度控制,那么可以结合外部晶振,或者采用定时器中断来生成PWM。

为所有产品提供动力单元

联系伟创动力产品专家,为你的产品推荐合适的驱动系统所需部件。

发送邮件
在线留言
WhatsApp
+86 0769 8399 3238
 
kpowerMap