发布时间: 2026-05-03
要是打算运用单片机去操控舵机转速,那么要明白,只是“连续旋转舵机”(也就是被称作360度舵机的那种)才行直接对转速予以调节。普通的位置舵机(0到180度)仅仅能够控制停止角度,没办法达成连续调速。
是这样的,控制转速的实质在于,单片机输出一种信号,这种信号是PWM也就是脉宽调制信号,它能够改变高电平的时间,这里所说的高电平时间也就是脉宽,对于连续舵机而言,它会依据这个脉宽偏离1.5ms的程度,来确定转速以及方向。
脉宽 = 1.5ms → 停止
脉宽大于一点五毫秒,通常是在一点六毫秒到二点零毫秒之间,这种情况下,正向转速会经由慢逐渐变快。
脉冲宽度小于1.5毫秒,其中通常是在1.4毫秒至1.0毫秒这个范围,这样的情况下,反向转速会从慢渐变到快。
推选能快速上手的方案,采纳选取支持PWM输出的单片机,设定PWM频率为50Hz(周期是20ms),变革更换比较寄存器值去调节脉宽,如此便可实现无级调速。
1. 进行舵机类型的确证,要观察舵机标签,要是标签上标记着“0 180°”,那就是位置舵机,这种舵机无法调节速度;只有当标签标注“360° ”或者标记“连续旋转”的时候,才能够进行速度调节。
2. 供电方面呢,舵机工作的电压一般是在4.8V到7.4V这个范围之内(就拿常见的5V到6V作为例子来讲),是严禁直接通过单片机的IO口来进行供电的哦。采用独立的电源(像是3节1.5V的干电池或者5V稳压模块这种),电源的正极要连接到舵机的红线,负极则要连接到舵机的黑/棕线那里。
3. 以信号且涉及控制方面来说,那是舵机的信号线,其颜色一般是黄或者白或者橙色的那种,要去连接单片机的PWM输出引脚。这里存在一个要做到共地的情况伟创动力,是要把舵机电源的负极部分,和单片机的GND进行连接。
事例呈现:有一位机器人爱好者,运用5伏/2安的充电宝降压板为处于连续状态的舵机供应电力,并借助51单片机的P1.0端口对外输出PWM,当全部连接完成之后,后一个舵机开始表现得稳定顺畅地运转起来。
产生50Hz PWM信号的是以下代码,转速是通过改变来控制的。
以标准8051单片机(12MHz晶振)为例:
#
sbit servo = P1^0;
int = 1500; // 单位us,范围1000~2000
int = 0;
void () {
TMOD = 0x01; // 模式1,16位定时器
TH0 = (655361000)/256; // 每1ms中断一次
TL0 = (655361000)%256;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void () 1 {
TH0 = (655361000)/256;
TL0 = (655361000)%256;
++;
if( == 1) {
servo = 1; // 脉宽开始
TR1 = 0;
TH1 = (65536 )/256; // 脉宽结束时触发
TL1 = (65536 )%256;
TR1 = 1;
}
if( == 20) { // 20ms周期结束
= 0;
servo = 0;
TR1 = 0;
}
}
// 在定时器1中断中关闭高电平
void () 3 {
servo = 0;
TR1 = 0;
}
void main() {
();
while(1) {
// 修改即可调速
// =1500停止;=1700正转较快;=1300反转较快
}
}
![]()
很多增强型的那种51单片机、AVR单片机、STM32单片机等类型,其芯片内部都设置有PWM发生器。只要进行配置,使得周期达到20ms ,还要把比较值设定为处于1000到这个范围,以此对应不同的占空比。
示例配置流程(通用步骤,不依赖特定品牌):
1. 设置时钟源,使能PWM模块。
2. 使周期寄存器得以设定:要是计数器所具备的频率是一兆赫兹,那么二十毫秒就相应于两万计数值。
3. 设置用于比较的寄存器,其中转速所对应的具体数值,处于1000至2000这个范围之内,而其中停止时所对应的数值为1500。
4. 将PWM输出引脚连接到舵机信号线。
5. 运行时修比较值即可变速。
while(1) {
servo = 1;
();
servo = 0;
(20000 );
}
这种方法会占用CPU,并且很容易受到中断的影响从而导致出现抖动,它仅仅适合于快速测试。
不同品牌的连续舵机,其线性区说不定稍微会有不一样,建议把当作中点,每次增加或者减少20us去测试实际的转速。
舵机出现不转动的情况时,要去检查一下那电源电压是不是足够,这里要注意大电流状态下电压降会明显,还要确认信号线脉宽处于1000到2000微秒这个范围,并且频率是50赫兹正负百分之二,另外要细细检查是否共地。
出现抖动现象,伴有转速不稳定状况,这种情况是因为电源容量不足,或者滤波效果不良,此时可采取并联1000μF电容的措施;又或者是PWM精度不足,针对此应改用硬件PWM,或者缩短定时器中断间隔。
不能够停下来,去校准中点脉宽,或许是舵机中点偏离了1500微秒,通过手动微调加上或减去50微秒来寻找到停止的点。
![]()
限制为仅能进行单向旋转,脉宽被限定于大于1500微秒或者小于1500微秒的其中一侧,核查程序有没有输出完整范围。
要是规定转速始终保持不变(就像机器人沿着直线行进那样),那就得增添编码器或者霍尔传感器。其步骤如下:
1. 在舵机输出轴安装磁编码器(如)。
2. 单片机读取实时转速,与目标转速比较。
3. 通过PID动态调整PWM脉宽。
达成简易闭环:每隔5毫秒对实际转速予以测量,误差为目标值减去实际值,输出脉宽等于当前脉宽加上Kp乘以误差。Kp建议自0.5起始进行调试。
使用连续旋转舵机才能调速,普通位置舵机无法实现。
单片机借助50Hz的PWM信号,经过改变脉宽伟创动力舵机,限定脉宽范围在1毫秒至2毫秒之间,如此一来便能够实现连续地对转速以及方向进行控制。
硬件连接强调独立供电和共地,软件推荐定时器或硬件PWM。
常见故障多因电源不足或脉宽边界错误导致。
1. 紧着马上进行测试:先去准备一个能够连续运转的舵机,再准备一个5V的电源,再者准备任意一款单片机开发板,接着去下载上面所存在的定时器代码,随后修改变量,使其从1300开始,按照步进20us的幅度到1700,观察其转速的变化情况。
2. 项目应用方面,要是有精准恒速的需求,那就去采购那种带有编码器的舵机,然后还要实现PID控制。
3. 提醒选型:买舵机的时候,要明确提出“360度连续旋转”这样的规格要求呢,并去索取中点脉宽参数哟。
遵循上述所提及的步骤,您能够于30分钟之内达成单片机针对舵机转速的极其完美的控制。