Pages: [1]   Go Down
Author Topic: Re: Tiempo entre interrupciones  (Read 1281 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, tengo que reflexionar sobre ello....

Estoy midiendo una velocidad extremadamente lenta, digamos de entre 5rpm y 100 rpm, para ajustar el roscado en un torno de mecanizado.

En estos casos, el funcionamiento de un tacómetro ha de dividirse en%2
« Last Edit: April 01, 2011, 01:38:04 am by Valen » Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,

Puedes usar millis() o usar la entrada ICP del micro, que para esto ultimo ver http://arduino.cc/forum/index.php/topic,55122.15.html
Cuanto es el tiempo a medir?? Me refiero a si son microsegundos, milisegundos, segundos,.....

Salu2


Igor
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias,
mediré un margen de milisegundos... digamos 1 --> 1000 mSg

millis() me tiene despistado:
dice la ayuda que "Returns the number of milliseconds since the Arduino board began running the current program"

y para qué quiero yo el tiempo que ha corrido desde que empezó a ejecutarse el programa....???

Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

¿Y no hay un temporizador, basado en un contador hardware, con un start y un stop.....?  como toda la vida...

Con la de gente que hace librerías para Arduino, no me puedo creer que nadie la haya implementado... qué fallo....!
Logged

0
Offline Offline
Edison Member
*
Karma: 16
Posts: 1579
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

1) Con millis() te devuelve el tiempo actual (desde que se inicio el micro), si cuando atiendes a la interrupción, recoges este valor y le restas el valor almacenado de la última vez que entrastes, pues entonces tendras los ms que han pasado entre las dos veces que has entrado...fácil,no??

2) Puedes utilizar un timer hardware y hacerlo "como toda la vida". ICP = Input capture Unit, hace esto mismo con el timer1. En los links y en el datasheet tienes todo. No esta soportado por el lenguaje Arduino, pero puedes usar C sin problemas. En los links que he puesto, te viene el código.

Quote
Si usas la función millis() o micros(), solo puedes usar la entrada digital 3, que es la INT1. La entrada digital 2 es la interrupcion 0, que usa el mismo registro que la interrupcion para medir el tiempo. Pos eso esta interrupcion no se puede usar, o asumir que el incremento del tiempo se detiene cuando se dispara la interrupción

Comorrr???? De dónde has sacado ésto??
millis() usa el Timer0 hardware. Nada que ver con las interrupciones externas.... Siempre que estas atendiendo a una interrupción, las demás dejan de "funcionar". En cualquiera de los pines (interrupciones externas). Por eso hay que intentar que sea lo más rápido posible.
Pero hacer la resta y guardar el valor actual de millis en una variable es muy rápido.
Cómo siempre, todo depende de la precisión buscada....
Lo tienes explicado en Arduino:
Note
Inside the attached function, delay() won't work and the value returned by millis() will not increment. Serial data received while in the function may be lost. You should declare as volatile any variables that you modify within the attached function.

Nada que ver con eso que dices que sólo puedes usar la entrada digital 3.....

3) bokeauss, el ejemplo más sencillo de cómo hacer un tacómetro => http://real2electronics.blogspot.com/2009/09/shift-lights-con-arduino.html
Olvidaté de la aplicación ahi, que es medir las rpm de un coche y mostralo en unos leds. Es sólo el concepto de usar una variable contador para registrar el "número de eventos" y dividirlo entre un tiempo conocido.

4) Puedes usar un timer para que te cuente eventos, y cada cierto tiempo leerlo => es decir sacar "veces por segundo" = frecuencia.

5) Puedes hacer que una variable vaya incrementandose cada vez que atiende la interrupción. Y en tu código,que estas haciendo otras cosas, en un determinado punto mirar cuanto vale este valor (respecto la última vez que lo miraste) y dividirlo entre el tiempo actual (menos la última vez que lo miraste)....

Hay varias formas de hacerlo...

Saludos


Igor






« Last Edit: March 31, 2011, 02:39:47 pm by Igor R » Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, tengo que reflexionar sobre ello....

Estoy midiendo una velocidad extremadamente lenta, digamos de entre 5 rpm y 100 rpm, para ajustar el roscado en un torno de mecanizado.

En estos casos, el funcionamiento de un tacómetro ha de dividirse en dos tramos:
Velocidades muuuy lentas: Es mejor, más exacto, medir tiempo entre pulsos. Este método genera mucho ruido (es decir, todas las medidas serán ligeramente distintas), y por ello necesitan pasar un filtrado software.

Velocidades medias: Es mejor contar pulsos en un periodo de muestreo conocido, ya que se dispondrá de muchos pulsos, y al mediarlos, se homogeiniza la medida.

Al final, cada resultado obtenido se utiliza como entrada de un filtro paso bajo software, con frecuencia de corte baja, para eliminar en lo posible el ruido.

La salida del filtro es lo que utilizaremos como velocidad real de la máquina.
« Last Edit: April 01, 2011, 02:02:14 am by Valen » Logged

Pages: [1]   Go Up
Jump to: