at97 发表于 2012-10-6 13:50:08

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

本帖最后由 at97 于 2012-10-6 13:54 编辑

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

nengcai0313 发表于 2012-10-6 15:23:47

本帖最后由 nengcai0313 于 2012-10-6 15:34 编辑

你最好拿个L298N的手册看下,很简单的,电机接电机,电源接电源,输入接输入。

at97 发表于 2012-10-6 16:26:05

nengcai0313 发表于 2012-10-6 15:23 static/image/common/back.gif
你最好拿个L298N的手册看下,很简单的,电机接电机,电源接电源,输入接输入。

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

at97 发表于 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 static/image/common/back.gif
代码是这样
//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;
   }
}
}

at97 发表于 2012-10-6 17:16:18

小猪会轮滑 发表于 2012-10-6 17:04 static/image/common/back.gif
你代码打错了把 ‘ 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;
    }
}
}

at97 发表于 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;
速度控制



你试试下面这个最简单的   

intamotorl = 2 ;
intamotorr = 3 ;
intbmotorl = 4;
intbmotorr = 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);



}




at97 发表于 2012-10-6 19:55:35

小猪会轮滑 发表于 2012-10-6 18:15 static/image/common/back.gif
(1 == dir) {
    digitalWrite(dir1PinA, LOW);
    digitalWrite(dir2PinA, HIGH);



intamotorl = 2 ;
intamotorr = 3 ;
intbmotorl = 4;
intbmotorr = 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 static/image/common/back.gif
intamotorl = 2 ;
intamotorr = 3 ;
intbmotorl = 4;


电机驱动板加电源了吗?看清插线你把 2 、3 插 enain1 把 4、5插 enb in2

Randy 发表于 2012-10-6 20:50:21

小猪会轮滑 发表于 2012-10-6 20:11 static/image/common/back.gif
电机驱动板加电源了吗?看清插线你把 2 、3 插 enain1 把 4、5插 enb in2

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

at97 发表于 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哈哈 来学习了,楼主还是多去看看步进的一些资料吧

at97 发表于 2012-10-7 01:59:33

Randy 发表于 2012-10-6 20:50 static/image/common/back.gif
电源要分开接哦。不要接一下一起,不然干扰有时候会造成驱动不了的可能都有!

// 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说得对,分开接电源就行了。谢谢各位的帮忙。

Randy 发表于 2012-10-7 08:05:50

at97 发表于 2012-10-7 01:59 static/image/common/back.gif
// motor A
int dir1PinA = 2;
int dir2PinA = 3;


:lol:victory:
页: [1]
查看完整版本: arduino怎样才能使L298上的电机驱动