通过nodejs(pi-gpio)+树莓派的GPIO接口控制L298N芯片驱动电机模块
接上一篇文章:nodejs(pi-gpio)控制树莓派GPIO引脚,本文也可称之为《nodejs(pi-gpio)控制树莓派GPIO引脚(二)》。
一、L298N驱动版概要
原理图如下:
可见,驱动板上有4个输入口:IN1~IN4,并且我们还要关心电源接口(VCC、GND)接口(5V)以及两个电机的接口。
根据查阅L298N的相关文档,它的模块接口定义如下:
IN1-IN4:
逻辑输入端,其中IN1、IN2控制电机M1;IN3、IN4控制电机M2。例如IN1输入高电平1,IN2输入低电平0,对应电机M1正转;IN1输入低电平0,IN2输入高电平1,对应电机M1反转,调速就是改变高电平的占空比。
ENA、B:
L298N使能端(高电平有效,常态下用跳线帽接于VCC),可通过这两个端口实现PWM调速(使用PWM调速时取下跳线帽),具体参考L298N芯片手册。
VCC/GND:
L298N自身芯片供电,需要从外部接进5V电源(最好取逻辑部分的电压供电).
VIN/GND:
电机供电电源接口,如果电机采用9V供电,那么电源正极接VIN,负极接GND即可。
M1:
电机1接口,没有正负之分,如果发现电机转向不对将电机两线调换即可。
M2:
电机2接口,没有正负之分,如果发现电机转向不对将电机两线调换即可。
二、连线,将各模块组装起来
1、根据上一篇文章中的GPIO引脚分布图,将树莓派的GPIO 11,12,15,16 口分别分配给L298N的IN1-IN4。
2、将树莓派的GPIO 2 口5V电源分配给L298N的VCC。
三、初始化
var gpio = require('pi-gpio'); //引用pi-gpio库
var pins = [11, 12, 15, 16]; //引脚号列表
var flag = 0;
//依次打开GPIO引脚
pins.forEach(function(pin){
gpio.open(pin, 'out', function(){
flag += 1;
});
});
//轮询来确定四个引脚有没有全部打开
var t = setInterval(function(){
if(flag == 4){ //全部打开完了
//初始化完毕
clearInterval(t);
}
}, 10);
四、启动电机(暂没有给完代码)
假设用0代表低电平,1代表高电平的话,M1电机代表左车轮,M2电机代表右车轮;
//GPIO 11,12,15,16 口各方向电平列表
var direction = {
"up":[1,0,1,0],
"down":[0,1,0,1],
"left":[0,0,1,0],
"right":[1,0,0,0]
}
//用以下方法给各引脚写入以上direction中各方向指定的电平值
gpio.write(pins[0], 1, function(){
});
五、停止电机
gpio.close(pins[0]);
gpio.close(pins[1]);
gpio.close(pins[2]);
gpio.close(pins[3]);
等测试OK,再放出完整代码!