PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Die Geschwindigkeit von 2 DC Motoren über eine L293D H-Brücke vorgeben



Mats2006
31.01.2013, 14:35
Hey,
ich habe ein Problem.
Ich möchte über die H Brücke L293D zwei DC Motoren ansteuern.
Hierbei ist wichtig, dass ich die Geschwindigkeit vorher angeben kann. Sie muss NICHT währenddessen geändert werden.
Nach meinem Code kann ich nur dem einem Motor die Geschwindigkeit vorgeben, der andere bleibt ganz aus.
Wenn ich den Teil mit der Geschwindigkeitssteuerung weglasse, laufen beide auf Höchstgeschwindigkeit.
Hier ist mein Code:

#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;
}

Ich hoffe, ihr könnt mir helfen :)
Gruß,
Mathis

Searcher
31.01.2013, 16:32
Hallo
ich kenn mich mit Arduino nicht aus. Mir fällt auf, das bei pinMode die enXPins nicht als Output enthalten sind. Das sind doch die Enable Pins für den L293 oder? über die mit PWM die Geschwindigkeit gesteuert wird?

PS: analogWrite()
On most Arduino boards (those with the ATmega168 or ATmega328), this function works on pins 3, 5, 6, 9, 10, and 11. On the Arduino Mega, it works on pins 2 through 13. Older Arduino boards with an ATmega8 only support analogWrite() on pins 9, 10, and 11

richtige Pins ausgewählt? Welches board?

Gruß
Searcher