Ir a página principal Ir a página anterior de este apartado AHORA ESTOY TRABAJANDO EN... SISTEMA DE ADQUISICIÓN DE DATOS Y CONTROL EXTERNO PARA PC
Basado en un Kit Velleman K8055
18/02/2007 Necesito un sistema de adquisición de datos para PC que pueda, además, controlar dispositivos externos, y tengo claro que para ello existen dos soluciones. 1) Adquirir un sistema comercial que sea ampliable a medida de las necesidades (todo lo que he encontrado hasta ahora es muy caro y de características no excesivamente buenas) 2) Construirlo partiendo de cero, utilizando las entradas y salidas estándar de la placa base del ordenador. Hace unos 20 años construí algo parecido para un Sinclair Spectrum, que en principio me permitía: - 8 entradas analógicas de 8 bits (0-10V.)
El sistema era además ampliable como mínimo a 5 veces más, añadiendo placas de un tipo u otro si se necesitaban.
- 16 entradas digitales (nivel TTL) - 2 salidas analógicas de 8 bits (0-10Volts) - 16 salidas digitales (nivel TTL) La programación la efectuaba en BASIC, con las órdenes IN y OUT, y me permitió llevar a cabo algunos montajes interesantes. Sin embargo, para el PC la cosa es diferente, ya que en el Spectrum se tenía acceso directo al bus de direcciones, de datos y de control del propio ordenador, lo cual simplificaba la tarea de diseño de la circuitería. En un PC ni me atrevería a hacer lo mismo, porque es muchísimo más complejo y porque casi seguro que provocaría innumerables conflictos de hardware si no la destrucción del propio ordenador. Mi idea, por lo tanto, sería utilizar el port de JUEGOS y el port paralelo CENTRONICS de la impresora. La programación se podría llevar a cabo en C o en VBasic, utilizando las librerías INOUT (de las que carecía este lenguaje al principio). Según la información que he reunido, en el de JUEGOS disponemos de: - 4 entradas analógicas, persumiblemente de 8 bits
- 4 entradas digitales En el paralelo CENTRONICS de impresora: - 8 salidas digitales (en el bus de datos)
- 4 salidas digitales ( en el bus de control) - 5 entradas digitales (en el bus de estado) Diseñar la electrónica necesaria para utilizar estas posibilidades no es muy complicado, así como convertir las 8 salidas digitales del bus de datos en una analógica de 256 tramos. El problema es que 8 bits de resolución tanto de entrada como de salida me parecen pocos para algunos usos, y necesitaría 10 o mejor 12 bits, y esto si complica la cosa por la dificultad de encontrar ciertos integrados y resistencias de precisión. Bien, este no es más que un esbozo de la idea que me gustaría llevar a cabo. Acepto sugerencias, así como si alguna alma caritativa me ahorra el trabajo informándome de algún sistema comercial bueno, bonito y barato. 19/02/2007 La ventaja de estos circuitos es que pueden interactuar en tiempo real con los programas propios. El caso del Velleman (yo utilizo en el trabajo el osciloscopio digital de mano de esta marca) parece un módulo interesante, y como dices tú, Sergi, es baratísimo y tiene la ventaja de entrar por USB, pero parece utilizar su propio programa de captura, con lo cual dificilmente me serviría. En todo caso las entradas analógicas ya creo tenerlas solucionadas con el puerto de juegos del PC. En realidad, el mayor problema son las salidas analógicas, puesto que es difícil encontrar integrados tipo DAC de más de 8 bits, con lo cual el bus de datos del puerto paralelo me sirve únicamente para una salida de este tipo. Estoy estudiando un sistema "multiplexor" que utilizando tres bits adicionales del bus de control me pueda desviar la salida a 8 puntos distintos, con lo cual podría controlar, por ejemplo: - 2 salidas analógicas con resolución de 8 bits
- 2 de 16 (aunque no hay DAC's de más de 12 y los 4 restantes se quedan libres) - 16 salidas digitales Naturalmente el hecho de que sean multiplexadas implica utilizar algún circuito TTL del tipo "latch" 74LS374 que actua como una memoria de 8 bits para mantener el valor estable mientras el bus atiende a otra salida. Pero todo esto son palabras. Es mejor ir pasito a pasito. Esta próxima semana intentaré dar forma a las entradas a través del puerto de juegos, aunque antes deberé montar de nuevo mi pequeño taller, ya que desde que cambié de trabajo, apenas hago nada de montaje de circuitos. En la figura 2 de la página: http://www.fortunecity.es/imaginapoder/ ... /gport.htm se puede ver (aunque algo oscuro) las conexiones. En truco consiste en sustituir las resistencias por una fuente de tensión, de intensidad o una resistencia variable (es difícil de saber sin probarlo) y ver que valores nos da el XP en la rutina que tiene para ajustar el joystick. Mi idea es controlar directamente la entrada desde VBasic, aunque no se si deberé pelearme con el XP para ello. Mañana investigaré un poco el asunto 19/02/2007 Poco a poco voy atando cabos.
En primer lugar, me estoy dando cuenta de que vivo casi en la prehistoria de la adquisición de datos. Mis montajes para Spectrum tienen más de 20 años y está claro que en este tiempo las cosas han cambiado un pelín. Entre todas las opciones me ha gustado bastante el K8055, especialmente por su conexión USB (lo que evita problemas de compatibilidad con ordenadores nuevos) y porque al tener sus rutinas en una DLL, es accesible por muchos lenguajes. Entre ellos el VB (que sin ser un experto, es el que me cuesta menos) o si falta velocidad el C++, aunque cuando estudiaba llegué a odiarlo a muerte por necesitar bastante más código para hacer cosas sencillas y por sus frecuentes problemas al momento de compilar. La K8055 la he encontrado en: www.velleman.be/ot/en/product/view/?id=351346 El único punto flaco de este módulo es la resolución de los canales analógicos. Los 8 bits son pobres para muchas tareas. El resto está bien. En todo caso, GS3, me interesaría saber dónde puede adquirirse y su precio orientativo. Hojeando el catálogo de Velleman he encontrado también el K8061 www.velleman.be/ot/en/product/view/?id=364910 cuyas características son en parte mejores. Tiene 8 entradas analógicas de 10 bits, aunque sigue manteniendo los 8 bits en las salidas. Es más rápido y se pueden conectar 8 tarjetas al ordenador (por 4 del modelo anterior) Otro asunto que ha resultado ser un pequeño calvario ha sido encontrar cómo manejar el joystick en VBasic. No porque falten páginas que hablen de ello y rutinas de demostración. De hecho estas funciones están contenidas en la winmm.dll, guardada en windows/system32, pero casi todas las explicaciones que encontraba eran parciales, obviando cosas importantes que se supone que debías saber, pero que impedían que los ejemplos llegasen a funcionar. Al fin sí que he encontrado un par de listados en www.vb-mundo.com/ que funcionan sin problemas, permitiendo controlar el mouse, el teclado y el joystick. En fin, sin dejar mi idea original, me interesa lo de estas placas, lo único es que no sé cómo conseguir con ellas más resolución de salida (naturalemente sin tener que comprar 4 y unirlas 2 a 2 para atacar com palabras de 16 bits un integrado DAC de más de 8. 20/02/2007 Reflexionando he llegado a la conclusión de que las entradas pueden ser perfectamente de 8 bits (una resolución de 256 pasos es aceptable), pero en cambio, para las salidas necesito un mínimo de 10 y mejor si son 12. El problema es que no son fáciles de encontrar integrados que igualen o superen esta cifra. Hablando con los de Diotronic, me comentan que el AD7541 está ya descatalogado, y que el último lo vendieron en 2002. Y que no saben muy bien el porquè, pero prácticamente todos los DAC's de 12 bits están desapareciendo. Les quedan algunos en stock, como el AD7542 (19 €) y AD7545 (29 €). Hojeando las hojas de características, veo que tal vez el AD7542 me serviría, e incluso tiene la ventaja de tener un bus de datos de 4 bits y uno de direcciones de 2 bits, lo cual permite cargar de manera alternativa tres registros internos de 4 bits, totalizando los 12 finales. Esto se adapta bastante bien a una salida de 8 bits digitales, ya sea directamente del conector CENTRONICS, o del K8055 (si se prefiere que el acceso al ordenador sea por USB). El problema puede ser una velocidad de proceso, como mínimo, tres veces menor. Puesto que serán necesarios 3 ciclos para enviar la información al DAC. La historia de los DAC's parece que tiene que ver en que funcionan conmutando interiormente una red en "pi" de resistencias, de valores R y 2R. Parece que cuando se supera los 12 bits, la corriente es tan baja que el ruido térmico de las resistencias "enmascara" la señal. Es posible que los haya especiales de más precisión (siempre estoy hablando de los conversores Digital-Analógico, no de los Analógico-Digital), pero el precio se dispara entonces de forma geométrica. 21/02/2007 Esta sencilla rutina de Visual Basic permite leer los valores del joystick conectado al puerto de juegos del PC. La estabilidad de la conversión analógico-digital del hardvare del PC no es ninguna maravilla, pero puede servir para entrar magnitudes analógicas que no sean muy críticas. ' Control del joystick a través de las API de Windows
' Objetos a insertar en el formulario: ' Timer con la propiedad Interval = 500 (0,5 seg.) ' 3 Textbox, el 1 y 2 sin valor en la propiedad Text, el tercero con valor 500 Private Declare Function joyGetPos Lib "winmm.dll" (ByVal uJoyID As Long, pji As JOYINFO) As Long Private Type JOYINFO 'define estructura tipo JOYINFO que contiene 4 variables wXpos As Long wYpos As Long wZpos As Long wButtons As Long End Type Dim pos As JOYINFO ' crea una variable pos para leer las coordenadas x e y Private Sub Timer1_Timer() x = joyGetPos(0, pos) ' llama a la función de la API Text1.Text = Int(pos.wXpos / 100) ' muestra valor de x Text2.Text = Int(pos.wYpos / 100) ' muestra valor de y End Sub Private Sub Text3_Change() ' cambio de tiempo de refresco If Text3.Text <> "" Then Timer1.Interval = Text3.Text End Sub 22/02/2007 Este es un croquis de un módulo de 3 salidas analógicas de 12 bits, a partir de un bus de 8 bits digitales, directamente del puerto paralelo, o bien de la salida del módulo Velleman K8055 Esquema de un módulo con 3 salidas analógicas de 12 bits a partir de 8 entradas digitales ![]() Los bits 0-3 componen el bus de datos, el 4 y 5 el de direccionamiento de los tres registros de 4 bits que tienen cada uno de los DAC's, y el 6 y 7 seleccionan qué DAC va a ser escrito con los datos en cada momento (utilizando para ello una lógica formada por un 7404 y un 7408) En este dibujo no he incluido la parte analógica y, además no es un circuito definitivo, pero ya se aproxima bastante a lo que quiero conseguir. 22/02/2007 Esta es otra prueba utilizando la conexión del joystick como entrada de datos analógicos. Los resultados no son muy brillantes, hecho derivado del sistema que tiene el hardware para calcular la tensión de entrada mediante la medición del tiempo de carga de un condensador. En la imagen adjunta pueden verse dos canales de datos (en rojo y azul), aunque los saltos entre valores son extraños, sobre un margen aproximado de 64.000, a veces salta 273 y otras 456. Otro problema es la falta de precisión de la lectura, ya que sin variar la tensión de entrada, el valor leído suele oscilar entre el central y +/-2 saltos (dos arriba y dos abajo). A parte de esto, se detecta una falta de linealidad en un cierto punto de los dos canales, en que, sin motivo aparente, salta unos 3.000. Resultado de la lectura de las entradas analógicas, con bastante imprecisión que le resta utildad
Esta segunda imagen es un zoom vertical de la lectura normal, en él puede apreciarse claramente la oscilación arriba y abajo respecto al valor central. Otro problema tiene que ver con el objeto Timer del Visual Basic, el cual, en teoría, puede provocar un evento y en este caso realizar una lectura cada milisegundo. En realidad y con independencia del valor de intervalo que se le entre, raramente se obtienen intervalos de medición inferiores a los 100 milisegundos. Seguiré informando de lo que descubra. 02/03/2007 Sigo con mi idea en marcha. Ya tengo el material: un kit Velleman K8055 y los tres AD7542. He comenzado a montar el circuito en una caja, colocando en el frontal las conexiones IN-OUT, los leds se señalización y los pulsadores de prueba. También incorporo un voltímetro analógico de varias escalas para comprobar las tensiones analógicas de entrada-salida. He efectuado un pequeño cambio al Kit para que 5 leds me monitoricen también las entradas digitales. Estos son los cambios (en rojo): Parte del circuito del Velleman K8055, en que he añadido 5 LEDS para monitorizar las salidas digitales
Se han añadido los 5 leds y cambiado los valores de las resistencias de 47K por 1K. Una vez tenga acabado el montaje de este paso, efectuaré unas pruebas de velocidad del K8055, para que su salida digital de 8 bits ataque directamente el triple DAC AD7542, de 12 bits. Si la velocidad es insuficiente, (lo cual no me extrañaría, ya que cada orden debe pasar por el VBasic, el USB y el propio K8055), no me quedará otro remedio que colocar en le módulo un PIC dedicado exclusivamente para ello, y a su vez controlado a través del K8055, aunque mi experiencia en código máquina se reduce a algunas rutinas en el prehistórico Z80 de Zilog. Otra de mis ideas, una vez tenga en marcha el DAC de 12 bits, es aprovecharlo para incorporar al módulo de adquisición de datos uno o varios ADC de la misma resolución, es decir, utilizar una función de escalera o de aproximaciones sucesivas (mucho más rápido) que me genere una tensión de referencia, y con un operacional rápido compararla con la tensión de entrada a medir. De esta manera se generará la palabra de 12 bits correspondiente a la entrada. 09/03/2007 Ya tengo montada la caja y una parte del sistema. De momento sólo tiene el módulo Velleman K8055 al que le he realizado algunas pequeñas modificaciones. A partir de ahora comenzaré a construir el conversor digital-analógico de 12 bits. Como puede verse en la foto, en el frontal aparecen los leds indicadores de las 8 salidas digitales y los 5 de las entradas. Así como los 5 pulsadores de prueba, que van perfectos para dar órdenes al sistema. El módulo Velleman instalado en una caja Sales-Kit, con todas sus entradas y salidas en el frontal
Interior de la caja en que se observa el espacio para módulos adicionales
Otra vista del interior, con las conexiones que van a la panel
Aunque pueda parecer anticuado, (yo comencé en la electrónica a los 15 años, con las lámparas y los transistores de germanio) he incorporado también un voltímetro de aguja con tres escalas que mediante un conmutador me da una indicación de las tensiones analógicas de entrada-salida y las de alimentación del circuito. Ya que en algunos casos me brinda más información la posición y/o el movimiento de una aguja, aunque sea imprecisa, que un montón de números digitales saltando en una pantalla. En cuanto al funcionamiento del sistema, es perfecto. He escrito un par de pequeños programas en Visual Basic y he podido comprobar que las funciones de la DLL de Velleman son muy prácticas y fáciles de usar. 13/03/2007 - El Velleman K8055 no es ninguna maravilla en cuanto a velocidad. Las órdenes de salida digital me responden en 8 milisegundos, por lo que para dar un impulso de subida-bajada necesita 16 ms. - La salida digital-analógica tarda unos 3,7 segundos en mostrar en pantalla los 256 valores en escalera de sus 8 bits, con lo que un sólo valor debe tardar unos 14 ms. - Aún no he probado la frecuencia de lectura de conversor Analógico-Digital de 8 bits, ya que estos días he estado montando un pequeño taller para poder trabajar más cómodo en casa y no tener que desplazarme al lugar donde trabajo para efectuar una simple soldadura. - En cuanto a comandar con el K8055 un DAC de 12 bits, es perfectamente posible, pero sin duda será lento. Calculo que cada salida puntual tardará unos 30 o 40 milisegundos, ya que al ser un bus de 4 bits, necesito cuatro órdenes sucesivas (3 registros + activación de la salida) para cargar el DAC de 12. Para esta función concreta, no está mal del todo, pero en cambio, cuando queremos generar un ciclo de onda de salida con esta resolución (4098 pasos), se tardará la friolera de 164 segundos, o sea 2,7 minutos. Demasiado para muchos usos. - Por ello, estoy a punto de meterme en el berenjenal de los PICS. Estoy esperando el Velleman K8048, un kit programador sencillo (podría construirlo, pero prefiero ahorrar esfuerzos para la programación). Y siguiendo los consejos de Heli me he bajado de Internet el CCS, un compilador de C a assembler del PIC. 23/03/2007 Bueno, la cosa avanza, aunque despacito. De momento he comenzado con mis primeros pinitos con los microcrontoladores PIC's. Tengo de dos tipos: el 16F627 y el 16F84. He instalado además el compilador de C a assembler de los PIC's, el CCS, aunque de momento no se muy bien por donde empezar. Tal vez necesitaría algún manual del tipo "Programación de PIC's con CCS para torpes" como el que hace un porrón de años me ayudó en mis primeros pasos con el Visual Basic. He montado además el Kit Velleman K8048, el PIC Programmer, lo he probado con un fichero de demostración y va de maravilla. Ya he conseguido que el 16F627 haga destellear seis leds de manera secuencial. En fin, no es gran cosa, pero hace una semana no sabía ni siquiera que aspecto tenían estos microcontroladores. Os mando una foto del Kit, que pese a ser barato (34€) permite programar numerosos molelos de PIC's, desde los de 8 patas hasta los de 28. Permitiendo además en la misma placa comprobar su funcionamiento, ya que dispone de 4 pulsadores de entrada y 6 leds de salida.
Un saludo a todos. 07/04/2007 Aunque últimamente no diga nada del tema, sigo trabajando en él. De manera paralela a mis pinitos con los microcontroladores PIC's, he hecho una fuente de alimentación simétrica y multitensión: +24, +15, +5, -24, -15 y -5V. Con una intensidad útil de 300 mA, ya que su utilización será para alimentar circuitos de tipo 74LSxx, operacionales y PIC's de bajo consumo. Esquema de la fuente simétrica multitensión de 24,15 y 5 Volts
El circuito está formado por dos sistemas estabilizadores simétricos en serie, uno clásico a transistores en configuración Darglinton y los integrados 78xx y 79xx. La placa de la fuente instalada provisionalmente en el interior
Detalle de la fuente multitensión
El primer paso regulador ha sido necesario porque los transformadores, que son de 24 volts, dan en realidad 35, que una vez rectificada y filtrada sube a 48 volts. Como me temía, en el montaje pude ver que los integrados no aguantaban esta tensión de entrada. Los 78xx aún iban bien, pero los 79xx se fastidiaban nada más dar la corriente. Por ello incorporé el primer circuito, que baja la tensión a 30 V, con la ventaja adicional de aumentar la estabilidad final de salida. Ir a página anterior de este tema Ir a página principal
|











