Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4
623 字
3 分钟
舵机控制原理

舵机基本原理#

舵机包括三条导线:

  • 电源线(红线)
  • 地线(黑线)
  • 控制线(黄线)

舵机控制信号是利用PWM,用占空比的变化,来改变舵机的位置。

因此我们要确定PWM脉冲的max、min、freqence:

  • 一般舵机的基准信号的周期为20ms(即PWM波的频率为50HZ)
  • 脉冲宽度属于(0.5ms,2.5ms)
  • 当脉冲宽度为1.5ms时,舵机处于中间位置
  • 当脉冲宽度为0.5ms或2.5ms时,舵机位置处于两个极端

舵机控制逻辑#

当舵机接收到一个<1.5ms的脉冲宽度时,舵机轴会以中间位置为标准,逆时针旋转一定角度。 当舵机接收到一个>1.5ms的脉冲宽度时,舵机轴会以中间位置为标准,顺时针旋转一定角度。

即:可以通过设置对应关系,用PWM的脉冲宽度来控制舵机的转向。

注意:在舵机由A转到B的期间,需要ΔT的时间,所以我们需要保持PWM信号T时间,只有当ΔT = T时,舵机运动最快,最连贯。

51单片机实现代码逻辑#

通过定时器输出高低电平到某一引脚来实现PWM的效果,对于实现20ms周期定时,可以参考以下代码。

设置0.1ms的定时中断,count%=200用来限制20ms的周期,然后可以通过修改PWM_count的值,来实现PWM不同的占空比,来让舵机转动不同角度。定时器的中断时间越短,则控制的角度值越精确。例如这个0.1ms,我要让舵机转过90°,就需要高电平持续1.5ms,所以可以设置PWM_count为15,这样当count=15时,引脚就不再输出高电平,那么就实现了所需要的效果。

对于后面的PWM_num,是希望在舵机在达到指定位置之后,就不再移动,而且也不再需要一直输出PWM波来占用CPU的内存,输出7次是为了让舵机准确转到指定角度。一般这个逻辑我们用不到,因为我们需要不断采集数据来修改当前的舵机角度。

TH0 = 0xff; // 0.1ms 初值
TL0 = 0xb2; // 0.1ms 初值
count++; // 计数变量每 0.1ms 自加 1
count %= 200; // 周期为 20ms
if (count <= PWM_count) {
PWM_Pin = 1;
} else {
PWM_PIN = 0;
}
if (count == 0) {
PWM_num++;
if (PWM_num == 7) {
PWM_num = 0;
TR0 = 0;
}
}
舵机控制原理
https://mizuki.mysqil.com/posts/智能车/舵机/
作者
风过无痕
发布于
2025-11-12
许可协议
CC BY 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00