文章目录
- 引言
- 准备工作
- L9110电机知识储备
- 特点
- 电机的工作方式
- 实现
- 结论
引言
树莓派是一款小巧、低成本且功能强大的单板计算机,它的广泛应用使得它成为了物联网和嵌入式系统开发的理想选择。在这篇博客中,我将向大家介绍如何使用树莓派和Python来控制L9110电机。L9110电机控制器是一种常用的电机驱动模块,它可以实现电机的正转、反转和停止。
准备工作
在开始之前,我们需要准备以下材料:
- 树莓派(任意型号)
- L9110电机
- 杜邦线
- 电机
L9110电机知识储备
特点
- 低静态工作电流;
- 宽电源电压范围:2.5V-12V;
- 每通道具有800mA连续电流输出能力,具有较低的饱和压降;
- TTL/CMOS输出电平兼容,可直接连CPU;输出内置钳位二极管,适用于感性负载;控制和驱动集成于单片IC之中;
- 具备管脚高压保护功能;
- 工作温度:0℃-80℃;
电机的工作方式
- IA输入高电平,IB输入低电平,【OA1 OB1】电机正转;
- IA输入低电平,IB1输入高电平,【OA1 OB1】电机反转;
(实际上,当我们接上电源后,电机即可转动,不过电流可能不太稳定)
实现
- 树莓派与电机的连接方式;
树莓派 | L9110电机 |
---|---|
VCC | VCC |
GND | GND |
GPIO12 | IA |
GPIO16 | IB |
- 使用
import
引入GPIO库函数,用于控制GPIO的高低电平
import RPi.GPIO as GPIO
- 此处使用Python类的思想来编写代码,也就是说
.py
文件中的模式应该如下:
class name:def __init__(self):……def function1(self):……def function2(self):……
- 在电机类Motor中,初始化时需要设置电机控制引脚的编码格式与引脚编号,如果一开始不想让电机转动还可以将电机引脚IA IB都设置成低电平(待机模式)
def __init__(self, gpioPinIa: int, gpioPinIb: int):"""电机构造函数:param gpioPinIa: 设置L9110芯片IA引脚:param gpioPinIb: 设置L9110芯片IB引脚:return:"""self._gpioPinIa = gpioPinIaself._gpioPinIb = gpioPinIb# 设置编码方式GPIO.setmode(GPIO.BOARD)# 设置GPIO引脚GPIO.setup(self._gpioPinIa, GPIO.OUT)GPIO.setup(self._gpioPinIb, GPIO.OUT)# 将电机设置成待机模式self.setStand()
- 为了提升代码的复用性,这里特意预设一个方法用于设置GPIO引脚的状态,后续直接传递参数即可设置GPIO引脚状态;
def _setGPIO(self, pinIaMod, pinIbMod):"""设置GPIO引脚电压:param pinIaMod::param pinIbMod::return:"""GPIO.output(self._gpioPinIa, pinIaMod)GPIO.output(self._gpioPinIb, pinIbMod)
- 将电机设置成待机状态;
def setStand(self):"""设置电机为待机模式:return:"""# 设置GPIO低电平,实现电机待机self._setGPIO(GPIO.LOW, GPIO.LOW)
- 将电机设置成正转模式
def setForeward(self):"""将电机设置成正转模式:return:"""# 设置GPIO高低电平,实现电机正转self._setGPIO(GPIO.HIGH, GPIO.LOW)
- 将电机设置成反转模式
def setReversal(self):"""将电机设置成反转模式:return:"""# 设置GPIO低高电平,实现电机反转self._setGPIO(GPIO.LOW, GPIO.HIGH)
- 将电机设置成停止状态
def stop(self):"""电机停止工作:return:"""# 设置GPIO高电平,实现电机停止工作self._setGPIO(GPIO.HIGH, GPIO.HIGH)
- 还需要注意:每次使用完成GPIO引脚后需要释放GPIO引脚,否则:每次代码运行时否会给出警告说引脚应该被设置过,其次据说还会对树莓派造成损伤;
@staticmethoddef close():"""释放所有已经使用过的GPIO:return:"""GPIO.cleanup()
- 现在可以使用Motor类来控制电机了。下面是一个简单的示例代码,演示如何使用Motor类来控制电机的正转、反转和停止:
import time
from Motor import Motordef testMotor():# 设置电机引脚 并且实例化gpioPinIa, gpioPinIb = 12, 16motor = Motor(gpioPinIa, gpioPinIb)# 测试for i in range(2):print(1)# 开始正转motor.setForeward()time.sleep(4)print(2)# 开始反转motor.setReversal()time.sleep(4)print(3)# 停止motor.stop()time.sleep(4)motor.close()if __name__ == '__main__':testMotor()
在这个示例中,引入time
库是为了给予延时,如果不给予延时程序的效果就会是: 电机正转、反转、停止 这三个状态几乎同一时间完成,而我们人的肉眼根本无法捕获到三个状态的改变。
在这个示例中,引入print
函数式为了告诉程序员代码运行的进度,以便示例效果与示例代码匹配。
结论
通过这篇博客,我们学习了如何使用树莓派和Python来控制L9110电机。我们编写了一个Motor类,可以方便地控制电机的正转、反转和停止。我们还提供了一个简单的示例代码,演示了如何使用Motor类来控制电机的运行。希望这篇博客能帮助你开始使用树莓派和Python来控制电机。
附:完整代码
class Motor(object):"""电机操作的基类"""def __init__(self, gpioPinIa: int, gpioPinIb: int):"""电机构造函数:param gpioPinIa: 设置L9110芯片IA引脚:param gpioPinIb: 设置L9110芯片IB引脚:return:"""self._gpioPinIa = gpioPinIaself._gpioPinIb = gpioPinIb# 设置编码方式GPIO.setmode(GPIO.BOARD)# 设置GPIO引脚GPIO.setup(self._gpioPinIa, GPIO.OUT)GPIO.setup(self._gpioPinIb, GPIO.OUT)# 将电机设置成待机模式self.setStand()def _setGPIO(self, pinIaMod, pinIbMod):"""设置GPIO引脚电压:param pinIaMod::param pinIbMod::return:"""GPIO.output(self._gpioPinIa, pinIaMod)GPIO.output(self._gpioPinIb, pinIbMod)def setStand(self):"""设置电机为待机模式:return:"""# 设置GPIO低电平,实现电机待机self._setGPIO(GPIO.LOW, GPIO.LOW)def setForeward(self):"""将电机设置成正转模式:return:"""# 设置GPIO高低电平,实现电机正转self._setGPIO(GPIO.HIGH, GPIO.LOW)def setReversal(self):"""将电机设置成反转模式:return:"""# 设置GPIO低高电平,实现电机反转self._setGPIO(GPIO.LOW, GPIO.HIGH)def stop(self):"""电机停止工作:return:"""# 设置GPIO高电平,实现电机停止工作self._setGPIO(GPIO.HIGH, GPIO.HIGH)@staticmethoddef close():"""释放所有已经使用过的GPIO:return:"""GPIO.cleanup()