mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeitmessung zwischen Hallsensorimpulsen


Autor: Maximilian Giese (max133)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Latissimo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Maximilian Giese (max133)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ulrich P. (uprinz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jil2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Latissimo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.