Frage zu meiner berechnung Windgeschwindigkeit

Gast #650376
Lesenswert?
• ▲
▼
Hallo

Ich habe einen ELV Funkwindmesser umgebaut das er Schnurgebunden 
arbeitet.

Das einzuíge was noch drinn ist ist das Poti für Windrichtung und der 
rredkontackt für die umdrehungen impulse.


Nun frage ich mit einen Timer die zeit zwischen 2 impulsen ab und 
berechne darus die Geschwindigkeit nur ist das problem das sie um ca 50% 
abweicht vom realen wert(Handwindmesser)

1. INIT TIMER 0

void timer0_init(void)
{
TCNT0=0;
TCCR0=(1<<CS00); // Timer 1 ist normaler Timer
TIMSK = (1<<TOIE0);
}


2. Interrupt TIMER 0

SIGNAL( TIMER0_OVF_vect )
{

if(!(PIND & (1<<3)) && start==0)// abfragenob readkontackt für die 
messung
{                               // schon geschlossen ist
start=1;                        //Reaad hat geschlossen
}

if((PIND & (1<<3)) && start==1)  //abfrage ob read wiederoffen
{
plow=1;                          //Read low
}



if(!(PIND & (1<<3)) && start==1 && plow==1)  //read wieder geschlossen
{                                            //Berechnung
plow=0;
char buffer[20];

float v=2.0*3.14159265 *0.065 * (1.0/((float)zi*1.0/31250.0))*3600.0;
 v=v/1.85; /KT/h
 g=(int)v;
sprintf(buffer,"v=%d kt/h\r",g/1000);
send_UART(&buffer[0]);
start=0;
zi=0;
}

if(start==1 && plow==1)zi++; //zeit wird gezählt


}


Ist der Timer zu langsam??????
Stimmt meine Berechnung nicht????

Mein System ein Mega 8 mit 8Mhz Tackt

Danke
Gast #650965
Lesenswert?
• ▲
▼
Ändere die komplette Logik.

1. Interrupt auf steigende oder fallende Flanke, nicht auf beide.
2. Bei Einstieg in Interruptroutine den Timerwert aus dem Timer lesesn 
und abspeichern.
3. Im nächsten Interrupt liest du wieder den Timerwert aus und rechnest 
die Differenz aus.
4. Filtern (zb Mittelwert) über mehrere Differenzen sonst bekommst du zu 
große Sprünge im Wert.
5. Den Timertakt kennst du, und damit kannst du die Zeit zwischen zwei 
gleichen Flanken berechnen.
6. Rechne mit INTEGER nicht mit FLOAT, dein µC hat keine FPU
7. In der Interruptroutine rechnest du NUR die Differenz aus und legst 
sie in ein Array, die weitere Berechnung erfolgt in der MAIN.


Über die Periodendauer der Frequenz bekommst du die Umdrehungszahl des 
Windrades und daraus kommst du auch die Windgeschwindigkeit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren