Discusiones sobre Productos NI

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

usb6008 Medir Duty y frecuencia

Buenas tardes,

 

Estoy usando la targeta de adquisición USB-6008 y la licencia BASE de labview y necesito medir el duty cicle y la frecuencia (para luego convertila en ciclos/minuto) de una señal analogica cuadrada comprendida entre 0 y 12 V.

 

Como se puede ver en el ejemplo en principio no hauy problema para adquirir la señal analogica en la entrada. ¿es la opción más correcta?

 

Se que la trajeta no permite la obtención de la medida de freq y DC directamente, así que he pensado en generar un trigger para poder determinar cuando la señal supera un nivel y contar el tiempo en que la señal esta en "alto" Vin=12V y cuanto tiempo la señal esta en "bajo" Vin=0V, y creo que también lo he logrado aunque no muy bien la verdad. Para luego solo hacer la suma y ambtener el T, de allí la frec. y de allí los ciclos minuto. También teniendo estos datos puedo calcular el DC como alto/bajo*100.

 

Como se puede ver en el ejemplo que he subido tengo un valor de tiempo pero no es muy útil ya que no son lo mS que espera encontrar, alguien me puede ayudar para ver como calcular el tiempo en que esta en "alto" la señal y en "bajo" en mS y como poner estos valor a cero después de obtener un resultados?

 

Muchas gracias

 

 

0 kudos
Mensaje 1 de 8
4.997 Vistas

De principio creo que te vendria mejor utilizar para el duty algun acondicionador que te pase la onda cuadrada a voltaje promedio, el cual te daria un voltaje entre 0-12v como un porcentaje del duty. Claro que no podrias saber exactamente cuando el duty cambia.

Con la frecuencia podrias utilizar otro acondicionador para pasar los pulsos de 12v a pulsos de 5v y colocarlo en la entrada de contador de pulsos.

 

Con la frecuencia obtienes el periodo y con el porcentaje del duty en alto, calculas el tiempo en alto.

0 kudos
Mensaje 2 de 8
4.981 Vistas

Hola, no pude abrir tu vi ya que tengo una versión anterior del LV. Sin embargo creo que alguna consideración general puede serte de ayuda.

Si no me equivoco, esta pregunta está relacionada con esta otra discusión.

 

Antes que todo te comento que una señal de 12 voltios es excesiva para la 6008, por lo que deberás poner, si ya no lo tienes, una red de resistencias para disminuir la tensión por medir.

A seguir, para medir frecuencia y duty cycle lo más simple que se me ocurre es medir la señal análoga como creo que estás haciendo ahora y trabajar sobre el arreglo de mediciones:

  • Calcular la mediana de las mediciones (punto intermedio entre mínimo y máximo)
  • Buscar el primer punto en el que la señal sale sobre la mediana: almacena el índice en el arreglo (p1)
  • Ver el punto sucesivo en el que baja por debajo de este valor (índice p2)
  • y por fin buscar al punto sucesivo de salida sobre la mediana (índice p3)

La diferencia entre los indices p3 y p1 dividida por la velocidad de medición (samples per second) te da el período de la señal, mientras que (p2 - p1) / (p3 - p1) te da directamente el duty.

 

Esto es muy conceptual pero debería funcionar sin demasiados problemas. Igualmente hay algunos vi que hacen parte del procedimiento, pero no sé si están en la versión base, así que he indicado las ideas básicas.

Si la señal tiene mucho ruido puedes necesitar alguna forma de filtraje para no tener problemas en detectar los puntos p1, p2 y p3.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 3 de 8
4.973 Vistas

Hola mahu,

 

gracias por tu respuesta, hace mucho que no uso LV así que estoy muy pezx, que acondicionadores deberia usar? Para poder resolver el problema como comentas?

 

Muchas gracias

0 kudos
Mensaje 4 de 8
4.967 Vistas

Hola Roberto,

 

Comentarte que si que la señal esta comprendida entre 0 y 12 V pero se adapta a 0 y 10 V para poder trabajar con la targeta de adquisición.

 

Entiendo lo que me comentas pero no se como empezar y necesito saber si voy bien encaminado o voy mal.

 

No se como hacer lo que me comentas, si me pudieras poner un ejemplo para medir el T y el DC te estaria muy agradecido.

 

Muchas gracias

0 kudos
Mensaje 5 de 8
4.958 Vistas

Bueno, aquì tienes un ejemplo de como se podrìa hacer: he tenido que desarrollar el vi con instrumentos muy bàsicos ya que la ayuda indica que muchos del los vi que se podrìan utilizar no estan incluidos en la versiòn base del labVIEW. El vi lee el arreglo de mediciones y la velocidad de muestero y calcula frecuencia y duty cycle de la senal.

Es posible que haya maneras de hacer todo esto màs simple, pero ya que tengo una versiòn completa del LV no estoy cierto de lo que puede u no puede hacerse.

Como veràs, este método introduce un error al calular la frecuencia, ya que mucho depende de la velocidad de mediciòn con relaciòn a la frequencia a medir: el error es màs grande con frecuencias muy grandes u con velocidad de mediciòn baja. Ya que la 6008 solamente tiene una velocidad de mediciòn de 10.000 muestras por segundo, el error serà sensible con frequencias por arriba de los 250 Hz (con una segnal simulada siempre mides 250 Hz con frecuencias entre 250 y 256 Hz)



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Mensaje 6 de 8
4.943 Vistas

Hola Roberto,

 

Muchas gracias por el ejemplo. Entiendo que trabajas con la pareja de datos [V, t], pero no acabo de entender el funcionamiento y no seria capaz de solventar un posible problema en el codigo.

 

Te comento lo que he hecho yo hasta la fecha.

 

La freq. de entrada de la senyal es muy pequeña alrededor de 1.2 Hz hasta 2 Hz. Mi idea desde el principio es abrir un canal del DAQ, capturar la señal y analizarla.

 

Para analizarla tengo un trigger númerico con valor 2 por ejemplo, si la señal de la entrada es mayor a 2, entiendo que estoy en el estado "alto" y  quiero poner en marcha un contador de tiempo mientras la senyal sea TRUE.

Si la señal es menor a 2 entiendo que estoy en bajo y quiero reproducir lo anterior con otro timer.

 

Así pues la freq=timer "alto"+ timer "bajo" y el DC= (timer "alto"/(timer "alto"+ timer "bajo"))*100.

 

Creo que he conseguido algo parecido pero ahora se me presentan dos problemas:

 

Primero. La idea es tener un contador en marcha mientras el trigger de TRUE, problema no puedo pilotar la condición del TRUE desde fuera del while.

Segundo.No se como hacer que se pare después de contar un ciclo.

 

Adjunto el ejemplo que he hehco en versio lW v8.0 y LW V8.5

 

Descargar todos
0 kudos
Mensaje 7 de 8
4.928 Vistas

Hola, he estado revisando tu vi pero no he entendido exactamente lo que quieres hacer. Lo he modifcado integrando lo que hice en el ejemplo anterior y poniendo algun comentario que espero clarifique la situaciòn.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 8 de 8
4.898 Vistas