驱动SG90舵机运算

一、舵机:
1、1MHZ=1us  1KHZ=1000us   1HZ=1000 000us    1/60HZ=166ms
2、1ms<=脉宽<=2ms --> 1KHZ<=脉宽<=500HZ
3、PWM周期信号20ms;舵机转向左极限角度,正脉冲为2ms,负脉冲为20ms-2ms=18ms
4、舵机控制系统工作稳定,PWM占空比 (0.5~2.5ms 的正脉冲宽度)和舵机的转角(-90°~90°)线性度较好

舵机的控制需要一个20ms左右的时基脉冲(1/0.020s=50HZ),该脉冲的高电平部分为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是:
  0.5ms-------------0度;   2.5%
  1.0ms------------45度;   5.0%
  1.5ms------------90度;        7.5%
  2.0ms-----------135度;  10.0%
  2.5ms-----------180度;  12.5%      C/(180-0)=HL/(2.5-0.5)   --> C=90L   一度等于90有效部分脉冲长度比例    
  

  #2^12精度  角度转换成数值    #angle输入的角度值(0--180)     #pulsewidth高电平占空时间(0.5ms--2.5ms)     #/1000将us转换为ms  #20ms时基脉冲(50HZ)

  pulse_width=((angle*11)+500)/1000  //将角度转化为500(0.5)<-->2480(2.5)的脉宽值(高电平时间)   angle=180时  pulse_width=2480us(2.5ms)

   date/2^12=pulse_width/20  ->有上pulse_width的计算结果得date=2^12*( ((angle*11)+500)/1000 )/20   -->int date=4096((angle*11)+500)/20000;


#Python驱动例子  
def set_servo_angle(channel, angle): #输入角度转换成12^精度的数值
date=4096*((angle*11)+500)/20000 #进行四舍五入运算 date=int(4096*((angle*11)+500)/(20000)+0.5)
pwm.set_pwm(channel, 0, date)

二、SG90厂家给出的技术数据:
尺寸:21.5mmX11.8mmX22.7mm
重量:9克   (1kg=1公斤=2斤)
无负载速度:0.12秒/60度(4.8V) 0.002s/度
堵转扭矩:1.2-1.4公斤/厘米(4.8V)
使用温度:-30~~+60摄氏度
死区设定:7us   (7MHZ)
工作电压:4.8V-6V

三、位置等级有1024个,有效角度范围180度,控制的角度精度是可以达到180/1024度约0.18度了,从时间上看其实要求的脉宽控制精度为2000/1024us约2us。


四、使用的是每0.02ms进入一次中断,那么数每+1,舵机大概转过0.02/2*185=1.85°。0.5ms-2.5ms这段高电平时间越长舵机转过角度越大,0.5ms舵机就转过0°,2.5ms舵机就转到最大角度(大概185°)



你可能感兴趣的:(SG90舵机)