www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Matheproblem


Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sonic (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: joestr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dirk W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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? ;-)

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dirk W , Kuckst du hier : 
http://library.thinkquest.org/C006011/german/sites...

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

Autor: Martin Kohler (mkohler)
Datum:

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

Autor: Lönny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd Rüter (Firma: Promaxx.net) (bigwumpus)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.