Forum: Mikrocontroller und Digitale Elektronik Matheproblem


von Michi (Gast)


Lesenswert?

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

von Sonic (Gast)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

> 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.

von joestr (Gast)


Lesenswert?

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...

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


Lesenswert?

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 ?

von Michi (Gast)


Lesenswert?

>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.

von Dirk W. (Gast)


Lesenswert?

@ 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? ;-)

von Michi (Gast)


Lesenswert?

Dirk W , Kuckst du hier : 
http://library.thinkquest.org/C006011/german/sites/mehrzylinder.php3?v=2

Okay, Physikstunde ist zu ende. Was mit Mathe ? ;-)

von Martin K. (mkohler)


Lesenswert?

Ein 4-takter braucht 2 Umdrehungen der Kurbelwelle für einen Zyklus, 
nicht 4.

von Lönny (Gast)


Lesenswert?

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.

von Michi (Gast)


Lesenswert?

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.

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


Lesenswert?

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 ?

von Michi (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.