Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

reiniciar el conteo de pulsos con la tarjeta usb ni daq 6008

¡Saludos! Me pregunto si es posible reiniciar el contador de la tarjeta usb 6008 sin tener que reinicar la ejecución del programa. Deseo contar pulsos (una cantidad determinada) y mediante una señal externa (un pulso que me proporciona un circuito) reiniciar el contador para que nuevamente comienze la cuenta. Hasta el momento tengo un VI que cuenta los pulsos de subida y reinicia el contador mediante un valor prestablecido (reinicio por software), sin embargo quisiera que ese valor sea dado por un circuito exterior (reinicio por hardware).

 

Sabiendo que puedo contar los flancos por medio del puerto digital, me pregunto como podría reiniciar el conteo utilizando una entrada para el reinicio y la otra para el conteo, en caso de que no sea posible reiniciar el contador de la forma antes planteada. Les agradeceré mucho alguna sugerencia.

 

Revisé el foro y hay un planteamiento similar al mío, sin embargo la versión que manejo de LabView es la 7.1 y ahí utilizan la 8.0 y la 2009, de modo que no alcanzo a visualizar los ejemplos que ahí se sugieren.

 

Les adjunto el archivo que estoy usando.

0 kudos
Mensaje 1 de 10
4.505 Vistas

 

Hola Inquisidor,

 

        Puedes utilizar una línea digital para reiniciar el contador. Para reiniciar el contador es necesario que detengas la tarea y la vuelvas a iniciar. La ejecución de este reinicio del contador es determinada por el estado de la línea digital. El código fue hecho con los VIs de DAQmx disponibles en la paleta de Funciones, no utilizando el DAQ Assistant como tu lo habías hecho en tu programa. Esto es porque nos permite un mejor manejo de las tareas de adquisición de datos. Con la imagen de del código no debes tener ningún problema para implementarlo en tu programa.

 

        De cualquier forma, si llegas a tener alguna pregunta no dudes en escribirme.

 

Saludos,

 

Héctor Rojas

0 kudos
Mensaje 2 de 10
4.489 Vistas

Que tal Héctor

 

Puse en práctica el programa que sugeriste y hace lo que debe hacer, sin embargo tengo un inconveniente (la razón por la que te contacto) Al meterle una señal cuadrada de 5 kHz al contador, pretendo obtener una cuenta ascendente de 0 a 359 y deseo reiniciarla (el pulso de reinicio lo meto por el puerto P1.3 de mi NIDaq USB 6008), cuando la señal cuadrada tiene una frecuencia de 400 Hz lo hace excelente y reinicia la cuenta en 0, pero si supero esa frecuencia en ocasiones lo hace y en otras (las más de las veces, no lo hace) y me pregunto si el problema está en el programa (que te adjunto en una imagen) o en la tarjeta (capacidad de muestreo).

 

Te agradeceré cualquier sugerencia.

0 kudos
Mensaje 3 de 10
4.249 Vistas

Hola Inquisidor,

 

          Revisando tu código hay algunos detalles que me gustaría comentarte. Primero que nada es mejor iniciar la tarea de la señal digital antes que la del contador, por lo que necesitas una flat sequence de 2 pasos como se muestra en el ejemplo anterior que te envie. Asimismo, noté que no utilizas un Clear Task.vi para limpiar la tarea de la línea digital de reinicio del contador. Es importante que esta también la incluyas fuera del ciclo while para liberar el recurso y verificar que éste no es el problema. Ahora bien, ¿si utilizas el botón de Reinicio Manual funciona sin problemas? Lo que podrías hacer es colocar un indicador de error a la salida del VI de lectura del pulso digital para saber si genera algún código de error. Otra sugerencia que se me ocurre es aumentar la temporización de tu ciclo a 100ms en lugar de 1ms. Esta temporización no afecta la lectura del contador pero sí la de la línea digital. Entonces si la aumentas a 100ms no deberías de tener ningún problema y la lectura de la línea digital trabajaría de una mejor manera. No creo que sea de hardware por lo que te sugiero que hagas los cambios anteriores para ver el resultado de las pruebas.

 

Saludos,

 

Héctor Rojas

0 kudos
Mensaje 4 de 10
4.213 Vistas

Que tal Héctor

 

Quizá sea mejor que te comente el trabajo que realizo. Tengo un proceso cíclico variable en frecuencia que me manda el tren de pulsos con una frecuencia máxima, fmax = 36 kHz; cuando un ciclo se ha completado entonces se manda un pulso con un ancho de 700 us. La frecuencia máxima del pulso de reinicio es de 12 Hz.

 

Agradezco tu amable respuesta y tus sugerencias. Te comento que el pulso de reinicio tiene un ancho de 700 us ¿crees que esto sea la causa del problema que tengo? incrementé el ancho del pulso a 2 ms y el reinicio es más frecuente. Sobre el tiempo del ciclo del reloj lo dejé a 1 ms, pues cuando lo subo a 100 ms el reinicio tarda en hacerse o simplemente no lo hace (como te comenté en el correo anterior)

 

Lo anterior me hace preguntar qué velocidad máxima de señal cuadrada leen los puertos digitales y qué ancho mínimo de pulso son capaces de

reconocer. La frecuencia máxima de la señal del pulso de reinicio es de 12 Hz, y tiene un ancho de 700 us. Naturalmente el contador si lee excelente esta señal de reinicio (y por supuesto el tren de pulsos de hasta 36 kHz), pero al conectarlo al puerto digital comienzan los problemas.

 

NOTA: Por cierto, el botón de reinicio sí funciona.

0 kudos
Mensaje 5 de 10
4.210 Vistas

Hola Inquisidor,

 

           El pulso digital de reinicio tiene un ancho de 700us, pero tu ciclo está muestreando cada 1ms (1000us) la señal digital. Por tal motivo, el pulso de 700us puede que quede dentro de los 1000us sin que sea detectado. Lo que podrías hacer es bajar la temporización del ciclo para que dure menos que el pulso de 700us y pueda detectar el cambio en todo momento. Te recomiendo que lo pruebes de esta forma. Para esto puedes utilizar otras funciones de tiempo en la paleta de Timing como Time Delay, pero lo recomendable es la temprización por medio de las funciones de DAQmx. En caso de que no tengas éxito, quedaría confirmado que la tarjeta no puede detectar este ancho de pulso tan bajo en las entradas digitales, por lo que habría que buscar otra solución.

 

Saludos,

 

Héctor Rojas

 

 

0 kudos
Mensaje 6 de 10
4.206 Vistas

Héctor

 

Agradezco tus sugerencias. Haré lo que me sugieres, en caso de tener éxito te lo comentaré...en caso de encontrar otra alternativa también lo haré.

 

Saludos y enhorabuena.

0 kudos
Mensaje 7 de 10
4.203 Vistas

Hola Inquisidor,

 

         Me parece bien. Si necesitas que te ayude con algo más no dudes en escribirme. De cualquier forma me mantendré al tanto para ver si pudiste resolver el problema.

 

Saludos,

 

Héctor Rojas

0 kudos
Mensaje 8 de 10
4.194 Vistas

Héctor

 

Ampliando el ancho del pulso de reinicio logra hacer su función. El ancho que utilizo es de 8 ms aproximadamente, mucho más ancho que el original que era de 700 us.

 

Busqué en las hojas de datos de la tarjeta NI DAQ USB 6008, pero no encontré nada referente a la velocidad de adquisición de datos de los puertos digitales, ni el ancho de pulso mínimo que son capaces de reconocer, y me pregunto si podrías proporcionarme esa información.

 

Te lo agradeceré mucho. ¡Enhorabuena!

 

P.D. Si adquiriera una tarjeta más potente, ¿en el programa podría manejar tiempos de muestreo de microsegundos e incluso de nanosegundos? Naturalmente dependiendo de la tarjeta.

0 kudos
Mensaje 9 de 10
4.189 Vistas

Hola Inquisidor,

 

         Respecto al ancho mínimo de pulso para las entradas digitales de la USB 6008 no encontré información específica. Pero si encontré especificaciones para otras tarjetas de adquisiciones de datos, entonces este parámetro si depende de la tarjeta que estés utilizando. La otra opción es utilizar un contador, que generalmente tiene un ancho de pulso menor que para las DIOs, pero la USB 6008 únicamente cuenta con 1 contador que es el que ya estás utilizando, por lo que esta no es una opción en este caso. Espero que la información te sea de utilidad. Si llegas a tener alguna otra pregunta no dudes en escribirme.

 

Saludos,

 

    Héctor Rojas

0 kudos
Mensaje 10 de 10
4.126 Vistas