Go Down

Topic: [HELP] Set the speed of 2 DC motors with H-Bridge (Read 1 time) previous topic - next topic

Mats2006

Jan 31, 2013, 09:12 am Last Edit: Jan 31, 2013, 01:09 pm by Mats2006 Reason: 1
Hey,
I have a problem.
I want to set the two motors to different speed.
I'm using an H-Bridge.
Here's my sketch:
Code: [Select]
#define STATE_IDLE 0
#define STATE_INIT 1
#define STATE_RUNNING        2
#define STATE_EXITING        3

const int in1Pin = 5;  // H-Brücken-Eingangspins
const int in2Pin = 4;
const int in3Pin = 3;  // H-Brücken-Eingangspins
const int in4Pin = 2;
const int en1Pin = 6;
const int en2Pin = 7;
const int buttonPin = 8;

int buttonState = 0;
int Zustand;

void setup()
{
 Zustand = STATE_IDLE;
 pinMode(buttonPin, INPUT);
 pinMode(in1Pin, OUTPUT);
 pinMode(in2Pin, OUTPUT);
 pinMode(in3Pin, OUTPUT);
 pinMode(in4Pin, OUTPUT);
}

void loop()
{
 switch( Zustand )
 {
   case STATE_IDLE: Idle();
   break;
   case STATE_INIT: Init();
   break;
   case STATE_RUNNING: Run();
   break;
   case STATE_EXITING: Exiting();
   break;
 }
}

void Idle()
{
 buttonState = digitalRead(buttonPin);
 if (buttonState == HIGH) {
   Zustand = STATE_INIT;
 }
}

void Init()
{
 delay(1000);
 Zustand = STATE_RUNNING;
}

void Run()
{
 analogWrite(en1Pin,70);
 analogWrite(en2Pin,100);
 digitalWrite(in1Pin,LOW);
 digitalWrite(in2Pin,HIGH);
 delay(1500);
 digitalWrite(in1Pin,LOW);
 digitalWrite(in2Pin,LOW);
 digitalWrite(in3Pin,HIGH);
 digitalWrite(in4Pin,LOW);
 delay(5000);
 digitalWrite(in3Pin,LOW);
 digitalWrite(in4Pin,LOW);
 digitalWrite(in2Pin,LOW);
 digitalWrite(in1Pin,HIGH);
 delay(1500);
 digitalWrite(in1Pin,LOW);
 digitalWrite(in2Pin,LOW);
 Zustand = STATE_EXITING;
}
 
void Exiting()
{
 delay(1000);
 Zustand = STATE_IDLE;
}

But when I press the button, just one motor runs in the speed, given with 'en1Pin'.
Without trying to set the speed, the motors run correctly.

Hope you can help and sorry for my bad English.
Greets,
Mathis

UKHeliBob

Your code looks OK
Code: [Select]
  analogWrite(en1Pin,70);    //speed A
  analogWrite(en2Pin,100);    //speed B
  digitalWrite(in1Pin,LOW);  //1-2 run at speed A
  digitalWrite(in2Pin,HIGH);
  delay(1500);
  digitalWrite(in1Pin,LOW);  //1-2 stop
  digitalWrite(in2Pin,LOW);
  digitalWrite(in3Pin,HIGH); //3-4 run at speed B
  digitalWrite(in4Pin,LOW);
  delay(5000);
  digitalWrite(in3Pin,LOW);  //3-4 stop
  digitalWrite(in4Pin,LOW);
  digitalWrite(in2Pin,LOW);  //1-2 run at speed A
  digitalWrite(in1Pin,HIGH);
  delay(1500);
  digitalWrite(in1Pin,LOW);  //1-2 stop
  digitalWrite(in2Pin,LOW);

I have annotated it to help me understand what I think you are trying to do
Can you confirm that the names you have given the pins correspond to the actual inputs on the H bridges ?
Please do not send me PMs asking for help.  Post in the forum then everyone will benefit from seeing the questions and answers.

michinyon

Do you have two H bridges, or are you somehow trying to use one ?

Mats2006

First, thanks for your replies.

I've connected the en1Pin to the ENB and the en2Pin to the ENA, the INPUT pins are correctly connected.
And yes I try to use one H-Bridge. And without trying to regular the speed, it works well.

UKHeliBob

What H bridge are you using ?   Can you provide a link to what you are using ?
If it has ENA and ENB inputs then it is almost certainly 2 H bridges, even if they are in 1 chip, possibly an L293 or similar.
Please do not send me PMs asking for help.  Post in the forum then everyone will benefit from seeing the questions and answers.

Go Up