Forum: Mikrocontroller und Digitale Elektronik Drehzahlmessung mit PIC18


von DirkF (Gast)


Lesenswert?

Hallo,
ich möchte mit dem PIC18F4580 die Drehzahl eines Motors erfassen.
Drehzahlbereich 0-2000 RPM.
An derm Motor sitzt ein Näherungsschalter, der 2 Impulse pro Umdrehung 
ausgibt.
Ich sehe folgende 2 Möglichkeiten, weiß aber nicht, welche besser ist:

Lösung 1. Das Signal auf einen Interupt Pin (INT0-INT2) geben. Dann die 
Zeit zwischen 2 Impulsen messen.

Lösung2: Die Impulse als Taktquelle für einen Timer geben.

Nachteil: Lösung1 ist bei hohen Drehzahlen zu ungenau, Lösung2 bei 
kleinen Drehzahlen zu ungenau.

Einen hochauflösenden Encoder mit z.B 1024 Impulsen pro Umdrehungen kan 
ich leider nicht einsetzen.

Bin für Hinweise sehr dankbar.
Gruß Dirk

von Gastino G. (gastino)


Lesenswert?

DirkF schrieb:
> Lösung 1. Das Signal auf einen Interupt Pin (INT0-INT2) geben. Dann die
> Zeit zwischen 2 Impulsen messen.

Was spricht gegen ein festes Zeitfenster, in dem Du die Anzahl der Pulse 
erfasst und daraus dann die Drehzahl errechnest?

Du kannst auch mehrere Verfahren gleichzeitig laufen lassen und die 
Ergebnisse dann in Abhängigkeit vom Drehzahlbereich auswählen.

von Anja (Gast)


Lesenswert?

Warum nimmst Du nicht den CCP-Pin als Messeingang?
Da erreichst Du bis zu 100ns an Auflösung (bei 40 MHz)

Gruß Anja

von Lehrmann M. (ubimbo)


Lesenswert?

Ich empfehle auch die Nutzung des CCP-Modules in Zusammenhang mit einem 
Interrupt.
Genaueres dazu gibt's im Datenblatt.
Dein PIC stirbt sowieso vor Langeweile. Notfalls würde ich einen 
Vorteiler vorschlagen oder nur den einen Impuls beachten.

von DirkF (Gast)


Lesenswert?

Hallo,
vielen Dank für die zahlreichen Hinweise.
Die Software Umsetzung mache ich später, mir ging es jetzt erst mal 
darum, wie ich das Layout entwerfen muß, also an welchen Pin das Signal 
dran muß.
Ich denke mal, es ist der Pin CCP1 (Pin 17 beim 18F4580).
Langeweile hat mein PIC leider nicht, da er noch andere Werte erfasst 
und dann alles über den Profibus zur Siemens S7 schaufelt.

Wäre schön, wenn jemand ein kurzes Beispielprogramm zum CCP hat.
Gruß Dirk

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Du kannst das Signal doch an beide Pins anschließen und später in 
Software je nach Drehzahl auf die effektivere Methode umschalten.

von Master S. (snowman)


Lesenswert?

von Microchip gibts in deinem installationsordner ein beispiel für CCP 
;-)

von Karl H. (kbuchegg)


Lesenswert?

DirkF schrieb:

> Nachteil: Lösung1 ist bei hohen Drehzahlen zu ungenau, Lösung2 bei
> kleinen Drehzahlen zu ungenau.

Das ist allerdings prinzipbedingt so.
Man kann aber ausrechnen, bei welcher Drehzahl die Grenze liegt.
Was spricht daher dagegen, beide Messungen zu machen und je nach 
Messergebnis dann das eine bzw. das andere Ergebnis zu benutzen.

von Anja (Gast)


Lesenswert?

DirkF schrieb:
> Nachteil: Lösung1 ist bei hohen Drehzahlen zu ungenau, Lösung2 bei
> kleinen Drehzahlen zu ungenau.

Also: bei 1us Auflösung fürs CCP hat man bei 2 Pulsen / Umdr und 2000 
RPM 15000 Counts zwischen den Pulsen im CCP-Register. (also ca 0,01% 
Auflösung). Ich zweifle mal daß die Drehzahl so stabil ist daß man eine 
höhere Auflösung braucht. Falls doch kann man jederzeit mehrere Pulse 
ausmitteln.

Gruß Anja

von DirkF (Gast)


Lesenswert?

Hallo Anja,
das hört sich gut an.
Dann kann ich ja unabhängig von der Drehzahl immer die Zeit zwischen 2 
Impulsen messen.
1 % Genauigkeit reich mir vollkommen.

Danke. Gruß Dirk

von Anja (Gast)


Lesenswert?

DirkF schrieb:
> 1 % Genauigkeit reich mir vollkommen.

Ich würde trotzdem immer eine volle Umdrehung messen (ggf. als 
gleitender Mittelwert aus 2 aufeinanderfolgenden Abständen) falls die 
beiden Markierungen nicht ganz exakt 1/2 Umdrehung auseinander sind oder 
das Geberrad unrund ist.

Gruß Anja

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.