Go Down

Topic: Proyecto Arduino Mega 2560 como controladora industrial (Read 51901 times) previous topic - next topic

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.
El que pregunta aprende, el que responde aprende a responder.

svalls


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???

svalls

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.

maxid

#18
Oct 13, 2012, 10:31 pm Last Edit: Oct 13, 2012, 10:32 pm by maxid Reason: 1

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
El que pregunta aprende, el que responde aprende a responder.

maxid

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.
El que pregunta aprende, el que responde aprende a responder.

manumoli

Para que  quieres  subir a los 20 MHhz  ¿  un microcontrolador  a 16 Mhz  ya es potente de sobras, solo es  cuestión de optimizar el  código de Programa
Estamos hablando de tiempo de instrucción de 20 nanosegundos , mi consejo es que se optimice el código lo suficiente evitando tiempos de espera, delays, y bucles infinitos que enlentecen el programa, con un código bien optimizado el Micro es rapidísimo en su respuesta
Los relés de estado sólido pueden conmutar tanto  AC como DC y esta puede ser de 12 o 24 V con lo cual no hay problemas si se manipula en la placa de control. Piensa que una salida a relé  te va a producir picos de tensión inducidos en su bobina, y aunque se atenué, siempre produce armónicos en las líneas de alimentación
La parte de Potencia evidentemente ha de estar protegida para evitar accidentes al manipular pero  esto  es así en todos los casos al manejar más de 24 V tanto en DC como en AC
Opino que  implementar tantas fuentes conmutadas no es una buena solución ya que trabajan internamente a 30 khz  y por consiguiente son fuentes  de radiación de interferencias magnéticas.  Para el control de la placa yo aconsejo una Batería de litio  recargable,  y bien filtrada con  condensadores electrolíticos.  Me refiero que la alimentación del Atmega sea independiente totalmente de las  demás lineas de alimentación. Con ello  tenemos una estabilidad absoluta en la alimentación más  todavía si se alimenta desde una batería  de litio   recargable.
Sobre  la pantalla….porque ha de ser interfaz  paralelo ¿  una  interfaz Serie  te requiere solo tres cables  y es mucho más  fácil de implementar.

svalls


Para que  quieres  subir a los 20 MHhz  ¿  un microcontrolador  a 16 Mhz  ya es potente de sobras, solo es  cuestión de optimizar el  código de Programa
Estamos hablando de tiempo de instrucción de 20 nanosegundos , mi consejo es que se optimice el código lo suficiente evitando tiempos de espera, delays, y bucles infinitos que enlentecen el programa, con un código bien optimizado el Micro es rapidísimo en su respuesta
Los relés de estado sólido pueden conmutar tanto  AC como DC y esta puede ser de 12 o 24 V con lo cual no hay problemas si se manipula en la placa de control. Piensa que una salida a relé  te va a producir picos de tensión inducidos en su bobina, y aunque se atenué, siempre produce armónicos en las líneas de alimentación
La parte de Potencia evidentemente ha de estar protegida para evitar accidentes al manipular pero  esto  es así en todos los casos al manejar más de 24 V tanto en DC como en AC
Opino que  implementar tantas fuentes conmutadas no es una buena solución ya que trabajan internamente a 30 khz  y por consiguiente son fuentes  de radiación de interferencias magnéticas.  Para el control de la placa yo aconsejo una Batería de litio  recargable,  y bien filtrada con  condensadores electrolíticos.  Me refiero que la alimentación del Atmega sea independiente totalmente de las  demás lineas de alimentación. Con ello  tenemos una estabilidad absoluta en la alimentación más  todavía si se alimenta desde una batería  de litio   recargable.
Sobre  la pantalla….porque ha de ser interfaz  paralelo ¿  una  interfaz Serie  te requiere solo tres cables  y es mucho más  fácil de implementar.



Gracias por tu respuesta!
- Quiero hacerlo a 20Mhz porque el micro puede, y como sobretodo se trata de aprender experimentando quiero saber hasta donde puede llegar. Ya se que es mucho más fácil seguir el estándar y hacerlo a 16Mhz, pero entonces: ¿Dónde está la diversión?
- Quizá una muy buena opción sea implementar relés de estado sólido de carril Din, voy a ver, seguro que deben existir, lo que no tengo tan claro es que existan para trifásica.
- Si no es mucha molestia, podrías adjuntarme un link con un esquema para implementar el circuito de alimentación con bateria? Es que me parece una idea genial, pero no se ni por donde empezar a meterle mano.
- La pantalla será con interfaz paralelo porque son mucho más económicas, pero en la placa de la pantalla irá integrado un conversor I2C a paralelo, por lo que efectivamente será como un interfaz serie.

Gracias por tu aporte manumoli!

manumoli

tengo  un problema  no me deja  subir el esquema, te dejo mi  correo electronico para  si te interesa que te lo envie  via  E-mail  por  aqui no me deja  adjuntar   archivos  creados con  POFICAD no se bien por que me lo  deniega  constantemente,   Un saludo      svall

                                                              manumoli2006@gmail.com


svalls

Bueno, seguimos avanzando.
Como el proyecto no tendrá puerto USB, lo programaremos por ICSP. Pero: Es tan difícil!

Publico un problema que he publicado en otros foros, pero pongo aquí para dar continuidad y tenerlo todo centralizado:

Problema con AVRISP mkii con Snow Leopard.

Tengo un mac con el Arduino IDE 1.01, y quiero subir los sketchs y bootloaders a través de un AVRISP mkii que me acabo de comprar en RS. La placa en cuestión es un UNO R3 y un Mega2560 R3.
El tema es que selecciono la placa en el IDE, el programador, conecto el AVRISP al ICSP del arduino con el cable rojo mirando al puntito del puerto, conecto la alimentación al arduino, el AVR se pone con luz verde, le doy a "subir usando programador" se pone otra luz verde en el AVR, y acto seguido:

avrdude: stk500v2_command(): command failed
avrdude: stk500v2_program_enable(): bad AVRISPmkII connection status: SCK fail
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

Y se pone a parpadear en rojo una luz del AVR.


fff estoy atascadísimo! Es que acaso es taaaan complicado?

manumoli

La verdad es que  yo con Mac no tengo  experiencia alguna. Siempre ha sido desde  PC  o compatible
Hasta el punto que yo se, el Bootloader se puede  reprogramar desde un Atmega que ya lo tenga hasta otro atmega en una Protoboart
Eso si, siempre el mismo  modelo de  Atmega evidentemente.
Yo he programado  Microcontroladores PIC y no hay  dificultad alguna en ello, ya que implementan la comunicacion de datos desde el puerto serie  RS232, tan solo se envian los  datos desde tres pines hacia el  Microcoontrolador poniendo en estado bajo el pin de MCRS
Por lo que yo se del Atmega, se ha de modificar un par de lineas del codigo del  Bootloader ants de  su grabacion en el  Atmega no programado, luego de esto  realizar la grabacion, y por ultimo  reprogramar las lineas  modificas en el master



manumoli

Por cierto, una  duda,  ya seleccionas el puerto COM al que envias los  datos desde  el  mac  hacia el  programador  ?
Lo  digo esto por que en el  PC  si se ha de seleccionar previamente el puerto de comunicaciones hacia el Programador
En el caso de los portatiles por ejemplo que no  incorporan puerto  RS232  se ha de crear un puerto  virtual por emulacion  con los drivers  correspondientes para que el  Programador se comunique con el  Portatil

manumoli

Te envio un enlace a una pagina  para Mac y la configuracion del  Programador que tu  utilizas, pero esta  todo en ingles no se si te podra ayudar.  Un saludo  cordial.

http://www.ladyada.net/learn/avr/setup-mac.html

manumoli

El mensaje de error que te da es un  problema de  conexionado
Estos son  los pines de conexion del puerto  ICSP
1- VPP: Tensión de programación.
2- VDD: Alimentación positiva.
3- VSS: Alimentación negativa
4- ICSPDAT / PGD / DATA: Datos.
5- ICSPCLK / PGC / CK: Reloj.

Es posible que  la configuracion del programador  no se corresponda con este esquema en la placa que contiene el  Atmega, deberias de  verificar este punto en concreto.  Un saludo

svalls

Bueno, parece ser que parte del problema está solucionado.
Al parecer mi estupidez es solo superada por mi ignorancia: Estaba usando el conector ICSP equivocado. Se ve que tanto el UNO como el MEGA2560 tienen DOS conectores ICSP, uno para programar situado justo al lado del AREF, y otro no se para que pero mucho más accesible.

Pues ahora el error que me sale es:
- Microcontrolador encontrado incorrecto. Expected signature for ATMEGA328P is 1E 95 0F.
Eso probado con dos Arduino Uno oficiales y correctamente seleccionados en el IDE.


Por otra parte, tengo otra pregunta: existe algun IC como el CD74HC4067E pero con una señal de interrupción?
Es que estamos probando la expansión de I/O, tanto con multiplexación como con buses, y veo que en las entradas es imprescindible la salida a interrupción, pues de no disponer de ella si el programa del micro esta liado haciendo lo que sea en el loop puede no detectar la pulsación de por ejemplo un botón.
Por lo tanto: Es imprescindible la ejecución de interrupciones como mínimo en las entradas.
¿Algun IC recomendado?

manumoli

Estas  seleccionado mal el Microprocesador.  El  Aurdino  Uno  usa  el Atmega 328-PU
Y es posible que en  programador tenga seleccionado por defecto el  Atmega 328-P
Verifica este punto que es muy sutil pero  produce muchos dolores de cabeza
A tu segunda pregunta, todos los Integrados  Multiplexores disponen de un pi n ENABLET
, pero ten  en cuenta que esta señal que se activa a nivel bajo afecta a todas sus entradas o salidas, es decir, las  inhibe  en grupo no de forma individual.
Es decir. La señal de interrupción afecta al chip  Multipelxor, tendrás por  lo tanto que implementar  por  Software que esta señal también sea reconocida en el ciclo  de programa
Se me ocurre que tendrás que  implementar una entrada directa de interrupción hacia un pin libre del Atmega, o en su caso, implementar a circuitería lógica  cableada lo cual  complica bastante el tema a  mi entender.  Un saludo

Go Up