Forum: Mikrocontroller und Digitale Elektronik Drehzahlmessung


von Anfänger (Gast)


Lesenswert?

Guten Abend !

Da ich nun mein Gleichstrommotor per PWM ansteuern kann, möchte ich auch 
gerne die aktuelle Drehzahl des Ankers/Welle ermitteln.

Ich würde dann einen magneten an die Welle befestigen und mit einem 
Hallsensor ebenhalt messen. Nur muss ich doch die Zeit berechnen, 
zwischen zwei Punkten wo der Hallsensor durchschaltet oder nicht ?

Ist das überhaupt möglich so schnell das mit der Software zu lösen ? 
Benutzt wird ein Attiny2313.

Ich wäre für Anregungen und Tipps sehr dankbar !

MfG,
Anfänger

von yox (Gast)


Lesenswert?

evntuell ist dieses projekt für dich hilfreich:
http://www.zabex.de/frames/kugelmuehle.html (siehe abschnitt 
drehzahlreglelung)
der erbauer verwendet dabei allerdings keinen hall-sensor, sondern misst 
die spannung die der motor zwischen den impulsen induziert.

von H.Joachim S. (crazyhorse)


Lesenswert?

Fast alles mechanische ist langsam für einen MC :-)
Rechne mal selbst: 10.000/min sind gerade mal 166Hz...

von Anfänger (Gast)


Lesenswert?

Hallo !

Danke für die Hilfe !

Ich habe mir das so vorgestellt:


Sobald der Hallsensor durchschaltet fängt der Timer am Attiny2313 sofort 
an zu "zählen" und beim nächsten Impuls vom Hallsensor hört er und fängt 
von vorne an usw...

Kann ich das ganze so pogrammieren, dass es quasi den anderen Code im 
Programm nicht blockiert ? Ich meine ebenhalt: Multi-Threading. Wäre ja 
schlecht wenn ich wegen dem Zählen etc.. immer im Code pause machen 
müsste.

von Helmut L. (helmi1)


Lesenswert?

Genau dafür gibt es den Capturemode im Timer. Das läuft dann alles in 
Hardware ab. Du misst allerdings jetzt nicht direkt die Impulse/Minute 
sondern die Zeit zwischen 2 Impulsen. Eine kurze Rechnung und du hast 
deine Drehzahl.

Gruss Helmi

von STK500-Besitzer (Gast)


Lesenswert?

>Kann ich das ganze so pogrammieren, dass es quasi den anderen Code im
>Programm nicht blockiert ?

Ja. Guck mal, ob der ATTiny auch einen Inputcapture-Mode hat.
Dann läuft die Aktion völlig autonom und meldet sich nur beim Erreichen 
einer Flanke.
Der ATmega8 hat die InputCapture-Unit auf jeden Fall.

von Anfänger (Gast)


Lesenswert?

>Du misst allerdings jetzt nicht direkt die Impulse/Minute
sondern die Zeit zwischen 2 Impulsen.

Ja genau das meine ich. Dann habe ich ja die Umdrehung pro der 
gemessenen Zeit ebenhalt die der AVR "misst". Das kann man dann auf 
Minute (dreisatz :D) rechnen und fertig ist die Laube !

Dann beschäftige ich mich mal jetzt mit dem TIMER vom Attiny2313. Ein 
paar Atmega8 hab ich auch rumstehen...

Eine Frage zum Schluss:
Welche Programmiersprache ich jetzt nehme ist doch egal oder ? Ich 
programmiere eigentlich gerne in BASCOM kann auch aber in C, wenn es 
sein muss. Aber ich habe doch keine "Verzögerung etc.." wenn ich mit 
BASCOM arbeite oder ?

Es ist ja bekannt, dass die Assember Programme ja schneller ablaufen als 
die C Programme...

von doc (Gast)


Lesenswert?

Wenn du es geschickt (per Hardware - also Timer) machst, spielt die 
Sprache keine Rolle. So viel langsamer als Assembler ist C auch nicht. 
Zu Basic sag ich jetzt mal nix...

von Anfänger (Gast)


Lesenswert?

Ich versuche es mit C und werde mich bei Problemen ggf. melden.

Vielen Dank erstmal für die Hinweise und Hilfe !

von spess53 (Gast)


Lesenswert?

Hi

>Welche Programmiersprache ich jetzt nehme ist doch egal oder ?

Von einem notorischen Assemblerprogrammierer: Nimm die Sprache, die du 
am besten kannst. Erst wenn es damit nicht geht, solltest du umsatteln.

MfG Spess

von Helmut L. (helmi1)


Lesenswert?

Nimm C oder Assembler ,damit bekommst du hier die meiste Hilfe.

von Weingut P. (weinbauer)


Lesenswert?

geht auch in Bascom, keine Sorge.
Wie schon gesagt, nimm das, womit Du Dich auskennst
und klar kommst.

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.