发布时间: 2026-05-04
好多电子爱好者于打造机械臂、智能小车或者简易机器人之际,均会碰到要操控舵机转动特定角度的情形。比如说,你打算用一个小型舵机带动一个摄像头云台,使其能够左右摆动进行监控。这时,你手头恰好有一块STC15系列单片机(像是或者),那要怎么编写程序才能够达成控制呢?本文会直接给出基于STC15单片机的完整舵机控制程序、电路连接方法以及常见故障排除,让你一次成功。
用于舵机(标准180度舵机)的控制信号,是那种周期为20ms(50Hz)的高电平脉冲宽度调制信号(PWM),其中,高电平持续的时间处于0.5ms至2.5ms之间,该时间范围对应着0°至180°。
关键结论是,你仅需运用STC15的随便一个普通状况下的输入输出端口,去输出一串具有频率为每二十毫秒一个周期、并且脉冲宽度能够变化的脉冲序列,便能够达成对舵机转动至任意角度的控制。
不依赖专用PWM模块伟创动力舵机,完全可以用定时器来实现。
![]()
很关键的提醒: 舵机开始启动的那一瞬间,电流能够达到500mA以上。要是直接采用STC15开发板上的LDO来供电,就有可能引发单片机复位。要为舵机单独去提供5V/1A以上的电源,并且要共地(也就是把舵机的GND和STC15的GND连接在一起)。
本程序借由定时器0来生成20ms中断,于中断里操控P1.0输出电平,达成角度精准控制,代码已在上经实际测试通过。
// 舵机控制程序 STC15系列
// 晶振频率:12MHz
#
sbit Servo = P1^0; // 舵机信号引脚
int ; // 高电平时间(单位:0.1ms),值范围:5~25 对应 0.5ms~2.5ms
// 定时器0初始化,12T模式,12MHz下每计数一次为1us
void (void) {
AUXR &= 0x7F; // 定时器0工作在12T模式
TMOD &= 0xF0; // 设置定时器0为模式1(16位)
TMOD |= 0x01;
TH0 = 0xF8; // 设置初始值:高8位 0xF8,低8位 0xCC → = 2ms
TL0 = 0xCC;
ET0 = 1; // 使能定时器0中断
EA = 1; // 开总中断
TR0 = 1; // 启动定时器0
}
// 设置舵机角度:angle 0~180
void ( char angle) {
// 限制角度范围
if (angle > 180) angle = 180;
// PWM高电平时间 = 0.5ms + (angle / 180) 2.0ms
// 单位0.1ms: 5 + (angle 20 / 180) = 5 + angle/9
= 5 + ( int)(angle / 9);
// 边界保护:5~25
if ( < 5) = 5;
if ( > 25) = 25;
}
// 定时器0中断服务程序(每2ms进入一次,累计10次得到20ms周期)
char cnt = 0;
void (void) 1 {
TH0 = 0xF8;
TL0 = 0xCC; // 重新加载2ms
cnt++;
if (cnt == 1) {
Servo = 1; // 开始高电平
// 重新加载定时器,改为高电平持续时间
TH0 = (65536 100) >> 8;
TL0 = (65536 100) & 0xFF;
}
else if (cnt == 10) {
Servo = 0; // 低电平,完成一个周期
cnt = 0;
// 恢复定时器为2ms
TH0 = 0xF8;
TL0 = 0xCC;
}
else {
// 中间其他中断周期保持低电平(实际已在第一次中断后改为高电平持续时间)
// 此结构已完整实现20ms周期内高电平输出指定时间
}
}
void main() {
();
(0); // 初始化转到0度
while(1) {
// 示例:循环摆动
(0); // 0度
(500);
(90); // 90度
(500);
(180); // 180度
(500);
}
}
// 简单延时函数(ms),基于12MHz
void ( int ms) {
int i, j;
for(i=0; i
无论你选用STC15这类单片机,还是选用别的单片机,控制舵机的实质就是生成周期为20ms的信号,且该信号的高电平处于0.5至2.5ms的范围之中。只要你的定时器能够精准地输出这样的波形,那么任何I/O口都能够驱动舵机。不要让复杂的名词把自己给迷惑住。
![]()
1. 先按上面的电路连接图接好舵机和独立电源,并共地。
2. 复制完整代码到Keil C51中编译,生成HEX文件。
3. 采用STC ISP软件,将其烧录进STC15单片机,此时要留意,选择正确的IRC频率,把该频率设定为12MHz。
4. 上电观察舵机是否按程序摆动(0°→90°→180°循环)。
5. 要是碰到问题,转过头去查看“常见问题”表格,去排查电源以及共地。
成功促使首个角度发生变动之际,你能够把它转接到机械小臂、舵机云台或者机器人关节范畴的项目里头去。要是需要那些能够持续转动的舵机(三百六十度)或者总线舵机之际,控制协议存在差异,不过PWM的基础原理是一样的。