arduino怎样才能使L298上的电机驱动
本帖最后由 at97 于 2012-10-6 13:54 编辑由于本人是新手,刚买回来ARDUINO 和L298板。不知道怎么接线,怎么去驱动电机。希望你们多多帮忙。最好有代码一起来说说。 本帖最后由 nengcai0313 于 2012-10-6 15:34 编辑
你最好拿个L298N的手册看下,很简单的,电机接电机,电源接电源,输入接输入。 nengcai0313 发表于 2012-10-6 15:23 static/image/common/back.gif
你最好拿个L298N的手册看下,很简单的,电机接电机,电源接电源,输入接输入。
我按这图来接,但是连接后把代码放进去不行,不知那怎么写 代码是这样
//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;
}
}
} 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;
}
}
}
小猪会轮滑 发表于 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;
}
}
} 上面的代码那个是控制电机转动的和转动的时间,能说说吗 (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);
}
小猪会轮滑 发表于 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);
}
这个试了一下,灯亮了,但电机没动. at97 发表于 2012-10-6 19:55 static/image/common/back.gif
intamotorl = 2 ;
intamotorr = 3 ;
intbmotorl = 4;
电机驱动板加电源了吗?看清插线你把 2 、3 插 enain1 把 4、5插 enb in2 小猪会轮滑 发表于 2012-10-6 20:11 static/image/common/back.gif
电机驱动板加电源了吗?看清插线你把 2 、3 插 enain1 把 4、5插 enb in2
电源要分开接哦。不要接一下一起,不然干扰有时候会造成驱动不了的可能都有! 电机驱动板没加电源,只按上面的图连线,IN1对2、IN2对3、IN3对4、IN4对5.ENA对9,ENB对10. hh哈哈 来学习了,楼主还是多去看看步进的一些资料吧 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说得对,分开接电源就行了。谢谢各位的帮忙。 at97 发表于 2012-10-7 01:59 static/image/common/back.gif
// motor A
int dir1PinA = 2;
int dir2PinA = 3;
:lol:victory:
页:
[1]