【树莓派】在树莓派使用Python控制L9110电机转动的详细教程
2024-01-07 20:32:33
引言
??树莓派是一款小巧、低成本且功能强大的单板计算机,它的广泛应用使得它成为了物联网和嵌入式系统开发的理想选择。在这篇博客中,我将向大家介绍如何使用树莓派和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 = gpioPinIa
self._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引脚,否则:每次代码运行时否会给出警告说引脚应该被设置过,其次据说还会对树莓派造成损伤;
@staticmethod
def close():
"""
释放所有已经使用过的GPIO
:return:
"""
GPIO.cleanup()
- 现在可以使用Motor类来控制电机了。下面是一个简单的示例代码,演示如何使用Motor类来控制电机的正转、反转和停止:
import time
from Motor import Motor
def testMotor():
# 设置电机引脚 并且实例化
gpioPinIa, gpioPinIb = 12, 16
motor = 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 = gpioPinIa
self._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)
@staticmethod
def close():
"""
释放所有已经使用过的GPIO
:return:
"""
GPIO.cleanup()
文章来源:https://blog.csdn.net/qq_53960242/article/details/131442555
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!