Cómo hacer comunicación entre microcontroladores

Quiero realizar un proyecto donde sea necesario comunicar entre varios microcontroladores de la forma más rápida posible.

Por lo demás tengo 10 microcontroladores cuyos nombres serán 1...10:

Quiero que 1 reciba un número como entrada (entrada del usuario) y se lo envíe a 2.
2 recibirá el número y le agregará 10 y le enviará los resultados a 3.
Entonces, cada uno agregará un número y enviará el resultados al siguiente microcontrolador hasta llegar a 10.

10 generará la salida final (la salida debe ser el número 1 recibido como entrada + todos los números que agregaron los otros procesadores en la cadena).

Estoy buscando comprar STM32F103C8 (píldora azul) porque se ven más baratos y también más fuertes (y parecían más compatibles) que Arduino (aunque estoy abierto a sugerencias para otros microcontroladores, incluidas las reclamaciones a favor de Arduino).

Ahora mi pregunta es cómo conecto los microcontroladores que he seleccionado (o los microcontroladores sugeridos) entre sí de la manera más rápida y eficiente.

No estoy buscando sugerencias como: agregue un módulo Ethernet/Bluetooth y comuníquese con él entre los microcontroladores.

Estoy buscando una explicación de cómo conectarlos usando una conexión serial o I2C o algo así (y me encantaría si pudieras agregar una guía detallada sobre cómo hacerlo exactamente, a qué patas conectar, etc.) ya que todavía soy relativamente nuevo en el trabajo con microcontroladores)

Gracias.

"Lo más rápido posible" no es una especificación útil. Algo así como "al menos 1 Mbps y menos de 100 us de latencia" sería una especificación útil. Si insiste en quedarse con "lo más rápido posible", entonces "agregar un controlador ethernet de 400 gigabits" (y usar un procesador mucho más potente que un STM32) es, de hecho, una respuesta mucho mejor que serial o I2C.
"Cómo" es demasiado amplio. Mencionaste algunas de las posibilidades, ahora deberías tomarte un tiempo para investigar sobre ellas.
¿Están las fichas en el mismo tablero o hay distancia?
Jeroen3 Vienen como marinos separados, pero en lo que a mí respecta, pueden estar apretados o incluso en el mismo tablero (pero supongo que para incorporarlos en el mismo tablero tendré que comenzar a hacer cambios extensos. Yo prefiero dejarlos como están en este momento y simplemente adjuntarlos físicamente (que estarán muy cerca uno del otro))
Otra pregunta más "Tengo esta gran idea, ahora dime cómo hacerlo" :( Oh, bueno... lee sobre el modo I2C "multimaestro". Por ejemplo, aquí
The Photon: está diseñado para POC, por lo que la alta velocidad específica es menos relevante para mí (en este momento), ya que es importante para mí que no estén conectados a través de una conexión externa (como una conexión Ethernet / Bluetooth) sino una conexión interna ( como I2C o Serie)
¿Quiere decir inalámbrico frente a cableado en lugar de externo frente a interno? Si bien I2C podría considerarse como "interno", ya que su nombre sugiere "circuito interintegrado", ese no es el caso con la serie.
Si realmente es solo "en serie" como dices, donde no hay posibilidad de que varios dispositivos intenten comunicarse en los mismos cables y donde cada uno solo habla con el siguiente en secuencia, ¿por qué no conectar un puerto serie? en serie" trabajo? (El TX del n.° 1 va al RX del n.° 2, el TX del n.° 2 va al RX del n.° 3, etc.)
Eugene Sh Quise decir interna, la serie fue solo un ejemplo no tan bueno.
jonk que es exactamente lo que trato de lograr, no estoy seguro de cómo puedo poner el TX de 1 en el RX del n. ° 2 (supongamos que quiero enviar un bloque de datos de 1 kb; no estoy seguro de cómo el TX del 1 lo enviará al RX del n. ° 2 - pensé Tendría que usar un tipo de protocolo y un bus dedicado (I2C) para hacerlo correctamente)
Mire las configuraciones multipunto RS-485.
@dogscotter No hay problema, en absoluto. Simplemente los conecta directamente (suponiendo que sus niveles de voltaje sean compatibles, por supuesto) y usa comunicaciones asíncronas. Solo usa el periférico serial. Cuando escribe un byte desde el n. ° 1, el n. ° 2 lo recibirá. Solo pasa. Es muy fácil. Lo he hecho varias veces sin ningún problema inesperado.
@jonk, ¿qué pasa con la sincronización del reloj? ?

Respuestas (1)

La mejor manera depende exactamente de cuántos datos tienen estos microcontroladores para comunicarse entre ellos, las distancias que deben viajar las señales, el lugar donde se llevará a cabo esta comunicación, la cantidad de pines/cables que está dispuesto a usar para cablear todo arriba, el costo del sistema en cuanto a su tiempo de programación y el costo del hardware. Por ejemplo, el bus CAN permite la comunicación en entornos ruidosos/industriales/automotrices, pero es difícil de implementar y no puede transferir datos tan rápido como lo hace USB 3.0.

Si yo fuera usted, y no tuviera requisitos estrictos para la implementación del protocolo, consideraría los puntos que mencioné y terminaría con la opción más fácil en lo que respecta al soporte de la comunidad y el hardware. Busque un tutorial completo y fácil de seguir de un protocolo disponible en los tableros que está considerando. Cada protocolo tiene sus pros y sus contras, por lo que no es mejor aprender a implementar uno en particular.

Con respecto a la selección de un microcontrolador, parece que está buscando una placa que se pueda ensamblar fácilmente. Hay una gran selección para elegir, y muchas veces la selección correcta de la placa se reduce a otras capacidades además de tener un hardware de protocolo de comunicación integrado. La placa de pastilla azul que menciona parece ser una especie de "equivalente" de Arduino Due en términos de especificaciones, verifique qué placa se adapta mejor a sus necesidades.

¿En qué placa recomienda asumir que todo lo que necesito de la placa es una fácil comunicación entre los microcontroladores, la capacidad de calcular datos a 1 megabit por segundo y soporte/foros/fuentes de información en la placa?
Por lo tanto, las capacidades de procesamiento de datos son difíciles de cuantificar. Sin embargo, el Arduino Due se basa en el ATSAM3X8E que, si bien tiene la misma arquitectura central que el STM32F103C8, funciona más rápido a 84 MHz, por lo que podría ejecutar más instrucciones por segundo. También tiene más memoria Flash, RAM y periféricos para jugar. Tal vez podría comenzar por obtener solo una placa e intentar simular el procesamiento de datos que estaría haciendo. Incluso si la placa resulta no cumplir su propósito, tiene muchas funciones para proyectos futuros. También creo que tiene una comunidad más grande alrededor.
También podría intentar averiguar cuáles son sus requisitos exactos, cuál sería la forma profesional de seleccionar componentes. Pero creo que la experiencia práctica de hacer que cualquier placa se toque es probablemente lo mejor que se puede hacer para comprender lo que significan todas las especificaciones de MCU y cómo se traducen en la práctica.