如何用Raspberry Pi 3控制伺服电机

519 阅读4分钟

如何用树莓派3控制伺服电机

物联网缩写为IoT,这一概念促进了移动和终端设备更容易的远程控制和整合。

本文将介绍这种应用的一个简单场景,树莓派可以用来控制一个电机。

前提条件

要跟上本教程,读者应该具备以下条件。

  1. [物联网]的基本知识。
  2. [Raspberry Pi]的基本知识和操作。

电机简介

电机是产生运动的机器。这可以简单地解释为将电力转变为机械动力。电机中的电流和磁场相互作用,产生扭矩形式的力,反过来使电机轴移动。

为了使电机产生机械动力,我们需要为它提供足够的电力电压范围。这是因为高电压将意味着电机的功率增加,从而导致磨损,并可能导致电机损坏。

电机的作用效率如何,取决于电机的质量。

舵机和直流电动机的比较

直流电动机很擅长在一个方向上连续旋转到360度,而伺服电动机可以将其轴转到一个特定的位置,但最多只有180度。这些电机被用于调整遥控汽车和飞机的转向。

直流电动机的自由旋转速度为每分钟3000至9000转,这使它们适合于驱动快速旋转的轻型物体。

伺服电机是在直流电动机的基础上增加以下部件而制成的。

  • 一个用于电机轴的位置传感器,以跟踪电机在哪个方向上转动以及在该方向上转动的程度。
  • 一些齿轮减速器,以减少旋转的角度。
  • 一个控制电机的电路,告诉它应该向哪个方向移动以及向那个方向转多少。

一般来说,伺服电机的运行是为了使电机轴从参考点出发180度左右达到所需的位置。

伺服电机的例子在下面的图片中显示。

Servo motor diagram 1

Servo motor diagram 2

设置Raspberry Pi来控制伺服电机

第1步:通过电线将电机连接到Raspberry Pi上

请注意,电机有一组3根线,红色、棕色和橙色。红色的是+ve ,棕色的是-ve

橙色的线是用来发送控制信号的,即脉冲宽度调制控制信号。这三条线连接到树莓派上的不同引脚。

因此,为了更加灵活,我们将用跳线连接它们,如下图所示。

Jumper cable connection

然后我们将信号线连接到GPIO 第11针,正极连接到提供5伏电压的第4针,而-ve 到第6针,如下图所示。

Pi上的针脚连接](/engineering-education/ how-to-control-a-servo-motor-using-a-raspberry-pi-3/pi-pin-numbering.jpg)

第2步:对树莓派进行编程

2.1 导入库

我们首先要导入这项任务所需的库。在这种情况下,时间和Raspberi pi GPIO。

import RPi.GPIO as GPIO
import time

2.2 设置GPIO的编号模式

在这里,我们将GPIO的编号模式设置为电路板的编号模式,这样就可以根据电路板的情况系统地进行编号。

GPIO.setmode(GPIO.BOARD)

2.3 设置11号针脚为输出端,伺服机为11号针脚的PWM(脉冲宽度调制)。

我们继续设置11号针脚为输出。

GPIO.setup(11,GPIO.OUT)

接下来,我们设置一个变量。我把我的servo ,针脚11与PWM。50定义了11号针脚的脉冲频率,11只是PIN码。

servo = GPIO.PWM(11,50)

2.4 启动PWM运行,但数值为0,即脉冲关闭

servo.start(0)
print ("Waiting for 1 second")
time.sleep(1)

2.5 转动伺服轴

我们定义一个变量值,并分配一个随机值,例如2。在这种情况下,它作为我们间隔计数的起点。

然后,我们将在2到17的范围内循环计算值。考虑到2到17之间的间隔划分,如果每次轴移动时占空比增加1,电机将移动轴。这是在每1秒之后,每隔12度,直到轴旋转180度。

print ("Rotating at intervals of 12 degrees")
duty = 2
while duty <= 17:
servo.ChangeDutyCycle(duty)
time.sleep(1)
duty = duty + 1

2.6 转回的时间

要把轴转回0度,我们只需改变占空比,使一个大的180度转回0度。

print ("Turning back to 0 degrees")
servo.ChangeDutyCycle(2)
time.sleep(1)
servo.ChangeDutyCycle(0)

2.7 清理环境

我们使用下面的代码片断来清理环境。

Servo.stop()
GPIO.cleanup()
print ("Everything's cleaned up")

总结

上面这段代码在一起运行时,会执行电机轴180度的来回转动。然后,它将清理操作环境。你可以用一个以上的电机尝试同样的方法,看看这能变得多么有趣。