Forum: Mikrocontroller und Digitale Elektronik Zeitmessung zwischen Hallsensorimpulsen


von Maximilian G. (max133)


Lesenswert?

hallo,
bin ein ziemlicher Neuling in Sachen µC und baue nun als 
Abschlussprojekt einen Motorradtachometer! Die Umdrehungen des Rades 
will ich mit Hilfe von einem Hallsensor messen. Mein Problem besteht 
jetzt darin, dass ich nicht weiß wie ich jetzt die Zeit zwischen zwei 
Impulsen des Sensors messen kann!
Habe mit der SuFu sehr viel gefunden aber keine konkrete Antwort auf 
meine Frage.

gruß max

von Latissimo (Gast)


Lesenswert?

Mach dich als allererstes mal mit MCUs allgemein vertraut.

Dann solltest du wissen, was Interrupts sind. Du solltest dann IOC 
machen, das ist Interrupt on Change, also ein Interrupt, der bei einem 
Flankenwechsel an einem IOC-fähigen Pin geschieht.

Dann schließt du auf die Zeiten.

von Maximilian G. (max133)


Lesenswert?

ok dann werd ich mich darüber mal schlau machen! ist das ein spezieller 
port oder nur eine art wie mein interrupt arbeitet?
ps. benutze übrigends einen Atmega8L

von Ulrich P. (uprinz)


Lesenswert?

Du kannst das ganze über Interrupts machen und diese hält ein ATmega8(L) 
nur an bestimmten Pinnen als Zusatzfunktion bereit (INT0 / INT1).

Eine andere Methode wäre die Zähler des ATmega8 zu verwenden. Diese 
verfügen über einige Steuereingänge, die den Zähler starten, stoppen, 
zurücksetzen oder eben zählen lassen können.

Du kannst so, als einfachste Lösung, einen Zähler nutzen um z.B. alle 2s 
einen Interrupt zu erzeugen, der dann den Stand des anderen Zähler 
ausliest und zurücksetzt, der durch den Hallsensor immer um eins weiter 
gezählt wird. Dann Radumfang, Anzahl Umläufe und die 2s miteinander 
verrechnen und als Geschwindigkeit auf eine Anzeige bringen.

Das erfordert aber, sich etwas genauer mit den Zählern und Interrutps zu 
beschäftigen, siehe Datenblatt und Wiki.

Gruß, Ulrich

von Gast (Gast)


Lesenswert?

Nimm führ den Hall den Eingänge INT0 PD2 und lasse den ext. Interrupt 
zu.
Du solltest auch den Timer 0 laufen lassen. Die Zeit ermittelt
Du duch einfache Abfrage des Zählerstandes zwichen den Ext. Interrup's.
Das war jetzt nur eine einjfache Umschreibung des Lösungsansatzes.

von Jil2 (Gast)


Lesenswert?

habe fast das gleiche wie du gehabt, war aper mit einem Pic von 
Microchip, dei capture compare p(CCP), ich kann dir eine c-Code Muster 
geben,
musst aber wie Kollegen gesagt haben zuerst mit einem kleinen Programm 
vertraut werden. Probier mal eine leuchtdiode an/auszuschalten, da wirst 
du vieles lernen.

von Latissimo (Gast)


Lesenswert?

Prinzip sollte eigentlich immer gleich sein: Interrupts zulassen, 
Interrupts an externen Peripherien zulassen. Dann Interrupt on 
change(Wenn Input Pin auf High wechselt)zulassen.

Bei MCUs gibt es Pins, die können analog oder digital verwendet werden. 
Entsprechendes Register auf Digital I/O Stellen. Dann gibt es noch ein 
Register, welches zwischen I und O unterscheidet. (also ob ein Pin, der 
zuvor als digital konfiguriert wurde als Eingang oder Ausgang fungieren 
soll. Bei Atmel heißt das glaube ich was mit DDR was für Data Direction 
stehen sollte.

im main programm kannste nix machen, zb.

for(;;)
{
}

oder while(1);

den Rest erledigt dir der Interrupt. Starte den timer0 mit einem 
Interrupt und Stopp ihn bei einem zweiten Interrupt. Der Zählerstand 
verrät dir die vergangene Zeit(dazu folgede Stichworte: Taktung auf den 
Timer, Prescaler, ggf Postscaler)

Genauigkeit: Wenn du auf Genauigkeit zählst, und es dir reicht in etwas 
größeren Zeitabständen einen neuen Drehzahlwert zu bekommen, dann 
solltest du mehrere Zeiten messen, die du dann arithmetisch mittelst, 
also aufsummieren und durch die Anz. der Messwerte dividieren, sollte 
klar sein soweit....

Also lies dich in die Grundlagen ein und stell weitere Fragen, wenn was 
unklar ist.

Besten Gruß vom Bodensee

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.