【L298N驱动模块学习笔记】——L298N驱动模块驱动直流电机Arduino和OpenMV都有

很常用的L298N驱动模块驱动直流电机,Arduino和OpenMV连接方式,代码都有哦,求赞!!

可以控制两个电机,控制很简单的

输出A 输出B 分别接两个直流电机。

12V供电 这个是外部电源为驱动板供电的接口,一般驱动电压实际可以接受的输入范围是7~12V,此时可以使能板载的5V逻辑供电。当使用大于12V的驱动电压时,为了避免稳压芯片损坏,首先要拔掉板载5V输出使能的跳线帽,然后在5V输出端口外部接入5V电压对L298N内部逻辑供电。

5V供电 (引出5V电压接到Arduino板,给Arduino板供电(驱动电压7~12V)连接到UNO板的5V)同时Arduino板也要引出一条GND线,连接到L298N的GND与外部电源共地。

ENA ENB通道A使能,通道B使能,当你不用PWM时不需要拔掉跳线帽,当你需要PWM时,将需要拔掉跳线帽,接到arduino上的模拟输入输出接口,我的只需要外侧接上,下面回介绍。

IN1 IN2 IN3 IN4逻辑输出口,其中IN1 IN2 控制一个电机的转动,IN3 IN4 控制另一个电机的转动,只要一个置高 一个置低,就可以让电机转动起来。

直流电机——直流电机的转速和电压成正比。

 

PWM就是改变占空比改变电压来改变转速

 

不使用PWM输入的测试代码,这时把跳线帽插上,为了方便,我引出两条线直接短接就行

下面是代码:尽量简单吧,会前进,左转后退停止动动手改改就行

 //测试电机,让两个电机直走
int input1 = 2; // 定义uno的pin 2 向 input1 输出 
int input2 = 4; // 定义uno的pin 4 向 input2 输出
int input3 =7;  // 定义uno的pin 7 向 input3 输出
int input4 =8;  // 定义uno的pin 8 向 input4 输出
 
void setup() {
Serial.begin (9600);
//初始化各IO,模式为OUTPUT 输出模式
pinMode(input1,OUTPUT);
pinMode(input2,OUTPUT);
pinMode(input3,OUTPUT);
pinMode(input4,OUTPUT);
 
}
 
void loop() {

  //forward 前进
  digitalWrite(input1,HIGH); //给高电平
  digitalWrite(input2,LOW);  //给低电平
  digitalWrite(input3,HIGH); //给高电平
  digitalWrite(input4,LOW);  //给低电平
  delay(3000);   //延时1秒
  
}

 以下是PWM调速的小车,速度从快到慢!接线端口是外侧那个!我的是这样!

 //测试电机,让两个电机直走
int input1 = 2; // 定义uno的pin 2 向 input1 输出 
int input2 = 4; // 定义uno的pin 4 向 input2 输出
int input3 =12;  // 定义uno的pin 7 向 input3 输出
int input4 =13;  // 定义uno的pin 8 向 input4 输出
 
//PWM
int ENA1=5;  //电机A使能PWM输出,需要接在Arduino上有~标识的IO口,才有PWM
int ENB1=6;  //电机A使能PWM输出

 
void setup() {
Serial.begin (9600);
//初始化各IO,模式为OUTPUT 输出模式
pinMode(input1,OUTPUT);
pinMode(input2,OUTPUT);
pinMode(input3,OUTPUT);
pinMode(input4,OUTPUT);
 
}
 
//测试函数
void text() {

  //forward 前进
  digitalWrite(input1,HIGH); //给高电平
  digitalWrite(input2,LOW);  //给低电平
  digitalWrite(input3,HIGH); //给高电平
  digitalWrite(input4,LOW);  //给低电平
 // delay(3000);   //延时1秒
  
}


void loop()
{
  text();//测试电机,给个提示
  delay(2000);
while(1){
   for(int PWM=255;PWM>100;PWM--)
   {
    Serial.println(PWM);
    analogWrite(ENA1,PWM);
    analogWrite(ENB1,PWM);
    digitalWrite(input1,HIGH);
    digitalWrite(input2,LOW);
    digitalWrite(input3,HIGH);
    digitalWrite(input4,LOW);
    delay(50);//延时,速度变化的快慢,PWM变化速度

  }
  for(int PWM=100;PWM<255;PWM++)
  {
    Serial.println(PWM);
    analogWrite(ENA1,PWM);
    analogWrite(ENB1,PWM);
    digitalWrite(input1,HIGH);
    digitalWrite(input2,LOW);
    digitalWrite(input3,HIGH);
    digitalWrite(input4,LOW);
    delay(50);

  }
 }
//delay(3000);  //延时0.5秒
}

 

现在尝试用OpenMV来连接这个东西。

那么需要用到openMV的pwm IO口和拉高拉低操作,需要6个端口,P0-P1和P7-8(pwm) P9也行。

原理其实一样的,连线方式:

P0-P3连接逻辑输入口

PWM的P7-9选两个连接通道使能AB

代码:

# Untitled - By: Acer - 周日 9月 16 2018
from pyb import Pin, Timer
import time,math,random
inverse_left=False  #change it to True to inverse left wheel
inverse_right=False #change it to True to inverse right wheel

ain1 =  Pin('P0', Pin.OUT_PP)#a电机引脚
ain2 =  Pin('P1', Pin.OUT_PP)#
bin1 =  Pin('P2', Pin.OUT_PP)#电机引脚
bin2 =  Pin('P3', Pin.OUT_PP)
ain1.low()#低电平初始化
ain2.low()
bin1.low()
bin2.low()

pwma = Pin('P7')#产生PWMd引脚
pwmb = Pin('P8')#产生PWM
tim = Timer(4, freq=1000)
ch1 = tim.channel(1, Timer.PWM, pin=pwma)
ch2 = tim.channel(2, Timer.PWM, pin=pwmb)
ch1.pulse_width_percent(0)#设置占空比为零
ch2.pulse_width_percent(0)



speed=50
lowspeed=30

x_range=20
h_range=50




def run(left_speed, right_speed):
    if inverse_left==True:
        left_speed=(-left_speed)
    if inverse_right==True:
        right_speed=(-right_speed)
    if left_speed < 0:
        ain1.low()
        ain2.high()
    else:
        ain1.high()
        ain2.low()
    ch1.pulse_width_percent(abs(left_speed))
    if right_speed < 0:
        bin1.low()
        bin2.high()
    else:
        bin1.high()
        bin2.low()
    ch2.pulse_width_percent(abs(right_speed))


while(True):
    run(40,40)#测试前进,速度为40

插播一波,如果感兴趣的童鞋们可以加入技术交流群~

  • 36
    点赞
  • 232
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值