Translate

25 Juli 2010

Drehzahlmesser als Amperemeter



Den Drehzahlmesser als Amperemeter zweckentfremden.

Im Zusammenhang mit Michaels New Beetle Elektroumbau
hatte ich vor ein paar Tagen ganz spontan die Idee,
dass man den vorhandenen Drehzahlmesser doch wunderbar
als Amperemeter nutzen könnte.
Die Drehzahl ist doch eher unwichtig, viel mehr interessiert doch,
ob man bei einem Elektroantrieb den gewünschten Vortrieb
mit dem optimalen Energieverbrauch erreicht.
Da hat man so ein schönes Instrument mit einer Skala
von 1- ca. 6 und die zumessende Stromstärke beträgt
0 bis ca 500A Idealer gehts doch nicht!!!!!!
Die Drehzahlerfassung ist auch aufwändig und
eigentlich ziemlich sinnlos wen interessierts eigentlich?
Es geht hier auch nicht um eine hochpräzise Anzeige,
sonder hauptsächlich darum, zu sehen ob der gerade
eingelegte Gang auch der richtige ist.

Ein Vierzylinder zündet zwei Mal pro Umdrehung.
50Hz = 1500 U/min 100Hz = 3000U/min 166Hz = 5000 U/min

Also bräuchte man nur einen ordentlichen Stromwandler-
.............so was gibts zu kaufen!

....und ein bisschen Elektronik, das daraus die passende Frequenz macht!

??????was nimmt man dazu am sinnvollsten????????

!!!!!!!!!!!! einen ATtiny bzw Atmega!!!!!!!!!!!!!!
( ok, das wird langsam langweilig!!!, ich verspreche auch, demnächst mal wieder
was ganz anderes zu beschreiben, wie wärs mit einem winzigen hydraulischen Widder??)

Die Idee ist noch sehr frisch, aber das sollte sehr einfach zu lösen sein.

Der Stromwandler liefert eine zum Strom proportionale Spannung
(genaue Daten muss ich noch raussuchen)
Die Spannung kann ein ATtiny messen und in eine Zahl umwandeln.
z.B. 0-5V = 0-1024 weil die AD-Wandler mit 10bit arbeiten

Der Timer im ATtiny kann 256 Stufen rauf oder runterzählen und bei
entsprechender Frequenzanpassung (Teiler - Quarz bzw interner Oszillator)
entsprechend einen Ausgang umschalten.

für 0 bis 600A braucht man 0 (1) (10) - 200Hz da ist also noch Spielraum
das lässt sich hintrimmen- selbst 10bis 200Hz würden locker reichen
(Anzeige 300 -6000 U/min also 30 bis 600 A)

Das Programm habe ich mir jetzt noch nicht überlegt,
aber es wird winzig sein.

Variablen festlegen,
Timer konfigurieren,
Geberspannung messen,
Kehrwert der Geberspannung
mit Konstante multiplizieren,
an den Timer geben
.........das wars!

Hardware:
ATtiny 13 bzw 25 (was halt grad rumliegt)
5V-Regler + Elko
Eingangsspannungsteiler (falls Geberspannung >5V)
ev. widerstand + Elko zum Dämpfen des Eingangs
Transistor + Widerstand (nicht bei Mosfet) zum Umsetzen auf 12V
4 Klemmen + kleine Platine

Das sollte eigentlich reichen!

In ein paar Tagen gibt es hier mehr zu dem Thema!

Ob das jetzt eingebaut wird oder nicht ist egal,
aber ich will jetzt wissen ob bzw wie gut das funktioniert.
Ich bin mir sicher, dass es klappt,
wenn nicht mit einem(1) Timer (ATtiny)
dann zumindest mit zwei Timern (Atmega)... mal sehen,
Aber Spannung messen, umrechnen und per PWM ausgeben kann selbst
der kleine ATtiny13 schon zwei Mal gleichzeitig und bis auf eine
andere Timerkonfiguration ist das fast das gleiche Grundprogramm!

Ich wills jetzt wissen,
und drum ziehe ich das jetzt durch!!!!!!

mfG
Franz


29.07.2010 Es funktioniert prima!

Leider hat es mit dem ATtiny nicht geklappt, der 8-bit Timer
ist ganz einfach eine Nummer zu klein.
Damit lässt sich kein ausreichendes Frequenzband abdecken.
Entweder bei 100A anfangen oder oben raus
in 30A Schritten anzeigen. ...Schade!!
Somit ist leider die gesamte ATtiny-Reihe nicht verwendbar- oder doch?
(Anmerkung 02.09.10: ich muss bei Gelegenheit mal versuchen beim Timer
den Prescaler während des Programmablaufs umzukonfigurieren....
wenn das schnell genug möglich ist, dann ginge das auch mit einem
ATiny 13 oder 25....... ich habs aber so noch nicht versucht!)
Aber ein Atmega48 kann das! Mit seinem 16bit-Timer.

Der vorgesehene Stromwandler LEM HASS 200 liefert
um eine Mittellage von 2,5V 0,31V je 100A,
Polarität je nach Stromrichtung
Dieses Signal scheint auf den ersten Blick seltsam,
aber nach einem 10bit-AD-Wandler an 5V Referenz
sind das genau 64 Stufen je 100A.
Das passt perfekt! So kann man theoretisch +- 800A messen.
(Man kann den Bereich nicht vollständig nutzen,aber +-600A
sollte auf alle Fälle gehen)

Der Drehzahlmesser eines Vierzylindermotors
braucht zwei Impulse je Umdrehung
Die Anzeige soll letztlich 100A statt 1000U/min anzeigen,
folglich müssen beginnend ab 2,5V 33Hz je 0,31V generiert werden.
Da die Ausgangsfrequenz mit dem "Toggle pinX " -Befehl erzeugt
wird muss der Timer die doppelte Frequenz liefern.

Wie kann man diese Aufgabe umsetzen?

Die Lösung war letztendlich sehr einfach

Der Timer zählt mit einem festen Takt,
in diesem Fall aufwärts, es ginge aber auch abwärts,
man muss ihm nur sagen, wo er beginnen soll loszuzählen.
bei jedem Überlauf also nach 65535 erfolgt ein Interrupt
und da wird der gewünschte Ausgangspin umgeschaltet

Die Zahl der nötigen Takte ist eine Funktion des
Kehrwertes der Stromstärke.
Das klingt jetzt kompliziert,ist es aber nicht
Am Ende muss nur eine Konstante durch
den Ausgangswert des AD-Wandlers geteilt werden,
schon hat man die Anzahl der Zählschritte des Zählers
für die gewünschte Frequenz.
Man kann nun entweder den Zähler nach 0 zählen lassen
und die Zahl direkt übernehmen oder der Zähler zählt
aufwärts, dann muss man die Zahl der Schritte von
65535 abziehen.
Dann noch verhindern, dass bei 0A durch 0 geteilt
wird, das wars eigentlich schon



Das Programm ist noch nicht
optimiert, aber so läuft das
schon mal recht brauchbar.


...und weils eh schon ein Atmega
geworden ist, habe ich gleich noch
ein Display mit reingepackt.


Das hilft auch beim Anpassen
der Konstanten weil man alle
Zwischenergebnisse gleich mit
angezeigt bekommt.

An diesem Punkt stellte ich fest, dass das Programm
gerade mal 10% des Speichers vom Atmega48
belegt.Deshalb beschloss ich, da gleich noch
einen Energiezähler mit rein zu packen.
Der Strom wird bereits gemessen,
Die Spannung ist problemlos zu messen.
fehlt noch die Zeit!
Es gibt noch zwei Timer
Die Ausgangspins von Timer 0 sind ohnehin
schon für Eingabetasten vorgesehen und belegt,
also bietet der sich als Timer für die Zeit an.
bei den vorgesehenen 4MHz ergibt sich als
"rechengünstiger Wert" eine Frequenz von 15,5Hz
also 15,5 x pro Sekunde die Leistung aus
Strom und Spannung berechnen und die
Ergebnisse addieren und durch die
Zahl der Messungen je Stunde Teilen
(55800 je Stunde) schon hat man
die Wattstunden.Ich habe nicht auf
KWh umgerechnet, weil die Ausgabe
formatierter Zahlen ein gewaltiger
Speicherfresser ist.
Das hebe ich bis zum Schluss auf!
Dann noch ein kleines Menue zum
Eingeben des Startwertes.
Man gibt die Energie vor, die man dem
Akku entnehmen möchte und die Anzeige
zahlt dann runter bis Null.
Das Ganze wird in Wattstunden und %
angezeigt.
....Der Speicher war noch immer nicht voll,
und es gibt noch einen Timer (Timer 2)
umd der kann doch den %-Wert als
PWM-Signal ausgeben; Ausgang OC2B
ist noch frei-Das klappt also!
Das PWM-Signal kann so hingetrimmt
werden, dass es die vorhandene
Tankuhr ansteuert und so die
Restenergie anzeigt.






.........jetzt sind die 4k Flash aber voll!!!
Ich hoffe, noch eine übers Menue
einstellbare Warnung bei ca 25% Rest
unterzubringen.
Es müsste gehen, wenn ich die Anzeige
meiner Zwischenergebnisse entferne
und das Programm noch ein wenig
optimiere.

ein kleines Video des fast fertigen
Messwandlers:
(leider ist das Display kaum lesbar)






....und noch eine kleine Funktionsdemonstration
des derzeitigen Entwicklungsstandes
Der Energiezähler soll ja in mein BMS integriert
werden- also muss er seine Werte auch über die
serielle Schnittstelle an das Master-Display
weitergeben.Das Display des Energiezählers
habe ich nur für dessen konfigurierung
vorgesehen, da muss man selten ran und das
wird wohl irgendwo in der nähe des Stromwandlers
oder beim Ladegerät installiert werden.
Die Übertragung der Werte läuft inzwischen,
aber durch die vielen Interrupts der Timer
und der vielen Berechnungen der Energie
ist die Reaktionszeit schon ziemlich lang.
Das hat halt alles Vorrang vor dem eigentlichen
Programmablauf (Anzeige + serielle Ausgabe)
Es bringt an dieser Stelle wenig, den Takt zu
erhöhen, weil dadurch auch die Timer schneller
laufen würden.Mal sehen, was mir da noch
einfällt.................es müsste schon viel besser
werden, wenn nicht mehr so viel angezeigt
werden würde!













Kleiner Nachtrag:

So sieht das derzeit auf meinem "alten"
Display aus (ATtiny2313, 2k):





Zelle 16 hat 3,39V
Zelle 5 hat mit 3,56V den höchsten
und Zelle 13 mit 2,64V den niedrigsten
Wert, Die Gesamtspannung ist 128V
und die Akkus haben noch 95%
Energie drin.

Im 4 x 20 Display könnte man noch mehr
Info reinpacken, aber macht das
wirklich Sinn?
etwa so: (älteres Foto mit dem
"neuen Programm", Atmega 48 )
Die Durchschnittliche Spannung
ist mir wichtig! auch noch die
12V Bordbatterie.
Aber das wird schon recht viel
für das kleine DIP204 Display






Mal sehen was da noch an Ideen kommt......

Nachtrag 03.12.2010:
Dieses Projekt bekommt gerade eine sehr
interessante Eigendynamik.......
Heutige Autos haben meist keinen klassischen
Drehzahlmesser mehr, fast alle Signale
und Messwerte werden inzwischen in
irgend einem Steuerrechner generiert,
überwacht, ausgewertet und oft auch
aufgezeichnet. Ein ganz extremes Beispiel
bzw der erste bei dem das so richtig
konsequent eingesetzt wurde ist der SMART.
Da geht alles per CAN-Bus......
jedes einzelne Rad wird überwacht, Lenkradstellung,
Querbeschleunigung, Neigungswinkel,
Einspritzmenge, Temperatur, Tankinhalt,
gerade eingelegter Gang....etc... das alles geistert
als Datenpaket ständig über den CAN-Bus!
Wenn man da einen Drehzahlmesser
nachrüsten will, dann kann man den zwar
anstecken, aber er muss erst mal im
Zentralrechner freigeschaltet werden........

Offenbar ist der ganze Drehzahlmesser
nichts anderes als ein kleiner Schrittmotor
mit Zeiger! Mal sehen, ob ich dieses kleine
widerspenstige Teil dazu bewegen kann,
vernünftige Werte anzuzeigen???
Wenns wirklich nur ein Schrittmotor ist,
dann sollte das ziemlich einfach sein!
mal sehen.........Ich werde hier
darüber berichten sobald ich mehr weiß.

Nachtrag 13.12.2010:
JA!!!! Es geht !
Es ist wirklich nur ein kleiner billiger Schrittmotor,
und man kann ihn direkt mit dem Atmega steuern!




$regfile = "m48def.dat"
$crystal = 8000000
$baud = 1200

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Dim Adcin As Integer
Dim Adcstep As Integer
Dim Schrittzahl As Word
Dim Adcin8 As Integer
Dim Steps As Integer
Dim Phase(4) As Byte
Phase(1) = 8
Phase(2) = 2
Phase(3) = 1
Phase(4) = 4
Config Portc = &B00001111

Initl:
If Adcstep < 500 Then Incr Adcstep
Gosub Subsm
Portc = Phase(steps)
Waitms 4
If Adcstep < 500 Then Goto Initl

Inith: 'nach Rechtsanschlag fahren
If Adcstep > 0 Then Decr Adcstep
Gosub Subsm
Portc = Phase(steps)
Waitms 4
If Adcstep > 0 Then Goto Inith

Do
Adcin = Getadc(5)
Adcin = Adcin / 2

If Adcstep < Adcin Then Incr Adcstep
If Adcstep > Adcin Then Decr Adcstep
Gosub Subsm
Waitms 4

Portc = Phase(steps)
Loop

Subsm:
Adcin8 = Adcstep / 4
Adcin8 = Adcin8 * 4
Steps = Adcstep - Adcin8
Steps = Steps + 1
Return
End

.........das wars schon..........

"Verstärkung" und einige Kleinigkeiten müssen noch
angepasst werden, aber das Grundgerüst läuft.
Ich habe inzwischen noch eine etwas verfeinerte
Methode gefunden, die Schrittfolge zu erzeugen,
aber so gehts auch gut,
und diese Idee ist wenigstens von mir selbst.



....und schon wieder eine neue Idee:
erst kürzlich habe ich mich über eine
ganze Schale voll Akkus geärgert,
von denen keiner mehr sagen kann
welcher da noch brauchbar ist.

Das Energiezählerprogramm ließe
sich problemlos als Basis für einen
Akkukapazitätsmesser verwenden.
Einfach einen vollen Akku mit ca 1-2A
entladen und die Energie zählen
bis der Akku eine bestimmte
Spannung unterschreitet.
Dann abschalten und den Wert
im Display anzeigen.
Schon weiss man Bescheid!

Vielleicht bringe ich es noch
unter, Spannug und Entladestrom
einstellbar zu machen..............

es sollten ja auch größere
Akkus getestet werden können.
(vom Handy bis zum Schrauber....)

mal sehen, das mit der Spannung
könnte sogar automatisch gehen!?
Beim Start messen, merken und
irgendwo bei 70 - 80% abschalten....
Da muss ich mal Tabellen studieren
und schauen, wie das definiert ist,
was auf so einem Akku draufsteht!

bis demnächst

Franz