舵机的控制信号,一般是脉宽调制(PWM)信号,如下图,反映了 PWM 信号和舵机转动角度的关系,可以简单的理解为,通过给舵机通电的时间控制,结合角度传感器的反馈信号检测和控制,实现了舵机的精确角度控制。 舵机的控制信号周期为 20ms 的脉宽调制信号(PWM),其中脉宽从 0.5ms ~ 2.5ms,相应的舵盘位置从 0 ~ 180度,呈线型变化。也就是说,给舵机提供一定的脉宽,输出轴就会保持一定的对应角度,无论外接转矩怎么改变,直到提供另外一个脉冲信号,才会改变输出角度到新的对应的位置上。 舵机内部有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的脉冲信号,有一个比较器,将外加信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。 伺服电动机的周期通常为 20ms,希望以 50Hz 的频率产生脉冲。 180 度电机与 360 度电机
360 度舵机与一般舵机的区别是:给一般舵机一个 PWM 信号,舵机会转到一个特定角度,而给 360 度舵机一个 PWM 信号,舵机会以一个特定的速度转动,类似与电机。但与电机不同的是,360 舵机是闭环控制,速度控制稳定。 PWM 信号与 360° 舵机转速的关系:
- 0.5ms ———— 正向最大转速
- 1.5ms ———— 速度为 0
- 2.5ms ———— 反向最大转速
利用 51 单片机驱动舵机
通过上述分析,可以得出 1ms 对应 90°,那么 0.1ms 对应 9°。由于驱动舵机的控制信号周期为 20ms,可以将 20ms 的周期信号分为 200 份,那么 1 份代表 0.1ms,相对应舵机的转角为 9°。 因此,将定时器中断一次的时间设定为 0.1 ms,即定时时间为 0.1ms。采用定时器 1 工作方式 2(8 位初值自动重载)。 - 计算定时器初值
- 机器周期 T c y = 12 × 1 / ( 11.0592 × 1 0 6 ) s T_{cy} = 12 × 1 / (11.0592 × 10^6) sTcy=12×1/(11.0592×106)s 约等于 1.0851 u s 1.0851 us1.0851us
- 定时时间 t = 0.1 m s t = 0.1mst=0.1ms
- 计数值 N = t / T c y = 0.1 m s / 1.0851 u s = 92 N = t / T_{cy} = 0.1ms / 1.0851 us = 92N=t/Tcy=0.1ms/1.0851us=92
- 装入 THX 和 TLX 的数为:T H X = T L X = 256 − 92 = 164 THX = TLX = 256-92 = 164THX=TLX=256−92=164
- 代码
void T1_Init(void){ TMOD &= 0x0F; //设置定时器模式 TMOD |= 0x20; //设置定时器模式 TH1 = 164; //设置定时初始值 TL1 = 164; //设置定时重载值 TF1 = 0; //清除TF1标志 TR1 = 1; //定时器1开始计时}
|