Hi
Ich bin gerade dabei für mein Auto ein digitalen Tacho + Drehzahlmesser zu bauen. Ich mach das nach deiner Variante 2 und rechne dann auf ganze Minuten hoch.
Hallo zusammen,
mein aktuelles Projekt ist ein Drehzahlmesser mit induktivem Abgriff für 1 Zylinder 4-Takt Motore.
Die Signalaufbereitung mit einer Transistorstufe ist soweit fertig, aus den schwingenden Zündsignalen filtere ich mir nun saubere 5V Rechtecksignale heraus.
Nun kommt das Problem an dem ich jetzt hänge: Die realisierung der Datenerfassung dieser Drehzahl. Das ganze ist nämlich relativ zeitkritisch, heißt ich möchte die geringstmögliche Reaktionszeit zwischen tatsächlicher Drehzahl und am AVR ausgewerteter Drehzahl haben. Mit Gering meine ich Verzögerungen von max 100ms.
Im Klartext also: Ich sage meinem Controller "gib mir ein Signal genau dann, wenn 10000 U/min anliegen, und zwar exakt wenn es so weit ist, nicht erst wenn schon seit >100ms 10000 U/min anliegen"
Man muss sich als Betriebsbedingung vorstellen, dass die Drehzahl sich innerhalb von 2 Sekunden von 10 Hz auf 40 Hz verändern kann (Beschleunigung), was nun das Hauptproblem verursacht. Die Drehzahl ändert sich permanent, und mein Controller muss nun trotzdem genau diesen Zeitpunkt errechnen können.
Ich habe nun 3 potentielle Möglichkeiten:
1. Pulsabstand messen und darüber die Drehzahl ermitteln
2. Pulse über definiertem Zeitintervall zählen
3. Hardwareseitig die Impulse Integrieren (Kondensator parallel zum Signalausgang, je höher die Frequenz desto höher die Spannung) und analog auswerten
Ich habe jetzt noch keine weiteren Mathematischen Überlegungen dazu angestellt, vielleicht hat jemand ja direkt einen Tip wie es am schlauesten ist, oder wie es definitiv nicht gehen wird.
Grüße Paul
Hi
Ich bin gerade dabei für mein Auto ein digitalen Tacho + Drehzahlmesser zu bauen. Ich mach das nach deiner Variante 2 und rechne dann auf ganze Minuten hoch.
Hallo Powell!
Die schnallstmögliche Reaktionszeit gibt die 1. Möglichkeit, die jedoch eine Umrechnung der Periode (Zeit zwischen zwei gleichen Flanken) in Frequenz und Multiplizieren mal 60 benötigt.
Die beide übrige Methoden hätten längere Reaktionszeit.
MfG
Hallo zusammen,
ich habe ebenfalls mal weiterüberlegt und konkretere Zahlenwerte angenommen: Bei 40 Hz beträgt mein Pulsabstand 25 msec.
Demnach könnte ich doch sagen "sobald der Abstand zwischen zwei eingangspulsen kleiner als 25msec wird, hast du die Bedingung erreicht"
Wie kann ich dies nun über Bascom realisieren? Es gibt da den Pulsein Befehl, allerdings hatte ich schon mal vergeblich damit experimentiert, ggf. ein Verständnisfehler? Weiß jemand bescheid wie man ihn in diesem Konkreten Beispiel einfließen lassen würde? (Heißt: Wenn Pulsabstand größer 25ms mache nichts, wenn Pulsabstand <= 25ms dann gebe Signal. Wichtig ist dabei natürlich dass der Pulsabstand permanent gemessen wird, selbst wenn mal über Stunden gar kein Impuls kommt, vielleicht liegt da das Problem)
Möglichkeit 2 schließe ich nun auch mal kategorisch aus, da ich im Maximalfall über 100ms gerade mal 4 Impulse zu zählen hätte, viel zu geringe auflösung.
Grüße Paul
Das mit den 25ms Pulslänge kommt aber nur hin wenn ein Puls nahe 0ms lang ist, oder seh ich das falsch?!
Hallo Tobi,
ich meine den Pulsabstand, oder genauergesagt: Den Zeitabstand zwischen zwei ansteigenden Flanken. Hiernach ist es egal wie lang der Puls nun tatsächlich ist, da es immer auf die Flanken ankommt.
Grüße Paul
Hast recht, hab da was durcheinander gebracht.
Ich denke auf die Art liesse sich das sehr genau und sehr schnell messen. Das werde ich für mein Projekt wohl übernehmen.
Also, ich bin hier gerade wieder am experimentieren und kann mein Problem mal präzisieren: Ich verwende den Timer um ein Rechtecksignal mit einer Pulsbreite von 13ms (also Pulsabstand 26ms) zu generieren. Dies wird über einen Taster an den Eingang zur Pulsabfrage geführt. Drücke ich den Taster liegt das Signal an, drücke ich ihn nicht halt eben nicht.
Folgender Code auszug:
Wenn ich mit 13ms Pulsbreite und "Puls" auf 1300 (*10 us) abfrage funktioniert es, meine "Puls LED" geht aus sobald ich den Taster drücke. Wenn ich allerdings die Frequenz variiere passiert folgendes: Senke ich die Frequenz "blinkt" meine Puls LED auf ein mal im takt der Eingangsfrequenz (laut meinem Code geht sie über einer Frequenz aus und unterhalb einer Frequenz an, aber sie kann nicht blinken).Code:Do Pulsein Puls , Pind , 1 , 1 If Puls < 1300 Then Portd.7 = 0 End If If Puls > 1300 Then Portd.7 = 1 End If Loop End Timer_irq: Timer1 = 62285 Toggle Portd.0 Return
Erhöhe ich die Frequenz passiert gar nichts, die LED behält ihren Zustand wie wenn ich den Taster nicht drücken würde.
Hat jemand eine Idee?
Grüße Paul
Also ich komme einfach nicht weiter
Die Hilfebeschreibung dieses Befehls ist mehr als mau. Wenn ich das ganze über eine Tastereingabe mache, geht gar nichts mehr. Es scheint so als ob der Controller nach dem Aufspielen des Programms kurz auf eine Eingabe wartet, und dann geht die LED des Pulsein-Ausgangs aus und das Programm reagiert einfach nicht mehr auf meine Tastereingabe. Egal ob ich langsam oder schnell drücke, egal ob ich den Pulsein-Wert klein oder groß wähle.
In der Hilfe ist kurz etwas von der ERR Variable erwähnt. Ich vermute dass diese auf eins gesetzt wurde und daher Pulsein nicht mehr ausgewertet wird. Aber das kanns doch nicht sein!?
Gibts denn niemanden der diese Funktion öfter nutzt, sie komplett versteht, und mir nochmal genauer erläutern kann?
Grüße Paul
Ist zwar nicht deine Thread-Frage, aber die Schaltung würde mich interessierenZitat von Powell
Und wie und wo nimmst du das Signal ab ?
Ich programmiere mit AVRCo
Lesezeichen