Control de un motor de CC con la Terminal

En este ejemplo vamos a ver cómo controlar un pequeño motor de corriente continua a través de la terminal

Biblioman

10/10/20093 min read

En este ejemplo vamos a ver cómo controlar un pequeño motor de corriente continua, del tipo como llevan los coches de juguete a través de la terminal.

Para ello creamos el siguiente circuito en Proteus:

En el utilizamos el drivers L298, recuerda que la máxima intensidad que soporta como salida las patillas del PIC son de 25 mA y un motor de estas características (según el modelo), pueden llegar a 200 ó 300 mA, hay muchos drivers para el control de motores pequeños y cuya corriente no superen 2 amperios, pero este tiene la ventaja de que está modelado en Proteus con lo que podremos simularlo sin problemas, el datasheet del drivers lo tenéis aquí.

En el vemos sus características, este puede controlar dos motores cuya intensidad máxima no superen los dos amperios, para saber su funcionamiento miramos su tabla de verdad:

Si Ven está a nivel alto:

IN3=H y IN4=L --> giro derecha

IN3=L y IN4=H --> giro izquierda

IN3=IN4 --> para el motor

Los diodos utilizados son para proteger al circuito de las fuerzas contra electromotrices que se producen en el bobinado del motor al conmutar el sentido de la marcha.

Vamos a ver el programa en C:

//Archivos de cabecera:

#include <16F84A.h>

#FUSES NOWDT, XT, NOPUT

#use delay(clock=4000000)

#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8)

#bit RB1=0x06.1 // Identificadores de bits

#bit RB2=0x06.2

//Prototipos de las funciones

void instrucciones(void);

void derecha(void);

void izquierda(void);

void parar(void);

void mensaje(void);

//Archivo principal:

#include "Control_Motor_CC.h"

int marcha=0;//variables globales

char sentido;

void main()

{

char M;

set_tris_b( 0b11111001 ); // Se configura la puerta B

RB1 = 0; // Se inicializa los bits de salida

RB2 = 0;

//llamada a la función instrucciones();

instrucciones();

while (true)

{

M=getc();

switch (M) {

case 'i':

izquierda();

sentido='i';

break;

case 'd':

derecha();

sentido='d';

break;

case 'p':

parar();

break;

default :

mensaje();

break;

}

}

}

//Definición de funciones

void instrucciones() //instrucciones para el control del Motor

{

puts("========= Control de un Motor de CC ==========");

puts("Pulsa 'i' para giro a la izquierda");

puts("Pulsa 'd' para giro a la derecha");

puts("Pulsa 'p' para parar el motor");

}

void izquierda ()

{

if ((marcha==1) && (sentido=='d')){ //si motor está en marcha -->derecha paro y espero 3s

parar();

delay_ms(3000);

RB1=0;

RB2=1;

marcha=1;

}

else{

RB1=0;

RB2=1;

marcha=1;

}

}

void derecha ()

{

if ((marcha==1)&& (sentido=='i')){ //motor en marcha --> izquierda, paro y espero 3s

parar();

delay_ms(3000);

RB1=1;

RB2=0;

marcha=1;

}

else{

RB1=1;

RB2=0;

marcha=1;

}

}

void parar ()

{

RB1=0;

RB2=0;

marcha=0;

}

void mensaje ()

{

puts("Prueba de nuevo");

}

Comentario

Este es un ejemplo que estructura el código en funciones, para los que estéis empezando a programar y no sepáis como utilizarlas, "no problem" porque pronto se verá en el tutorial de teoría todo lo referente a ellas. De momento vale con que sepáis que toda función necesita una declaración, que se suele incluir en un archivo de cabecera, una definición donde se encuentran las instrucciones que realiza la función y una llamada a la función.

Si ejecutamos el programa la terminal nos mostrará la siguiente información para el control del motor:

El ejemplo lleva incluido la siguiente protección para el motor: si el motor está en marcha girando en un sentido y pulsamos la letra correspondiente para cambiar el sentido de marcha, primero para el motor, espera durante tres segundos y luego cambia el sentido de giro al motor.

Pese a los diodos de protección no viene mal controlar esta situación por medio del código del programa. Imagínate que vas en coche por la autopista a 120 Km/hora y metes la marcha atrás.

Hasta ahora hemos visto como interactuar con las funciones de entrada y salida por medio de la terminal, en el próximo ejemplo veremos cómo utilizar el componente COMPIM de proteus, para interactuar con un puerto serie real (ó virtual, si no disponemos de ninguno) de nuestro ordenador y utilizar el HyperTerminal de Windows ó otro programa para interactuar con la simulación del circuito en Proteus.

Un saludo