Diseñar una placa para NXT / EV3 con MUCHOS puertos

0

Me gustaría diseñar una placa para Lego Mindstorms NXT / EV3 que tenga muchos puertos de E / S.

La placa, al igual que los ladrillos "inteligentes" originales, tendría 2 tipos de puertos:

  • puertos de sensor (dos modos: analógico e I2C)
  • motor puertos

Sin embargo, a diferencia de los ladrillos "inteligentes" originales, que son bastante limitados, tendría al menos 8 puertos de motor y 8 puertos de sensor.

Solicito ayuda para encontrar una placa adecuada o un diseño adecuado para esta gran cantidad de sensores / motores.

Cada puerto de sensor requiere un ADC (para los sensores que funcionan en modo analógico, como sensores de temperatura y táctiles), y requiere dos puertos de E / S digitales para el protocolo I2C (SCL, SDA).

Por lo tanto, los puertos del sensor imponen un requisito de al menos 16 puertos de E / S y 8 ADC.

Cada puerto de motor requiere dos líneas PWM a través de un controlador de motor como L293D , y dos digitales Entradas para leer la salida del codificador de cuadratura, con interrupciones programables.

Entonces, para al menos 8 motores, se necesitan otros 16 puertos PWM y 16 puertos de E / S con interrupciones programables.

En total: 48 puertos de E / S (16 puertos de salida con PWM, 32 puertos de entrada / salida con interrupciones programables), 8 ADC.

Ahora este requisito es un poco más allá de las especificaciones de los tableros de aficionados populares como Arduino, Galileo, etc ...

¿Cómo recomendaría diseñar esta solución? ¿Hay placas con este número de puertos a un costo razonable?

¿Sería más rentable agregar CI adicionales a una de esas juntas? En detalle:

  • un controlador PWM como el TLC5940 satisfaría los requisitos de PWM (y es de tipo margarita, en caso de que uno quisiera duplicar el número de motores)
  • el ADC externo, o quizás los IC multiplexores analógicos simples pueden satisfacer los requisitos de los puertos ADC

Sin embargo, el número de puertos IO con interrupciones es bastante alto ... No estoy seguro si cada puerto necesita puertos dedicados con interrupciones programables. Tal vez exista una solución para reducir al mínimo este número de puertos, mediante algún tipo de multiplexor u otro truco ...?

¿Podría comentar sobre este proyecto? ¿Qué tabla elegirías? ¿Cómo lo diseñarías? ¿Qué CI agregarías?

Dije 8 puertos de motor y 8 puertos de sensor, pero cuanto más mejor :)

    
pregunta fferri

2 respuestas

2

Como fanático de Atmel, puedo darte algunos comentarios sesgados

En primer lugar, lo referiré al comentario de @ Ignacio-Vazquez-Abrams: Obtener 8 autobuses I2C separados y fáciles de usar será lo más difícil. Probablemente vaya a tener que encontrar una manera de multiplexar un bus, si eso se convierte en un problema, le aconsejo un viaje por google y si eso no ayuda a una pregunta por separado, porque todo esto es un poco para cubrir. para mí justo en esta respuesta.

Luego, muchas de las MCU de Atmel (de las cuales Arduino utiliza de hecho algunas diferentes) tienen suficientes pines y canales ADC para hacer lo que quieras. Si desea iniciar el desarrollo con las herramientas Arduino, es probable que encuentre bastantes publicaciones de Arduino y / o instrucciones para obtener su propio diseño de tablero trabajando con las herramientas Arduino. Sin embargo, no estoy seguro de si vas a querer quedarte con el material del boceto una vez que tengas que manejar esta cantidad de interrupciones.

EDIT1: olvidé agregar, 9 de cada 10 de los 8bit AVR tienen PinChange Interrupt en todos los pines de E / S, que yo sepa todos los dispositivos ATMega (los chips más grandes con más de 20pins). Por lo que sé, todos los dispositivos ATXmega 8 / 16bit tienen incluso un sistema de interrupción PinChange más avanzado, pero al menos una interrupción PinChange en todos los pines.

EDIT2: Pero la interrupción de PinChange, dependiendo del dispositivo, generalmente se realizará por 8 pines, por lo que tendrá que verificar cuál pin fue el culpable, pero si funciona a 12 MHz o más, eso no tomará prácticamente tiempo, por lo que si manténgase informado sobre 1 ms, y sabrá o aprenderá a escribir una buena rutina de interrupción, debería ser fácil. (¡12000 ciclos de reloj a 12MHz en un ms, por lo que para una MCU 1ms es un MUNDO de tiempo!

Si desea buscar y utilizar una MCU Atmel de 8 bits / 16 bits adecuada, vaya aquí:

Selector Atmel 8 / 16bit

Tienen todas estas opciones en las que puedes seleccionar los límites y luego solo te mostrarán qué dispositivos se ajustan a tus requisitos. Algunos incluso están específicamente orientados hacia el control de motor PWM con generación avanzada de tiempo muerto.

Creo que con los requisitos de tu canal 16PWM terminarás con un XMEGA de Atmel, aunque no es un gran problema, son lo suficientemente asequibles, son increíblemente poderosos, ya tienen cientos de usos de ejemplo en la web. pero ... Que yo sepa, no hay una placa Arduino con una, así que no sé (no soy un fanboy de Arduino) si las herramientas pueden admitir una.

Alternativamente, puede usar herramientas similares para seleccionar otros dispositivos con otros proveedores. Atmel (y otros) también fabrica procesadores ARM Cortex-M muy ampliamente equipados, por lo que un Cortex-M podría obtener un rendimiento muy alto de su sistema, lo que le permite, con el tiempo, desarrollar y acercarse a NXT2.0 o incluso a EV3. complejidad del software, si lo desea.

    
respondido por el Asmyldof
1

Un diseño Cortex M3 razonablemente simple con el tamaño de paquete más grande posible (como un tamaño 100LQFP o similar) le dará suficientes IO, entradas ADC, salidas PWM, buses I2C individuales y un muy buen control sobre los vectores de interrupción. Son muy baratos, menos de USD $ 6-8 por uno decente. La velocidad del reloj también es extremadamente impresionante para lo que obtienes, ya que con un simple resonador cerámico de 12Mhz, puedes obtener más de 50 Mhz de velocidad de núcleo (¡depende del dispositivo, por supuesto!).

Puede probar los diseños de código abierto MBED para configurar un sistema basado en un procesador Cortex M3 / 4 simple.

También te recomiendo que evites la L293D para aventuras basadas en robótica con los kits NXT / EV3. Los motores cuando apenas funcionan ya igualan o superan las especificaciones nominales de los controladores L293D. Me enferma cuando veo todas estas placas de controlador de motor basadas en Arduino y NXT con los controladores de motor de la serie L293 terriblemente viejos en ellos. Debes tener mucho cuidado, o tendrás bonitos fuegos artificiales.

    
respondido por el KyranF

Lea otras preguntas en las etiquetas