二分之一

Just Jason's Blog

RaspberryPi

通过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,再放出完整代码!

Read more »