steering_control

舵机是由pwm信号控制

舵机由三根接线两根电源接线一根pwm信号线我们控制舵机只需要一根pwm控制线就行电源线可以接外接电源

我们所用的舵机一般都是180°舵机,需要一个20ms的时基脉冲及50hz的脉冲
高电平在一个时基脉冲中占用的时间对应舵机转动的角度:

  1. 0.5ms —— 0° (最小的时间段)
  2. 1.0ms —— 45°
  3. 1.5ms —— 90°
  4. 2.0ms —— 135°
  5. 2.5ms —— 180°(最高的时间段)

image-20220914091248499

RPi.gpio控制舵机采用的是占空比的方式。及将高电平在时基脉冲中占用的时间转化为百分比的形式,

角度转化为占空比的计算公式如下

1
2
def Ang(ang):      #可以自己动手算算
return 2.5 + ang/180.0*10

接下来是简单的舵机控制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import RPi.GPIO as GPIO
Eng = 10 #舵机的pwm信号线设置为10
def Ang(ang): #角度占空比转化代码
return 2.5 + ang/180.0*10
GPIO.setwarning(False)
GPIO.setmode(GPIO.BCM) #采用BCM引脚方式
GPIO.setup(Eng,GPIO.OUT,initial = 0) #引脚设置为输出
p = GPIO.PWM(Eng, 50) #脉冲频率为50HZ
p.start(Ang(0)) #初始角度设置为0°
last = 0;
log = 1;
p.ChangeDutyCycle(0) #清空占空比消除抖动
while True:
angle = int(input('旋转角度:'))
if(angle>last): #判断要正转还是反转
log = 1;
else:
log = -1;
for i in range(last,angle,log): #使用time.sleep控制转速
p.ChangeDutyCycle(Ang(i))
time.sleep(0.1)
last = angle
p.ChangeDutyCycle(0) #清空占空比消除抖动