Estoy tratando de encontrar el mejor paquete de microcontrolador para que mis programas informáticos se comuniquen con el mundo real. Espero una gran cantidad de pines de E / S (hasta ahora 64 digitales es todo lo que necesito, nada sofisticado como analógico y PWM) que puedo leer y escribir directamente llamando a las funciones de mi programa que se ejecuta en mi CPU.
No quiero descargar programas en el microcontrolador para ejecutarlos, más bien me gustaría algo que simplemente se conecta a mi USB y me da un montón de pines de E / S controlados por la CPU que puedo controlar desde mis programas C ++.
¿Cuál sería el mejor paquete de microcontrolador para mí? Espero algo que sea bastante económico pero a prueba de futuro, ya que funciona con USB y tiene controladores de 64 bits para sistemas operativos modernos como Windows 7. Sería capaz de conectar más de uno de estos microcontroladores con el mismo programa de computadora. gran bono también (futura expansión).
Editar: no necesito altas velocidades de muestreo (quizás 10 Hz para leer entradas, 1 kHz para señales de salida) y la mayoría de los pines se usan solo para salida. Estoy trabajando con computadoras nuevas (core i7 860), por lo que incluso si el muestreo es un poco ineficiente o lento, aún debería estar bien (solo tenga un hilo dedicado a E / S y haga que el programa principal se comunique con él).
Tampoco necesito los 64 pines de E / S en un solo paquete de microcontrolador. Si puedo interconectar muchos paquetes de microcontroladores al mismo tiempo, eso también funcionaría (en realidad sería ideal poder interconectar muchos paquetes de microcontroladores más pequeños, eso significa que es fácil de expandir).
He mirado esto: http://www.schmalzhaus.com/UBW32/index.html
¿Alguien ha tenido alguna experiencia con algo como esto? ¿Alguna idea de si funcionará o no? La principal preocupación es que es el microcontrolador el que ejecuta el programa, no mi CPU.
fuente
Respuestas:
Falso
El UBW32 es un muy buen camino, por lo que puedo decir de sus requisitos. Soportará exactamente lo que necesita, siempre y cuando esté de acuerdo con 3.3VI / O (algunos son tolerantes a 5V, pero no todos). Es económico ($ 40) y es muy fácil hablar con cualquier lenguaje que pueda soportar puertos seriales (que es prácticamente todos: básico, C, C #, procesamiento, etc.)
Puede usar cualquiera de los 76 pines de E / S como entradas o salidas. El firmware de fábrica que se incluye le permitirá hacer lo que desea hacer, no se requiere programación en el lado integrado. Llevar esos datos a la PC a través de USB (a solo 10Hz) no será un problema. Conseguir que las salidas vayan a 1KHz probablemente también funcionará bien.
Si tiene alguna pregunta, por favor hágamelo saber. Estoy feliz de ayudarte.
* Brian Schmalz UBW32 creador
fuente
Recomiendo un Teensy ++ 2.0 (o cualquier otra placa de desarrollo AT90USB1286)
128KB Flash, 8KB RAM, 46 pines de E / S, 8 entradas analógicas
$ 24
Las placas Teensy funcionan con USB y pueden proporcionar un puerto COM virtual (clase de dispositivo de comunicaciones USB). Puede utilizar este enlace en serie para su protocolo de control de pin. Esto funciona sin ningún controlador personalizado en Windows, OSX y Linux.
Para crear el firmware de control de pin, hay TeensyDuino o el viejo C.
Al golpear un poco, el cuello de botella será la interfaz USB del microcontrolador. Por lo tanto, es posible que desee transferir protocolos como I2C y SPI al microcontrolador. Para esto puedes usar mi Bus Ninja .
Agregar Teensies adicionales a su configuración es simple, solo necesita un puerto USB por dispositivo, presentando un puerto COM virtual por dispositivo.
(Nota. Este enfoque funcionará igualmente bien con una amplia gama de procesadores ARM y otros, simplemente no conozco ninguna placa de desarrollo barata con software disponible).
Otra forma podría ser usar un Arduino y un Caterpillar Shield para expandir la E / S. En una placa personalizada que construí alrededor del mismo expansor de E / S pude actualizar 256 salidas a más de 1KHz.
fuente
Creo que lo que quieres no es un microcontrolador, sino algo así como una tarjeta de E / S PCI-6509 de National Instruments . También puede obtener versiones de USB, pero tienen muchas menos E / S que el PCI-6509. National Instruments también le venderá controladores C ++.
Si eso parece demasiado caro, puedes probar algo como el Labjack U3 .
fuente
La solución que describe no existe para precios más bajos. El problema es que desea ejecutar el software de control en un sistema que no está diseñado para ello. Serializar 64 puertos y empujarlo a través de USB a altas velocidades de muestreo ralentiza enormemente la computadora host.
Hay soluciones que funcionan para aplicaciones de bajo rendimiento como el mencionado labjack. Pero la solución real que necesita para manejar altas tasas de IO involucrará un sistema programado. La pregunta es qué programación tiene que usar para implementar el sistema.
LabView es un software muy costoso (que funciona muy bien, no me malinterpretes). Utiliza un lenguaje gráfico para diseñar software y compila el código que se ejecuta en un sistema FPGA o ARM. Todos los componentes son demasiado caros para una aplicación incrustada de alto volumen, pero absolutamente maravillosos en un entorno de prueba debido al rápido desarrollo y alto rendimiento que ofrece.
Una solución menos costosa es encontrar un sistema que ejecute Linux con muchas E / S. EmbeddedARM.com es un sitio que ofrece muchos tipos de productos para esto. El código que puede escribir puede estar en scripts de shell, java, C, etc.
Los sistemas Arduino proporcionan microcontroladores que pueden desarrollarse con un entorno de desarrollo más simple. Su naturaleza de código abierto significa que ya hay muchos proyectos para aprender.
fuente
No conozco ninguno con 64 pines GPIO, eso es mucho, es posible que tengas que construirlo tú mismo.
Utilizo esto para probar interfaces de serie, pero también tiene 23 pines GPIO.
Si solo buscas en Google 'USB to GPIO' hay un montón de proyectos que lo han hecho, no vi ninguno en las primeras páginas con 64 GPIO, este es el más cercano que encontré, con 32 pines.
Construir uno no sería muy difícil, probablemente solo usaría una pic18 de 100 pines con USB PHY incorporado (dependiendo de sus requisitos de velocidad, una CPU más potente puede estar en orden)
no tendría que hacer demasiada codificación para que funcione mientras su proveedor de uC ofrezca un esqueleto de controlador USB.
Tendría que construir una PCB para ello, ya que los chips que son lo suficientemente grandes como para tener 64 pines GPIO generalmente no vienen en paquetes de orificio pasante. También podría usar un microcontrolador más pequeño y usar IC de expansor de puerto externo para sus GPIO, pero eso sería un diseño más complejo y más complejo de programar.
También puede mirar las placas de desarrollo que enrutan todos los pines de E / S a los encabezados y tienen USB. Estos probablemente serán mucho más caros, ya que probablemente tendrán un montón de cosas que no necesita.
Un último consejo, si encuentra una placa con RS232 pero con 64 pines GPIO disponibles, puede usar un adaptador RS232 a USB, tengo algunos de estos que me han funcionado bien. Sin embargo, esto lo limita a la velocidad de la interfaz RS232.
fuente
El entorno de NI Labview es costoso, pero hará lo que necesite (a través de USB, Ethernet o PCI, según lo que obtenga).
El Arduino Mega tiene 54 pines, lo que te acerca, por $ 60. Sin embargo, no es un analizador lógico listo para usar; tendrías que escribir o encontrar un boceto para hacer esto. Puede haber uno disponible, no lo sé. Esto debería ser bastante simple con tarifas bajas de autobús. Cada instrucción en el Mega ocurre a 16MHz, por lo que tendrá una velocidad de transmisión bastante baja, tendrá suerte o será muy inteligente si puede obtener una señal de 115200 baudios.
Al final, este es un proyecto muy diferente si está muestreando a 9600 baudios o a 50MHz. Recuerde, el USB funciona a 480 MHz (en teoría; su velocidad de datos real será menor debido a latencias y sobrecarga), por lo que no puede hacerlo mejor que 480/64 = 7.5MHz sin almacenamiento en búfer. Con almacenamiento en búfer y cantidades obscenas de dinero (más que su automóvil), los analizadores lógicos pueden obtener 68, 102 o 136 canales a velocidades de datos de gigahercios.
Te sugiero que trates de averiguar si puedes usar una herramienta que te brinde 8 canales más o menos, y tratar de analizarlos por separado.
EDITAR: Aargh, ¿qué estaba pensando? Si va a velocidades lentas como esa, entonces trabajar sobre un enlace en serie es definitivamente el camino a seguir. Uso el sistema de módulos ADAM 4000 de Advantech todo el tiempo en el trabajo; son robustos, fáciles de usar (se interconectan fácilmente con un protocolo ASCII a través de un puerto COM, o usan el software GUI incluido), ampliables y bien compatibles. Obtenga un 4500 (RS-232, use un convertidor USB o un puerto COM en su computadora (si todavía tiene uno)) o un controlador 4501 (Ethernet con servidor web incorporado), enlace en un montón de módulos 4053, 4055 y 4056, y estás listo para ir
fuente
Esta cosa tiene 70 GPIO y una interfaz USB por $ 50.
fuente
Sí, parece que el UBW32 funcionaría bien para usted, y el firmware predeterminado le permite controlar los pines de E / S desde su software en su PC.
De acuerdo con "cómo explotar bit SPI e interfaces paralelas en un FT232R" , aparentemente puede bit-bang 8 pines digitales (¿posiblemente más?) En el FT232R controlado por software en su PC.
Tablero de arranque de $ 15 para FT232RL
Parece que lo que realmente quieres es una interfaz de E / S digital; No necesita ni desea un microcontrolador programable. Si solo quisieras 16 bits, iría con un par de placas FT232RL. Sin embargo, parece que un solo UBW32 de $ 40 parece que le dará las 64 E / S que desea por un costo menor que 8 de las placas FT232RL que necesitaría para obtener 64 E / S.
Estoy descubriendo que se está volviendo cada vez más común: a veces cuesta menos lanzar un microcontrolador completo a un problema, a pesar de que tiene un millón de transistores "adicionales" que nunca usaré, que usar una solución cableada.
fuente