Pages: [1]   Go Down
Author Topic: Medición del Periodo de una señal cuadrada  (Read 347 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, quiero medir el período de una señal cuadrada, para así obtener la frecuencia de la misma, es decir, quiero medir el tiempo en cambiar la señal de 1 a 0 lógico.

Estoy utilizando la función pulseIn pero me da error a frecuencias muy bajas y también a frecuencias muy altas (0-125Hz), lo necesito para un anemómetro, el anemómetro, me da una salida senoidal, esta salida, con un comparador la convertí a una señal cuadrada de la misma frecuencia que la original, pero ahora necesito medir su frecuencia lo más exacto posible, ya que la función de transferencia del anemómetro es con la frecuencia.

Esto es lo que tengo por el momento, saludos!

Code:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);

int pin = 6;
float duracion;
float frecuencia;
float velocidad;




void setup() {

  lcd.begin(16, 2); // Definimos un LCD 16x2
  pinMode(pin, INPUT);

}

void loop() {

  duracion = pulseIn(pin, HIGH);
  
  duracion = (duracion * 0.000001);
  
  if(duracion <= 0.00)
  {
  frecuencia=0.00;
  velocidad=0.00;
  }
  else
  {
  frecuencia = (1.00 / (duracion * 2.00));
  velocidad = ((frecuencia * 0.765) + 0.35);
  }
  
  

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(frecuencia);
  lcd.setCursor(7,0);
  lcd.print("Hz");
  lcd.setCursor(0,1);
  lcd.print(velocidad);
  lcd.setCursor(7,1);
  lcd.print("m/s");
  delay(500);

}

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mira aqui
http://forum.arduino.cc/index.php/topic,31681.0.html

http://forum.arduino.cc/index.php/topic,124310.0.html

este cuenta revoluciones por minuto, pero puedes cambiarlo a hz
Quote
volatile unsigned long cont_rpm;

void setup() {
  pinMode(2,INPUT); 
  attachInterrupt(0, rpm, RISING);
  Serial.begin(9600);

}

void rpm()
{
  cont_rpm++;

}

void loop()                   
{
  static unsigned long rpm_ant;
  static unsigned long t_anterior;
  static float rpm_actuales;
 
  rpm_ant=cont_rpm;
  t_anterior=millis();

  rpm_actuales=(cont_rpm-rpm_ant)/(2.0*(millis()-t_anterior)/60000);
  Serial.println(rpm_actuales);
}

Logged

Logroño - Spain
Offline Offline
Full Member
***
Karma: 2
Posts: 241
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Hola, quiero medir el período de una señal cuadrada, para así obtener la frecuencia de la misma, es decir, quiero medir el tiempo en cambiar la señal de 1 a 0 lógico.

¿Qué distancia hay entre el anemómetro y el arduino?.

¿Qué cable tienes?

Saludos
Logged

Offline Offline
Jr. Member
**
Karma: 3
Posts: 96
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu problema es que solo mides el pulso HIGH, te falta medir el pulso LOW, y completar el periodo de la señal cuadrada que conformaste de tu anemómetro.
Recuerdo tu problema cuando lo presentaste.
Tu período sera la duracionHIGH mas la duraciónLOW ambas sumadas son T = 1/f
repite lo mismo para LOW y tendrás lo que falta.
Las mediciones son precisas segun lo que dice la libreria desde con pulsos con una anchura de 10 microsegundos a tres minutos.
Logged

Pages: [1]   Go Up
Jump to: