Como hacer un contador de pulsos en arduino

Como hacer un contador de pulsos en arduino

Como hacer un contador de pulsos en arduino

biblioteca de contadores de pulsos de arduino

El Atmel AVR en el que se basan la mayoría de los Arduinos tiene un hardware de contador/temporizador que contará los pulsos en un pin de entrada directamente. Todo lo que tienes que hacer es configurar el hardware para el funcionamiento del contador y leer el registro del contador. Hay una pequeña complejidad para los contadores de 16 bits en un dispositivo de 8 bits, pero eso es simple de superar. Arduino configura los temporizadores para las operaciones PWM por defecto, pero eso puede ser anulado como se describe aquí(Ver el manual de usuario del AVR para más detalles) – usted necesita usar el temporizador/contador en modo CTC.

En el AVR tienes contadores de 8 y 16 bits, si necesitas recuentos mayores tendrás que manejar la interrupción por desbordamiento. Si vas a sondear el contador con regularidad, puedes ser capaz de manejar incluso eso sin interrupciones mientras eres capaz de sondear a una tasa mucho más baja y posiblemente aperiódica que la tasa de pulsos de entrada simplemente sondeando la bandera de desbordamiento antes del siguiente desbordamiento.

En tu caso, probablemente necesites leer el conteo de pulsos en un período regular que sea más corto que el tiempo en el que el contador se desbordará a la máxima tasa de pulsos esperada. Así que, por ejemplo, si estuvieras usando un contador de 8 bits y la frecuencia máxima de pulsos fuera de 1KHz, necesitarías sondear cada 256/1000 segundos o menos, pero la mayor precisión se consigue haciendo el periodo lo más largo posible. Así que por ejemplo podrías tener algo como lo siguiente (esto no es código real, y sólo un fragmento):

contador de pulsos del interruptor de láminas de arduino

Intenta declarar las variables que utilizas en el bucle con la palabra clave volatile, que indica al compilador que cuando le dices que escriba o lea la variable, sabes lo que estás haciendo aunque parezca un bucle inútil. Eso debería hacer que tu prueba sea más precisa.

Intentaré cambiar el código dentro del bucle añadiendo la palabra clave Volatile. También miraré los temporizadores de hardware como una mejor manera de detectar los pulsos. Una vez que tengo la oportunidad de volver al laboratorio en la escuela en volver a ejecutar las pruebas con los cambios voy a publicar de nuevo.

Intenté algo similar, es decir, escribí directamente en los registros del puerto y sí era muy rápido pero la forma del pulso era terrible. Creo que lo encontré en algún lugar cerca de 2 GHz ouputs, pero el pulso eran más como una onda sinusoidal distorsionada. Por supuesto que puedo añadir retrasos y tal para hacerlo más agradable. El otro día no tuve tiempo de hacerlo en el laboratorio. Miraré de escribir directamente en los registros mientras hago la velocidad más razonable para que la forma del pulso sea más ideal. Además, gracias por los consejos sobre el temporizador, no lo sabía y buen punto sobre la hoja de datos para el ATmega.

medidor de electricidad contador de pulso arduino

Resumen de la pruebaEl pulso es la frecuencia con la que late el corazón. El pulso se suele denominar frecuencia cardíaca, que es el número de veces que late el corazón cada minuto (bpm). Pero también se puede observar el ritmo y la fuerza de los latidos, así como si el vaso sanguíneo se siente duro o blando. Los cambios en la frecuencia o el ritmo cardíacos, un pulso débil o un vaso sanguíneo duro pueden estar causados por una enfermedad cardíaca u otro problema. A medida que el corazón bombea la sangre a través del cuerpo, puede sentir una pulsación en algunos de los vasos sanguíneos cercanos a la superficie de la piel, como en la muñeca, el cuello o la parte superior del brazo. Contar la frecuencia del pulso es una forma sencilla de saber a qué velocidad late el corazón. Su médico suele tomarle el pulso durante una exploración física o en caso de emergencia, pero usted puede aprender fácilmente a tomarse el pulso. Puede tomarse el pulso a primera hora de la mañana, justo después de despertarse pero antes de levantarse de la cama. Esto se llama pulso en reposo. A algunas personas les gusta tomarse el pulso antes y después de hacer ejercicio. Para comprobar el pulso, cuente los latidos en un periodo de tiempo determinado (al menos de 15 a 20 segundos) y multiplique esa cifra para obtener el número de latidos por minuto. El pulso cambia de un minuto a otro. Será más rápido cuando haga ejercicio, tenga fiebre o esté estresado. Será más lento cuando esté descansando.

generador de pulsos arduino

Tendrás que leer y entender cómo se realiza el muestreo. Creo que si el pulso es demasiado pequeño, puede perderse. Usted debe asumir que un pulso menos de 2 / F_CPU = 0,125 microsegundos va a ser difícil o incluso imposible de contar.

Codificando mal, los temporizadores parecen muy prometedores. Si entiendo la documentación, son contadores de funcionamiento libre e independiente del reloj principal de la CPU, y pueden funcionar hasta a 20MHz. Tengo que leer un poco más y hacer algunas pruebas, pero si puedo llegar al rango de los MHz estaré muy contento.

Y estoy feliz de informar que funciona muy, muy bien. Ahora mismo tengo el Timer-1 contando pulsos hasta con 250ns de diferencia, sin que se caiga ninguna cuenta. Ni una sola. Así que, muchas gracias a Coding Badly por la idea.

Lo siguiente que tengo que hacer es lidiar con los desbordamientos, y probar velocidades de pulso más altas. El reloj externo es muestreado en sincronía con el reloj de la CPU, lo que me limitará a menos de la mitad de la frecuencia de la CPU (p141-2 de la hoja de datos de ATMEL). Aquí está el código, por si alguien necesita un contador de pulsos fiable e independiente de la CPU:

Acerca del autor

admin

Ver todos los artículos