Con este módulo vamos a manejar tensiones mayores de las que normalmente soportan los microcontroladores, para ello hacemos uso de un dispositivo electrónico llamado relé.
Para poder controlar un grupo de relés se debe usar un driver que proporcione la suficiente corriente y sea capaz de absorber las corrientes autoinducidas que se producen en las bobinas.
Para este propósito se puede usar cualquier array de drivers con transistores en darlington como los que se encapsulan en los integrados tipo ULNxxxx. Sólo es necesario saber la corriente de entrada necesaria para poder excitar la entrada y la máxima tensión y corriente que soportan en la salida.
Un posible esquema de control basado en un driver ULN2803. Se propone la conexión de dos relés y dejar libres el resto de salidas del driver para que se usen en otras aplicaciones, como por ejemplo activar un contactor.
Las resistencias de pull-up conectadas a la entrada del driver tienen como propósito proporcionar una mayor corriente que la que suministra el pull-up interno del microcontrolador, que es insuficiente para proporcionar un "1" lógico.
Un estado alto en la entrada del driver hace que se alimente la bobina del relé; recuérdese que tras un reset del microcontrolador, todos los puertos se ponen a 1, lo que supondrá en este caso que se activen los relé. Existen otros drivers de este tipo, que poseen las entradas a nivel bajo, con lo cual ya no representará el problema del reset.
|
COMPONENTES
|
CANTIDAD
|
| Condensador 100uF |
1
|
| Conector Molex 2 x 5 pines |
1
|
| Regleta Circuito Impreso 6 Conductores |
1
|
| Regleta Circuito Impreso 8 Conductores |
1
|
| Reles Type 40.31 6V, 10A-250V |
2
|
| Resistencias 4K7 1/4W |
8
|
| C.I. UNL2803* |
1
|
| PCB 1 cara (95 x 58)mm |
8
|
| Zócalo DIP-18 pines torneadoss |
1
|
| Cable para puentear | |
Nota:
* Tenemos que tener claro que cuando se produzca un reset en el sistema, por la configuración de este driver, se va a producir una activación de los relés, o de los dispositivos conetados a estos.
Los siguientes programas muestran como manejar los relés del módulo.
/* rele.c */
#include <io51.h>
#include "rele.h"
#ifndef RLP
#define RLP P1
#endifvoid rele(unsigned char nrele,unsigned char val)
{
switch(nrele)
{
case 0:
if (val)
RLP.0 = 1; /* rele alimentado */
else
RLP.0 = 0;
break;
case 1:
if (val)
RLP.1 = 1;
else
RLP.1 = 0;
break;
}
}/* rele.h */
void rele(unsigned char nrele,unsigned char val);#define RELE_ON 1
#define RELE_OFF 0/* testrele.c */
#include "rele.h"void retardo(long i);
#define D 5000
void main(void)
{
while(1)
{
rele(0,RELE_ON);
retardo(D);
rele(1,RELE_ON);
retardo(D);
rele(0,RELE_OFF);
retardo(D);
rele(1,RELE_OFF);
retardo(D);
}
}void retardo(long i)
{
while (i--);
}