PLC USB






Este es un circuito que se desarrolla en función a varios proyectos del site, primero el PLC - uPLCCS - PIC el cual detalla un PLC de programación ICSP (donde uno debe contar con su programador propio), pero este proyecto muestra que se puede programar tanto en ASM, como C, como LADDER, gracias a un IDE para LADDER llamado LDmicro que se encuentra disponible de forma gratuita en la Web de su autor (http://cq.cx/ladder.pl) también van a encontrar los tutoriales, también es posible programar en C con el compilador que deseen (para Microchip), o bien el viejo conocido ASM.
Otro proyecto que se amalgama con este nuevo PLC USB es el transceptor USB/UART, el cual podemos encontrar en el blog como Conversor USB UART TTL, este en base al transceptor MCP2200 cumple la función de crear un puerto serial virtual vía la conexión USB, el cual con sus drivers (proporcionados gratuitamente por Microchip), encontraremos en nuestro administrador de dispositivos del OS, un nuevo puerto Serial. 
Como la mayoría de los microcontroladores que utilizan programación en circuito requieren una señal serial de dos hilos por ejemplo el Clock y el Data, para la programación del mismo, también requieren de una tensión elevada para acceder al modo programación (actualmente existen microcontroladores que utilizan bajo voltaje para esta programación LVP), La mayoría de los microcontroladores utilizan de 10 a 13V para entrar en modo programación lo cual como sabrán excede nuestros 5V del USB, la solución de los programadores en circuito del tipo serial, es aprovechar la norma RS232 que establece unos +/-10V en su norma lo cual aprovechado y canalizado de forma tal provee de esa tensión de programación a los microcontroladores.
Hasta aquí seguimos igual, ya que no usaremos puerto Serial sino USB, aquí el problema de los transceptores comerciales, la mayoría (el 99%) poseen una salida serial a nivel TTL, es decir en 0 y 5V lo que no nos permite programar el microcontrolador ya que requerimos mas de 10V para ello, Claramente es posible realizar una pequeña fuente del tipo SMPS Step-Up para elevar esa tensión en el pin de grabación pero aquí tenemos otra solución tan antigua como la anterior.
Los llamados Bootloader, estos son Cargadores de Arranque cumplen la función de canalizar el programa que programamos en un sector preestablecido de la memoria interna sin necesidad de programar a nivel hardware (con el acceso a programación que mencionaba anteriormente con los 10 a 13V) sino que el programa se aloja mediante otros pines que no son los de programación Data y Clock, es decir.
El microcontrolador debe programarse a nivel hardware una sola vez, donde se grabara el Bootloader, una vez grabado este ya no se requiere grabar nuevamente el microcontrolador.
Esto posee pros y contras: 
Pros, es que es mas sencilla la programación, no se requiere de placas especiales de programación y facilita la transferencia del archivo. 
Contras, se requiere el microcontrolador con el Bootloader grabado previamente y este mismo consume una pequeña parte de la memoria del micro la cual se restara al programa que realicemos. 
En el caso del Bootloader también se puede descargar gratuitamente desde la Web de Microchip (debe ser el que soporta el microcontrolador que vamos a utilizar y también debe detallar el clock que utilizamos).
En el caso de este PLC se utiliza un PIC16F876A el cual cumple su función correctamente pero siempre se pueden utilizar otros diferentes, por razones de costos este viene bien, pero claramente hay otros con puerto USB embebido mediante HID lo cual nos ahorra el MCP2200.
El software debe ser cualquiera que envíe el archivo vía serie que el puerto serial será el virtual creado por el driver del MCP2200 mencionado anteriormente. 
En mi caso he desarrollado un programa cargador para este fin en lenguaje Delphi, pero pueden realizarlo ustedes en el lenguaje que quieran solamente tienen que tener en cuenta que la velocidad de transferencia serial es 9600bps, pero en realidad pueden usar cualquier cargador de Internet.
En la nota de aplicación 851 pueden encontrar una versión del Bootloader de Micrcochip. http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en012031

Especificaciones:

8 Entradas Digitales de 12/24V asiladas con opto-acoplador.

5 Entradas analógicas hasta 5V auto-reguladas.

4 Salidas a contacto de 12V a 250Vac 5A.

Puerto de alimentación de 12V con protección de cambio de polaridad.

Puerto USB, para la carga del programa y para comunicaciones seriales.

Botón de Reset, para reiniciar el sistema y para cargar el programa.

Microcontrolador a utilizar PIC16F876A

            Tipo de memoria de programa: Flash
            Memoria de programa: 14KB
            Velocidad del CPU: 5 MIPS
            Memoria RAM: 368 bytes
            Memoria EEPROM: 256 bytes
            ADC: 5 canales de 10bit de resolución
            Temperatura de trabajo: -40 a 125°C

A continuación se detalla el hardware como también su PCB.

 

 




55 comentarios:

  1. Respuestas
    1. Hola, como estas?, actualmente esta funcionando, no ha parado ya que se lo utiliza en una escuela secundaria para enseñar el lenguaje Ladder y realizar procesos automatizados.
      De todas formas el programa LDmicro te permite generar el .hex tanto para Microchip como para Atmel, asique no es necesario tener esta placa con interfaz de entrada salida, podes programar en ladder y pasarlo a un microcontrolador y luego ejecutarlo en un protoboard si queres, o en un simulador como proteus.
      Saludos!

      Borrar
    2. Excelente aporte, esto hacermas al usuario a la naturalesa propia de lo que es un plc, ya que la industria y muchas institucones ponen al plc como algo super complejo y que solo ellos pueden desarrolar.

      Borrar
    3. Bueno, tene en cuenta que un PLC industrial de primera marca puede ser bastante complejo en su diseño y programación, en este caso solo estoy mostrando una solución de bajo costo y muy resumida o sencilla de lo que podría ser un PLC para usos domésticos. Saludos.

      Borrar
  2. Hola Como estas? vi el video que subiste en youtube, es muy bueno el material que subiste y la placa que armaste, pero la verdad, por sobre todo es admirable la intencion de compartir el conocimiento adquirido y los diagramas de la placa que construiste. Un aplauso de pie de este colega!!!

    ResponderBorrar
    Respuestas
    1. Hola como estas? Gracias!!!, lamentablemente la placa ya no la tengo en mi poder como para hacerle una review mas profunda, pero de todas formas es un hardware sencillo.
      Saludos!!

      Borrar
    2. disculpa amigo yo quisiera saber cuales son todos los materiales que se ocupan para este plc

      Borrar
  3. Hola
    Una pregunta, tienes la libreria del MCP2200 para isis? Lo he buscado pero no lo encentro.
    Saludos y muy buen trabajo.

    ResponderBorrar
    Respuestas
    1. Hola, como estas?, el MPC2200 no lo tengo en libreria, lo hice a mano es solo para el diagrama, no funciona en simulacion.
      Saludos!

      Borrar
  4. Hola Sebastian, como va?. Antes que nada Feliz Día, Maestro ...
    Bien ya tengo montada esta placa aunque con algunas modificaciones porque solo necesito salidas a relé pero el resto del circuito es tal cual a este. Pero no logro que el AN1310 me reconozca el bootloader del micro (la pc me reconoce un dispositivo en un puerto y todo, creo que toda esa parte esta bien) cada vez que sigo los pasos para que me lo reconozca solo me dice "Bootloader not found".
    Por otro lado cuando quiero cargar ese bootloader en el micro (16f886) en la ventanita de mensajes de la interfaz de Pickit2 me dice "Warning:No configuration words in hex file" , todo esto siguiendo los pasos de la hoja de datos del AN1310, o sea seleccionando el micro en MPLAB, configurando los fuses y volviendo a compilar el programa.. Si me podes tirar un centro te lo agradecería.. saludos

    ResponderBorrar
    Respuestas
    1. Hola! Gracias! jeje llegue medio tarde al comentario.
      Que bootlader estas usando?, Lo que pasa que para que te funcione el AN1310 tenes que usar también el Reset en el BridgeUSB que va del RTS del Bridge mediante un diodo en inversa al RST del micro. En este caso no estaba usando el AN1310, estaba usando otro Bootloader.
      El Bootloader AN1310 también tenes que configurarlo desde el programador (en cuanto a los fuses).
      Esta placa responde a este proyecto mira:
      http://electgpl.blogspot.com.ar/2016/01/placa-de-desarrollo-usb-para-pic16f876a.html

      La placa con el AN1310, responde a este otro proyecto:
      http://electgpl.wixsite.com/board/hard-1

      Saludos!

      Borrar
    2. Hola!
      El Bootloader que estoy usando es el que te da Microchip cuando instalas el AN1310, digamos entonces el AN1310 no me serviría por faltarme ese diodo en inversa. Tendria que usar otro cargador como el que propones vos, pero no tengo el bootloader para el 16f886.
      Hay que modificar mucho del programa del 876 para que funcione con 886? Gracias

      Borrar
    3. Hola, no lo tengo para el 886 que responda a este hard, o no se donde esta, no lo encontre. Pero podes agregarle el diodo desde el RTS del bridge al Reset del micro y listo. lo podes improvisar por abajo del pcb si queres y listo. Ahi lo haces compatible con AN1310 y podes usar cualquier micro.
      Saludos

      Borrar
  5. hola sebastian, como esta excelente estos proyectos felicitaciones, una pregunta me podrías indicar si no es mucha molestia donde podría localizar el bootloader para estos pic los he estado buscando sin ningún resultado muchas gracias de ante mano

    ResponderBorrar
    Respuestas
    1. Hola como estas, Bootloader oficiales tenes los de microchip basados en la nota de aplicación AN1310, en este caso (en este proyecto) no estoy usando ese bootloader, estoy usando uno propio, los archivos del proyecto están acá:
      https://sites.google.com/site/electgpl/storage/PLC%20USB.7z?attredirects=0&d=1
      Pero, si queres podes implementar el AN1310, solo que este requiere de una conexión estará mediante un diodo en inversa desde el RTS del bridgeUSB hasta el RST del MCU.
      Saludos!

      Borrar
  6. Hola Sebastian, estoy desarrollando un equipo automatizado, pero no estoy seguro de utilizar servos o solenoides, la función que van a realizar es sostener una cuerda o soltarla en el caso del solenoide, o en el caso del servo, sería un ajuste para que en vez de tener un giro de 180º, gire aproximadamente 3 vueltas, es decir unos 1080º o más...
    de acuerdo con tu experiencia, si yo montara el sistema con una placa parecida a la tuya, que sería mejor, tomando en cuenta que las salidas para solenoide solamente usarian un bit, y en el caso de los servos usar pwm... necesito 10 salidas así.
    gracias

    ResponderBorrar
    Respuestas
    1. Hola como estas?, si necesitas salidas digitales podes usar cualquier microcontrolador, pero si necesitas salidas PWM tenes que buscar alguno que implemente PWM por hardware, aunque sinceramente 10 canales PWM es algo muy difícil de conseguir, se me ocurre que podes usar cualquier microcontrolador y agregarle un expansor PWM externo, esto seria un integrado extra que conectas por protocolo serial y te expande la cantidad de salidas PWM. por ejemplo el expansor PCA9685 es un integrado que se conecta por i2c y te da hasta 16 canales independientes PWM, con ello resolverías tu problema.
      Saludos!

      Borrar
  7. como se graba el paso donde se descarga el bootloader al pic??????

    ResponderBorrar
    Respuestas
    1. Hola, como estas, en este link podes descargar el bootloader para grabar en el mcu y el programa cargador. https://sites.google.com/site/electgpl/storage/PLC%20USB.7z?attredirects=0&d=1
      Saludos

      Borrar
  8. Hola me interesaria poder hacerlo, me encuentro dando mis primeros pasos en lo que PLC y quiaiera armar esa placa, me podrias pasar la lista de materiales? gracias compañero, muy buennos videos

    ResponderBorrar
    Respuestas
    1. Hola, no encuentro el diagrama para sacar el bom del programa, pero los componentes son los del diagrama, te diría que los saques de ahí, es mas, tal vez te convenga analizar si conseguís esos componentes o si tenes que cambiarlos por otro.
      Saludos.

      Borrar
  9. hola, antes que nada que buen proyecto y me gustaria hacerlo, pero quisiera saber que optoacoplador estas usando, es que en el diagrama no aparece el modelo, gracias de antemano

    ResponderBorrar
    Respuestas
    1. Hola, es verdad, esta usando un 4N25, la segunda versión que aun no subo, esta usando los PC817 que son mas pequeños y mas económicos.
      Saludos.

      Borrar
  10. Hola, Sebastian, lo armas para vender, también lo usariamos para enseñar a programar en una escuela agraria(La Plata), gracias

    ResponderBorrar
    Respuestas
    1. Hola, por el momento no tengo ninguna en stock, estoy desarrollando la versión 2 que es mas compacta aun con algunas mejoras, y otra diferente que en realidad es lo mismo pero basada en AVR con un atmega328 para poder programarla con el IDE Arduino. Ni bien la tenga si queres déjame un correo y te aviso, igual la voy a subir acá ni bien la tenga.
      Saludos.

      Borrar
  11. disculpa en vez del mcp2200 podria usar un conversor usb a ttl

    ResponderBorrar
    Respuestas
    1. Hola, si, podes usar cualquier bridge USB UART, CH340, FT232, PL2303, etc...
      Saludos.

      Borrar
  12. hola Sebastian C, me he de buen gusto saludarte quiero saber si tiene en venta, ejemplares del proyecto o si sera posible obtener los esquematicos para enviar a hacerlos en una pagina especializada en el desarrolllo de placas via internet. si se requere algun pago o aporte dejadme saber que la verdad me interesa obtener una de tus placas si es posible la nueva. mi correo es theliondjprodutions@gmail.com aqui me puede dejar saber lo que se necesita para ayudar a la causa y obtener este tan genial producto.
    las gracias anticipadas. ER

    ResponderBorrar
    Respuestas
    1. Buen dia, en este momento no tengo mas, tengo que volver a producir, también estoy haciendo algunas modificaciones a la nueva versión, seguramente salga la versión nueva directamente.
      Gracias!!
      Ni bien pueda lo subiré a este blog, estoy trabajando en una basada con AVR (Atmega328) para que sea también compatible con Arduino IDE, le interesa?
      Saludos.

      Borrar
    2. saludo claro me interesa, si esta en la sisponibilidad de vender algunos cuando esten listo, nos ponemos en contacto y lo hacemos

      Borrar
    3. Hola sebastian gracias por compartir estoy volviendo a ver los pic ya que en la universidad todo era asembler y lo veía muy complicado,esperenado tu nuevo proyecto cumpa lei que será como aduino esta nueva versión 2, gracias por compartir tus esquemas, el conocimiento es universal saludos de la paz Bolivia.
      Atte. Ing. Luis Gomez Flores

      Borrar
    4. Hola, si, estoy haciendo una version 2 que es similar a esta (con algunas mejoras y protecciones) que esta basado en Atmega328P, podes utilizarlo tanto con AtmelStudio como con ArduinoIDE y sus derivados. Aun no lo tengo, pero estoy trabajando en ello.
      Saludos.

      Borrar
    5. buenas noches saludos estoy interezado en saber si lo logro hacer con arduino

      Borrar
    6. Hola aca tenes una version con arduino: https://github.com/electgpl/PLCArduino
      Saludos!

      Borrar
    7. HOLA estimado Sebastian, te felicito y te doy gracias por tus aportes, te quería preguntar, en PCB de plc de arduino nano, el pcb, y la plaqueta es simple capa o doble capa

      Borrar
  13. hola disculpa de cuanto fue el cristal que le pusiste al pic?

    ResponderBorrar
    Respuestas
    1. Hola, es verdad no se ve, el cristal es de 4MHz, igual depende del bootloader que uses en el PIC, porque podrias usar otro bootloader que funcione en 20MHz tambien o 16.
      Saludos!

      Borrar
  14. Buen día compañero. He diseñado un PLC con el MCP2200 y el PIC 16F877A,realizado las configuraciones tanto del Pic en la PC como del mcp cargado previamente el bootloader. Quiero cargar el programa al Pic y me dice herror de escritura que podría ser compañero. Pienso que esta mal el bootloader. Quisiera que vendas el bootloader para Pic 16F877A a 4mhz y 9600 Bps. Mi correo es gumerbd@hotmail.com

    ResponderBorrar
    Respuestas
    1. Claro, si estas usando el bootloader del 16F876, no va a funcionar bien en el 16F877, dejame ver si lo tengo el del 877 y lo subo.
      Saludos

      Borrar
  15. Disculpe compañero quería preguntarlo si lo tiene el bootloder del pic 16f877A Gracias de Antemano.

    ResponderBorrar
    Respuestas
    1. Hola, como estas, si, tengo el bootloader basado en AN1310, no ese que esta disponible ahi en la nota de este plc, Solo tenes que cambiar el programa de windows por el oficial de microchip an1310.
      Lo voy a subi hoy.
      Saludos.

      Borrar
  16. Buen día amigo, muy buen trabajo con tu PLC yo quiero hacer el mio tambien, seria mucha molestia que pudieras proporcionarme el PDF de la PCB para que pueda hacerlo y salga bien las medidas de la placa, un saludo, Gracias Buen Trabajo

    ResponderBorrar
    Respuestas
    1. Hola ahora mismo lo subo a github. Saludos.

      Borrar
    2. https://github.com/electgpl/PLCUSB/blob/master/PLC%20USB%20A4.pdf

      Borrar
  17. hola amigo! la lista de materiales que se usaron?

    ResponderBorrar
    Respuestas
    1. Hola, ahi te paso:

      https://raw.githubusercontent.com/electgpl/PLCUSB/master/Bill%20Of%20Materials%20For%20PLC%20USB.TXT

      Saludos.

      Borrar
  18. hola buenas, soy estudiante de ingeniería y me gustaría poder compartir en escuelas, instituciones y grupos sociales cuan bonito es el mundo de la programación, la automatización y la tecnología. para esto estoy confeccionando una maleta de experiencias que constara con luces piloto, un motor, una correa transportadora (con sus sensores), un tanque para medir nivel, etc. me intereso tú idea de plc, porque quiero aprender el porque de las cosas y es justamente lo que quiero transmitir con mi proyecto. mi pregunta es, si puedo hacer programaciones donde pueda conectar sensores reales de variables físicas como sensores capacitivos, inductivos y motores.
    si tengo que modificarlo o no, si es conveniente según estas especificaciones. y por ultimo algún consejo teniendo en cuenta lo que deseo hacer. de ante mano muchas gracias.
    Saludos.

    ResponderBorrar
    Respuestas
    1. Hola como estas?, en este caso esta placa cuenta con entradas digitales lentas (no es un bus digital), aunque tal vez analizando la propagacion de los optoacopladores se pueda hacer algo, pero no esta pensado para ello. la unica interfaz que tiene es serie/usb, en cuanto a los canales analogicos, son 0 a 10V 0 a 5V, pero no esta pensado para que ingreses 4 20mA o algo asi, en realidad es una placa de expansion pero basica, si queres que tenga entradas especiales y demas, habria que agregarle estas para que puedas agregar otro tipo de sensores (no solo salida contacto seco u opendrain).
      Saludos.

      Borrar
  19. tienen el link del archivo para modificar lo o simplemente me den las dimensiones del pcb

    ResponderBorrar
    Respuestas
    1. Bueno, te dejo el link: https://github.com/electgpl/PLCUSB

      Borrar
  20. Hola como estas? Me pasa algo parecido a otro usuario , el MCP2200 se instalo solo cdo lo conecte por 1ra vez, esta en COM1 a 9600 en la PC, o sea entiendo me reconoce el chip. El tema es que cuando quiero seguir el paso del cargar el bootloader que dejaste en el proyecto se queda "Buscando.." Probe con otro programa el Tiny Bootloader y me dice que no encuentra el Pic. Los leds titilan como que hay transferencia pero no pasa mas de ahi. Que podra ser? Desde ya muchas gracias por cualquier ayuda que puedas darme. sds

    ResponderBorrar
  21. Hola, muy buen trabajo, me gustaria saber si dispondrias del proyecto a la venta?, gracias.

    ResponderBorrar
  22. hola buenas tardes, disculpa me podrías decir el nombre del componente que esta conectado del cristal "U1"la verdad no lo habia visto antes y quisiera investigar mas.

    ResponderBorrar
  23. buen dia estimado una comnsulta este circuito funciona tambien si reemplazo el pic por el f877 o f877a

    ResponderBorrar
  24. Buenas tardes ....Donde puedo conseguir la tarjeta? Muy interesante el video y lo que explica

    ResponderBorrar