Comunicar varios PIC con una PC

5

Tengo una tarea en la que necesito conectar 5 o más ucontrollers a una PC con el fin de enviar datos que se almacenarán en la PC. Las condiciones son las siguientes:

  • Los ucs en cuestión son PIC 16F877As; cada uno de ellos forma parte de un sistema que realiza un seguimiento del número de tornillos utilizados (a partir de ahora), alimentado por DCV constante desde los enchufes, por lo que la alimentación no es un problema.
  • los datos que se envían son solo números; el número actual de tornillos utilizados
  • el entorno es el de una línea de montaje de fábrica; los contadores de tornillo se utilizan en la línea y el env es generalmente ruidoso
  • los datos recibidos por la PC deben almacenarse en una tabla; Pensé que podría encargarme de esta parte más adelante.
  • la distancia entre cada PIC es de unos 2-3 metros; La PC está al final de la línea, unos 10 metros, el enlace entre el PIC y la PC puede ser físico o inalámbrico, aunque prefiero la tecnología inalámbrica, ya que es más libre de problemas (creo ...), aunque la robustez de los datos enviado es prioridad
  • como de costumbre, el sistema debe ser lo más barato posible sin sacrificar la confiabilidad

He conectado con éxito un PIC a una PC utilizando RS-232, por lo que sé lo suficiente como para que no pueda conectar fácilmente los 5 PIC directamente a una PC utilizando RS; Problemas demasiado problemáticos y de distancia. Lo que estoy pensando es algo como un centro; los 5 PIC se conectan a un PIC maestro que a cambio obtiene los datos de los 5 PIC y los envía a la PC. He leído algunas cosas sobre I2C y creo que eso es lo suficientemente factible. También he buscado soluciones inalámbricas como XBee; Obtuve SKKCA de Cytron, pero no sé cómo hacer que maneje las comunicaciones de datos de muchos a uno.

¿Alguien tiene mejores ideas sobre cómo puedo lograr esto de la manera menos dolorosa y barata posible? Todo este proyecto es un espectáculo de un solo hombre, así que prefiero mantener las cosas simples y económicas.

    
pregunta Sodrohu

5 respuestas

10

No sé qué tan atorado estás en el 16F877A, pero es una mala elección para algo como esto. Piense que las 16 series son solo para situaciones especiales, como un gran volumen donde el precio es un poco más bajo, una potencia extra baja o un tamaño físico pequeño. No tiene ninguno de estos problemas, y el 16F877A es una vieja parte de propósito general de todos modos.

Yo usaría algo como un 18F4580, que tiene un transceptor CAN incorporado. Su aplicación simplemente está pidiendo CAN. Es un bus diferencial, por lo que posee buena inmunidad al ruido. Sus distancias pueden manejarse fácilmente incluso a la velocidad máxima de 1 Mbit / s. RS-485, como otros han mencionado, también es diferencial, pero se detiene en la especificación eléctrica. Debes diseñar tu propio protocolo por encima de eso, considerando colisiones, reintentos, arbitraje, errores de bits, etc. Esto es, por supuesto, factible, pero hay muchos otros pequeños errores que probablemente no te resulten evidentes a primera vista. Hay muchas formas de hacerlo mal, y la mayoría de las personas lo hacen, al menos la primera vez.

Con CAN, todo lo que se define en el estándar y se implementa en el hardware. Envías un mensaje, y simplemente aparece en los otros nodos. Múltiples nodos que intentan transmitir al mismo tiempo se manejan automáticamente. hay un esquema de arbitraje definido que implementan los periféricos CAN de hardware, con reintento automático hasta que el mensaje se transmite. Cada mensaje también contiene un CRC de 16 bits, que se genera nuevamente y se verifica en el hardware.

Tomará un poco de esfuerzo aprender CAN y el periférico de CAN, pero será menos que hacer su propio protocolo en RS-485, al menos si lo hace bien. Además, CAN es una buena cosa para aprender, mientras que RS-485 es un legado de una era pasada.

Si no puede usar un PIC con CAN incorporado (aunque hay algunos con la misma huella que el arcaico 16F877A), puede usar el chip CAN externo que habla con el PIC sobre SPI. Nuestro lanzamiento gratuito de las Herramientas de desarrollo PIC en enlace incluye un código fuente para controlar el chip CAN externo y el periférico CAN interno de a 18F4580.

Necesitará algo que le permita a la PC comunicarse con el bus CAN, pero esas cosas están disponibles de forma inmediata. Tenemos nuestro propio adaptador USB a CAN que aún no ha llegado a un producto, pero estaría dispuesto a publicar el diseño y el código fuente del mismo. Si recuerdo bien, National Instruments es una de las compañías que fabrica adaptadores CAN para una PC.

    
respondido por el Olin Lathrop
7

RS485 es, de hecho, la solución habitual para este entorno. CAN también es una buena solución, pero puede ser un poco demasiado para su aplicación. Realmente está destinado a configuraciones de múltiples maestros. Sin embargo, no es necesario porque tienes una PC que domina el bus.

Hay una versión simplificada de CAN llamada Bus LIN que asume un solo maestro conectado a varios esclavos. Por lo general, se conecta a un bus CAN para redes más complejas. Hay chips de transceptor disponibles que conectan LIN a un UART TTL estándar y algunos pines PIO. Microchip vende tres y proporciona un código de soporte.

    
respondido por el Mike DeSimone
1

Suponiendo que no le guste la solución RS485 propuesta, ¿qué le parece usar RS232 en una cadena tipo margarita? Cada tornillo contando esclavo echos todos los métodos de no configuración.

Otra opción es RFID, haga que cada conteo de tornillos envíe un identificador / mensaje RFID con el conteo de tornillos como parte de su identificador.

    
respondido por el kenny
1

Coloque un transceptor RS-485 en cada placa e implemente una simple red maestro-esclavo. Usaría un chip más moderno que el 16F877A, como el PIC16F887 o un PIC18.

    
respondido por el Leon Heller
-2

Aquí el poder no es un problema, simplemente puede optar por una solución inalámbrica.

Debido a que necesita una solución de bajo costo, prefiero lo siguiente ...

Primero, puede hacer una red USART por cable donde todos sus pines RX estén conectados al lado TTL de un MAX único y los pines TX conectados al mismo MAX. Asignar dirección a cada uno de los esclavos. Los esclavos permanecen inactivos en la línea de comunicación mientras continúa con todas las demás actividades. Envíe las entradas (número de tornillos utilizados) a una cola, en este caso, simplemente una matriz.

Ahora el lado maestro,

Que es la PC y está conectada al lado RS232 del MAX. Simplemente puede hacer su propio protocolo para comunicarse con cada uno de los esclavos. La mejor manera es usar comunicación de 9 bits con detección de dirección. Puede hacer un conjunto de comandos simple de la siguiente manera,

COMMAND: ECHO_ADDRESS

HEX VALUE: 0XAA

SIGNIFICADO: si se recibe la ECHO_ADDRESS, el esclavo direccionado devolverá su dirección.

COMMAND: SEND_COUNT

HEX VALUE: 0XA1

SIGNIFICADO: si se recibe SEND_COUNT, el esclavo direccionado envía el número de datos presentes en su búfer.

Creo que esta solución es barata y usted no necesita un procesador avanzado. El procesador que seleccionaste tiene suficiente RAM y ROM.

Ahora, si actualiza el sistema a la conectividad inalámbrica, el método más barato es obtener transceptores de RF ordinarios. retire el cable conectado a sus pines RX y TX e inserte el transceptor allí. Conecte el mismo transceptor de RF a su MAX. Aquí, la frecuencia del transmisor en el lado MÁXIMO y la frecuencia del receptor en los esclavos deben ser iguales y viceversa.

Al seleccionar la frecuencia de RF, es mejor considerar las distorsiones del entorno.

Hai,
 El inalámbrico que mencioné no es un transceptor inalámbrico moderno como Zigbee, Wi-Fi ... Sugerí un simple transmisor de RF de bajo costo. En este caso no necesita una alta tasa de datos. Utilizo el módulo inalámbrico de alrededor de $ 2 para comunicaciones de menor nivel de datos y ofrece un rendimiento satisfactorio. Ahora, acerca de por qué sugerí la conexión inalámbrica, la respuesta es que creo que el cliente estará más contento si no hay cables o si necesita cableado adicional, y el producto se ve bien.

Podemos conectar muchos pines TX juntos. Debido a que nuestro maestro controla el bus, los cambios de colisión son demasiado bajos. Pero usted tiene razón allí puede haber colisiones debido a un error de comunicación. Tenemos que proteger el dispositivo de esta colisión, puede ser realizado por algún isulador eléctrico.

Esto puede no ser una solución perfecta pero funciona para la situación actual.

    
respondido por el Saneesh A T

Lea otras preguntas en las etiquetas