Estoy trabajando en un sistema de seguimiento solar. Para poder ajustar la orientación de mi rastreador, necesito poder conducir dos motores bidireccionales con un chip H bridge. Estoy utilizando el puente L293D H para hacer esto junto con un microcontrolador arduino . A continuación se muestra un diagrama de mi circuito
Para probar si mi configuración funciona, lo que hice es escribir un código para hacer lo siguiente. Tenga en cuenta que las instrucciones se ejecutan en un bucle.
- Gire el motor M1 hacia la derecha (no estoy seguro de la dirección en la que entregado, digamos en el sentido de las agujas del reloj por conveniencia) por 5 segundos
- Gire el motor M1 en el sentido de las agujas del reloj a una velocidad mayor durante 5 segundos
- Cambie inmediatamente la dirección de M1 a la izquierda, gírelo durante 5 segundos
- Gire M1 en sentido contrario a las agujas del reloj a una velocidad mayor durante 5 segundos
- Detenga M1 durante 5 segundos (haga esto escribiendo 0 en el pin de habilitación a través de la función analogRead en el arduino)
- Gire M2 en el sentido de las agujas del reloj durante 5 segundos
- Gire M2 en el sentido de las agujas del reloj a una velocidad mayor durante 5 segundos
- Gire M2 en sentido contrario a las agujas del reloj durante 5 segundos (Aquí es donde las cosas dejan de funcionar)
- Gire M2 en sentido antihorario a una velocidad mayor durante 5 segundos
- Detener M2 durante 5 segundos
- Repetir bucle
Individualmente, puedo rotar los motores bidireccionales y a diferentes velocidades sin problemas. Sin embargo, una vez que trato de rotar los motores bidireccional en sucesión (como en los pasos descritos anteriormente, las cosas dejan de funcionar).
Después del paso 7, obtengo el siguiente problema
- El motor M2 deja de girar (esto continúa durante 5 segundos)
- Después de esto, el motor M1 comienza a girar
- El motor M1 no invierte la dirección después
- El motor M2 gira unidireccional después, sin embargo, de nuevo, no hay reversión
Básicamente, después del paso 8, los dos motores solo giran en una dirección (la misma), en los intervalos en los que se supone que deben invertir, no pasa nada, los motores están fijos.
Soy consciente de que mi problema puede ser un poco difícil de seguir. Intentaré resumir las cosas. Puedo conducir ambos motores en la misma dirección sin ningún problema. Puedo invertir la dirección de cada motor individualmente a diferentes velocidades sin ningún problema. Sin embargo, cuando deseo conducir ambos motores y revertirlos, mis motores dejan de funcionar. No estoy seguro de por qué está sucediendo esto, por lo que estoy haciendo una publicación aquí. Cualquier ayuda sería muy apreciada.
Editar: debajo está el código que usé, creo que mi código debería funcionar
const int leftChip_en = 6;
const int leftChip_left = 5;
const int leftChip_right = 4;
const int rightChip_en = 10;
const int rightChip_left = 9;
const int rightChip_right = 8;
void setup() {
pinMode(leftChip_left, OUTPUT);
pinMode(leftChip_right, OUTPUT);
pinMode(rightChip_left, OUTPUT);
pinMode(rightChip_right, OUTPUT);
}
void loop() {
//BIDIRECTIONAL MOVEMENT FROM LEFT SIDE OF CHIP
digitalWrite(leftChip_left, LOW);
digitalWrite(leftChip_right, HIGH);
//STEP 1: TURNING M1 CLOCKWISE
analogWrite(leftChip_en, 150);
delay(5000);
//STEP 2: TURN M1 CLOCKWISE FASTER
analogWrite(leftChip_en, 250);
delay(5000);
//STEP 3: CHANGE DIRECTION OF M1 TO ANTICLOCKWISE
analogWrite (leftChip_en, 0);
digitalWrite(leftChip_left, HIGH);
digitalWrite(leftChip_right, LOW);
analogWrite(leftChip_en, 150);
delay(5000);
//STEP 4: 4.Rotate M1 anticlockwise at a higher speed for 5 seconds
analogWrite(leftChip_en, 250);
delay(5000);
//STEP 5: STOP MOTOR M1 FOR 5 SECONDS
analogWrite (leftChip_en, 0);
delay(5000);
//STEP 6: ROTATE M2 IN CLOCKWISE DIRECTION FOR 5 SECONDS
digitalWrite(rightChip_left, LOW);
digitalWrite(rightChip_right, HIGH);
analogWrite(rightChip_en, 150);
delay(5000);
//STEP 7: ROTATE M2 CLOCKWISE FASTER FOR 5 SECONDS
analogWrite(rightChip_en, 250);
delay(5000);
//STEP 8: ROTATE M2 ANTICLOCKWISE FOR 5 SECONDS
analogWrite (rightChip_en, 0);
digitalWrite(rightChip_left, HIGH);
digitalWrite(rightChip_right, LOW);
analogWrite(rightChip_en, 150);
delay(5000);
//ROTATE M2 ANTICLOCKWISE FASTER FOR 5 SECONDS (STEP 9)
analogWrite(rightChip_en, 250);
delay(5000);
//STEP 10: top M2 for 5 seconds
analogWrite (rightChip_en, 0);
delay(5000);
}
Gracias