发布时间: 2026-05-03
当你头一回试着运用51单片机来驱动具备两自由度的舵机云台之际,最为经常碰到的三个问题是:云台出现抖动情况,舵机处于不转动状态,又或者是没办法维持指定的角度。这些问题的根源是一样的——没有掌握PWM信号精确的生成方式。本文直接给出了可操作的解决办法:利用51单片机的一个定时器去产生两个通道的PWM信号,分别用以控制水平舵机与垂直舵机,借助改变占空比使得云台指向任意角度。
舵机内部控制电路,会对输入的PWM信号的高电平时间做比较,该电路会比较该高电平时间与内部基准电压,之后驱动电机,使其到达目标角度。标准模拟舵机的控制周期时长为20ms ,也就是50Hz。那高电平时间,它在0.5ms至2.5ms之间,会线性对应0°到180°,当然,也可能是90°到180°等情况,具体得看舵机规格。
关键结论:核心在于精确把控高电平的时间,51 单片机在不存在硬件 PWM 的状况下,必然要用定时器中断去进行模拟。
51单片机(如)
两自由度舵机云台(包含两个舵机:水平舵机、俯仰舵机)
有一个5V稳压电源,舵机在瞬间的时候,其电流能够达到1A以上,所以不能从单片机IO那里获取电力供应。
10kΩ上拉电阻(增加信号稳定性,可选)
接线规则:
舵机红色线 → 5V电源正极
![]()
舵机棕色/黑色线 → 电源地(与单片机共地)
舵机橙色或者黄色的信号线,连接到单片机的IO口,比如说水平舵机连接到P1.0,俯仰舵机连接到P1.1。
一般见的事例:存在有使用者运用SG90舵机,其工作电压是4.8至6V,直接去连接单片机的5V引脚,之后发觉云台转动之际单片机重新启动。缘由在于舵机启动时电流过大进而拉低了电压。解决的办法:单独给舵机供应电力,并且把单片机与舵机的GND连接成为一体。
此代码运用定时器T0,使其运行于模式1(即16位模式),每隔0.1ms便产生一次中断。借助两个全局变量,分别对两个通道的高电平计数值予以记录。
#
sbit = P1^0; // 水平舵机信号线
sbit = P1^1; // 垂直舵机信号线
int pwmH = 15; // 水平舵机高电平计数值 (0.1ms为单位) 15对应1.5ms > 90°
int pwmV = 15; // 垂直舵机高电平计数值
int cntH = 0;
int cntV = 0;
int = 0; // 周期计数器 200个0.1ms=20ms
void () {
TMOD &= 0xF0;
TMOD |= 0x01; // 模式1
TH0 = 0xFF; // 定时0.1ms (11.晶振,12T模式)
TL0 = 0xA4; // 计算值 = 65536 (/12)0.0001
ET0 = 1;
EA = 1;
TR0 = 1;
}
void main() {
();
while(1) {
// 在主循环中修改 pwmH 和 pwmV 即可改变云台角度
// 范围:5~25 对应 0.5ms~2.5ms (0°~180°)
// 示例:水平转到最左 pwmH=5, 最右 pwmH=25
}
}
void () 1 {
TH0 = 0xFF;
TL0 = 0xA4;
++;
if( >= 200) { // 20ms周期结束
= 0;
cntH = 0;
cntV = 0;
= 1; // 开始高电平
= 1;
} else {
if(cntH < pwmH) {
= 1;
} else {
= 0;
}
if(cntV < pwmV) {
= 1;
} else {
= 0;
}
cntH++;
cntV++;
}
}
角度换算公式:
高电平计的数值等于,目标角度作为被除数被180°当作除数来相除后的结果,再与25减去5的差相乘,加上5。
例:90° → (90/180)20 + 5 = 15
权威参考表明,舵机脉冲宽度规范所依据的是“日本标准”以及“Hitec标准”伟创动力舵机,众多舵机采用的是0.5ms~2.5ms对应0°~180°这套标准,其来源于行业通用标准,并且可通过查阅舵机数据手册获取相关内容。
![]()
1. 能够实现51单片机控制云台可靠的方法当中,精确的定时器中断是唯一的,查询延时或者循环阻塞会使得云台出现失控的情况。
2. 成功的首要前提乃是供电独立性,一旦遭遇抖动重启的情况,要去检查舵机是不是直接从单片机获取电力供应。
3. 对于两个舵机的独立控制而言伟创动力,仅仅需要增加一组用来计数的值,并不会增添硬件方面的成本,而且代码已然给出,能够直接进行编译。
4. 线性关系由角度进行映射:牢记公式,即(angle除以180)乘以20再加上5,此公式适用于占据90%比例的180°舵机。
按以下顺序验证你的系统:
刚开始,要去单独测试一个舵机,把pwmH设定成5 , pwmH设定成、15 , pwmH设定成、25 ,去观察它能不能转到0°,去观察它能不能转到、90°,去观察它能不能转到、180°。
第二步:用按键或串口动态改变pwmH值,确认响应平滑。
第三步:连接第二个舵机,重复测试,安装云台机械结构。
第四步:要是存在需要持续进行扫描运作的情况,于主循环里借助for循环来使pwmH逐步增加,每当发生改变之后延迟50毫秒。
掌握了以上所提及的内容之后,你已然拥有了运用51单片机去达成基础云台跟踪、摄像头稳像、超声波测距云台等项目的核心能力啰。要记住哦:精确计时以及独立供电可是永远都不会过时的两条铁定规律呢。