极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21787|回复: 14

arduino怎样才能使L298上的电机驱动

[复制链接]
发表于 2012-10-6 13:50:08 | 显示全部楼层 |阅读模式
本帖最后由 at97 于 2012-10-6 13:54 编辑

由于本人是新手,刚买回来ARDUINO 和L298板。不知道怎么接线,怎么去驱动电机。希望你们多多帮忙。最好有代码一起来说说。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-10-6 15:23:47 | 显示全部楼层
本帖最后由 nengcai0313 于 2012-10-6 15:34 编辑

你最好拿个L298N的手册看下,很简单的,电机接电机,电源接电源,输入接输入。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-6 16:26:05 | 显示全部楼层
nengcai0313 发表于 2012-10-6 15:23
你最好拿个L298N的手册看下,很简单的,电机接电机,电源接电源,输入接输入。

我按这图来接,但是连接后把代码放进去不行,不知那怎么写

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-6 16:27:50 | 显示全部楼层
代码是这样
//motorA
int dir1Pina=2;
int dir2Pina=3;
int speedPina=9;
//motorB
int dir1PinB=4;
int dir2PinB=5;
int speedPinA=9;
unsigned long time;
int speed;
int dir;
void setup(){
pinMode(dir1PinA,OUTPUT);
  pinMode(dir2PinA,OUTPUT);
  pinMode(speedPinA,OUTPUT);
   pinMode(dir1PinB,OUTPUT);
  pinMode(dir2PinB,OUTPUT);
   pinMode(speedPinB,OUTPUT);
   time=millis();
   speed=0;
   dir=1;
}
void loop(){
  analogWrite(speedPinA,speed);
  analogWrite(speedPinb,255-speed);
  // set direction
it(1==dir){
  digitalWrite(dir1PinA.LOW);
  digitalWrite(dir2PinA.HIGH);
digitalWrite(dir1PinB.HIGH);
digitalWrite(dir2PinB.LOW);
}else{
   digitalWrite(dir1PinA.HIGH);
   digitalWrite(dir2PinA.LOW);
   digitalWrite(dir1PinB.LOW);
   digitalWrite(dir2PinA.HIGH);
}
if(millis()-time>5000) {      这里出错,不知道怎么改???
time=millis();
speed +=20;
if(speed>255){
   speed=0;
}
   if(1==dir){
     dir=0;
   }else{
       dir=1;
     }
   }
}
回复 支持 反对

使用道具 举报

发表于 2012-10-6 17:04:49 | 显示全部楼层
at97 发表于 2012-10-6 16:27
代码是这样
//motorA
int dir1Pina=2;

你代码打错了把 ‘ int speedPinA=9;
’这句           




//motor B
int dir1PinB =4;
int dir2PinB =5;
int speedPinB=10;
unsigned long time;
int speed ;
int dir;
void setup(){
pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);
pinMode(dir1PinB,OUTPUT);
pinMode(dir2PinB,OUTPUT);
pinMode(speedPinB,OUTPUT);
time = millis();
speed =0;
dir =1;
}
  void loop(){
  analogWrite(speedPinA,speed);
analogWrite(speedPinB,255-speed);
//set direction
if (1 == dir) {
digitalWrite(dir1PinA,LOW);
digitalWrite(dir2PinA,HIGH);
digitalWrite(dir1PinB,HIGH);
digitalWrite(dir2PinB,LOW);
} else{
  digitalWrite(dir1PinA,HIGH);
digitalWrite(dir2PinA,LOW);
digitalWrite(dir1PinB,LOW);
digitalWrite(dir2PinB,HIGH);
}
if (millis() - time > 5000){
  time = millis();
  speed += 20;
  if (speed>255){
      speed=0;
   }
  if (1 ==dir){
  dir=0;
   }else {
    dir = 1;
   }
  }
}

回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-6 17:16:18 | 显示全部楼层
小猪会轮滑 发表于 2012-10-6 17:04
你代码打错了把 ‘ int speedPinA=9;
’这句           

我打错了,现在这个是修改黑马的
// motor A
int dir1PinA = 2;
int dir2PinA = 3;
int speedPinA = 9;

// motor B
// motor A
int dir1PinB = 4;
int dir2PinB = 5;
int speedPinB = 10;

unsigned long time;
int speed;
int dir;

void setup() {
  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
  pinMode(speedPinA, OUTPUT);
  pinMode(dir1PinB, OUTPUT);
  pinMode(dir2PinB, OUTPUT);
  pinMode(speedPinB, OUTPUT);

  time = millis();
  speed = 0;
  dir = 1;
}

void loop() {
  analogWrite(speedPinA, speed);
  analogWrite(speedPinB, 255 - speed);
  // set direction
  if (1 == dir) {
    digitalWrite(dir1PinA, LOW);
    digitalWrite(dir2PinA, HIGH);
    digitalWrite(dir1PinB, HIGH);
    digitalWrite(dir2PinB, LOW);
  } else {
    digitalWrite(dir1PinA, HIGH);
    digitalWrite(dir2PinA, LOW);
    digitalWrite(dir1PinB, LOW);
    digitalWrite(dir2PinB, HIGH);
  }
  if (millis() - time > 5000)  {
    time = millis();
    speed += 20;
    if (speed > 255) {
      speed = 0;
    }
    if (1 == dir) {
      dir = 0;
    } else {
      dir =1;
    }
  }
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-6 17:17:09 | 显示全部楼层
上面的代码那个是控制电机转动的和转动的时间,能说说吗
回复 支持 反对

使用道具 举报

发表于 2012-10-6 18:15:41 | 显示全部楼层
(1 == dir) {
    digitalWrite(dir1PinA, LOW);
    digitalWrite(dir2PinA, HIGH);
    digitalWrite(dir1PinB, HIGH);
    digitalWrite(dir2PinB, LOW);
  } else {
    digitalWrite(dir1PinA, HIGH);
    digitalWrite(dir2PinA, LOW);
    digitalWrite(dir1PinB, LOW);
    digitalWrite(dir2PinB, HIGH);
这是让电机转动      。



if (millis() - time > 5000)  {
    time = millis();
    speed += 20;
    if (speed > 255) {
      speed = 0;
    }
    if (1 == dir) {
      dir = 0;
    } else {
      dir =1;
速度控制  



你试试下面这个最简单的     

int  amotorl = 2 ;
int  amotorr = 3 ;
int  bmotorl = 4;
int  bmotorr = 5 ;

void setup()
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);

}

void loop()
{


  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  digitalWrite(4,LOW);  
  digitalWrite(5,HIGH);



}




回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-6 19:55:35 | 显示全部楼层
小猪会轮滑 发表于 2012-10-6 18:15
(1 == dir) {
    digitalWrite(dir1PinA, LOW);
    digitalWrite(dir2PinA, HIGH);


int  amotorl = 2 ;
int  amotorr = 3 ;
int  bmotorl = 4;
int  bmotorr = 5 ;

void setup()
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);

}

void loop()
{


  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  digitalWrite(4,LOW);  
  digitalWrite(5,HIGH);



}
这个试了一下,灯亮了,但电机没动.
回复 支持 反对

使用道具 举报

发表于 2012-10-6 20:11:39 | 显示全部楼层
at97 发表于 2012-10-6 19:55
int  amotorl = 2 ;
int  amotorr = 3 ;
int  bmotorl = 4;

电机驱动板加电源了吗?看清插线你把 2 、3 插 ena  in1 把 4、5插 enb in2  
回复 支持 反对

使用道具 举报

发表于 2012-10-6 20:50:21 | 显示全部楼层
小猪会轮滑 发表于 2012-10-6 20:11
电机驱动板加电源了吗?看清插线你把 2 、3 插 ena  in1 把 4、5插 enb in2

电源要分开接哦。不要接一下一起,不然干扰有时候会造成驱动不了的可能都有!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-6 21:11:01 | 显示全部楼层
电机驱动板没加电源,只按上面的图连线,IN1对2、IN2对3、IN3对4、IN4对5.ENA对9,ENB对10.
回复 支持 反对

使用道具 举报

发表于 2012-10-6 22:49:38 | 显示全部楼层
hh哈哈 来学习了,楼主还是多去看看步进的一些资料吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-7 01:59:33 | 显示全部楼层
Randy 发表于 2012-10-6 20:50
电源要分开接哦。不要接一下一起,不然干扰有时候会造成驱动不了的可能都有!


// motor A
int dir1PinA = 2;
int dir2PinA = 3;
int speedPinA = 9;

// motor B
// motor A
int dir1PinB = 4;
int dir2PinB = 5;
int speedPinB = 10;

unsigned long time;
int speed;
int dir;

void setup() {
  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
  pinMode(speedPinA, OUTPUT);
  pinMode(dir1PinB, OUTPUT);
  pinMode(dir2PinB, OUTPUT);
  pinMode(speedPinB, OUTPUT);

  time = millis();
  speed = 0;
  dir = 1;
}

void loop() {
  analogWrite(speedPinA, speed);
  analogWrite(speedPinB, 255 - speed);
  // set direction
  if (1 == dir) {
    digitalWrite(dir1PinA, LOW);
    digitalWrite(dir2PinA, HIGH);
    digitalWrite(dir1PinB, HIGH);
    digitalWrite(dir2PinB, LOW);
  } else {
    digitalWrite(dir1PinA, HIGH);
    digitalWrite(dir2PinA, LOW);
    digitalWrite(dir1PinB, LOW);
    digitalWrite(dir2PinB, HIGH);
  }
  if (millis() - time > 5000)  {
    time = millis();
    speed += 20;
    if (speed > 255) {
      speed = 0;
    }
    if (1 == dir) {
      dir = 0;
    } else {
      dir =1;
    }
  }
}
这个代码正确的,我也没接错线,RANDY说得对,分开接电源就行了。谢谢各位的帮忙。
回复 支持 反对

使用道具 举报

发表于 2012-10-7 08:05:50 | 显示全部楼层
at97 发表于 2012-10-7 01:59
// motor A
int dir1PinA = 2;
int dir2PinA = 3;

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-28 17:33 , Processed in 0.045438 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表