电子月 发表于 2019-10-22 09:31:22

玩转树莓派—树莓派 3 + L298N模块控制直流电机

本文主要讲如何控制直流电机,这样就可以做小车等可以运动的项目,可玩性更高。
一、硬件介绍直流电机控制主要用到的硬件为:1、烧写好系统的树莓派控制板·········1块2、L298N电机驱动板模块···············1个3、直流电机·································2个4、外接电源·································1个5、杜邦线···································若干注:由于树莓派自身没有电机驱动模块,因此控制电机时要配合L298N电机驱动板模块,一起来使用。http://bbs.elecfans.com/data/attachment/forum/201910/21/120208fcr513h69195hx9w.png.thumb.jpg
二、硬件连接连接原理图:http://bbs.elecfans.com/data/attachment/forum/201910/21/120242i66jeiex2dx48jeo.png.thumb.jpg
连接实物图:http://bbs.elecfans.com/data/attachment/forum/201910/21/120330gzjnnjztts1stizj.png.thumb.jpg
三、程序启动电机转1、硬件按照上述连接好后,将树莓派上电,使用SSH远程连接树莓派http://bbs.elecfans.com/data/attachment/forum/201910/21/120413zzuqu6a8b6dnvwb1.png.thumb.jpg
2、输入nano motor.py,创建一个名为motor的python文件http://bbs.elecfans.com/data/attachment/forum/201910/21/134057a0oofhifyf4fusid.png.thumb.jpg
http://bbs.elecfans.com/data/attachment/forum/201910/21/134137jefunkn07fblzk4k.png.thumb.jpg
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接口来实现电机的运动http://bbs.elecfans.com/data/attachment/forum/201910/21/134253qxy0618jrhrhsw06.png.thumb.jpg
4、保存退出编辑界面,直行程序,会看到两电机开始转动

[*]sudo python motor.py<span style="background-color: transparent;"> </span>

复制代码
四、控制电机转速
单片机或树莓派一般使用L298n 模块来驱动电机 。L298N的实物图如下http://bbs.elecfans.com/data/attachment/forum/201910/21/134427odr46z7d3x37q41x.png.thumb.jpg
电源引脚
12V power:L298n 的电源正极,尽管标的 12V,但你可以使用 7V ~ 35V 的电源。
GND:L298n 的电源地,树莓派的 GND 引脚也要接到这里,即 L298N 和 树莓派需要共地。
5V power:L298n 输出的 5v 电源,是用来给单片机或树莓派供电的。如果你的树莓派是单独供电,那么这个引脚悬空。
输出引脚
Output 的两个引脚接直流电机的两脚,而板上有 Output A 和 Output B,分别驱动电机 A 和电机 B。
控制引脚A Enable :电机 A 使能,接 GPIO 口 。可以用PWM 来调速。
Logic Input :接 4 个 GPIO 口。 上面两个脚 Input1 、Input2 (靠近 A Enable )控制电机 A ; 下面两个脚 Input3、Input4 (靠近 B Enable)控制电机 B。
B Enable : 电机 B 使能,接 GPIO 口。 可以用 PWM 来调速。
总结一下就是 A Enable 、Input1、Input2 控制电机 A 的运行,B Enable、Input3、Input4 控制电机 B 的运行。
如何控制的呢? 下面是对电机 A 进行控制的真值表,电机 B 同理。

https://upload-images.jianshu.io/upload_images/137307-4aa63e211c21deae.png?imageMogr2/auto-orient/strip|imageView2/2/w/1062/format/webp

下面是控制电机A的电路图:http://bbs.elecfans.com/data/attachment/forum/201910/21/134716l8ubpt7z44mtm679.png.thumb.jpg
把 L289N 的直流电源接好,然后把树莓派的 GND 与 L298N 的 GND 连在一起,因为共地后 L298N 才能识别树莓派发送的 IN1、IN2 到底是高电平还是低电平。   
树莓派的 2、3、4 脚分别连到 A Enable、IN1 、IN2 。(把 Enable 上的短接帽拿掉)
由控制表可知给 2 脚高电平,3 脚高电平,4 脚低电平,电机就会正转。
1、接线原理图:http://bbs.elecfans.com/data/attachment/forum/201910/21/134806un9l9hryhy7i8ylh.png.thumb.jpg
将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
[*]

复制代码












azi1974 发表于 2020-5-27 09:50:15

挺不错的程序
页: [1]
查看完整版本: 玩转树莓派—树莓派 3 + L298N模块控制直流电机

Baidu
map