Forum: Mikrocontroller und Digitale Elektronik Windgeschwindigkeit mit readkontakt messen


von wagner (Gast)


Lesenswert?

Hallo

Ich habe einen alten Conrad Windmesser der über einen Readkontakt 
betrieben wird also zwei leitungen.


Wo schließe ich die an einer an Masse oder +???

der Andere an eine INT eingang????

wie tut man dann die Geschwindigkeit messen oder berechnen.

gibt es da schon was als project???


Vielen Dank

von Philipp B. (philipp_burch)


Lesenswert?

wagner wrote:
> Hallo
>
> Ich habe einen alten Conrad Windmesser der über einen Readkontakt
> betrieben wird also zwei leitungen.
>
>
> Wo schließe ich die an einer an Masse oder +???

Üblicherweise schalten Taster/Schalter gegen Masse und werden mit einem 
Pull-Up eben hochgezogen, kann man aber auch andersrum machen.

> der Andere an eine INT eingang????

INT muss nicht sein, das sind so langsame Impulse, die werden besser in 
einem Timer abgefragt und auch gleich noch entprellt (Falls nötig).

> wie tut man dann die Geschwindigkeit messen oder berechnen.

Die Drehzahl ergibt sich aus der Dauer zwischen zwei (Oder mehreren) 
Impulsen, den Zusammenhang zwischen Windgeschwindigkeit und Drehzahl 
solltest du im Datenblatt finden.

> gibt es da schon was als project???

Möglich.

von wagner (Gast)


Lesenswert?

Hi

Also werde ich den readkontakt wie ein schalter behandeln und ihn an 
einen I/O hängen.


wie könnte man einen Timer dafür generieren????


Danke

von Johannes M. (johnny-m)


Lesenswert?

wagner wrote:
> Also werde ich den readkontakt...
Die Dinger heißen Reed-Kontakte (oder auf deutsch 
"Schutzgas-Rohr-Kontakte", kurz SRK). Das hat nix mit Lesen (to read) zu 
tun...

> ...wie ein schalter behandeln und ihn an einen I/O hängen.
Denk in jedem Fall an eine vernünftige Entprellung. Reed-Kontakte 
prellen wie Sau...

> wie könnte man einen Timer dafür generieren????
Du meinst vermutlich, einen Timer konfigurieren. Das ist aufgrund des 
Prellens nicht ganz trivial, weil Du bei direktem Anschluss an einen 
Timer-Eingang eines µC deutlich mehr Impulse zählen wirst als Dir lieb 
ist. Erzähl besser mal, mit was für einem Controller Du da überhaupt 
dran willst. Dann kann man vielleicht etwas fundierter helfen.

von wagner (Gast)


Lesenswert?

hallo

also ich arbeite mit einem mega8 8mhz


noch ne frage zum windrichtungsanzeiger.

dort ist ein umlaufendes poti mit 50kohm verbaut.

der schleifer ist mit dem adc 7 verbunden derrest eins mit gnd und der 
andere mit vcc 5volt.

ich bekomme bei ca 30% kreisumfang nur 1023 minimalwert spannung <1volt 
gemessen.

der resr geht von 1023 bis 0. mit einen 10k potie gehts von 0 bis 1023 
komplette 360 grad.

kann man da was machen???

von Philipp B. (philipp_burch)


Lesenswert?

> ich bekomme bei ca 30% kreisumfang nur 1023 minimalwert spannung <1volt
> gemessen.
>
> der resr geht von 1023 bis 0. mit einen 10k potie gehts von 0 bis 1023
> komplette 360 grad.

Soll man das verstehen?

von wagner (Gast)


Lesenswert?

Hollo

Also das mit der richtung habe ich jetzt habe mit 2,3 volt referenz 
gemessen da gehts nicht aber mit vcc als referenz da gehts

sehr feinfühlig ist das ganze.

So jetzt nochmal zur geschwindigkeit.

wie kann ich es lösen???

gibt es beispiele in c???


Danke

von Philipp Karbach (Gast)


Lesenswert?

Naja weißt du denn wie man timer bedient mit C? Das solltest du nämlich 
wissen. Danach kannst du dich um das entprellen und den rest kümmern. 
Wahrscheinlich könnte man es erstmal ohne timer probieren, einfach nur 
an einen eingang und dann mal zu einer festen zeit (die man irgendwie 
setzen muss, also wieder timer) zählen wieviel mal geschaltet wurde.

von wagner (Gast)


Lesenswert?

So jetz habe ich mal ein versuch gestartet ich hoffe das ich richtig 
liege


also ich habe ein Timer initialisiert Timer1

Prescaler=1 bei 8Mhz

void timer0_init(void)
{
TCNT1=0;
TCCR1A=0;
TCCR1B=1;
TIMSK = (1<<TOIE1);
}



SIGNAL( TIMER1_OVF_vect )
{
if(!(PIND & (1<<3)) && start==0)
{
start=1;
}

if((PIND & (1<<3)) && start==1)
{
plow=1;
}



if(!(PIND & (1<<3)) && start==1 && plow==1)
{
start=0;
char buffer[10];
sprintf(buffer,"differenz zwischen zwei impulsen %d\r",zi);
send_UART(&buffer[0]);
zi=0;
plow=0;
}
if(start==1 && plow==1)zi++;
}



wenn ich das Windrad schnell bewege bekomme ich kleine zahlen zwischen 7 
und 9 wenn es langsam wird gehts hoch bis 100 und mehr wenn stillstand.


wie kann ich daraus nun die geschwindigkeit errechnen???


wie ist überhaupt die Zeiteinheit meiner messung ms µs???

Danke

von H. W. (digger72)


Lesenswert?

>Denk in jedem Fall an eine vernünftige Entprellung. Reed-Kontakte
>prellen wie Sau...

@Johannes

Ist mir neu.
Haben die nicht 'ne magnetische Hysterese ?

von wagner (Gast)


Lesenswert?

Ich habe mal weitergesponnen

ich habe ja einen Vorteiler von 1 und einen 16bit timer.


bei 8mhz

also 8000000/65538 bekomme ich 122 Overflows am timer1.

die differenz kann ich ja berechnen indem ich

122 zu 1 sec =8 zu x

x=8*1/122
x=0,065sec wäre die differenz oder???

wie gehts jetzt weiter???

Kann ich nicht folgendes rechen

ich zähle die impulse pro sekunde und multipliziere die mit dem umfang 
des windmessers. Wäre das nicht möglich.

Danke

von Philipp B. (philipp_burch)


Lesenswert?

wagner wrote:
> Ich habe mal weitergesponnen
>
> ich habe ja einen Vorteiler von 1 und einen 16bit timer.
>
>
> bei 8mhz
>
> also 8000000/65538 bekomme ich 122 Overflows am timer1.

Eher 8'000'000 / 65536

Würde ich aber so nicht empfehlen. Besser wär's, wie schon gesagt, die 
Impulse in einem Timer-Interrupt mit gescheiter Entprellung (Falls 
nötig!) zu zählen und daraus die Geschwindigkeit zu errechnen.
Also im Interrupt prüfen, ob der Schalter geschalten hat und falls ja 
die Differenz zum letzten Umschalten ausrechnen.

> Kann ich nicht folgendes rechen
>
> ich zähle die impulse pro sekunde und multipliziere die mit dem umfang
> des windmessers. Wäre das nicht möglich.

Irgendwie in der Richtung wird die Formel zum Berechnen der 
Windgeschwindigkeit aus der Drehzahl wohl liegen. Aber wie gesagt: Im 
Datenblatt sollte das stehen.

von wagner (Gast)


Lesenswert?

Hi

Ich habe einen Timer interupt

der bei overflow anspricht.

ich messe die differenz des impulsen so wie oben im quellcode.

Oder wie meinst du das???

von Philipp B. (philipp_burch)


Lesenswert?

Nun, du brauchst einen Timer, der alle paar Millisekunden einen 
Interrupt auslöst. Ob per Overflow oder Compare ist egal. In diesem 
Interrupt prüfst du jeweils den Zustand des Schalters. Wenn du eine 
fallende Flanke (Schalter wird geschlossen) erkennst, setzt du einen 
Zähler auf 0, der die Interrupts zählt. Bei der nächsten fallenden 
Flanke nimmst du den Wert des Zählers und rechnest den in die 
Windgeschwindigkeit um.

Im Grunde ist das auch das, was du mit deinem Code machst, hatte ich 
vorhin falsch verstanden.

Zur Umrechnung: Deine Overflows treten alle (1 / (8000000 / 65536)) = 
8.192ms auf. Bei deinem Wert von 7 dauert eine Umdrehung also 7 * 8.2ms 
= 57.4ms, bzw. 17.5 Umdrehungen pro Sekunde (Oder ca. 1000 Umdrehungen 
pro Minute). Ob das hinkommt musst du selbst wissen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.