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 自加 1count %= 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; }}部分信息可能已经过时














