JAVA-PI4J PI4J操控L298N

介绍

 由于树莓派GPIO输出的电压太小,不足以推动电机转动,这是就需要一个驱动板来实现用GPIO对电机的操控。

L298N安装以及注意事项

L298N与树莓派连接
 安装示意图如上(上图没有标记控制端口的位置,根据情况自行确定),注意ENA,ENB位置的GPIO接口需要PWM输出。

注意事项

  • L298N的12V接线是输入,5V是输出,5V的输出不建议作为树莓派的供电,至少在我用的时候,树莓派经常因为电压不稳重启 。
  • 一定要把L298N的地线和树莓派GPIO的地线相连,不然不能驱动电机转动。
  • 使能A和使能B的跳线帽如果不使用PWM控制的话,那就不需要拔掉,如果拔掉的话还没有输入PWM的话,会因为使能为0导致电机不转。

L298N操控

真值表如下
真值表
如图为L298N控制电机的真值表,根据真值表,写出代码如下

import java.util.Scanner;
import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
public class Main {
	static int flag=0;
	static GpioController gpio=null;
	static GpioPinDigitalOutput GPIO_01=null;
	static GpioPinDigitalOutput GPIO_02=null;
	static GpioPinDigitalOutput GPIO_03=null;
	static GpioPinDigitalOutput GPIO_04=null;
	static GpioPinDigitalOutput GPIO_00=null;
	static GpioPinDigitalOutput GPIO_23=null;
	public static void now(int a) {
		if(Main.flag==0){
			gpio = GpioFactory.getInstance();
			GPIO_01= gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, "ENA", PinState.HIGH);//如果跳线帽没有拔掉可以删除此行
			GPIO_00 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_00, "IN_1", PinState.LOW);
			GPIO_02 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_02, "IN_2", PinState.LOW);
			GPIO_03 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_03, "IN_3", PinState.LOW);
			GPIO_04 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_04, "IN_4", PinState.LOW);
			GPIO_23 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_23, "ENB", PinState.HIGH);//如果跳线帽没有拔掉可以删除此行
			Main.flag=1;
		}
		switch(a) {
		case 1:GPIO_03.setState(PinState.HIGH);GPIO_04.setState(PinState.LOW);break;
		case 2:GPIO_03.setState(PinState.LOW);GPIO_04.setState(PinState.HIGH);break;
		case 3:GPIO_00.setState(PinState.HIGH);GPIO_02.setState(PinState.LOW);break;
		case 4:GPIO_00.setState(PinState.LOW);GPIO_02.setState(PinState.HIGH);break;
		case 5:GPIO_00.setState(PinState.LOW);GPIO_02.setState(PinState.LOW);GPIO_03.setState(PinState.LOW);GPIO_04.setState(PinState.LOW);break;
		}
	}
	public static void main(String[] args) {
		System.out.println("begin");
		Scanner input=new Scanner(System.in);
		while(true) {
			int a=input.nextInt();
			Main.now(a);
		}
	}
}

PWM操控L298N

如果想用操控马达转速,只需要将使能A B接口接入GPIO,再把输出调整成PWM就可以了。

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.GpioPinPwmOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;
import com.pi4j.wiringpi.Gpio;
import com.pi4j.wiringpi.SoftPwm;
import java.util.Scanner;
public class Main {
	static int flag=0;
	static GpioController gpio=null;
	static GpioPinDigitalOutput GPIO_02=null;
	static GpioPinDigitalOutput GPIO_03=null;
	static GpioPinDigitalOutput GPIO_04=null;
	static GpioPinDigitalOutput GPIO_00=null;
	
	static GpioPinPwmOutput GPIO_01=null;//ENA
	static GpioPinPwmOutput GPIO_23=null;//ENB
	public static void now(int a) {
		if(Main.flag==0){
			gpio = GpioFactory.getInstance();
		 	Gpio.wiringPiSetup();
		 	SoftPwm.softPwmCreate(1, 50,100);//引脚位置,引脚设定初始值,引脚最大值
		 	SoftPwm.softPwmCreate(23,50,100);//引脚位置,引脚设定初始值,引脚最大值
			GPIO_00 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_00, "IN_1", PinState.LOW);
			GPIO_02 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_02, "IN_2", PinState.LOW);
			GPIO_03 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_03, "IN_3", PinState.LOW);
			GPIO_04 = gpio.provisionDigitalOutputPin(RaspiPin.GPIO_04, "IN_4", PinState.LOW);
			flag=1;
		}
		switch(a) {
		case 1:GPIO_03.setState(PinState.HIGH);GPIO_04.setState(PinState.LOW);break;
		case 2:GPIO_03.setState(PinState.LOW);GPIO_04.setState(PinState.HIGH);break;
		case 3:GPIO_00.setState(PinState.HIGH);GPIO_02.setState(PinState.LOW);break;
		case 4:GPIO_00.setState(PinState.LOW);GPIO_02.setState(PinState.HIGH);break;
		case 5:SoftPwm.softPwmWrite(1, 30);SoftPwm.softPwmWrite(23, 30);break;//把使能A B设定为30%
		case 6:SoftPwm.softPwmWrite(1, 60);SoftPwm.softPwmWrite(23, 60);break;//把使能A B设定为60%
		case 7:SoftPwm.softPwmWrite(1, 90);SoftPwm.softPwmWrite(23, 90);break;//把使能A B设定为90%
		case 8:GPIO_00.setState(PinState.LOW);GPIO_02.setState(PinState.LOW);GPIO_03.setState(PinState.LOW);GPIO_04.setState(PinState.LOW);break;//关闭所有接口
		}
	}
	public static void main(String[] args) {
		System.out.println("begin");
		Scanner input=new Scanner(System.in);
		while(true) {
			int a=input.nextInt();
			Main.now(a);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值