Raspberry Pi 是基于ARM体系结构处理器的主板,专为电子工程师和业余爱好者设计。PI是目前最受信任的项目开发平台之一。PI具有更高的处理器速度和1 GB RAM,可用于许多高端项目,例如图像处理和物联网。
对于执行任何重要项目,都需要了解PI的基本功能。 在这些教程中,我们将介绍Raspberry Pi的所有 基本功能。在每个教程中,我们将讨论PI的功能之一。在本“ Raspberry Pi教程系列”结束时,您将可以自己进行知名的项目。请阅读以下教程:
- Raspberry Pi入门
- Raspberry Pi配置
- LED闪烁
- Raspberry Pi按钮接口
- Raspberry Pi PWM生成
- 使用Raspberry Pi控制直流电机
- Raspberry Pi的步进电机控制
- 将移位寄存器与Raspberry Pi接口
- Raspberry Pi ADC教程
在本教程中,我们将使用Raspberry Pi控制伺服电机。在开始伺服之前,让我们先谈谈PWM,因为控制伺服电动机的概念来自于它。
PWM(脉冲宽度调制):
之前我们在PWM上讨论过很多次:使用ATmega32进行脉冲宽度调制,使用Arduino Uno进行PWM,使用555定时器IC进行PWM和使用Arduino Due进行PWM。PWM代表“脉冲宽度调制”。PWM是一种用于从稳定电源获得可变电压的方法。为了更好地了解PWM,请考虑以下电路,
在上图中,如果开关在一段时间内连续闭合,则在此期间LED会连续亮起。如果开关闭合半秒,然后断开半秒,则LED仅在前半秒亮起。现在,LED在整个时间内点亮的比例称为“ 占空比”,可以按以下公式计算:
占空比=打开时间/(打开时间+关闭时间)
占空比=(0.5 /(0.5 + 0.5))= 50%
因此,平均输出电压将为电池电压的50%。
当我们将ON和OFF速度提高到一定水平时,我们将看到LED变暗而不是ON和OFF。这是因为我们的眼睛无法清晰地捕捉到高于25Hz的频率。假设周期为100毫秒,LED熄灭30毫秒,然后点亮70毫秒。我们将在输出端获得70%的稳定电压,因此LED将以70%的强度连续发光。
占空比从0到100。“ 0”表示完全关闭,“ 100”表示完全打开。占空比对于伺服电机非常重要。伺服电机的位置由该占空比确定。在LED和Raspberry Pi上检查此PWM演示。
伺服电机和PWM:
伺服电机是直流电机,位置控制系统和齿轮的组合。Servos在现代世界中具有许多应用,因此,它们具有不同的形状和尺寸。在本教程中,我们将使用SG90伺服电机,它是最受欢迎和最便宜的一种。SG90是180度伺服。因此,使用此伺服器,我们可以将轴定位在0-180度之间。
伺服电机主要有三根线,一根用于正电压,另一根用于接地,最后一根用于位置设置。的红色电线连接到电源,布朗线被连接到地和黄线(或白色)被连接到信号。
在伺服系统中,我们有一个控制系统,该系统从信号引脚获取PWM信号。它解码信号并从中获取占空比。之后,它将比率与预定义的位置值进行比较。如果值存在差异,则会相应调整伺服器的位置。因此,伺服电机的轴位置基于信号引脚上PWM信号的占空比。
PWM(脉冲宽度调制)信号的频率可以根据伺服电机的类型而变化。对于SG90,PWM信号的频率为50Hz。要找出您的伺服器的工作频率,请查看该特定型号的数据表。因此,一旦选择了频率,此处的另一重要事项就是PWM信号的占空比。
下表显示了该特定占空比的伺服位置。通过选择相应的值,您可以在两者之间获得任何角度。因此,对于45º的伺服器,占空比应为“ 5”或5%。
位置 |
税率 |
0度 |
2.5 |
90度 |
7.5 |
180度 |
12.5 |
在将 伺服电机连接到Raspberry Pi之前,您可以借助此伺服电机测试器电路来测试您的伺服器。另请检查我们的以下Servo项目:
- 使用Arduino的伺服电机控制
- 带有Arduino Due的伺服电机控制
- 伺服电机与8051单片机的接口
- 使用MATLAB的伺服电机控制
- 柔性传感器控制伺服电机
- 带重量的伺服位置控制(力传感器)
所需组件:
在这里,我们使用 带有Raspbian Jessie OS的Raspberry Pi 2 ModelB。前面已经讨论了所有基本的硬件和软件要求,您可以在Raspberry Pi简介中查找它,而不需要我们:
- 连接销
- 1000uF电容器
- SG90伺服电机
- 面包板
电路原理图:
必须在+ 5V电源线上连接A1000µF,否则PI在控制伺服器时可能会随机关闭。
工作和编程说明:
一旦按照电路图连接了所有组件,我们就可以打开PI并将程序写入PYHTON中。
我们将讨论将在PYHTON程序中使用的一些命令,
我们将从库中导入GPIO文件,以下功能使我们能够对PI的GPIO引脚进行编程。我们还将“ GPIO”重命名为“ IO”,因此在程序中,每当要引用GPIO引脚时,我们都将使用“ IO”一词。
导入RPi.GPIO作为IO
有时,当我们尝试使用的GPIO引脚可能正在执行其他一些功能时。在这种情况下,我们将在执行程序时收到警告。下面的命令告诉PI忽略警告并继续执行程序。
IO.setwarnings(False)
我们可以通过板上的引脚编号或功能编号来引用PI的GPIO引脚。像板上的“ PIN 29”一样,是“ GPIO5”。因此,我们在这里告诉我们将在此处用“ 29”或“ 5”表示图钉。
IO.setmode(IO.BCM)
我们将PIN39或GPIO19设置为输出引脚。我们将从该引脚获取PWM输出。
IO.setup(19,IO.OUT)
设置输出引脚后,我们需要将该引脚设置为PWM输出引脚,
p = IO.PWM(输出通道,PWM信号频率)
以上命令用于设置通道,也用于设置通道的频率。“ p”是一个变量,可以是任何变量。我们使用GPIO19作为PWM“输出通道。由于SG90的工作频率为50Hz,我们将选择“ PWM信号的频率” 50。
下面的命令用于启动PWM信号生成。“ DUTYCYCLE ”用于设置“打开”比率,如前所述,
p.start(DUTYCYCLE)
下面的命令用作永远循环,使用此命令,该循环内的语句将连续执行。
虽然1:
在这里,使用Raspberry Pi控制伺服的程序在GPIO19处提供PWM信号。PWM信号的占空比在三个值之间变化三秒钟。因此,伺服每秒旋转至由占空比确定的位置。伺服器在三秒钟内连续旋转到0º,90º和180º。