Hallo , ich habe den Drehzahlmesser aus einem Auto an einem Pic angeschlossen. Mit einem Timerinterrupt gebe ich Impulse an einem Pin aus. Und mein Problem ist das ich die Drehzahl als Zahl habe, und nicht weiß wie ich das umrechnen muss um den Timer einzustellen. Also z.b alle 15ms ein Puls entspricht ca.1000upm, alle 7.5ms ist ca. 2000upm. 3.25ms ~4000upm usw. Ich dachte ich kann die Drehzahl einfach multiplizieren bzw. dividieren aber musste feststellen das das nicht so einfach geht. kann jemand helfen ? :-) Gruß, Michi
Ich habe leider keinerlei Erfahrungen mit PICs, aber die Einstellungen der Timer beziehen sich immer auf die Taktfrequenz (auf was sonst?). Also immer auf die Taktfrequenz bezogen umrechnen!
> Also z.b alle 15ms ein Puls entspricht ca.1000upm, > alle 7.5ms ist ca. 2000upm. 3.25ms ~4000upm Sind das jetzt reale Zahlen oder sind das nur Beispiele. Wenn nur Beispiele: Programmiere den PIC, dass er dir eine bekannt Frequenz ausgibt. Dann schau auf den Drehzahlmesser, was angezeigt wird. Dasselbe machst du mit noch einer 2ten Frequenz. Wenn du dann diese 4 Werte hast f1 Umin1 f2 Umin2 dann kannst du durch diese 2 Koordinatenpunkte eine Gerade legen und deren Koeffizienten ausrechnen. Die Annahme lautet: Es gibt einen linearen Zusammenhang zwischen Frequenz und Drehzahl f = k * Umin + d für 2 Wertepaare kennst du die konkreten Werte (die hast du ja gemessen) f1 = k * Umin1 + d f2 = k * Umin2 + d f1, f2, Umin1, Umin2 sind bekannt. k und d sind unbekannt. Du hast aber 2 Gleichungen in 2 Unbekannte, und dieses System lässt sich daher lösen. Mit dann bekanntem k und d lässt sich dann für jede gewünschte Drehzahl errechnen, welche Frequenz dafür notwendig ist.
Hallo, Ist es so, dass du pro Umdrehung einen Puls erzeugen willst? Dann musst Du wie folgt rechnen: 2000 upm = 2000/60 ups d.h. ca 33,33 Umdrehungen pro Sekunde Davon den Kehrwert nehmen, also 1/33,33 rechnen, das gibt eine Dauer von 0,03 s, d.h. 30 ms. Vielleicht habe ich das Problem auch nicht richtig verstanden...
Also, bei der kleinsten zu messenden Drehzahl ist die Impuls xx (z.B. 100) ms lang. Die größte Drehzahl ergibt einen Impuls von 3,25 ms. Du solltest eine Torzeit definieren, die möglichst viel Impulse mitnimmt: 4MHz Takt / 4 = 1MHz Rechentakt (=0,001 ms). Dann sind bei Timer0 (8Bit) bei einem Prescaler von 1:1 nach 256 Takten = 0,256ms schon der Timer durch, Du hast aber noch keine Impulse gezählt. Also nehmen wir den Prescaler 1:256. Dann sind nach 65,565 ms die Torzeit um. Da hast Du sicher Probleme mit der unteren Drehzahl. Das paßt also nicht ! Also nehmen wir den Timer 1, der hat 16 Bit und einen Prescaler von max. 1:8. Ergibt eine Torzeit von 524,288ms. Damit zählst Du bei der kleinsten Drehzahl ca. 2-3 steigende Impulse und bei der höchsten Drehzahl ca. 80 Impulse. Du siehst, man wählt eine Torzeit, innerhalb der man die Impulse zählt (in Timer0, den man über den externen Eingang als Counter schaltet). Wenn dann der Timer1 überläuft ($FFFF auf $0000) wird ein Interrupt erzeugt, der den Timer0 ausliest und für das Hauptprogramm sichert. Anschließend TMR0 löscht. Das Hauptprogramm macht das bischen Mathematik (Dreisatz) und gibt die Drehzahl aus. Mit etwas mehr Mühe kann man auch CCP o.ä. finden, wo die Hardware des PICs beim Timerüberlauf den gezählten Stand automatisch sichert. Man kann auch den Timer nicht nur überlaufen lassen, sondern eine feste Torzeit von z.B. 0,5 Sekunden einstellen, so daß der Timer bei Erreichen eines festen Wertes neu startet (CCP). Es geht viel. Welche Hardware ist vorhanden ?
>Sind das jetzt reale Zahlen
Also hier sind mal paar reale Zahlen. Benutze den Timer1, 16bit,
Prescaler 1:8, bei 48Mhz. Ist nen 18f4550. Ganz hinten stehen die
ungefähren werte die ich in the Timer1 laden muss um die entsprechende
Drehzahl anzuzeigen.
10000upm = 333,33 imp/sec. = 3ms ~ eeb0h
7500upm = 250 imp/sec = 4ms ~ e800h
5000upm = 166,66 imp/sec = 6ms ~ da00h
2500upm = 83,33 imp/sec = 12ms ~ b200h
1250upm = 41,66 imp/sec = 24ms ~ 6000h
Falls es jemanden intressiert...Drehzahlmesser messen die Anzahl der
Zündimpulse pro zeit. Geht mann jetz von einem 4 Zylinder aus, 4 Takter
natürlich so zündet dieser 2 mal pro Umdrehung. Bei einer Drehzahl von
5000upm also 10.000 mal pro minute , oder halt 166,66 mal pro sekunde.
@ Michi: > Geht mann jetz von einem 4 Zylinder aus, 4 Takter > natürlich so zündet dieser 2 mal pro Umdrehung. Pro Umdrehung hat doch nur einer der vier Zylinder seinen Arbeitstakt (=Zündung), oder? D.h. pro Umdrehung gibts eine Zündung, oder hab ich in Physik doch nicht genug aufgepasst? ;-)
Dirk W , Kuckst du hier : http://library.thinkquest.org/C006011/german/sites/mehrzylinder.php3?v=2 Okay, Physikstunde ist zu ende. Was mit Mathe ? ;-)
beim 4-Takter findet alle 720° ein Arbeitstakt statt. Somit zündet die Zündkerze des Zylinders nur alle 2 Kurbelwellenumdrehungen. Bei vier Zylinder findet im Abstand von 180° ein Arbeitstakt statt. Beim 2Takter zündet die Zündkerze jede Kurbelwellenumdrehung.
Also ich kann die Drehzahl jetz in "Timerzählerstand" umrechnen aber nur mit nem Taschenrechner , wie ich das in Asm machen soll ist mir noch nen Rätsel. Also ein cycle dauer bei 48Mhz 0,00008333ms .Bei einem Prescaler von 1:8 dauert ein weiterzählen vom Timer 0,00066666ms. Bei einer Drehzahl von 7500upm, müssen die Impulse alle 4ms kommen. Also rechne ich 1/(7500*2/60) = 0,004sec = 4ms 4ms/0,00066666ms = 6000 (1770h) Der Wert bei 7500upm für einen 16bit Timer der runterzählt ist also 1770h. Weiter komm ich nicht :-( jedenfalls nicht ohne Taschenrechner.
Kein Wunder, Du baust Dir ja gerade eine Einbahnstraße. Was hast Du gewonnen, wenn Du den Timerwert hast ? 48 MHz ? Berechnest Du nebenbei Mondflüge ?
Passt schon. Also ich konnte die Formel auf 45000000/upm verkürzen. Nur kann ich das immer noch nicht in ASM ausrechnen. Kleinste drehzahl die ich messen kann sind dann 687upm, alles drunter wird als 0 upm behandelt, das reicht mir. Ja 48 Mhz. Na und, lass ihn doch Däumchen drehen. Mein Auto hat auch mehr Leistung als üblich bzw. notwendig wäre ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.