零基础玩转树莓派(五)—控制直流电机

前面教程学会如何使用树莓派来控制LED灯,接下来主要讲如何控制直流电机,这样就可以做小车等可以运动的项目,可玩性更高。

一、硬件介绍

直流电机控制主要用到的硬件为:
1、烧写好系统的树莓派控制板·········1块
2、L298N电机驱动板模块···············1个
3、直流电机·································2个
4、外接电源·································1个
5、杜邦线···································若干
注:由于树莓派自身没有电机驱动模块,因此控制电机时要配合L298N电机驱动板模块,一起来使用。
在这里插入图片描述

二、硬件连接

连接原理图:
在这里插入图片描述
连接实物图:
在这里插入图片描述

三、程序启动电机转

1、硬件按照上述连接好后,将树莓派上电,使用SSH远程连接树莓派
在这里插入图片描述
2、输入nano motor.py,创建一个名为motor的python文件

nano motor.py

在这里插入图片描述
3、文件编辑界面输入以下内容:注意#后面为注释(# – coding: utf-8 – 除外),不参与程序运行,可以省略


# -*- coding: utf-8 -*-                 #通过声明可以在程序中书写中文
import RPi.GPIO as GPIO                 #引入RPi.GPIO库函数命名为GPIO
import time                             #引入计时time函数

# BOARD编号方式,基于插座引脚编号
GPIO.setmode(GPIO.BOARD)                #将GPIO编程方式设置为BOARD模式

#接口定义
INT1 = 11                               #将L298 INT1口连接到树莓派Pin11
INT2 = 12                               #将L298 INT2口连接到树莓派Pin12
INT3 = 13                               #将L298 INT3口连接到树莓派Pin13
INT4 = 15                               #将L298 INT4口连接到树莓派Pin15

#输出模式
GPIO.setup(INT1,GPIO.OUT)
GPIO.setup(INT2,GPIO.OUT)
GPIO.setup(INT3,GPIO.OUT)
GPIO.setup(INT4,GPIO.OUT)

GPIO.output(INT1,GPIO.HIGH)
GPIO.output(INT2,GPIO.LOW)
GPIO.output(INT3,GPIO.HIGH)
GPIO.output(INT4,GPIO.LOW)

程序主要通过控制电机驱动模块INT1-4接口来实现电机的运动
在这里插入图片描述
4、保存退出编辑界面,直行程序,会看到两电机开始转动

sudo python motor.py

四、控制电机转速

树莓派3B+的PWM控制可以参考一下文档:https://www.jianshu.com/p/775b4fb2c98d 。此处直接使用相关知识。
1、接线原理图
在这里插入图片描述
将L298的ENA与ENB分别接到树莓派的Pin16,Pin18接口。ENA与ENB分别为左右电机的使能接口,通过树莓派PWM输出,可以用来控制电机转速。(注:连接时需要将ENA、ENB上的跳帽拔掉)
2、连接成功后,打开motor.py文件

nano motor.py

修改文件如下

# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)

INT1 = 11
INT2 = 12
INT3 = 13
INT4 = 15
ENA = 16
ENB = 18

GPIO.setup(INT1,GPIO.OUT)
GPIO.setup(INT2,GPIO.OUT)
GPIO.setup(INT3,GPIO.OUT)
GPIO.setup(INT4,GPIO.OUT)
GPIO.setup(ENA,GPIO.OUT)
GPIO.setup(ENB,GPIO.OUT)

pwma = GPIO.PWM(16,80)
pwmb = GPIO.PWM(18,80)
pwma.start(90)
pwmb.start(90)
GPIO.output(INT1,GPIO.HIGH)
GPIO.output(INT2,GPIO.LOW)
GPIO.output(INT3,GPIO.HIGH)
GPIO.output(INT4,GPIO.LOW)

while 1:
        pwma.ChangeDutyCycle(90)
        pwmb.ChangeDutyCycle(90)
        time.sleep(3)
        pwma.ChangeDutyCycle(10)
        pwmb.ChangeDutyCycle(10)
        time.sleep(3)

3、保存退出文件并且执行程序,会看到两电机快转3秒,慢转3秒依次循环

sudo python motor.py
### 使用树莓派5控制直流电机的驱动方法 #### 连接硬件组件 为了安全有效地操作直流电机,建议使用专用的电机驱动模块作为树莓派与电机间的中介设备。具体来说,应将直流电机的正负极接入驱动模块对应的端口,并把该模块上的信号线接到树莓派的GPIO引脚上[^1]。 #### 编写Python代码实现基本运动控制 下面给出一段简单的Python示例代码用于启动/停止电机: ```python import RPi.GPIO as GPIO from time import sleep # 设置使用的BCM编号模式 GPIO.setmode(GPIO.BCM) # 定义IN1, IN2为输出针脚并初始化状态 motor_in1 = 17 motor_in2 = 18 GPIO.setup(motor_in1, GPIO.OUT) GPIO.setup(motor_in2, GPIO.OUT) def forward(): """使电机向前转动""" GPIO.output(motor_in1, True) GPIO.output(motor_in2, False) def backward(): """让电机向后反转""" GPIO.output(motor_in1, False) GPIO.output(motor_in2, True) try: while True: print("前进...") forward() sleep(2) # 延迟两秒 print("后退...") backward() sleep(2) finally: GPIO.cleanup() # 清理释放资源 ``` 这段代码展示了如何利用树莓派的GPIO接口发送高低电平指令给L298N这样的双H桥驱动芯片来改变电机的方向[^2]。 #### 调节电机的速度-PWM技术的应用 对于需要调整电机运转速率的情况,可以通过脉宽调制(PWM)方式完成。这涉及到设置特定频率下的占空比参数,从而达到调节电压的效果,最终影响到电机的实际工作速度。这里提供了一个基于Raspberry Pi PWM库的例子: ```python import RPi.GPIO as GPIO from time import sleep pin_pwm = 12 frequency_hz = 50 # Hz duty_cycle_percent = 50 # % GPIO.setmode(GPIO.BCM) GPIO.setup(pin_pwm, GPIO.OUT) pwm = GPIO.PWM(pin_pwm, frequency_hz) pwm.start(duty_cycle_percent / 100.) sleep(5) # 让电机按照设定的速度运行秒钟 pwm.stop() GPIO.cleanup() ``` 上述实例中`duty_cycle_percent`变量决定了PWM波形中的高电平时长比例,进而间接设定了供给电机的有效平均电压大小[^4]。
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值