Bascom Geschwindigkeit und Drehzahl messen (2 Sensoren)

Fuzzy

Mitglied
09. Dez. 2008
60
0
6
Worfelden
Sprachen
Hallo,

ich möchte die Drehzahl einer Welle und die Geschwindigkeit eines Traktors gleichzeitig messen und auf einem LCD-Display anzeigen. Einen Sensor abfragen mit ICP Eingang ist kein Problem, aber wie mache ich das mit 2 Sensoren? Evtl. den anderen Sensor auf 'normalen' Eingang und in der Hauptschleife ständig den Wert abfragen (Polling) oder können dann Sensorwerte verloren gehen?

Gruß
Fuzzy
 
Hallo Fuzzy,
...Evtl. den anderen Sensor auf 'normalen' Eingang und in der Hauptschleife ständig den Wert abfragen (Polling) oder können dann Sensorwerte verloren gehen?

wenn du in der Hauptschleife den Pin pollst, kann es natürlich je nach Frequenz und Auslastung passieren, dass Signale "verloren gehen".

Falls dein eingesetzter Mikrocontroller keinen weiteren Timer mit ICP Feature hat oder die alternative Pin-Funktion belegt ist, dann könntest du es mit einem Timer in Verbindung mit externem Interrupt realisieren (Fallende oder steigende Flanke).

Du verwendest am besten einen 16bit Timer und aktivierst den Interrupt für TimerOverflow. Im TimerOverlow kannst du einen Überlauf berücksichtigen (hier ggf. einfach einen Zähler zählen lassen, der bildet dann den MSB Teil des Timers. In der Interruptserviceroutine des ext. Interrupts, sicherst du dir zuerst den Timerwert (16bit, LSB) und den Zähler (ggf. auch 16bit, MSB), dann setzt du alle Werte auf 0 zurück. Danach das Interurptanforderungsflag des Timeroverflow sicherheitshalber löschen. Durch Timerwert und Zählerwert hast du nun die Periodendauer des Signals.

Dirk :ciao:
 
Hi
Impuls, aus welcher Quelle sie auch immer kommen, sind immer eine kleine Denksportaufgabe.
Um zu wissen, ob Polling reicht oder Interrupt angesagt ist, muss nicht nur die Impulsfrequenz, sondern auch die Signaldauer betrachtet werden.
Bei Polling muss die Zykluszeit kleiner der Signalzeit bleiben.
Wenn du Bspw. eine Drehzahl von 12000 U/min hast und einen Kontakt, der bei 1/8 Umdrehung betätigt ist, dann berechnest du die Signalzeit wie folgt:
f=12000/60 =200 Hz
Impuls.PNG
In mSek 1/f = 5mSek. Die Signalzeit ist 1/8 davon, also 625 µSek.
Wenn dein Programm eine Zykluszeit von 500 µSek. nicht übersteigt, dann kannst du diesen Kontakt ruhig pollen.... aber, entprellen ist nich. Das sollte dann bei Kontakten extern mit Hardware (RC-Glied) abgehakt werden.
Ach ja: Zykluszeit....
Bei 8MHz CPU-Takt landest du bei rd.0,000000375 Sek. oder bei 375 nSek pro Befehl. Das bedeutet, wenn dein Controller 1000 Befehle ausführt hast du mal grad 375 µSek. Zeit benötigt. Bei 16 MHz kannst du in der gleichen Zeit rd. 2000 Befehle abarbeiten.
Nur mal so zum Zeitgefühl.
Gruß oldmax
 
Danke für Eure Beiträge,

@Dirk
Falls dein eingesetzter Mikrocontroller keinen weiteren Timer mit ICP Feature hat oder die alternative Pin-Funktion belegt ist...

ich hab noch keinen speziellen Mikrocontroller ausgewählt, in meiner Bastelkiste liegen zwar ein paar Atmega8, Atmega32 und auch ein 8515 und ein 8535 rum, ich konnte aber beim Überfliegen der Datenblätter keinen entdecken der mehr als einen Input Capure Pin (ICP) hat. Falls es einen Typ gibt der besonders geeignet ist, wird es nicht an ein paar Euro fehlen den einzusetzen.

Aber mit dem externen Interrupt das sollte eigentlich auch funktionieren, warum bin ich da nicht selbst drauf gekommen? Die Drehzahl bewegt sich im Bereich so um 600 U/min und die Geschwindigkeit vom Traktor ist ja auch nicht besonders hoch.

@oldmax
Um zu wissen, ob Polling reicht oder Interrupt angesagt ist, muss nicht nur die Impulsfrequenz, sondern auch die Signaldauer betrachtet werden.
Bei Polling muss die Zykluszeit kleiner der Signalzeit bleiben.

Sehr guter Hinweis, dass hätte ich bestimmt nicht berücksichtigt und dann verplempert man einen Haufen Zeit bei der Fehlersuche.

Das Signal kommt über einen Sensor der nicht prellt, Iduktiv oder Magnetfeld.

Ach, vielleicht könnt ihr mir hier noch einen Tipp geben. Das Impulssignal hat 12V, d.h. ich muß es auf 5V bringen. Ich denke mal aufgrund der geringen Belastung der uC Eingänge müsste man das als unbelasteter Spannungsteile realisieren können oder sollte ich es doch lieber mit Z-Diode machen?

Gruß
Fuzzy
 
Hi,

Das Impulssignal hat 12V, d.h. ich muß es auf 5V bringen. Ich denke mal aufgrund der geringen Belastung der uC Eingänge müsste man das als unbelasteter Spannungsteile realisieren können oder sollte ich es doch lieber mit Z-Diode machen?

Davon ausgehend, dass es sich bei den 12V um eine positive Spannung handelt, würde ich hier eine Transistorstufe einsetzen. Sprich, mit den 12V über einen Basisvorwiderstand auf die Basis eines Schalttransistors (npn) zu gehen, dessen Emitter auf Masse und Kollektor am Eingangspin des µC liegt (Pullup aktiviert).

Falls es eine negative Spannung sein sollte, wäre ein Optokoppler mein Mittel der Wahl.

Gruß
Pirx
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)