Translate

21 Dezember 2012

Immer mit der Ruhe.......und immer weiter machen

.....die letzten paar Wochen wars ein bisschen ruhig hier im Blog, aber das muss ja nichts bedeuten.
Das kann ja genau so ein Zeichen dafür sein, dass alle in der Garage oder sonst wo sitzen
und an irgendwelchen Projekten arbeiten und deshalb nichts posten.
Aber in den letzten Tagen gehts eh schon wieder voran.
Achim hat den Audi endlich zulassen können, bei Michael sieht es sehr nach einem neuen Projekt aus,
Johannes hat erste Probefahrten gemacht, Bernd hat voe einiger Zeit die EMV-Hürde gemeistert
Mathieu bastelt gleich an mehreren Sachen gleichzeitig und irgendwo entsteht gerade
ein Porsche Speedster mit E-Antrieb....... natürlich sind da noch ein paar andere,
aber ich will ja hier nicht über andere berichten, sondern was in meiner Bastelbude so läuft.

Wie schon erwähnt hatte mich mein Golf ganz schön beschäftigt, aber der funktioniert jetzt wieder.
An meinem Igbt-Controller ist nicht allzuviel passiert, aber da jetzt der Tachoausgang des
umgebauten Entengetriebes angepasst ist und ein Tacho dran hängt konnte ich zumindest da schon
ein paar Drehzahltests machen, die zumindest meine Schätzungen und Befürchtungen bestätigten.
erstens lag ich ziemlich richtig, was die nötige Übersetzung betrifft, zum anderen sieht es aber gar
nicht allzu düster aus. Das Entengetriebe ist etwa auf 3000 U/min bei 100km/h ausgelegt,
und das ist einfach etwas kurz übersetzt für einen Motor der lieber nicht mit viel mehr als
2000 U/min betrieben werden möchte. Andererseits muss man bei nur einem Gang immer
einen guten Kompromiss finden und so ist das Ganze halt für cirka 30 bis 70 km/h optimal
und mit einigen Volt mehr dürften trotzdem die 100 zu schaffen sein (und gerade so um die 50
rum müste das Ding gewaltig beschleunigen)
Im Augenblick habe ich nur 36V zur Verfügung und das reicht im Leerlauf für gute 80 auf dem
Tacho, und das hört sich noch durchaus gut an.Unter Last geht die Geschwindigkeit auf etwa
30 km/h zurück,  das passt schon, und wenn man da auf 140V hochrechnet dann passts erst recht!
....und mit dem Golf Diesel-Getriebe, das mit 2500 U/min 100 läuft, ist das geradezu ideal!!!!
Der Prüfstand ist leider auch noch nicht fertig, weil immer wieder etwas anderes wichtiger war.

Ich habe in den letzten Tagen nochmal eine IGBT-Endstufe + Treiber aufgebaut, die werde ich
über die Feiertage mal ordentlich belasten um zu sehe wie sich die bei einem Strom von ca 100A
(oder etwas mehr.....) verhält. Das soll die Basis eines Ladegerätes werden.
Dazu zu gegebener Zeit mehr, aber nicht jetzt, es ist noch zu früh......

Wie geht es eigentlich mit der "Franzbox" weiter?
Hier gibt es hauptsächlich drei Dinge die mir noch nicht ganz gefallen.
1. Die serielle Schnittstelle ist nur als TTL-Signal direkt vom Prozessor herausgeführt.
    Da wünsche ich mir einen RS232-Treiber oder wahlweise einen RS485-Treiber,
    damit das auch nutzbar ist. (derzeit nur als zusätzliches Platinchen machbar)
2. Der LT1010 als Treiber für die Tankanzeige ist ein bisschen zu teuer für diesen Zweck
    ...aber trotzdem geradezu ideal......in einstelligen Stückzahlen kein echtes Problem.
3. Die Genauigkeit der Strommessung muss noch verbessert werden.
    Ich habe bisher den Ausgang des LEM HASS 200-S direkt auf einen 10-bit AD-Eingang
    des Atmega gelegt und komme so auf eine Auflösung im 2A-Bereich.
    Das reicht natürlich zum Erfassen der entnommenen Amperestunden während der Fahrt,
    aber das ist zu ungenau beim teilweisen Nachladen mit niedrigen Strömen.

Insbesondere dieser Punkt ist von größter Bedeutung! Der LEM-Wandler an sich ist
gar nicht so ungenau, aber das Messignal muss halt genauer bzw feiner aufgelöst erfasst werden.
Ich hatte da schon mehrere Ideen bis hin zu zwei Messumformern für verschiedene Bereiche
oder auch nur einen Messverstärker für den "kleinen" Bereich.
Ein kleiner OP mit Verstärkung 10 wäre durchaus eine Möglichkeit,
aber vor ein paar Tagen kam ich auf eine ganz andere Lösung die mir noch viel sinnvoller erscheint:
Es gibt da doch ganz wunderbare AD-Wandler mit 12 oder sogar 14 und 16 bit Auflösung
und I²C-Schnittstelle,  z.B. die MCP 3425 bis MCP 3428 von Microchip
Die Dinger sind klein, billig,  genau, verfügbar, und vor allem haben die "Delta-Sigma-Eingänge"
und Referenzspannung "On Board" man braucht also keine externe Referenzspannung
dafür, und durch den Differenz-Eingang kann man die Referenzspannung des LEM-Wandlers
endlich sinnvoll nutzen. Der "Delta-Sigma-Eingang" ist Differenziell, es wird also der
Spannungsunterschied zwischen den beiden Pins gemessen und nicht die Absolute Spannung
gegen Masse wie bei den Eingängen des Atmega. Das ist also genau das, was an den Ausgang
des LEM HASS dran gehört, weil dessen Ausgangssignal ja eigentlich auf die 2,5V Referenz
bezogen ist, die zwar die Mitte der Versorgungsspannung von 5V darstellt, aber
eben bisher nicht angeschlossen war, so dass ein Nullabgleich nötig ist.

I²C habe ich meiner Box kürzlich im Rahmen einer völlig anderen Anwendung beigebracht,
und weil das mit jedem beliebigen Pin des Atmega zu betreiben ist würden sich dafür
zwei der AD-Wandler-Eingänge eignen, zumal es Bausteine gibt, die vier Eingänge haben.
Insbesondere bieten sich da natürlich die Ports C.4 und C.5 an, die ich bislang reserviert habe
so weit es möglich war, weil da auch die Hardware-I²C Ausgänge liegen.
Die feinere Auflösung wäre auch zur Temperaturmessung nutzbar.
Ich habe mit miner Box-Platine kürzlich MCP 4441 des selben Herstellers (Microchip)
angesteuert und ausgelesen, und das war letztendlich gar nicht schwierig.
Der MCP 4441 ist übrigens ein elektronisches vierfach-Poti. Leider gbt es den aber nicht
in einem Widerstandswert, der als Tankgeber-Simulation geeignet wäre.
Die Dinger eignen sich aber schon ganz gut zum Üben mit I²C
....wenn sie nicht ganz so winzig wären......Da kommt man um eine Adapterplatine nicht rum.
Ich hatte in diesem Fall zwei MCP 4441 auf einer Platine, also insgesamt acht
E-Potis die anzusteuern waren. Beim Einschalten Auslesen der abgelegten Werte,
dann der Reihe nach einstellen der acht Potis falls gewünscht und Abspeichern der neuen Werte
in den NV-RAM sowie Anzeigen der Statusregister.Das ist ein Testgerät für eine Platine
mit zwei MCP 4441 = acht Potis mit der acht Vorwiderstände abgeglichen und gespeichert werden.
E-Potis, weil das Gehäuse bei späterem Neuabgleich zu bleiben soll.
Ich kann leider nicht mehr dazu "verraten" weil das ein Projekt in meiner Firma ist.

Die wichtigsten Bascom.Code-Schnipsel hierfür:

Config Sda = Portc.4
Config Scl = Portc.5
I2cinit

........Das sind auch die I²C "Hardware-Ausgänge, aber hier ist nur I²C als Software genutzt.
es macht aber Sinn, gleich diese Ports zu benutzen

....und eine Schreib/Lesesequenz:

I2cstart
I2cwbyte &B0101_1000                 'IC1    (Adresse IC1)
I2cwbyte &B0000_1100                 'NV0   (Adresse NV-RAM0
'Waitms 60
I2cstart
I2creceive &B0101_1001 , Read1a , 1 , 2       '(Lesebefehl)
I2cstop
Read1a = Read1a / 256                                    'Umrechnen
If Read1a > 127 Then Read1a = Read1a - 128
Read1b = Read1a
'Waitms 5
'I2cstop
Locate 2 , 1                                                      'Ausgabe im Display
Lcd "a" ; Read1b

Hier wurde beim Einschalten der Vorgabewert eines der vier NV-Ram ausgelesen
weil es nur einen allgemeinen Lesebefehl gibt, der immer das zuletzt angesprochene RAM
ausliest, muss halt zuvor erst das IC und dann das gewünschte NV-Ram angesprochen
werden um dann beim Lesevorgang den gewünschten Wert zu erhalten.

So sehr viel anders dürfte das Auslesen der I²C-AD-Wandler vom selben Hersteller auch nicht
ablaufen, ausser dass da dann zwei Byte gelesen werden die man noch entsprechend
zusammensetzen muss um die "Word-Variable" zu erhalten.
Hier hängt es davon ab, wie die Daten ausgegeben werden, also ob man die
beiden Byte einzeln holen muss, oder ob sie nacheinander kommen und direkt
in eine "Word"-Variable geschrieben werden können.
Gegebenenfalls braucht man noch den "Swap"-Befehl um die beiden Byte des "Word"
auszutauschen. Das war z.B. beim Auslesen der Statusregister der Fall
Das Auslesen der Statusregister habe ich so gemacht:

Locate 1 , 1
Lcd "Statusregister (05h)"
Locate 2 , 1
Lcd "IC1"
Locate 4 , 1
Lcd "weiter mit Taste "
I2cstart
I2cwbyte &B0101_1000
I2cwbyte &B0101_1100
'Waitms 60
I2cstart
I2creceive &B0101_1001 , Read9a , 1 , 2
I2cstop

I2cstart
I2cwbyte &B0101_1010
I2cwbyte &B0101_1100
'Waitms 60
I2cstart
I2creceive &B0101_1011 , Read10a , 1 , 2
I2cstop
'Read1a = Read1a / 256
'If Read1a > 127 Then Read1a = Read1a - 128
'Read1b = Read1a
Waitms 60
'I2cstop
Swap Read9a
Swap Read10a
Locate 2 , 1
Lcd "IC1:" ; Bin(read9a)
Locate 3 , 1
Lcd "IC2:" ; Bin(read10a)

Print #1 , " "
Print #1 , "Statusregister:"
Print #1 , "IC1:" ; Bin(read9a)
Print #1 , "IC2:" ; Bin(read10a)

Test9:
Debounce Pind.4 , 0 , Fertig
Goto Test9

Fertig:         'hier gehts dann weiter im Programm


Ich habe schon ein paar MCP 342X -Ics in verschiedenen Ausführungen bestellt,
aber die sind noch nicht angekommen bzw die Bestellung ist noch gar nicht raus,
weils noch zu wenig Teile sind. Ich bin schon sehr gespannt, wie die Versuche
klappen, und ob das mit der Referenz aus dem LEM als Bezug für den differenziellen
AD-Wandler klappt. Theoretisch müsste das dann ev. den Nullabgleich überflüssig machen.

Ich wünsche noch allen Lesern meines Blogs ein frohes Fest und ein gutes neues Jahr!

bis demnächst mal wieder!
Franz




Kommentare:

  1. Hallo Franz,
    ich versuche gerade die Tankanzeige des Boxsters über Arduino dazu zu bewegen etwas anzuzeigen. Wie hast Du den notwendigen Widerstand nachgebildet? Ich dachte an einen digitalen Widerstand à la DS1666 o.ä.
    Ich muss ja als Anfänger nicht dieselben Fehler nochmal machen. Was bietet sich an? Also Idee: vom BMS (0-5V oder rx/tx)->Arduino->digitaler Widerstand->Anzeige.
    Geht das- Tips?
    Gruß Christan Schulz eboxster.blogspot.de

    AntwortenLöschen
    Antworten
    1. Tja, da hätte ich mir auch beinahe die Zähne ausgebissen,
      vor allem weils bei meinen Tests mit PWM wunderbar funktionierte, und dann in der Praxis in Michaels Beetle plötzlich gar nichts mehr klappte.
      Die Lösung ist abhängig von der Konstruktion Deiner Tankanzeige.
      Wenns ein einfaches Hitzdraht oder Drehspul-gerät wäre, dann ginge das
      ganz einfach per PWM mit einem Transistor (N-FET) nach GND (ein Widerstand
      mit dem minimalwert des Gebers in Reihe, und der Max-Wert parallel
      zum Transistor, dann deckt PWM 0 - 100% den ganzen Bereich ab.
      Allerdings klappt das nicht mit modernen Anzeigen, zumal da z.B. bei VW
      das Messsignal getaktet zu sein scheint. Ausserdem geht der Geber
      bei VW seit dem Golf4 "verkehrt rum"
      Versuch gar nicht erst, den Widerstand nachzubilden, sondern speise einfach die entsprechende Spannung ein.
      Ich hab die Spannung dann per Atmega und PWM generiert und als Treiber
      einen LT1010 eingesetzt (ein analoger 1:1-Verstärker)der ist hier zwar
      der reine "Overkill", aber die liegen in der Firma zu Dutzenden rum...

      Löschen