La forma más fácil y económica de obtener salidas digitales de una computadora al mundo real

8

Necesito varias salidas digitales para conectar mi computadora al mundo real, sin embargo, parece que este trabajo no es tan fácil como esperaba.

He examinado varios métodos diferentes, desde tarjetas de E / S digitales dedicadas, microcontroladores con interfaces USB, puertos seriales, puertos paralelos, etc. Sin embargo, todas las soluciones parecen ser demasiado caras, demasiado trabajo o la tecnología está demasiado anticuada.

Espero tener más de 64 salidas digitales funcionando a aproximadamente 1 kHz cada una, controlable individualmente. Hasta ahora, la mejor idea que se me ocurre es pegar las salidas de un puerto serie a un registro de desplazamiento de serie a paralelo de 8 bits y enviar caracteres por la conexión en serie cada vez que desee cambiar y emitir (ejecutar desde un puerto USB a puerto serie adaptador). Todavía no lo he probado, así que no sé si funcionará.

¿Existe algún otro método rápido y sucio para obtener una cantidad bastante grande de salidas digitales baratas de la computadora que pueda controlar fácilmente con comandos C ++ muy básicos?

Falso
fuente
¿Has hecho algunas matemáticas? RS232 no usb simple generalmente tiene una velocidad máxima de 115200bps, que es de aproximadamente 10 KB. Digamos que cada canal necesita solo 1 byte (lo cual dudo). Desea enviar 64 x 1000 bytes por segundo, que es de alrededor de 64 KB. Mucho más que su rendimiento en serie. Hay algunos cables seriales USB de alta velocidad con 921600bps, y aunque teóricamente posible dudo que esto sea útil ya que está en el borde y, como dije, 1 byte será suficiente y el microcontrolador difícilmente tendrá tiempo para nada más. Tendrá que reducir sus demandas o preparar su billetera.
avra
3
Tal vez deberías releer tus comentarios en busca de errores obvios antes de criticar a alguien ... Los pines de GPOI emiten bits, no bytes. Eso significa 64 kiloBITS / s, muy por debajo del máximo de 115.2kbs
Faken

Respuestas:

7

Parece que pretendes encender algunas luces navideñas. :-)

¿Tiene algo de malo usar un arduino o similar? Sería bastante fácil expandir la cantidad de puertos IO si la cantidad de puertos indicados en el mega 1280/2560 no es suficiente. Puede conducirlo a través de un terminal serial / USB. Podría usar registros de desplazamiento en los pines de salida del arduino o podría usar el expansor de puerto i2c y pasar por eso.

El uso de componentes estándar como ese le dará la menor cantidad de tiempo de creación de prototipos.

Tenga en cuenta que mi camino puede no ser el más barato. Pero es efectivo y realmente lo hará rodar rápidamente.

Robar
fuente
1
No del todo con las luces intermitentes, estoy tratando de controlar 32 motores paso a paso en un prototipo de dispositivo de fijación universal automatizado, excepto que no tengo ningún financiamiento ... o conocimiento de electrónica en absoluto. ¿Tal vez descarté el microcontrolador demasiado rápido, obtuve buenos recursos paso a paso sobre cómo ponerse al día desde cero con ejemplos prácticos? (y quiero decir desde cero, tengo una base de conocimiento bastante extraña que es demasiado teórica y no lo suficientemente práctica, se puede suponer que no sé absolutamente nada ... de todos modos, lo siento como siempre, heh)
Faken
1
Controlar los motores paso a paso requerirá un poco más de rendimiento. No podrá conducirlos directamente desde los pines de salida del microcontrolador. Tendrá que usar un poco de 'pegamento' electrónico entre el pin y el motor para no freír el micro. Como todo, lo mejor es comenzar de a poco y avanzar hasta obtener ejemplos más avanzados. Uno de los entusiastas más ávidos que he visto es tronixstuff.wordpress.com tiene algunas buenas cosas para principiantes paso a paso. Sé que el tipo que lo dirige también frecuenta este intercambio de pila.
Rob
1
Sí, encontré un controlador de motor paso a paso muy agradable para usar entre las señales de control y el motor (solo usa 2 entradas, paso y dirección). Revisaré el tutorial que vinculaste, gracias. Por cierto, solo para asegurarme, quiero que sea mi computadora la que envíe los comandos en tiempo real a través de un programa c ++ al micro controlador para mover los motores. ¿Es esto posible o muy fácil de hacer con este microcontrolador?
Faken
1
Por supuesto. El microcontrolador actúa como el búfer entre la computadora y la placa del controlador del motor paso a paso. Puede interpretar los comandos que envía y actuar sobre ellos, así como proporcionar comentarios a la PC si es necesario. El otro beneficio de usar algo un poco convencional es que puedes obtener mucho apoyo / consejo de la comunidad, siempre hay posibilidades de que alguien haya hecho algo similar. Eso es bastante útil en sí mismo. El micro solo proporciona una interfaz de bajo costo realmente agradable entre la PC y sus placas de controlador.
Rob
Adafruit es un buen tablero que se puede usar para conducir 16 servos, y se pueden encadenar juntos. Sería bastante fácil escribir un código arduino que lea los datos de una PC y luego los envíe a la placa del servocontrolador. adafruit.com/products/815
Eric Gunnerson
3

El registro de desplazamiento de serie a paralelo funcionará. Usando el puerto SPI no tendrá problemas con la velocidad de actualización de 1KHz. IIRC en un ATmega328 con un cristal de 8MHz (o superior) debería poder obtener 1Mbits por segundo. Muchos otros microcontroladores también funcionarán.

Otra opción es usar múltiples microcontroladores. Por ejemplo, usar un ATmega328 (que cuesta alrededor de $ 5 con los pasivos) le daría 18 líneas mientras mantiene las líneas TXD y RXD libres. Paralelamente a las líneas RXD y luego todos los uC recibirán las mismas cadenas de comando. Tendría que analizar las cadenas de comandos en el uC. Use un cable FTDI para llegar a USB. Agregue un gestor de arranque Arduino al uC y podría usar las herramientas Arduino.

La conversión de serie a paralelo es más sencilla. Si su aplicación puede usar salidas de drenaje abierto, puede usar un controlador LED de 16 canales. Esto significaría agregar cuatro chips.

jluciani
fuente
1

La opción más simple que he encontrado parece ser el IOIO-OTG . Es un dispositivo USB OTG externo basado en controlador PIC, diseñado para Android, pero utilizable con una PC, a través de Eclipse y el Kit de herramientas de desarrollo de Android. Tiene 46 pines GPIO de 3.3v , así como muchas otras cosas útiles. No tiene los 64 pines necesarios para su proyecto, pero podría usar solo algunos registros de desplazamiento de serie a paralelo, como lo menciona jluciani (o usar controladores de motor paso a paso, y usar menos pines).

También existe esta placa USB IO basada en PIC , que hace cosas similares, pero tiene menos pines.

nada101
fuente