Translate

12 Dezember 2013

Wieso und warum und warum nicht anders?

Wie ganz leicht zu bemerken ist, habe ich mich in den letzten Tagen endlich mal
wieder ein bisschen mit der Franzbox beschäftigt bzw. endlich mal wieder damit
beschäftigen können........
So ganz allmählich komme ich den Grenzen dieses wenn mans genau nimmt
Arduinoähnlichen Gebildes recht nahe. Es ist nicht mal der Programmspeicher,
Die Franzbox an sich braucht etwa 8k, und dann ist da ja auch noch ein
BMS-Programm mit einzelspannungs und Min-Max-Auswerung mit drauf
als eigentlich funktionsfähige Altlast bzw Demo. Derzeit stillgelegt, aber vorhanden)
Allerdings liegen die meisten Probleme in der "gewachsenen Programmstruktur"
Was ursprünglich mal als kleine Spielerei um die Ampere auf dem Drehzahlmesser anzuzeigen
begonnen hat ist nun doch schon etwas umfangreicher geworden und macht Sachen
an die ich anfangs nie und nimmer gedacht hätte.
Angefangen hat das ja als ATtiny13, und dann war aber sehr schnell klar, dass ein
10bit-Timer hier nicht ausreicht weil sich die Frequenz über die Periodendauer
der Takte im Drehzahmesser errechnet, und bei niedrigen Frequenzen
sehr viele Timer-Takte zusammenkommen.

Hier wird einfach eine Konstante durch den auf den Nullpunkt bezogenen Wert
des Stromwandlers geteilt

Ein Vierzylinder-Drehzahlmesser baucht
33,3333....Hz je 1000u/min und wenn dann die Schritte bei 6000 U/min bzw 600A
nicht allzuriesig werden sollen, dann kommt man mit den 1024 Schritten eines
10Bit-Timers nicht weit.Der idealste Prozessor war deshalb wegen seines 16Bit-Timers,
der Verfügbarkeit und der Kompatibilität mit der Bascom-Demo sowie dem STK500
ein Atmega48. Mittlerweile bin ich beim Atmega328 angekommen...........
Der 168 müsste aber auch locker reichen wenn das Programm erst mal aufgeräumt wird.
Ich nutze derzeit zwar nur einen winzigen Teil des 16Bit-Timers, aber ohne einen
16 bit -Timer gehts nicht ganz so einfach. .....oder womöglich doch, wenn man den Prescaler
während des Betriebs umschalten kann.....Man könnte auch noch anderweitig ein bisschen
tricksen, so ein 10-bit-Timer kann ja auch noch eine andere Zahl hoch oder runterzählen,
mit ein bisschen if-Then müsste er dann halt zwei- drei - mal oder noch öfter durchlaufen.
Mit etwas gutem Willen geht das dann durchaus, ich habs aber so noch nicht versucht,
das war mir dann letztendlich völlig egal, als immer mehr an Funktionalität dazu kam
und ich sowieso derart viele Ports brauchte.

........vielleich wäre das mal eine Idee für einen supersimplen Ampere zu DZM-Signal-
Wandler, eigenständig und ohne irgendwelchen sonstigen Schnickschnack für diejenigen,
die gar keine Ah-Zählerei brauchen, weil sie z.B. schon ein brauchbares BMS drin haben
das diese ganzen Funktionen ohnehin schon erledigt. (z.B. Emus) sondern nur ein Amperemeter
Ein LEM HASS 200 für 600A -Anzeige, ein ATtiny25, ein 5V-Regler und noch ein paar
Kleinteile (Transistor, Elkos, Supressor-Diode etc  auf die Größe einer Briefmarke gepackt
sollten das dann schaffen. (Kein Display, keine Konfiguration,  bestenfalls 4 / 6 Zyl. )
Ich werde gelegentlich mal drüber nachdenken...müsste eigentlich machbar sein
Das sollte unter 10Euro an Material für die Platine + LEM (ca 17Euro) zu schaffen sein.


Derzeit läuft die Box mit 4MHz und der Timer mit Prescaler 64 da passen dann Werte
von ca 5800 bei fast 0A    ca 36000 bei 3A  ca 64000 bei etwa 100A
ca 65223 bei 300A  und 65379 bei 600A..... 16Bit, das geht von 0 bis 65535.
Ich zähle da übrigens aufwärts bis zum Überlauf, das hat sich mal so ergeben, obwohl es
eigentlich in dem Fall "falsch" ist weil ja die Takt-Zahl bei 0A eigentlich am größten ist.
(eine Konstante geteilt durch den Stromwert, ergibt die Periodendauer,
natürlich nicht bis geteilt durch 0 runter, da muss man aufpassen!)
Das sollte ich mal unstellen und eine Berechnung sparen
Vielleicht wird da auch klar, wieso ich 4MHz gewählt habe, wobei aber 8 oder 16 MHz
sicher auch gehen würden (Arduino.........) wobei aber ein "Baudratenquarz" mit
uhrenkompatiblerem Wert viel an Rechen und Versuchsarbeit erspart hätte.
Na ja, jetzt ists halt so!
4,0960 MHz oder 3,6864 MHz wären jedenfalls die bessere Wahl gewesen.
bzw 7,3728 für mehr Rechenleistung oder 8MHz für mehr Arduino-Kompatibilität.
Aber alle Konstanten zu überarbeiten gefällt mir jetzt auch nicht..... irgendwann mal....

Wenn man ohnehin schon den Strom misst und Timer zur Verfügung hat,
dann ist ein Ah-Zähler die logische Weiterentwicklung, und weil der Atmega48
auch ein Display treiben kann kam eins zum Anderen und schon war der erste Prototyp
fertig. Den Rest in Prozent umzurechnen und per PWM auf die Tankanzeige zu
schicken war ebenfalls selbstverständlich.Das war aber letztendlich der problematischste
Teil des ganzen Projekts!! Mit einem Drehspul- oder Hitzdrahtinstrument geht das
problemlos, aber elektronische Tachos wie neuere von VW mit all ihren  plausibilitäts-
Prüfungen, Kurzschluss- und Leitungsbruchüberwachung muss man erst mal überlisten.

Wie erfasst man Amperestunden?
 Ganz einfach! Man macht in festem zeitlichen Abstand Strommessungen, addiert die Werte
und teilt das Ergebnis durch die Zahl der Messungen je Zeiteinheit.Das Ganze wird noch
entsprechend auf Ah umgerechnet und addiert
Bei den ca. 15 Messungen je Sekunde im Fall der Franzbox kommt man so auf  ganz
brauchbare Ergebnisse

Warum habe ich jetzt so weit ausgeholt? Es ist wichtig, möglichst oft in einem festen
Zeitabstand zu messen, Diesen Takt erzeugt ein Timer. jedes Mal wenn ein Nulldurchlauf
erfolgt wird ein zugeordnetes Unterprogramm ausgeführt und der Timer darin wieder
auf den Startwert gesetzt von dem aus er dann wieder hochzählt bis zum Überlauf.

Diese Unterprogramme müssen kurz sein! Weil sie vorrangig ausgeführt werden
macht der Rechner in dieser Zeit nichts anderes, das muss alles warten bis das
Unterprogramm fertig ist.
Jetzt laufen hier aber schon zwei Timer, und jeder von denen startet je Durchlauf
einmal ein Unterprogramm. Der eine ca 15 mal je Sekunde für den Zeit-Takt
und der andere 400mal pro Sekunde wenn 600A angzuzeigen sind.
Doppelte Frequenz, weil ich da einen Ausgangspin jedes Mal umschalte um ein
Rechtecksignal zu erzeugen.
Das macht der Atmega alles ganz locker nebenbei, weil er mit 4MHz etwa
vier Millionen Befehle pro Sekunde abarbeiten kann (na ja, nicht ganz so viele,
aber es reicht locker) Das geht so lange gut wie nicht zeitintensive Sachen dabei
sind wie vor allem Schreiben in ein Display oder Datenverkehr nach "draussen"
So was muss ins Hauptprogramm wo es dann immer wieder angehalten wird
solange eines der vorrangigen Unterprogramme läuft.

Mittlerweile ist aber in den Timer-Unterprogrammen derart viel an zusätzlichen
Aktionen und Berechnungen reingepackt, dass die Grenze beim Hinzufügen der
I²C Funktionen überschritten wurde. das muss aber letztlich trotzdem da rein,
weil ich sonst nicht garantieren kann, dass die Messwerte aktuell sind.

Hier muss also unbedingt der Ablauf verbessert werden.
Ich werde es versuchen, eine Zahl ni einer Schleife hochzuzählen und
so einen Ablauf in die aufgeteilten I²C-Funktionen hineinzubekommen
also bei jedem Durchlauf nur einen Teil auszuführen.
Die Messung der Zellenspannung braucht z.B. nicht jedesmal zu erfolgen,
das reicht z.B. 1x pro Sekunde, zum Umschalten des Wandler-Kanals
sind aber ebenfalls ein paar Befehle nötig.
Konfigurieren und Auslesen des Wandlers in einem einzigen Durchlauf
ist aber nicht möglich, das hat die Störungen verursacht über die ich schon berichtete.

Es darf an dieser Stelle natürlich auch nicht vergessen werden, dass ich bisher mit
Software-I²C Arbeite, aber zumindest schon mal die "richtigen" Pins benutze.
Vielleicht ist ja alles schon besser wenn die Hardware-TWI (=I²C) aktiviert wird.
Da ist noch sehr viel zu tun und auch zu testen.........

Den Wert zu übernehmen und auch die Berechnungen sollten schnell genug klappen
Es wird sich aber nicht vermeiden lassen, bei der Wertübernahme zu tricksen.
Wenn es keinen Neuen wert gibt, dann ist es wohl am sinnvollsten, dann den zuletzt
gelesenen nochmal zu nehmen, oder aber  einfach nur die geringere Anzahl bei der
Berechnung zu berücksichtigen, Ob jetzt 15 x oder 10 x pro Sekunde gemessen wird
sollte nicht das Problem sein, und dass die Zeitabstände so nicht alle identisch sind
auch nicht. Die Zahl der Messungen je Sekunde ist aber dann auch noch konstant
und darauf kommts an. Ich will aber keinesfalls die Messwerterfassung ins
Hauptprogramm legen und nur die Werte in den Unterprogrammen übernehmen.
Das wäre dann die allerletzte Notlösung, aber dann wäre irgendwan der Sinn
der genaueren Messung über den externen AD-Wandler in Frage gestellt.

Der Jack hat im aktuellen Video sein neues Wunderkästchen sehr genau beschrieben,
 und das was da alles reingepackt ist ist der richtige Weg zu besseren Messungen
als mit der derzeitigen Version der Franzbox möglich sind.
eine ganz andere Möglichkeit wäre aber auch in der Richtung Raspberry zu
suchen, zumal es da mittlerweile ganz ernsthafte Bestrebungen gibt, die vielen
mittlerweile verfügbaren Arduino-Erweiterungen damit zu betreiben.

Stand der Dinge ist derzeit:
Die Franzbox als AH-Zähler ist in der aktuellen Version durchaus brauchbar,
wenngleich auch nur zwei Stück tatsächlich im Einsatz sind.... :-)
Ein älterer Prototyp dient Versuchszwecken, aber da sind ein paar Ports anders belegt,
da ist eine eigene Programmversion notwendig, mehr als eine Erweiterung auf
mehr als 255Ah Akkukapazität (-999 ??) werde ich da wohl nicht "nachrüsten"
Von einer "Serienfertigung" kann man daher gewiss nicht reden.
Ich habe aber zuhause ein paar Stück für vollkommen andere Aufgaben programmiert
und steuere damit Schmiervorrichtungen, Kraftwerksrechenreiniger, Ladegeräte
und auch im IGBT-Controller in meinem Prüfstand mit dem STILL-Stapler-Motor
ist so eine Platine das Kernstück. In einem ganz speziellen Fall ist die H-Brücke
bestückt, und da steuert die Box einen lernfähigen  Positionierantrieb und auch eine
Kommunikation per Modbus-Protokoll habe ich schon zum Laufen gebracht.

Wenn es klappt, die I²C AD-Wandlung so richtig zum Laufen zu bekommen
um die Auflösung der Strommessung von derzeit etwa 3A auf 0,1A zu verfeinern,
und zugleich galv. zu trennen (letzteres ist offenbar kein Problem)
dann gibts dafür natürlich eine Erweiterungsplatine für I²C Strom- und Spannungsmessung.
Sollte ich es aber nicht Timer-interruptgesteuert schaffen, dann bleibt es bei der
bisherigen Strommessung und nur die galv. getrennte Spannungsmessung erfolgt
dann per I²C. Das kann nämlich auch problemlos im Hauptprogramm erfolgen,
und da klappt das wunderbar! 

Leider haben alle Atmegas nur 10bit AD-Wandler, und die Xmegas sind deutlich
aufwändiger zu programmieren. Es wäre natürlich auch denkbar, einen der vorhandenen
AD-Wandler-Eingänge anders einzulesen und schlicht und einfach unterhalb einer
bestimmten Grenze den Wert des anderen AD-Wandlers zu nehmen.
Schliesslich ist ja nur die zu grobe Auflösung bei niedrigen Strömen wirklich problematisch,
aber ganz sooooo einfach ist das trotzdem nicht, weil dadurch auch die Messung am anderen Kanal beeinträchtigt wird wegen der Last des Spannungsteilers die ja dann nicht ganz gleichmäßig ist.
..........es müsste aber durchaus machbar sein!!!!!! und auch ohne Layout-Änderung!

Es gäbe ja auch noch die etwas verwegenere Variante mit Oversampling ( und ev. Einspeisen
von "Rauschen"????) das sollte ich vielleicht auch mal ausprobieren. zumindest muss ich mal mein
Programm dahingehend überarbeiten. Ich bin mir jetzt gerade gar nicht mehr sicher,wie
ich da alles gemacht habe. Sicher ist, dass ich die Auflösung fürs Display ein bisschen umrechne
damit es nicht ständig wechselt, aber das macht ja die Auflösung nochmal schlechter.
Ich muss da also unbedingt für die Berechnung zum Auswerten alle "Korrekturen" entfernen
und fürs Display einen gesonderten Mittelwert aus einigen Messungen bilden.
Das löst aber nicht ein weiteres Problem, das ich mit dem Delta-Sigma-Wandler nicht habe,
nämlich die Drift von der Referenzspannung gegenüber dem Nullpunkt des LEM-Sensors.
Der Delta-Sigma-AD-Wandler ist auch an die Referens des Lem angeschlossen, das ist
wesentlich besser und stabiler.

....und weil ich grad am Schreiben bin..... es ist mir mittlerweile auch gelungen,
Bascom .Hex-Files per Arduino-Bootloader auf Arduino zu laden.
Auch das Brennen des Arduino-Bootloaders auf einen Atmega 328P
funktioniert mittlerweile.
Einen Arduino direkt per Bascom und Arduino-Bootloader zu beschreiben hat
aber noch nicht geklappt.
Allerdings habe ich festgestellt, dass dazu als Betriebssystem mindestens Windows XP
nötig zu sein scheint, aber mein Bascom ist auf einer Win2000-Parition installiert.
Da bin ich ständig am neu booten, und alles was mit Arduino zu tun hat baut unter
WIN2000 keine Verbindung zu den angeschlossenen Platinen auf.
.....noch nicht mal zu einem Duemillanove-Klon mit echter serieller Schnittstelle.......

Das letzte Franzbox-Programm läuft zwar auf dem Arduino-M238P wenn ich es
im Freeduino seriell per Bootloader drauflade und dann den Chip
in die Franzbox-Platine stecke, und obwohl die Fuses stimmen läuft es dann
aber lähmend langsam. Da bin ich noch nicht dahintergekommen weshalb das so ist.
Wie schon mehrfach erwähnt ist die Franzbox-Platine definitiv Arduino-kompatibel.
Die Ports passen, und sogar das EA DIP204 kann so wie es beschaltet ist auch
per Arduino betrieben werden. Das passt alles zusammen,obgleich das Display
unter Arduino eine eher harte Nuss ist, weil die Startadressen der Zeilen von der
Norm abweichen und man da sogar im Programm rumeditieren muss.
Bei echten "Industriestandard-LCDs" hat man dieses Problem nicht
und man müsste zum programmieren halt so vorgehen wie auch bei den ganzen
Arduino-mini-Versionen ohne seriellen Pegelwandler bzw USB-Anschluss.
also entweder ohne Bootloader per ISP-Programmer oder mit einem seriellen Adapter
den man sich zur Not aus einem gesockelten Arduino (Uno, 2009, oder Freeduino)
basteln könnte, was aber nicht ganz problemlos funktioniert wegen Timing-Problemen
im Zusammenhang mit dem Auto-Reset des Arduino.  Nur mal so am Rande erwähnt.
Die ISP-Variante ist die problemloseste, man muss nur erst mal die .hex-Dateien
auf dem Rechner finden..... irgendwo im temporären Ordner von Windows........

Ich bin nicht der große Arduino-Fan, aber das liegt hauptsächlich daran, dass ich
mit Bascom angefangen habe, und dass es daher nicht ganz einfach ist die Denkweise
auf Arduino umzustellen. Hinzu kommt, dass es bei Arduino nicht wirklich vorgesehen ist,
Prescaler von Timern zu verändern oder mit anderen Quarzen zu arbeiten.
Gewiss ist das auch bei Arduino machbar, aber man muss da halt leider schon in die
Trickkiste greifen, während das bei Bascom völlig unproblematisch ist.
Hier fehlt mir einfach noch die Erfahrung Das wird aber sicher noch besser im Lauf der Zeit.
Aber das ist jetzt überhaupt nicht mein Problem!

In den nächsten Tagen wird hier aber nicht viel passieren, es hat sich daheim schon wieder
eine riesige Menge an "dringendst zu erledigenden Dingen" angesammelt so dass wieder mal
eine "schöpferische Pause" nötig ist.

bis demnächst!
Franz







11 Dezember 2013

Aaaaahhhhhh Ja!!!!!!!! Wieder mal was gelernt! "Neueres" Golf Kombiinstrument ansteuern

Kaum ist ein Problemchen gelöst, da taucht ein neues auf.............

Wie schon erwartet war die Ansteuerung der Hitzdraht-Tankanzeige vom 93er Golf einfach,
aber was machen die computergesteuerten Kombiinstrumente mit Schrittmotor-Anzeigen?

Natürlich funktionieren die mit reiner PWM nach GND getaktet nicht!
Ich habs schon irgendwie geahnt! Obwohl die mit dem gleichen Tankgeber arbeiten
haben die einen völlig anderen Spannungsbereich von etwa 0,7 bis 2,7V
Da fliesst also viel weniger Strom auf der Leitung.

Dieser Spannungsbereich ist vergleichbar mit dem des Golf4, allerdings nicht ganz die gleichen
Werte und vor allem "andersrum" Ich hatte schon die Befürchtung, doch wieder auf die
Schaltung mit dem LT1010 zurückkehren zu müssen, aber dann habe ich doch noch eine
recht einfache Lösung gefunden. Der Vorwiderstand von 25-30 Ohm ist hier noch viel wichtiger
als beim Hitzdrahtinstrument, Damit stellt man die Anzeige erst mal grob auf etwas mehr als voll.
.......und dann noch ein richtig schöner großer Kondensator nach dem Widerstand nach GND
und schon funktioniert das auch mit den moderneren Anzeigen!!!!!!!
(2200 µF reichen allemal, ich weiss aber noch nicht wie der Wert mindestens sein muss)
Das neuere Kombiinstrument aus einem 96er 1,6l 75PS Golf zeigt wunderbar genau an!
Die Schaltung per Transistor nach GND ist mit ein sehr großes Anliegen, und weil sich hier
auch schon wieder das nächste Problem abzeichet weiss ich jetzt schon, dass da noch ein
paar Meßreihen und Versuche nötig sein werden.Nicht zuletzt weil ich die Leitung der
Tankanzeige bis 0,63V runterziehen muss, bzw sogar auf etwa 250mV wegen des
Vorwiderstandes. Das kann nur ein N-Mosfet, und die sind wiederum mit 3,3V nur
schlecht anzusteuern.In meiner Mini-Franzbox habe ich NPN-Transistoren als
Schaltelemente drin, da ist bei 0,7V Schluss! Der Ausgang ist also zum Ansteuern der
elektronischen Tankanzeige nicht geeignet.Die Hitzdraht-Version sollte funktionieren


Leider funktioniert aber auch der Drehzahlmesser nicht ganz so wie erwartet.
Michael hat sowas auch schon mal festgestellt, bei Drehspul-DZM fällt das aber nicht auf.

>>EDIT 12.12.13: .....nein, das kanns da nicht gewesen sein!
Das bisherige Programm ist hier fehlerfrei, zumindest was dieses Zucken betrifft  :-)
Das muss einen anderen Grund gehabt haben und schon mit dem Meßsignal ankommen.
Hier lags an was anderem im Zusammenhang mit I²C!!
Das wird noch eine harte Nuss, da gehts ans Eingemachte und an die Grenze
des Machbaren. Das wird aber dann in einem eigenen Thread behandelt!
kurz: Die I²C Geschichte muss aus dem Timer-gesteuerten Unterprogramm
raus, weil sich da sonst die Interrupts gegenseitig stören.
Das war übrigens zugleich auch der Grund für die Anzeige-Fehler im Display!


Die Nadel ist ein bisschen nervös, und ich bin mir in diesem Fall sicher, dass das nicht
am Kombiinstrument liegt, und auch nicht an einer zu hohen Spannung am Ausgang der
Franzbox, weil ich da schon ein Poti reingesetzt habe. Ich kann da ziemlich weit runterdrehen,
und irgendwann ist das Signal zu klein, aber am leichten Zucken der DZM-Nadel ändert
das nichts. Da muss ich mir demnächst mal das Ausgangssignal unbedingt genauer ansehen!
Natürlich schwankt der Wert am Timer ganz leicht, aber bin ich da womöglich schon
in einem Bereich wo die Schritte zu groß werden? bei 200A (2000 u/min) ist es noch
nicht tragisch, aber im oberen Bereich wird es dann unangenehm.
Da müsste ich dann eventuell die Taktfrequenz der Box erhöhen um den Timer mit niedrigeren
Zahlenwerten zu betreiben. Das wird interessant! Aber nicht mehr heute.........

06 Dezember 2013

Umbau der Franzbox auf Transistorausgang für "normale" Tankanzeigen

Nachdem sich herausstellte, dass die Ansteuerung der Tankuhr je nach Fahrzeug durchaus
unterschiedlich erfolgen muss gibt es hier eine ganz spezielle Umbauanleitung für Bernd.

Die Ansteuerung mit einer Spannung  von 0-4,5V wie sie bei neueren VW-Tankanzeigen ab Golf4
nötig ist, weil da der Rechner im Kombiinstrument offenbar nur impulsförmig den Widerstand
des Tankgebers misst ist bei den älteren Anzeigen bis hin zum Golf3 nicht verwendbar,
weil die mit anderen Spannungen auf der Geberleitung arbeiten. (aber mit ähnlichen Geber-Werten
Ich muss an dieser Stelle zugeben, dass ich das bisher nie direkt "am Objekt" nachgemessen habe,
aber das ganze Verhalten deutet darauf hin, und sobald irgendetwas mit Kondensator und Widerstand
in der Leitung war ging die Anzeige auf Anschlag.Diese Tankanzeige per PWM anzusteuern klappte
jedenfalls nicht, aber über den Umweg per PWM eine Spannung von 0-5V zu erzeugen und diese in
einen LT1010 als analogen Leistungstreiber einzuspeisen und mit dieser Gleichspannung zu arbeiten
klappte es sofort. Es müsste auch funktionieren, diese Anordnung auf 0-12V zu erweitern indem
man den TC4431 bestückt und mit dessen 12V-Ausgang und dem LT1010 an 12V arbeitet
aber gerade die LT1010 sind sehr teuer, so dass ich sie wenn es irgendwie möglich ist nicht
einsetzen möchte.Wer ein bisschen Ahnung von Elektronik hat, der wird mir zustimmen, dass
es eine sehr schwierige Aufgabe ist, einen veränderlichen Widerstand zu bauen.
Es ist viel einfacher, die Spannung zu erzeugen, die im jeweiligen Fall an diesem Widerstand
anliegen würde. Das war in diesem Fall der entscheidende Trick!

Hier geht es aber um einen ganz speziellen Fall einer Tankanzeige eines späteren Golf1 Cabrios
das bereits die Golf2 Armaturen drin hat. Ich habe in meinem "Fundus" aber nur einen 93erGolf3
Tacho gefunden, der jedoch vom Verhalten her nahezu identisch sein sollte.Golf2 und 3 Tanks
und deren Geber sind jedenfalls untereinander austauschbar, also arbeiten die sehr ähnlich.
Ich kann jedoch hier noch nicht versprechen, dass sich alle Golf3 Tankanzeigen bzgl PWM gleich
verhalten, sondern nur dass die Geber gleich sind! Von den Tachos gibt es verschiedene Versionen
von verschiedenen Herstellern sowohl mit Hitzdraht als auch später mit Schrittmotor-Anzeigen.
Da muss ich erst mal ein neueres Kombiinstrument besorgen, dann sehen wir weiter........

Diese Hitzdraht -Tankanzeigen brauchen einen weitaus größeren Bereich zum Ansteuern.
bei "LEER" liegen hier annähernd 9V auf der Leitung
Andererseits kann man hier aber das Signal takten so dass es eigentlich viel einfacher ist, diese
Instrumente anzusteuern.Gewissermaßen exakt die Schaltung so wie sie ursprünglich geplant war.
Ich habe deshalb heute meine Versuchs-Box auf einen Transistorausgang (open Drain N-Mosfet)
umgebaut

Zum besseren Verständnis nochmal der Schaltplan: (zum Vergrößern anklicken)


........und die zu verändernden Stellen:





 Was ist zu machen?
1.Brücke in JP2 entfernen Der LT1010 wird dadurch stillgelegt
2. Pin 5 (Ausgang) des LT1010 abtrennen (würde nur stören)
3.Transistor einlöten (N-Mosfet, BDX77 oder IRF1404 oder sonstigen der bei 5Vein wenig schaltet)
4.Brücke einlöten (R34)
5.Brücke einlöten (IC4 Pin2 nach Pin 6)
6.Widerstand einlöten ca.1k - 4k7k oder ähnlich (R31) bzw R32 wiederverwenden
7.Eventuell Widerstand R32 entfernen (kann aber auch drin bleiben)

Beim Anklemmen der Tankuhr sollte man noch einen Widerstand in Reihe schalten der
etwas kleiner sein sollte als der minimale Widerstand des Tankgebers. Bei Vw hat der Geber
z.B. ca 33Ohm bei "Voll" also wären hier 27 Ohm gut. Ich habe  zwei 47R parallel genommen.
So kommt man dann auf annähernd 100% Puls-Pausenverhältnis bei voll.
Wenn man es noch "ganz besonders gut" machen will, dann könnte man dann noch einen weiteren Widerstand vom Ausgang der Box nach GND legen der dem maximalen Widertand des Tankgebers entspricht, aber den kann man auch weglassen, sonst könnte ich mir auch die Einstellung im Menue
der Box sparen.So kommt man halt auf einen Einstellbereich des PWM-Ausgangs der annähernd von
0 - 100% Puls-Pausenverhältnis einstellbar ist, aber ohne diesen Widerstand war die Einstellung des Nullpunkts bei Stufe 22 von 255 auch schon sehr in der Nähe von Null, das reichte locker für den
Abgleich auf den Nullpunkt der Tankanzeige.

Das wars schon!

Nach diesem Umbau konnte ich die Tankanzeige eines Golf3-Tachos problemlos abgleichen.
Allerdings fiel auf, dass diese Tankanzeige beim verwendeten Kombiinstrument aus einem
'93er 1,8 90PS sehr!!!! stark gedämpft ist, und im Bereich 2/3 bis 3/4 Voll etwas viel anzeigt (+5%)
und dann relativ lange braucht bis bei 50% auch 50% auf der Uhr stehen.
der Bereich unter 1/2 und um 1/4 passt aber sehr gut. damit kann man schon zufrieden sein!
Bei anderen Systemen ist die Mitte überhaupt nicht einzeln abgleichbar, da ist dieser Fehler
noch viel größer und überhaupt nicht beeinflussbar.
Da muss man halt ein paar mal im Menue ein bisschen nachstellen, dann passt das
schon so wie man es haben will.
Unter 0% Rest zeigt dann das Display (lo) an und bei der eingestellten Grenze,
(normalerweise -5%) kommt die Warnleuchte. Hier empfiehlt sich die ehemalige
Ladekontrolleuchte die mit dem Schalttransistor im Ausgang der Box angesteuert wird.
Bei tieferer Entladung als -10% schaltet die AH-Anzeige der Box ab und ein Text
zeigt blinkend "!!Tiefentladen!!  In diesem Zustand (Warnung oder Tiefentladen)
würde auch die automatische Nachladeschaltung für die Bordbatterie nicht mehr
einschalten.

............und wo dieses doppelte h in Ah herkommt werde ich auch noch finden..........
natürlich wärs mit einem Leerzeichen hinter dem h weg, aber ich will wissen wie das
entsteht!Deshalb ist das noch nicht geändert








bis demnächst!
Franz

04 Dezember 2013

Galvanisch getrennte Spannungsmessung per I²C

Die Messung per I²C läuft jetzt im aktuellsten Programm der Franzbox!
derzeit bis 160V, aber das ist nur eine Frage des Eingangsspannungsteilers.
Hier wird zwar die "Akkuspannung" angezeigt, aber nur deshalb, weil
ich da schöner testen kann, und weils für die Strommessung noch ein paar
Änderungen im Programm braucht. Ich hätte gerne beide Möglichkeiten
einstellbar bzw sogar automatisch umgeschaltet, entweder wie bisher
Strommessung per LEM und Onboard AD-Wandler ohne Spannungsmessung
und als Option die genauere Messung per I²C extern und galvanisch getrennt
inklusive Akkuspannung.       ............sieht schon mal sehr gut aus!

Hier taucht auch wieder mal die Frage auf Shunt oder Induktiver Wandler.
Weil die Spannungsmessung ohnehin schon eine Verbindung zum Akkupack hat
wäre für den Shunt nur noch eine Leitung zusätzlich zu legen.
Der Shunt hätte den größten Vorteil bei geringen Strömen, weil da 0A
auch 0,0V Messignal ergeben, keine Drift, kein Nullabgleich,
da kommts nur auf die Qualität des Messverstärkers an.
Hier ist aber alles möglich, mal Preise und Verfügbarkeit checken!
So ein Shunt liegt preislich wohl irgendwo bei 50 Euro, und ist damit deutlich teurer
als ein LEM-Wandler für unter 20Euro.Die LEM-Wandler arbeiten erstaunlich gut,
aber mit 1-2% Fehler muss man immer rechnen und der Nullpunkt wandert ein bisschen
mit der Temperatur. An einem 10Bit AD-Wandler ist ein Schritt schon 1,6A
Da kann man keine Wunder erwarten, und zur Messung des Nachladens mit
10A oder so genügt das halt einfach nicht. Zum Ah-zählen bei Strömen um 150A
reichts aber locker!
Wie schon gesagt, es kommt halt drauf
an, welche Messeigenschaften man haben will, und was man bereit ist, dafur zu bezahlen.
Shunts sind in der Regel auf 50 ; 60 ; 100; oder 200mV Ausgangsspannung
abgeglichen, und weil die Last im Fall eines Antriebs nicht dauerhaft anliegt darf man den
hier auch mal etwas knapp dimensionieren. Ein 300A/100mV -Shunt kann hier also
durchaus auch für 600A/200mV verwendet werden. Das hält der schon ein paar Minuten aus!
Allerdings: 500A und 200mV sind schon 100W Verlustleistung! das darf man nicht
auf die leichte Schulter nehmen! Da verwundern die Abstimmungen auf 50mV nicht!
Aber dann ist der Messverstärker wirklich gefordert, wenn das so um 0A auch
noch passen soll!

Die Signale laufen übrigens auch schon über den Isolator, und das Problem
des Programm-Stillstandes bei "offenem" I²C-Bus ist inzwischen auch gelöst

Kleiner Nachtrag 5.12.13:
Mit einem anderen Spannungsteiler (60k + 500R =121:1) kann jetzt bis 247V
gemessen werden, Das passt fürs erste.
Leider ist die ganze Ausleserei in der Interrupt-routine nicht ganz unproblematisch.
Es kommt zu etwas seltsamen Timing-Problemen??? im Display die ich vorher nicht
feststellte. Mehrstellige Zahlenwerte die ich direkt anzeigte wurden sporadisch nur
einstellig dargestellt, wodurch die Anzeige gelegentlich flackerte und zuckte.
Dies betraf hauptsächlich das Menue und die Anzeige der Amperestunden bei 100%.
Ich konnte zwar die wirkliche Ursache noch nicht feststellen, aber als "Workaround"
wandle ich diese Werte jetzt in einen String bevor ich sie anzeige. Dann passt die Anzeige!
Ich muss zumindest den Strom-Wert unbedingt in einer Interrupt- Schleife einlesen,
und dann auch beide Kanäle abwechselnd. Weil der AD-Wandler dazu auch jedesmal
umkonfiguriert werden muss sind das durchaus einige Daten auf den I²C-Leitungen.
Die Spannung bräuchte zwar nicht derart oft gemessen werden ( ca 15x je Sekunde),
aber anders wärs noch komplizierter, weil ja die ganzen Schreib- und Lesevorgänge
koordiniert sein müssen.Erst IC ansprechen, Kanal aktivieren, ein bisschen warten und
dann auslesen.
Der Zeitliche Ablauf und die Berechnungen laufen im Hintergrund so wie bisher,
und die Werte sind nach wie vor korrekt, es ist noch kein unlösbares Problem aufgetaucht.




03 Dezember 2013

Galvanisch getrennte Spannungsmessung mit MCP3426 und ADUM2250

Der Messaufbau ist zwar sehr primitiv und nur mal schnell zusammengelötet,
aber so funktioniert das schon recht gut und genau so wie erhofft.

Als AD-Wandler dient ein MCP3426, das ist der kleine I²C delta-sigma-Stromwandler
in den ich mich regelrecht verliebt habe und der für diesen Zweck hervorragend geeignet ist.
12 14 oder 16Bit Auflösung bei +- 2,048V Eingangsspannung gegen einen Bezugspunkt
der nicht auf GND liegen muss das Ganze zwei Mal, Referenzspannung etc "On Board"
Es ist keinerlei externe Beschaltung notwendig ausser Spannungsversorgung und I²C
Der funktioniert von 3-5,5V und ausserdem ist noch ein "gain" also ein Vorverstärkungsfaktor
von 1  ;  2  ; 4 oder 8 einstellbar das ergibt z.B. einen Eingangsbereich von +- 0,256mV
bei einer Auflösung von 65536 Schritten bei 16Bit ok, braucht nicht jeder so fein, und dann
wird der Wandler auch langsam, aber 12Bit sind auch noch 4096 Schritte
bzw 14bit 16384Schrittegesamt also 8192 von 0-maximum.
Damit kann man direkt einen Strom-Shunt auslesen. (meist auf 200mV abgeglichen)
15 SPS (16 bits)  60 SPS (14 bits)  240 SPS (12 bits) (SPS= Messungen pro Sekunde)
wie ich in teinem älteren Post schon mal erwähnte kann man bei +-2,048V Eingang
und Betrieb an 5V einen LEM Stromwandler ebenfalls direkt anschliessen.
Der Messbereich des LEM HASS200S geht dann bis +- 645A also mehr als nötig für
das Maximum von +-600A.
Die Ansteuerung per I²C ist erstaunlich einfach.
Weil es immer wieder die gleichen Befehlssequenzen sind ist das in Bascom mit
wenigen Zeilen Programm erledigt. Die Zahlen auf dem Display der Franzbox
(:7:32:16) sind die drei Byte, die pro Messung empfangen werden
also highbyte, lowbyte, Statusbyte  7 x 256 + 32 ergibt 1824.

Das schöne am MCP3426 ist, dass die Eingangsspannung schon korrekt ausgegeben
wird. 1824 sind bei 12 Bit und den 2,048V Referenz auf +- 2048 Schritte
exakt 1,824V am Eingang!

Das ist wesentlich schöner zu berechnen als z.B. 1024 Schritte bei 5,07V Referenz
umzurechnen wie das beim Onboard-AD-Wandler des Atmega üblich ist.

........wer hier mal meinen Spannungsteiler genauer anschaut wird feststellen, dass
da was nicht stimmen kann......ich habe mal wieder dieses doofe Messinstrument
erwischt, das bei leerer Batterie ohne Warnung zu viel anzeigt.......und habs im Programm
angepasst, ohne lange zu überlegen. Dieses Messgerät wird jetzt entsorgt!

Für die galv.Trennung des I²C-Busses sorgt ein ADUM2250.
einfach mal nach den Datenblättern googeln, die sind leicht zu finden!

So ist die gesamte Messvorrichtung mit gerade mal ca.10 Bauteilen zu realisieren.
I²C ist zwar nicht unbedingt das ideale Bussystem in rauher Umgebung, da muss ich
noch ein paar Versuchsreihen durchführen, aber wenn man den Messwandler nicht
allzuweit weg vom Auswerterechner platziert dann funktioniert das sehr zuverlässig
und auch schnell.SPI ist da auch nicht viel besser, braucht aber einen Port mehr
und RS232 ist eher langsam und braucht einiges an Hardware zusätzlich.