Proyecto Arduino Mega 2560 como controladora industrial

Muy buenas, me presento pues es mi primer post es español.
Mi nombre es Sergi y vivo en Barcelona. Hemos iniciado con varios amigos una star-up y estamos diseñando una placa de control propia que se pueda montar en las máquinas que fabricamos, pues es fácil de usar, con una buena comunidad, y muy potente.

El objeto de este proyecto es crear un controlador robusto tipo PLC en una placa Eurocard estandar, con I/O optoacopladas y ampliable como por ejemplo Wifi, Ethernet, etc.

Llevamos ya 6 meses con el proyecto, pero aún está muy verde. Os explico que hemos hecho:
Sobre una placa MEGA 2560, hemos puesto otra conectada con pines macho y formato Eurocard. Alimentamos al arduino con una fuente conmutada TRACO de 9VDC que a su vez de alimenta de otra fuente industrial conmutada de 24Vdc.
Las I/O se realizan mediante conectores Molex de 2,54 mm. de crimpar y cable de cobre mono-hilo.
Las salidas digitales tienen activada la resistencia pull-down interna del arduino.
El interfaz HMI consta de una pantalla LCD alfanumerica de 40x4 con conexión en paralelo mediante cable de red UTP-5e apantallado en un extremo. La alimentación de la pantalla se realiza mediante una fuente conmutada TRACO de 5VDC que a su vez es alimentada por la misma fuente de 24VDC anterior.
También consta de dos botones pulsadores y un encoder Alps con pulsación (que gira a izquierda y derecha para seleccionar un menú).
Las salidas se realizan por transistores tipo TIP120 o TIP122 con su correspondiente diodo N4001 y alimenta a un contactor tipo Telemecanique de 3+1, trifásico 9A bobina a 24Vdc. (Los 24VDC los proporciona la misma F.A.).
La programación del mismo está ya acabada, pero nos encontramos con un problema sin salida para poder seguir. El cual paso a describir:

Problemas encontrados:

  • La pantalla presenta muchas interferencias o se queda colgada cuando se enciende un contactor:
    Solución1: apantallar cable con cable de red UTP-5e apantallado conectado a masa por un extremo -> Elimina todas las interferencias exteriores, pero el contactor sigue provocando basura y cuelgues en la pantalla de forma casi instantánea (sobre todo al desactivar la bobina del contactor, claro).
    Solución2: Colocar resistencia pull-down 10k en las salidas -> No ocurre nada, ni a mejor ni a peor.
  • El contactor de 24VDC provoca tanto interferencias en la pantalla como EN EL PROPIO ARDUINO!, es decir activa y desactiva entradas digitales (que ya estan conectadas a masa con la resistencia pull-down interna del Arduino) y genera basura en la pantalla.
    Solución1: Conectamos la masa de la F.A. de 24VDC a tierra -> No ocurre nada.
    Solución2: Sustituimos el contactor por una de 230Vac y lo activamos mediante un relé optoacoplado de Phoenix Contact -> SIGUE SUCEDIENDO EL MISMO ERROR! Así pues decidimos desconectar la salida del arduino y activar el contactor A MANO, sin ninguna conexión física que una Arduino y Contactor aparte de la conexión de 230Vac que alimenta las F.A. del arduino y SIGUE SUCEDIENDO EL MISMO ERROR!
    Solución3: Colocamos un núcleo de ferrita en cada cable I/O que llega al arduino -> Exactamente igual.

Llegados a este punto, creemos que lo mejor es colocar un filtro RC al contactor (aunque desconocemos el tipo óptimo a colocar), pero creo que esa es una solución chapuza si es que con ello solucionamos el problema.
Desconozco si lo que afecta el arduino son interferencias por cable: OJO: Deberían entrar por la parte de la alimentación a 230Vac, y pasar los dos F.A.
O bien son interferencias electromagnéticas.

El problema se ha probado en dos placas de arduino diferentes. Cuando no se activa el contactor o solo se activan relés pequeños no sucede el problema.
¿Alguien puede aportar luz en este tema? Estamos desesperados y bloqueados.

Iré informando sobre el progreso del proyecto.

Después de tantas pruebas y diagnósticos yo haría la última, comprobar si como dices las interferencias entran por cable o son electromagnéticas.

Para ello puedes hacer la activación a mano que indicas del contactor alimentando los 230 V de la misma toma pero con una pequeña manguera que te permita alejar el contactor del Arduino unos metros, probando a actuarlo cerca y lejos. En función del resultado de la prueba puedes hacer lo mismo pero esta vez tomando la alimentación del contactor desde otra toma alejada con un cable largo.

Al menos así comprobarás si las interferencias vienen por un camino u otro o un poco por los dos...

Problema solucionado!

Solución: Existen diferentes tipos de contactores, unos más "bastos" para activar a través de pulsadores y otros sistemas eléctricos y otros adecuados para activar desde PLC que ya integran el filtro RC y demás.
Yo pensava que todos los contactores DC lo integraban, pero no es así.
Actualmente esta funcionando con un contactar 24Vdc de Telemachanique (los de LOVATO no funcionan) y he encargado un contactar ABB específico para PLC. A ver que tal!

Lo siguiente en lo que estamos trabajando es integrar un trafo de aislamiento para la F.A. de continua, así fuentes parasitarias o sobrecargas del exterior no deberían afectar al Arduino y sensores, y de paso aislamos la parte DC de la AC.
Aunque para aislarla al 100% deberíamos colocar optoacopladores en las salidas a relé. Tiempo al tiempo.

Que tenemos pendiente:

  • Estamos usando una pantalla LCD alfanumérica de 40x4 conexión en paralelo. Vamos a sustituirla por la misma pantalla pero en conexión serie. Vamos a ver que tal funciona, porque lo interesante es que nos ahorramos 7 pines I/O.

  • Optoacopladores y transistores tipo darlington en las I/O, actualmente usamos transistores TIP120 o 122, que funcionan bien pero hay que soldarlos uno a uno + su diodo y resistencia. Hay chips darlington de 8 I/O con su resistencia y diodo ya incorporado y claro es mucho menos trabajo de soldadura.

  • Conectores de placa: Estoy indeciso sobre si usar los actuales molex de crimpar de 2,54 mm. o cambiarlos por los PhonixContact de 5,08 mm. con terminal roscado.

  • Conexión USB: La vamos a eliminar y en su lugar usaremos el cable FTDI para la programación, así el coste por placa de la fabricación debería ser más económica.

  • Frecuencia de trabajo: Es posible trabajar a 20 Mhz en vez de los 16 Mhz??? Asi aumentaríamos las prestaciones sin gastar un €.
    Si alguien sabe como por favor hechar un cable.

svalls:
Que tenemos pendiente:

  • Estamos usando una pantalla LCD alfanumérica de 40x4 conexión en paralelo. Vamos a sustituirla por la misma pantalla pero en conexión serie. Vamos a ver que tal funciona, porque lo interesante es que nos ahorramos 7 pines I/O.
    te recomiendo esta, llevo usandola desde hace 2 o 3 años, y funciona genial. Tengo 3 o 4. por cierto, yo la uso por I2C así tengo los 3 puertos de serie del mega disponibles. tengo una libreria que no se si esta disponible en arduno 1.0.1, si la necesitas dimelo. no es mia.
    http://www.ebay.com/itm/I2C-Serial-2004-LCD-Module-20X4-IIC-TWI-LCD-for-ATmega328-1280-2560-board-/160700138365?ssPageName=ADME:L:OC:ES:3160

  • Optoacopladores y transistores tipo darlington en las I/O, actualmente usamos transistores TIP120 o 122, que funcionan bien pero hay que soldarlos uno a uno + su diodo y resistencia. Hay chips darlington de 8 I/O con su resistencia y diodo ya incorporado y claro es mucho menos trabajo de soldadura.

  • Conectores de placa: Estoy indeciso sobre si usar los actuales molex de crimpar de 2,54 mm. o cambiarlos por los PhonixContact de 5,08 mm. con terminal roscado.

  • Conexión USB: La vamos a eliminar y en su lugar usaremos el cable FTDI para la programación, así el coste por placa de la fabricación debería ser más económica.
    he visto hacer esto en otras placas, de verdad crees que vale la pena el ahorro economico? estamos hablando de algo "industrial" y cuanto puedes ahorrar haciendo esto, 3 o 4 euros por placa? creo que la sencillez y conveniencia lo supera frente al ahorro. no se, piensalo.

  • Frecuencia de trabajo: Es posible trabajar a 20 Mhz en vez de los 16 Mhz??? Asi aumentaríamos las prestaciones sin gastar un €.
    Si alguien sabe como por favor hechar un cable.

una pregunta, tus entradas digitales optoacopladas que voltaje admiten? me gustaria saber si puedes recomendarme como hacer una entrada optoacoplada para una tensión de 70Voltios DC y leerlo con un pin digital del arduino. Es lo que haceis vosotros,no? pero con otro voltaje seguramente.

Gracias por tus consejos Sergegsx, no podemos usar esa pantalla ya que es solo 20x4, necesitamos 40x4.
Sobre el USB, realmente no aporta nada, ya que entiendo que programar con el cable FTDI es exactamente igual a hacerlo con el USB. Entonces porque debo añadir una complicación/coste adicional?

Sobre las entradas a 70V, aún no hemos empezado a usar optoacopladores en las entradas. Pero sin haberlo probado yo usaría un transistor que se active a esos 70V y la salida si debe estar optoacoplada que active un optoacoplador tipo 4N25 que son muy económicos. Desconozco si existen optoacopladores que permitan un voltaje de entrada tan alto o si se puede acoplar una resistencia en serie o diodo zener para bajar el voltje antes de entrar al optoacoplador.

Aprovecho para lanzar dos preguntas:
1.- Es necesario montar el regulador de voltaje de 3,3 Vdc cuando se hace una placa de arduino propia? Para que sirve?
2.- Existe alguna pantalla más grande que la de 40x4 de uso simple y económico para arduino? Es decir no solo que muestre más carácteres, sino que se vean grandes.

Lo veo realmente muy Interesante este proyecto ya que implementar un PLC en una maquina basica sale muy costoso, aparte de su programacion ,me interesaria saber si puedo compartir algunas de mis experiencias contigo Jordi. Tengo algo de experiencia en electronica Industrial.
Mi primera idea seria apantallar por completo la placa de control del Microcontrolador, esto se puede realizar mediante malla metalica puesta a tierra, es decir, una jaula de Faraday.
Tambien muy importante que la linea de alimentacion del Atmega se toma de una fuente propia muy estable y aislada de la potencia, mi idea seria usar una bateria -tampon que alimente al Atmega, esta bateria estaria alimentada por un circuito de carga muy estable y a una cierta distancia de los contactores, desde esta fuente con cable apantallado alimentar al Atmega
Las salidas y las entradas del Atmega yo las realizaria mediante Optoaclopadores.
realizaria una placa independiente para los contactores, todos ellos con circuitos de proteccion en sus bobinas para evitar el ruido electrico en su actuacion. Con bobinas de 20 mH y condensadores.
Para mi es Basico el aislar completamente la alimentacion de Potencia de las lineas de alimentacion del Atmega, por que seguramente por estas es por donde se trasladan los armonicos realizados en las comuntaciones de los contactores de potencia. Es decir, el circuito de control debe de estar aislado de todas las interferencias creadas por los contactores.

Espèro que esta idea te haya podido ayudar, estoy a tu entera disposicion no lo dudes.

Manuel

A tu pregunta te dire que la alimentacion del Atmega esta comprendida entre 3,3 y 5 V nominal
Si alimentas con el minimo voltaje, puede que la tension de control para los reguladores internos del Atmega sea insuficiente. Lo ideal es alimentarlo a 5 V si es posible desde una bateria-tampon externa que sea autoalimentada por una fuente estabilizada. Si alimentas la placa desde su conector de serie, se ha de calcular entonces la caida de tension presente en el regulador de la placa, que es de unos 1, 5 V por ello hemos de alimentar a un voltaje superior, es decir, 5 V + 1,7 V = 6,7 V
Se me ha ocurrido una idea y te la comento a ver que te parece. Por que no utilizar Reles de estado Solido en sustitucion de los contactores de potencia ? Con esto evitas las tensiones inducidas en las bobinas de los contactores, ya que los reles de estado solido son estaticos y estan optoaclopados internamente.
Los reles de estado solido pueden ser actuados directamente desde las salidas del Atmega ya que su corriente de actuacion es de unos 50 mA nominal, y la carga que soportan es desde los 300 W a los 5000 W en modelos comerciales.
La gran ventaja es que al no tener elementos mecanicos, su vida es muy elevada y al no disponer de bobina de exitacion estan libres de generar sobretensiones inversas y ruido en los cables de alimentacion

Espero que estas ideas te sean de utilidad.

Manuel

Si las salidas usas tip estas usando CC, y debes tener unos buenos picos de sobre tension. deberias poner un filtro rc y un varistor en paralelo a la bobina del contactor.

.047 47ohms
------||---^^^------
| _ |
---|/|------------
-/
varistor segun voltaje de bobina

esto quita mas interferencia y suprime la chispa del despegue de la bobina.

perdon por el dibujo

Sigo opinando que la solucion utilizado reles de estado solido es la mas eficaz ya que no producen ninguna sobre tension en los estados de conmutacion puesto que estan optoacplopados internamente en sus circuitos de entrada / salida

Para las salidas podrías usar un ULN2003.
¿Que tipo de maquinas fabricas?

haa eso me olvidaba.. no vimos el esquema pero imagino las entradas y salidas estan aisladas!! cada una con su fuente.
Trabajaje muchos años fabricando automatismos en una empresa y usaban ese diseño en ambientes muyyyyy ruidosos sin problemas

Muchas gracias por todas vuestras respuestas!

Os cuento lo que tenemos hasta el momento:

  • Controladora/micro: Atmega1284P, porque es muy fácil de implementar en placa (soldar el Mega2560 es imposible para mi) y con más posibilidades que un Arduino Uno. La idea es hacerlo funcionar a 20Mhz pero con todo el soporte IDE de Arduino. ¿Alguien sabe si se puede modificar en alguna manera el bootloader para soportar los 20Mhz con las librerias de Arduino?

  • Relés de estado sólido: Son una gran cosa, pero su implementación es algo difícil, pues la parte de control (la CPU con sus I/O, etc.) debe ir separada de la parte de potencia. Es decir que si un usuario mete mano a la CPU no quede frito. Entonces es mucho más fácil una salida de 24Vdc que active un contactor en carril DIN.

  • Sobre el filtro RC: No lo implementaremos en placa, ya que descubrí que hay contactores con el filtro ya integrado en el propio contactor por el mismo precio (les llaman contactores para PLC).

  • Sobre la fuente de alimentación: Comparto que es un tema crucial. De momento alimentamos de la siguiente manera: 230Vac a 230Vac mediante trafo de aislamiento, luego F.A. conmutada estándar de 24Vdc marca Pulse que alimenta a una FA conmutada en miniatura marca Traco de 5Vdc 1A, entre la FA de 24Vdc y la de 5Vdc he puesto un condensador cerámico entre Vcc y Gnd, una bobina Vcc a Vcc y otro condensador cerámico Vcc a Gnd, tal como sugiero Traco en su datasheet para cumplir con una normativa IEC.
    ¿Alguna sugerencia?

  • A cada IC se le pondrá un condensador cerámico de 0,1uF.

  • Pantalla: Salida a pantalla LCD alfanumérica de 40x4 en paralelo. He visto que se puede poner un conversor I2C a paralelo, así que haré esto para ahorrarme 8 salidas! espero no sea muy difícil.

  • Salidas panel de mandos: Ayer descubrí por indicación del foro que existen conversores I2C a paralelo con interrupción, y que por lo tanto si detectan un cambio activan una interrupción en el Arduino. Esto puede ser genial! Ya que gano mucha velocidad en detectar las pulsaciones.
    Por lo tanto probaré con el: MCP23016-I/SP

  • Otras salidas: Gran duda!
    Las PWM conectaran con drivers de motores paso a paso, que protección puedo poner???
    Otras iran con un expansor tipo multiplexor o demultiplexor. En este punto estoy estancado:
    He visto que algunos fabricantes ponen un diodo Zener de 5,1V en algunas salidas, supongo para que actue a modo de fusible, en otras drivers darlington, en otras optoacopladores... Es decir parece que según el tipo de función que tenga cada salida hacen una cosa u otra... fff esto me tiene dándole vueltas a la cabeza...

El lunes postearé fotos de como va quedando, mientras tanto si alguien tiene alguna otra sugerencia se lo agradeceré un montón.

maxid:
haa eso me olvidaba.. no vimos el esquema pero imagino las entradas y salidas estan aisladas!! cada una con su fuente.
Trabajaje muchos años fabricando automatismos en una empresa y usaban ese diseño en ambientes muyyyyy ruidosos sin problemas

¿Cómo las aislabais?

maxid:
Si las salidas usas tip estas usando CC, y debes tener unos buenos picos de sobre tension. deberias poner un filtro rc y un varistor en paralelo a la bobina del contactor.

.047 47ohms
------||---^^^------
| _ |
---|/|------------
-/
varistor segun voltaje de bobina

esto quita mas interferencia y suprime la chispa del despegue de la bobina.

perdon por el dibujo

Usaremos contactores para PLC, que ya integran la protección, valen lo mismo y te ahorras un faenon.

el sistema usaba un cpu intel, com memoria ram, memoria de programa y controlador de perifericos como un micro pc. De ahi salia una manguera a la placa IO o IO+AD (conversor de 12 bits 8 enteradas) la fuente digital solo alimentaba los latch de entradas y salidas del bus comun.
Las salidas y entradas tenian optos. Las salidas usaban triacs con fuente 24VCA es mejor que tener una fuente en continua tenes mayor distancia de control. (lo usabamos en hormigoneras donde el contactor esta al menos a 30 mtr de la cpu)
Las entradas tenian un 7812 que alimentaba las entradas, fines de carreras, señales de contactores, etc.
te hago un mini croquis de 1 bit para que entiendas.

maxid:
el sistema usaba un cpu intel, com memoria ram, memoria de programa y controlador de perifericos como un micro pc. De ahi salia una manguera a la placa IO o IO+AD (conversor de 12 bits 8 enteradas) la fuente digital solo alimentaba los latch de entradas y salidas del bus comun.
Las salidas y entradas tenian optos. Las salidas usaban triacs con fuente 24VCA es mejor que tener una fuente en continua tenes mayor distancia de control. (lo usabamos en hormigoneras donde el contactor esta al menos a 30 mtr de la cpu)
Las entradas tenian un 7812 que alimentaba las entradas, fines de carreras, señales de contactores, etc.
te hago un mini croquis de 1 bit para que entiendas.

Gracias maxid! Si, con esa distancia es mucho mejor trabajar en alterna.
Una pregunta que no entiendo del esquema: cómo es que en los dos integrados HC tanto las entradas como las salidas de la CPU van al mismo sitio???

Bueno, ya tengo más claro como hacerlo.

Vamos a hacer un sistema modular, es decir parecido a lo que hace arduino con sus Shields.
En un principio vamos a diseñar 4 tarjetas, más adelante ya se harán más cosas según necesidades.

1.- Tarjeta CPU, es la que integrará el micro Atmega 1284p. Tendrá E/S directas a micro, algunas con multiplexor/desmultiplexor, luego las pwm e interrupciones, conexión a pantalla mediante puerto I2C.

2.- Tarjeta E/S, integrará conversores de bus de I2C a paralelo, para crear entradas y salidas que avisarán a la CPU mediante interrupción de cambios en las E/S (así espero ahorrar tiempo de cálculo en la tarjeta de la CPU y mejorar el tiempo de respuesta de las salidas)

3.- Tarjeta controladora de motores: La idea es implementar un sistema para contar los pulsos de encoders, no un driver de potencia. Esto aún no se muy bien como hacerlo... Creo que hay algun IC especializado para hacerlo.

4.- Tarjeta controladora de pantalla y panel de control. Es una tarjeta que implementa varios conversores de bus I2C a paralelo, se encarga de la comunicación de la pantalla, de controlar cuando se pulsa un botón en el panel de mando e iluminar los botones que tienen iluminación.

Ahora viene lo bueno: La tarjeta CPU se comunicará por su parte superior e inferior a otras tarjetas que se superpongan por arriba o por debajo, esta conexión integrará:

  • Alimentación 24Vdc directa de la F.A.
  • Comunicación I2C
  • Comunicación serie (No se si es realmente necesario)
  • Comunicación a interrupciones de la CPU

Todas las tarjetas recibirán alimentación a 24Vdc, que se transformarán internamente para las necesidades de la tarjeta.

La idea es que se puedan superponer varias tarjetas incluso del mismo tipo y de forma caótica para que formen un todo organizado. Como no se muy bien como trabaja el bus I2C y serie, no se si alcanzaremos las velocidades necesarias para un trabajo fluido. Por ello pido ayuda a alguien que pueda tener más experiencia que yo en Arduino para poder avanzar.

svalls:
Gracias maxid! Si, con esa distancia es mucho mejor trabajar en alterna.
Una pregunta que no entiendo del esquema: cómo es que en los dos integrados HC tanto las entradas como las salidas de la CPU van al mismo sitio???

son latch tri-state cuando no estan habilitados estan en alta impedancia pudiendo compartir el mismo bus sin interferir uno al otro.
Esto requiere que tengas un timer haciendo lecturas de las entradas alternando con las salidas

estoy armando algo mas simple que lo tuyo en lo que voy a usar un cs5532/34 como conversor AD de celulas o celdas de carga, de 24bits de resolucion y puerto spi. Un muy buen conversor con sampleos de hasta 3800 mps
Cirrus tiene otros de proposito general de la misma resolucion muy buenos, lo unico malo es que son ssop, algo chiquito de soldar.