Control de electrovalvulas con el pic 16f84 usando reles

Hola, estoy controlando dos electrovalvulas con el pic 16f84.
La función de este proyecto es que esté encendida una electrovalvula 10 minutos, luego se apaga y se enciende otra electrovalvula 10 minutos, luego esta se apaga también y se vuelve a repetir el programa luego de 11hs y 40 minutos apagadas.
Utilizo dos bits del portico B el portB,0 y el portB,2. Cada uno está conectado por separado a una resistencia y esta está conectada a la base de un transistor BC548.
El emisor de este está conectado a masa y el cdolector a un rele de 12v (teniendo en paralelo un diodo rectificador con el cátodo hacia el positivo).
Tengo el problema que a veces anda y a veces no.
Por ejemplo la primera electrovalvula funciona 10 min, y cuando se apaga para que se encienda la otra, no sucede esto sino que es como si se iniciara nuevamente el programa, funcionando nuevamente 10min. A veces al suseder esto y al pasar esto 10min de más comiensa a funcionar bien.
He visto que el reseteo del programa se da a veces, y cuando se da es cuando una de las dos electrovalvulas se deben cerrar (abrir el relé).
Para la alimentación estoy usando un transformadorr que está cerca de la plaqueta del pic, y además uso un 7805 y un 7812 para obtener los 5 v para el pic y los 12v para los relés.
Lo que también he notado es que si en lugar de electrovalvulas uso lamparas, el programa funciona muy bien (nunca falla).
Alguién me podría dar alguna información para mejorarlo.
A, utilice electrovalvulas de lavarropa- automático (las mismas funcionan con 220v)
 
La bobina de la electrovalvula y/o relee te puede estar generando interferencia que resetea al PIC
En paralelo con el contacto del relee que maneja la electro. coloca un capacitor de 100nF en serie con una resistencia de 42 o 47 Ohms 1W.
Separa la alimentacion del PIC de la del relee. Por ejemplo, el relee lo puedes tomar de "Antes" del regulador 7812
El emisor del TR de mando el relee mandalo directo a GND de tu fuente de alimentacion con un cable independiente.
En paralelo con la bobina del relee coloca un capacitor de 100nF.


La configuracion de un relee manejando una electrovalvula es lo mas ruidoso (Electricamente hablando) que podias haber realizado, hubiera sido mas seguro triac + optoaislador.

Prueba y comenta
 
Es indispensable aislar los circuitos lógicos y analógicos. Es justamente como te lo indica Fogonazo.

Para agregar más de lo que te indicó, agrega un capacitor de 100nF al PIC, y hacé una línea de toma de tierra, esto es, en un mismo punto que tiene, por ejemplo, el PIC, no puede salir hacia otro componente, y si así lo requiere el PCB, que sean pocos componentes, saca el GND para todos los componentes, desde la fuente.
 
Hola fernandoae!

Estoy en exactamente el mismo proyecto que tu, solo que con 8 relés. Todavía no he hecho funcionar los relés, ya que primero tengo todo armado sobre un protoboard y todo simulado con leds, para probar el programa.

Este Protoboard lo tengo alimentado por tres baterías AA en serie (4,5V), y la verdad es que estoy pensando seriamente alimentar por siempre la parte del PIC con estas baterías, ya que el PIC consume tan poco, que debería funcionar como un relój: o sea, por años.

La parte de los relés y electroválvulas, claro, esas las alimentaré con un transformador externo, ya que consumen mucho.

La ventaja de esto, es que puedes mantener perfectamente separada la parte del PIC con la parte de "potencia", y el PIC más encima alimentado por una fente depoder muy estable (sin ruidos ni frecuencias).
Claro que tendrás que separar también el pin del puerto del PIC, con la parte de los relés, digo por optoacoplamiento o algo así.

Saludos!
 
intenta poniendo un diodo rectificador 1n4007 antes del 7805, y un condensador de 100uf en la entrada del regulador y otro en la salida, y un condensador de 100nf en la alimentacion del pic, lo mas cerca posible de este.
 
ELIUSM el proyecto no es mio :) es de betotraso...

"ya que el PIC consume tan poco, que debería funcionar como un relój: o sea, por años."
El PIC consume muy poco, eso es cierto... pero depende tambièn de lo que tengas como carga en cada pin...
 
Uy! Me disculpo! Sorry Betotraso...

M, si, es cierto que es necesario ver también qué es lo que se tiene conectado a los puertos. Yo supuse que en este caso iba a ser una etapa de preamplificación entre PIC y Relé. Una vez medí eso, y salen menos de 2 mA siesque se hace con transistores... y es poco. Pero es cierto, cabía destacar lo del consumo en los puertos.

Hay alguna novedad Betotraso? Cómo vas con tu proyecto?
 
gabrielle dijo:
fernandoae dijo:
chipihuerta dijo:
Puedes usar c++, es más fácil
¿?
creo que a lo que se refiere es que otra forma de asegurar que el pic no se detenga es asegurarlo por medio de software, utilizando el WDT o el brownreset

hola gabrielle ...
como se puede asegurar el pic de esa forma que dices (WDT, brownreset)?

me interesa saber ya que tambien estoy pasando por el mismo problema con el dsPIC30F4013 cuando quiero controlar un motor PAP utilizando el driver ULN2803. Antes lo habia probado y me funcionaba bien de esa forma pero ahorita estoy tratando de hacer funcionar otro motor con el mismo metodo solo que con este me resetea el dsPIC

espero que me puedan dar algunas opiniones para este problema


gracias de antemano.... Cesar
 
El Watch dog o perro guardian, es un dispositivo interno del pic que trabaja con un oscilador RC independiente del oscilador del micro, y que evita que el pic entre a una rutina y no salga de ella, o que por algún motivo se resetee y no vuelva a comenzar el programa. Por software tienes que estar diciendole al perro a cada rado que el programa está funcionando bien, antes de un determinado tiempo (en milisegundos) o de lo contrario, el WDT reseteará el pic.

para activarlo generalmente se usa lo sig

#FUSES WDT //Watch Dog Timer

se configura asi (en este caso antes de 18 ms debes de resetear al WDT):

setup_wdt(WDT_18MS);

y en el programa y se está resetenado al watchdog (para que no resetee al pic) de la siguiente manera:

while (true){
restart_wdt();
rutina 1
.
.
.
restart_wdt();
rutina 2
.
.
.
}

Entonces las variable con la que mantienes encendido al motor puedes almacenarla de manera que no se pierdan cuando haya un reset (que hará el WDT) en el PIC. Es decir que aunque se resetee el pic, el motor vuelva a encender casi inmediatamente.
 
Atrás
Arriba