PDA

Ver la versión completa : Repartidor de carga



Dedalo
21/07/2010, 16:22
Bueno, pues ya esta funcionando el ultimo invento.

He construido un nuevo repartidor de carga con un PIC16F88. El anterior funcionaba con una PAL, este ademas admite ser controlado desde el puerto serie de un ordenador.

Se trata de que la salida del cargador de baterias de 220V y la salida del regulador de la placa solar ahora van a esta caja.

Tambien llegan a esta caja los positivos de las tres baterias, dos en la vivienda y otra en el motor de la AC.

Ademas, esta caja recibe una señal que le indica si el alternador esta activado, una tension procedente del cargador de baterias tomada antes del circuito de flotacion y la tension directa de la placa solar.

Esta caja tiene 8 reles:

6 reles de 10 Amperios para conectar la placa solar o el cargador a cualquiera de las tres baterias.

2 reles de 40 Amperios que conectan las dos baterias de la vivienda a la del motor.

El PIC tiene un bit de salida a cada uno de lo 8 reles a traves de un ULN2803. El puerto B al completo.

Las baterias estan conectadas a traves de resistencias a las entradas 0, 1 y 2 del ADC para poder medir su voltajeç

La tension directa de la placa solar y la del cargador van a las entradas 3 y 4 del ADC, asi podemos saber en que estapa de carga esta el cargador (es de 3 etapas) y si la placa solar esta activada o el regulador la ha desconectado.

La señal de 12V del alternador entra a traves de un optoacoplador al bit 5 del puerto A

Los bits 6 y 7 del puerto A sirven como RXD y TXD del puerto serie.

El circuito se alimenta de las tres baterias a traves de unos diodos, de forma que basta que una sola de las tres tenga tension y ya funciona el PIC.

Cuando arranca entra en modo automatico, eso quiere decir que mide los voltajes de las tres baterias, localiza la mas baja de las tres y le asigna la fuente de carga mas potente por este orden:
1 Alternador que puede dar hasta 20 Amperios de carga.
2 Cargador, que carga a un ritmo fijo de 5 Amperios en la fase inicial.
3 Placa solar, que dependiendo del sol carga hasta unos 4,5 Amperios.

Si quedan mas fuentes de energia disponibles busca la siguiente bateria y le aplica esa fuente de enrgia.

A traves del puerto serie se puede consultar el estado interno o le puedo enviar mensajes para conmutar los reles manualmente o cambiar las preferencias de carga o consultar el estado de la placa y el cargador. Para eso me he diseñado un lenguaje propio que se parece a esto:

Le enviamos un mensaje ?B1<CR>

Responde con B1XXC<CR> donde XX es el voltaje en decimas de voltios y en hexadecimal y C es un guion si no esta en carga, una P si esta conectada a la placa solar, una C si esta conectada al cargador o una A si esta cargando desde el alternador.

B180P<CR> indicaria que la bateria 1 esta cargando de la placa solar y que tiene 12,8V

Aunolose
21/07/2010, 17:27
Joe se nota que le tienes pilladas las vueltas al código :D

¿por que 6 relés para 3 baterías? ¿son simples y quitas también el negativo?

-¿con que tensión activas los relés?
-¿que pasa con los relés si todas están descargadas?
-¿se podría hacer con dos relés y evitar problemas si entran en marcha dos cargas (o tres) a la vez?

Edito: parece un examen :D es curiosidad (mucha), y me preocupa el tema de que por avería se conecten dos relés a la vez, y ver como lo has solucionado.

Dedalo
21/07/2010, 18:05
Respuesta a las dudas:

1) Pongo un rele por cada conexion para evitar que una bateria reciba la corriente a traves de dos o tres contactos en serie y haya caidas de tension.

2) En caso de averia de un rele, en el peor de los casos (que se quede un rele pegado) se pondrian dos baterias en paralelo, el problema no sería excesivamente grave, por software he puesto verificaciones redundantes para evitar que ocurra, y si se averia un rele es ms facil que se quede abierto a que se quede pegado. Las verificaciones del software impiden que dos baterias se conecten a la misma fuente pero permiten varias fuentes en la mimsma bateria. El unico proposito es evitar baterias en paralelo, salvo en el caso del alternador.Por eso hay dos reles de 40 Amp.

3) Solo corto el positivo. Los negativos de las baterias estan a masa a traves de los shunt de medida de intensidad.

4) En realidad hay 8 reles. Para el caso del alternador lo que hago es conectar las baterias de vivienda en paralelo con la del motor para que carguen del alternador. Al arrancar el motor si no hay ninguna consigna en contrario se pegan los dos reles de 40A, con lo que se quedan las tres baterias conectadas en paralelo al alternador, se activa la placa solar sobre una bateria cualquiera, asi se suma esta corriente a la del alternador. Tambien se desactiva completamente el cargador, aunque lo normal es que al arrancar el motor ya no esté conectada la toma de corriente exterior de 220V.

5) Los reles se activan a 12V tomados antes del regulador de tension del procesador. Basta que una sola de las baterias tenga tension para que funcione todo.

6) Sea cual sea el estado de las baterias, solo entra el rele de la mas baja para una fuente concreta, pero manualmente se podrian sumar dos fuentes de corriente en una sola bateria, el resultado es que cargaría con mas intensidad.

Un ejemplo:
Conecto el cargador de baterias a la bateria B1 y la placa solar a la misma bateria. Si el voltaje es menor de 13,5V se suman las intensidades, a pleno sol tendriamos 5 + 4,5 = 9 amperios de carga. Con un 50% de sol serian 5 + 2,25 = 7,25 A de carga. Cuando se alcanzan los 13,8V, la placa se desconecta porque el regulador detecta esta tension. Sigue el cargador solo. Si se alcanzan los 14,4V el cargador entra en la segunda fase y reduce su intensidad para limitar el voltaje a 14,4V. Si la intensidad cae por debajo de 100 mA, el cargador entra en la tercera fase, baja su voltaje a 13,5 (flotacion) y podria entrar la placa para mantener la bateria entre 13,5 y 13,8, pero el cargador cortaria toda la intensidad porque detecta mas tension que la que tiene programada.

Aunolose
21/07/2010, 18:57
¿Entonces no hay problemas por juntar dos "fuentes de energía"? ¿reaccionan bien los cargadores inteligentes? no los he usado nunca.

Dedalo
21/07/2010, 22:39
Todos los cargadores llevan algun diodo a su salida para evitar que cuando falte energia a 220V se pueda dañar por la corriente que devuelve la bateria. Si tu le pones a la bateria una tension mayor de la que esta regulando el cargador, sencillamente la tension que muestrean los circuitos del cargador hacen que deje de dar corriente, nada mas. Al regulador le pasa lo mismo, cuando la tension en la bateria es mayor que la tension programada de corte, o bien cortocircuitan la bateria o bien abren el circuito. En cualquiera de los casos no se dañan porque tambien llevan diodos.

El alternador tres cuartos de lo mismo, si la tension sube en los bornes de la bateria, el regulador deja de cebarlo para que no de mas tension, pero no puede volver nada a traves de sus diodos.

Resumen de los comandos que soporta el PIC.

Todos los comandos deben terminar con <CR> y se pueden encadenar separados por ';' pero la frase no puede exceder los 16 bytes incluido el <CR> final y los separadores ';'.
Las respuestas terminan todas en <CR>.
Si estan activas las frases extendidas se devuelve eco de la linea completa antes de interpretarla.

Comando F, modo de las frases de salida.

"F+" activa frases extendidas
Si estan activas las frases extendidas contesta OK

"F-" desactiva frases extendidas
Si estan activas las frases extendidas contesta OK

Comando ?, consulta de estado

"?Bn" Consulta estado de una bateria
el valor de n puede ser 1, 2 o M para las baterias de vivienda 1 y 2 o la bateria del motor

Si no estan activas las frases extendidas contesta:
'Bnvv'
donde n es el numero de bateria y vv es el voltaje en decimas de voltio y en hexadecimal

Si estan activas las frases extendidas contesta:
'Bateria n vv.v V'
donde n es el numero de bateria y nn.n es la tension expresada en voltios.

"?P" Consulta estado de la placa solar

Si no estan activas las frases extendidas contesta:
'Pvvb'
vv es el voltaje en la placa (hexa) y b es la bateria a la que esta conectada. Si no esta conectada aparece un '-'. la P es minuscula si no hay luz y la placa esta edsactivada

Si estan activas las frases extendidas contesta:
'Placa solar vv.v V'
donde vv.v es el valor en voltios.
Si hay alguna bateria en carga añade la linea:
'cargando bateria b'
donde b es el numero de la bateria.

"?C" Consulta estado del Cargador

Si no estan activas las frases extendidas contesta:
'Cvvb'
vv es el voltaje en el cargador (hexa) y b es la bateria a la que esta conectado. Si no esta conectado aparece un '-'. la C es minuscula si esta apagado el 220V

Si estan activas las frases extendidas contesta:
'Cargador vv.v V'
donde vv.v es el valor en voltios.
Si hay alguna bateria en carga añade la linea:
'cargando bateria b'
donde b es el numero de la bateria.

"?A" Consulta estado del Alternador

Si no estan activas las frases extendidas contesta:
"A-bb"
El "-" indica alternador parado, en caso de estar activo el mensaje seria
"A+bb"
bb son dos espacios que se llenan con los numeros 1 y 2 si el alternador esta cargando las baterias 1 o 2, o ambas junto con la del motor.

Si estan activas las frases extendidas contesta:
A) en caso de estar rodando
"Alternador cargando BM"
y las frases añadidas
"Alternador cargando B1" y "Alternador cargando B2"
en caso de estar pegados los reles correspondientes.
B) en caso de estar parado
"Alternador inactivo"
y las frases añadidas
"Unidas BM y B1" y "Unidas BM y B2"
en caso de estar pegados los reles correspondientes.

Comando P, Asignar la placa solar.

"PBn" Asigna la placa solar a la bateria n, eso quiere decir que sea cual sea el estado de las otras baterias, si funciona la placa solar, se dedica solo a esta bateria.
Si estan activas las frases extendidas contesta OK

Comando C, Asignar el cargador.

"CBn" Asigna el cargador a la bateria n con el mismo funcionamiento que la asignacion de la polaca solar.
Si estan activas las frases extendidas contesta OK

Comando A, Asignar el alternador.

"ABn" Asigna el alternador a la bateria n. Aqui es un poco diferente el funcionamiento.
Si se asigna el alternador a la bateria del motor, cuando ruede el alternador no entran los reles de las otras baterias para dar prefecencia de carga a esa bateria sin interferencias de las otras.
Si se asigna a una bateria de la vivienda, evidentemente la bateria del motor no se puede desligar del alternador, pero se evita conectar la otra bateria de vivienda para favorecer la carga de la bateria asignada.
Si estan activas las frases extendidas contesta OK

Comando -, Exclusion de carga de una bateria.

"-Bn" hace que la bateria 'n' sea excluida de cualquier tipo de carga.
Si estan activas las frases extendidas contesta OK

Comando @, Asignacion en automatico.

"@Bn" hace que la bateria 'n' si esta asignada o excluida deje de estarlo.
Si estan activas las frases extendidas contesta OK

Comando M, Mando manual de los reles.

"MPb" pega el rele de la placa solar con la bateria b ( 1, 2 ó M) despegando si estuviesen los otros reles de la placa solar y se desactiva el modo automatico.
Si estan activas las frases extendidas contesta OK

"MCb" pega el rele del cargador con la bateria b ( 1, 2 ó M) despegando si estuviesen los otros reles del cargador y se desactiva el modo automatico.
Si estan activas las frases extendidas contesta OK

"MAb" pega el rele que una la bateria b ( 1 ó 2) con la bateria del motor y se desactiva el modo automatico.
Si estan activas las frases extendidas contesta OK

"M-" despega todos los reles y activa el modo automatico.

Comando W, Prueba del WDC.

Este comando es una simple W, cuelga el procesador en bucle infinito para comprobar si funciona el Watch Dog.

Al inicio el PIC envia la palabra "Init" si arranca por primera vez o la palabra "WDCxx" si arranca por el Watch Dog Clock. xx es el contador de las veces que se generó un WDC despues del ultimo encendido normal, y sirve para controlar si ya ha habido antes otro cuelgues. Es solo experimental.

Ai se encuentra un error en una sentencia se pasa a la siguiente. Si estan activas las frases extendidas contesta ERROR.

Un ejemplo practico:

"?B1;?kk;?P"+<CR>

Suponiendo que la bateria 1 tenga 12V y la placa solar, con 12,8V este cargando esta misma bateria.

devolveria con frases reducidas:
"B178"<CR>
"P801"<CR>

con frases extendidas:
"?B1;?kk;?P"+<CR>
"Bateria 1 12.0 V"<CR>
"ERROR"<CR>
"Placa solar 12.8 V"<CR>

Dedalo
22/07/2010, 10:15
Bueno, aqui va el esquema:
31278

Aunolose
22/07/2010, 17:53
Y todo en ensamblador :D que caña,

-¿es buena idea poner los leds en serie con los relés?
-¿cuanta corriente soportan uno y otro?

Dedalo
23/07/2010, 00:16
Los leds son de alto brillo y solo se quedan con algo mas de 1/2 voltio, asi que no afectan a los reles, y los reles consumen solo 10 mA, asi que aunque los leds trabajan al 66% de su intensidad (15 mA) y brillan bien. Los dos que van en el rele de 40 A brillan mas porque estos dos reles consumen 25 mA, esos leds no son de alto brillo, y se quedan con 1 V, asi que los reles no van a 12 sino a 11 V, pero pegan bien, supongo que un 20% de la tension se les puede quitar sin problemas.

Los he puesto asi porque es la mejor forma de asegurarme de que no hay una bobina cortada que deje un rele sin pegar y que no me entere.

Dedalo
23/07/2010, 12:30
Bueno, aqui va el codigo final perfectamente comentado. Se agradecen mejoras...

31312

navegante 420
23/07/2010, 15:44
Me encataria dedalo poder hacerte alguna sugerencia, pero esto me queda grande, muy grande......

Impresionate curro, eres un crack!!!!!!

Aunolose
23/07/2010, 17:03
¡¡La leche!! tendremos que dedicarle un rato si quiero pillar algo... :D menos mal que por lo menos está comentado.

navegante 420
24/07/2010, 02:13
Impresionante, IM PRE SI O NAN TE!!!!!

Me estoy leyendo el código, y sencillamente es impresionante, he empezado fliplando con todas las declaraciones, me he reido con lo de las banderas, aunque no te lo creas, a mi se me ha ocurrido lo mismo para lo del proyecto, antes de leer tu codigo.

pero al llegar a la gestion del alternador he empezado a deprimirme.... es imposible, imposible, que yo algun día sea capaz de codificar algo así......

Estoy que no salgo de mi alucine.....

Dedalo
24/07/2010, 22:28
En realidad no es tan complicado. Si sabes lo que quieres, lo escribes de forma ordenada, luego lo vas traduciendo y al final queda ese resultado. Para qiue te hagas una idea, yo primero escribo un texto muy parecido al que ves en comentarios y despues lo voy codificando en ensamblador.

A veces me hago un poco de lio porque confundo las instrucciones de un procesador con las de otro, o las banderas afectadas por una operacion determinada, pero teniendo a mano el set de instrucciones si tienes una duda lo consultas.

Aunolose
27/07/2010, 19:22
Eso se llama seudocodigo ¿no Dedalo?

¿eso no lo enseñan en programación, navegante? pues es lo primero... por eso luego sirve para cualquier lenguaje.

Tengo que reconocer que todavía no voy ni por la mitad del código :oops:

navegante 420
27/07/2010, 22:37
¿eso no lo enseñan en programación, navegante? pues es lo primero... por eso luego sirve para cualquier lenguaje.

jejejeje muy bueno...

pero si no recuerdo mal, a mi me lo enseñaron al reves, 1º diagrama de flujo, luego pseudocódigo, y luego el jodio C de los coj....

Aunque en muchos casos si el diagrama esta bien echo, en mi caso el pseudo me lo salto y programo directamente.

Que cariño le tengo al C..... jejejeje



que reconocer que todavía no voy ni por la mitad del código :oops:

Yo es que sigo deprimido, jejejejeje

Aunolose
28/07/2010, 01:37
Si el diagrama también ayuda mucho para según que problemas, de un vistazo sabes si la flecha va a parar a un sitio que no debe, o que no puede.

Dedalo
28/07/2010, 10:27
Efectivamente, eso es pseudocodigo de libre adaptacion :grin:. Normalmente hago un diagrama de flujo cuando el lio de decisiones es importante.

Con el PIC me hago a veces un lio, pues el muy perro, cuando resta, no resta un literal del acumulador o un registro del acumulador, lo hace al reves que todos los procesadores, resta el acumulador del literal o el acumulador de un registro, y ademas, la bandera de desbordamiento funciona al reves, puesta a 1 es que no ha desbordado. Eso me provoca confusiones importantes.

Aunolose
28/07/2010, 11:59
jejejeje (otro punto para el C :laughing6: )

Pero hoy, y durante ¿mucho? tiempo me va a tocar volver al ensamblador del 8051... y es que vamos a remodelar un aparato que apenas se vende (está pensado para fibra óptica) para adaptarlo a los nuevos tiempos (leds RGB) se trata de una consola DMX, con 8 canales, parece una tontería pero como 8 no es multiplo de 3, nadie la quiere... :dontknow: si fuera de 6 pienso que alguien la hubiera comprado, pero no caen (y no saben venderla) en que pueden prescindir de los otros dos... el caso es que no contentos con reducirlos a 6 la vamos a hacer de 16 canales... que sigue sin ser multiplo de 3, y además complica el manejo, ya veremos como lo hago para explicar "el tema" en una pantalla de 2 lineas y 16 caracteres por linea...
Esto podría ser un ejemplo de lo mal que se puede vender una cosa por buena y barata que sea, para empezar la colocación y manejo de los botones los decidió alguien que no había usado algo así en la vida, y que se hace la picha un lío con los moviles... luego se lo quiere vender a gente como él, llega la hora de explicarlo y, como no se aclara, pues la gente lo nota y no lo compra. Cada vez que hablamos del tema acabamos discutiendo, menos mal que no me puede despedir :D como mucho ponerme la cv en la calle... :scratch:

Dedalo
28/07/2010, 13:51
¿Y porque no lo haces en C?

Yo ya llevo muchos años con el ensamblador y ahora me costaria pasar al C, mas que nada porque no confio en que el C me resuelva ciertos problemas que yo tengo ya resueltos en ensamblador, pero para ti no debe ser un problema... ¿?

Aunolose
28/07/2010, 16:52
El problema es el compilador para 8051, no me encuentro a gusto con ninguno... quizá sea el momento de dedicarle más tiempo, ya que esto no es algo de hoy para mañana. Además tengo casi todo el trabajo hecho en ensamblador... si puedo (que seguro que se puede) pasar las funciones importantes igual me animo a probar alguno. Aunque ahora no vienen buenas fechas para eso :D

Dedalo
28/07/2010, 17:42
El problema es el compilador para 8051, no me encuentro a gusto con ninguno... quizá sea el momento de dedicarle más tiempo, ya que esto no es algo de hoy para mañana. Además tengo casi todo el trabajo hecho en ensamblador... si puedo (que seguro que se puede) pasar las funciones importantes igual me animo a probar alguno. Aunque ahora no vienen buenas fechas para eso :D

Pues yo tengo el assembler del 8051 bastante controlado. De hecho la centralita funciona con un AT89C51. Si necesitas ayuda no tienes mas que decirme algo.

Aunolose
28/07/2010, 19:12
Gracias, a dos días de las vacaciones, creo que lo dejaré para septiembre :D

Dedalo
03/08/2010, 11:53
Pues este fin de semana probé el invento y ya funciona casi todo salvo una cosa. La carga la hace perfectamente, los cambios de una a otra bateria tambien, aunque tengo que retocar la logica de seleccion de baterias. Todo funciona a la perfeccion en ese sentido, pero las comunicaciones no funcionan bien. Los mensajes que deberia enviar a la centralita para que pueda ver los voltajes y el estado de la placa solar etc no llegan a la centralita. Poniendo el portatil en modo espia en el puerto serie he detectado que el repartidor si recibe perfectamente los mensajes procedentes de la centyralita, pero las respuestas no llegan. Puede ser porque tal vez no le envie suficiente corriente a los optoacopladores. Tendré que recalcular las resistencias.

Dedalo
09/09/2010, 11:47
Despues de varias modificaciones en el hardware, ya he conseguido una comunicacion decente entre la centralita y el repartidor de carga.

Al final he construido un circuito que funciona con bucle de corriente. La señal TX de la centralita pilota un transistor con su emisor a 12V y en colector una resistencia de 220 Ohmios. Esto me garantiza poder enviar la señal sobre un tres optoacopladores puestos en serie, asi la señal transmitida por la centralita llega a los tres dispositivos que la necesitan. Cualquier mensaje de la centralita es recibido simultaneamente por los tres receptores, pues cada uno de los receptores tiene el opotoacoplador correspondiente conectado a la entrada RX.

Para la comunicacion de vuelta cada periferico envia su señal TX con un transistor PNP con el emisor conectado a 12V y una resistencia de 470 Ohmios. Las tres señales estan conectadas en paralelo a un optoacoplador que hay en la centralita y que lleva la señal al pin RX. Asi la centralita puede recibir cualquiera de los mensajes.

Como los perifericos solo responden cuando son interrogados, no hay posibilidad de interferencias entre ellos. La centralita espera un segundo despues de cada interrogacion, si no hay respuesta señala la averia en pantalla, y si la hay actualiza los datos. Si la comunicacion es buena, y a una velocidad de solo 1200 baudios, los datos se actualizan varias veces por segundo. SI algun periferico esta apagado o no funciona bien la interrogacion completa se lleva 4 segundos, las esperas de cada una de las interrogaciones.

Los perifericos que espero conectar en esta linea son:
1) Repartidor de carga, devuelve los voltajes de la baterias y el estado de carga.
2) Medidor shunt, Devuelve las intensidades de cada una de las baterias del habitaculo.
3) Medidor de niveles. Devuelve los niveles de los tres depositos de aguas (Limpia, gris y negra).

El 1 ya esta funcionando, ahora trabajo en el segundo...

Aunolose
09/09/2010, 17:18
Ya estamos de vuelta :D

¿Como vas a hacer el shunt? en elektor (está revista me encanta, ¿se nota?) había un circuito que mediante un shunt (creo que era una bobina) medía la cantidad que carga que recibía la batería, de está manera podía volver a medir la descarga y calcular de manera muy precisa cuanto tiempo le quedaba, el diseño estaba pensado para una barca con motor eléctrico, quedarse sin potencia en mitad del lago puede ser un problema :D



PD: el miércoles me liaré con lo comentado en post anteriores, ya os digo algo...