Hallo liebe Mikrocontroller Gemeinde, nachdem ich so eben eine von zwei Prototyp Platinen für ein Wasserstandsanzeiger und Akkuwächter im Wohnmobil fertiggestellt habe, möchte ich das Projekt hier Präsentieren. Es ist mein erster Versuch TQFP zu löten. Ich bin aber ganz zufrieden mit dem Ergebnis zumal die ersten Sachen laufen. Mehr als nur Akkuwächter und Wasserstandsanzeiger lässt sich mit dem System eventuell eine Art Hausbus fürs Wohnmobil realisieren, wobei mir für meinen kleinen T4 eigentlich diese Funktionen reichen. Die erste Platine (Rot), die ich gerade zusammengebaut habe ist der Mikrocontroller mit Wasserstandssensor Anschlüssen und Display. Das Display ist über SPI angeschlossen, ebenso ein 128 MBit Flash Speicher der zum aufzeichnen der Akku Daten gedacht ist. Zudem befindet sich auf dem Board noch eine DS3231MZ+ I2C RTC für eine eventuelle Zeitanzeige aber auch damit der MCU möglichst alle zwei Sekunden Daten vom Akku loggt. Ein SO8 IC War mir lieber als noch eine zweite Quarzschaltung. Der Wasserstandsensor ist für einen Spannungsgesteuerten Anzeiger. Hierfür bereiten 2 LM339D Quad comparatoren das Signal für den STM32 auf. Vorgesehen ist auch ein USB Anschluss, damit man per PC die Daten des FLASH auslesen kann. Die Kommunikation mit der zweiten Platine erfolgt über differential I2C mit Hilfe eines PCA9615. Die Platinen können dann über normale Netzwerkleitung mit RJ45 Steckern verbunden werden. Neben dem I2C Signal führt die Leitung auch noch +5V und KFZ+ vom Akku. Leider war einer der Elektronikversand zu langsam, deswegen ist das SWD interface gerade nicht mit der 1,27 mm Stiftleiste sondern mit Kabeln verbunden und die ganzen Kabelklemmen fehlen auch noch. Aber so mit Kabeln funktioniert das Interface trotzdem ganz gut. Die Software läuft. Die zweite, noch nicht zusammen gebaute Platine ist für die Akku Funktionen zuständig. Der Akku wird von einem TI BQ34Z100-G1 ständig überwacht (blaue Platine). Dieser IC ist ein Coloumb Counter und zählt sozusagen welche Ladung in den Akku rein und raus gehen. Angesprochen ist das ganze über I2C. Zudem gibt er ein Alarm Signal raus falls der Akku zu leer geht um den Akku aus zu Schalten. Geschaltet wird der Akku über 2 BTS 555 von Infineon, Das System ist für einen Strom von ca 55 bis 60 Ampere ausgelegt, begrenzt durch die Verlustwärme des Shunt Widerstands. Neben dem BQ34Z100-G1 befindet sich auf der Platine noch ein 8 Bit I2C IO Expander mit dem der Akku durch einen Mikrocontroller und zusätzlich noch andere Verbraucher über Mosfets geschaltet werden können. Sobald ich die zweite Platine gelötet habe werde ich euch wissen lassen ob es funktioniert. Leider wird das wohl einen Monat dauern, da ich jetzt erst mal nicht die Zeit dafür habe. Viele Grüße, Willem.
Hallo Willem... Tolles Projekt ! Freue mich schon drauf, weiter davon zu lesen. Hab ein 22 Jahre altes Wohnmobil mit einem einzigen Zeigermessinstrument (umschaltbar) zur Anzeige der Spannungen (Aufbau- und Starterbatterie) sowie Wasser (Frischwasser/Abwasser). Wenn Dein Projekt erfolgreich ist, würde ich das Ganze gern für mein Womo nachbauen. Viel Erfolg und Grüße Dirk
Kleines Update, nachdem ich erkennen musste das ich doch noch so zwei drei kleine Fehler im Design hatte und ich in der I2C Routine einen Fehler hatte so das es zu "unerklärlichen" verhalten kam, funktioniert die Kommunikation der Boards jetzt zusammen. (Die Grüne LED (Photo) wird im Sekundentakt an und ausgeschaltet.... Es läuft....) Auch die USB Verbindung zum Konfigurieren ist rudimentär implementiert. Zumindest gibt es eine Verbindung und es versteht die Befehle die ich über ein Terminal gebe. Ich habe bis jetzt wenig über den PCA9615 (differential I2C Translator) gefunden. Falls jemand danach sucht, mir ist folgendes aufgefallen. A. Pin3 (EN) ist mit internen PullUp verbunden (steht ja auch im Datasheet) und kann unbeschaltet sein. Mir wurde das aus dem Diagramm im Datasheet nicht 100% klar weil da so was stand wie dass der EN Pin nur high gehen darf wenn die Power Sequenz komplett ist. B. Der Chip ist der empfindlichste in meiner Schaltung. Habe vier davon verbraten. Wer den einsetzt sollte dass tun was man generell tun sollte. Schutzbeschaltung!!!! Einmal ein bisschen mehr als 5 Volt an irgendeinen der Eingänge und das war es. C. Die 3 Meter Kabel die im Datasheet angegeben sind beziehen sich wirklich nur auf den 3,4 MHz I2C Modus. Dort steht ja bei weniger Geschwindigkeit geht auch längere Leitung. Bei 400 kHz läuft es aktuell über 10 Meter twisted pair, ein längeres twisted pair habe ich gerade nicht zum testen. SCL+- so wie SDA+- auf der Platine sind alle miteinander längenangepasst bis zum Abschlusswiderstand zwischen den Paaren in der Hoffnung, dass das noch ein paar Meter mehr rauskitzelt. Als nächstes wäre dann Kalibrieren des BQ34Z100 Akku ICs dran....
Hut ab, tolles Projekt für alle Womo Freunde, es gibt übrigens bei Facebook einer Camper und Womo Gruppe da wird häufig nach so einem kleinen Gerät gesucht und dikutiert, wenn Du noch eine Solar Ertrag Anzeige mit einbaust wirst auch vielleicht mal ein paar Euro an Deinem schönen Projekt verdienen.
Was mach eigentlich Dein Batteriewächter, wenn ihm (dem Akku) die Puste ausgeht?
Was hat man eigentlich von dem ganzen WoMo-Bastelaufwand, wenn man eh nirgends autark in Ruhe stehen kann, sondern dicht an dicht auf einem Campingplatz für 30 Euro steht (mit Strom- und Wasseranschluss bzw. Spülbecken)? Und das vielleicht zwei Wochen im Jahr?
Bully schrieb: > Was hat man eigentlich von dem ganzen WoMo-Bastelaufwand, wenn man eh > nirgends autark in Ruhe stehen kann, sondern dicht an dicht auf einem > Campingplatz für 30 Euro steht Ne Reise ans Nordkap?
@Christian S. Es misst den Strom der rein und raus geht, so würde das Ergebnis durch Verbraucher gefälscht. Man könnte es aber um einen Coulomb Counter erweitern der explizit den Solarladestrom misst. @Amateur Derzeitig schaltet die Platine sich selber nicht ab, sondern nur alle anderen Verbraucher. Aber der BQ34Z100 könnte wenn ich richtig denke autark den Rest vom System an und abschalten. Dann könnte man zwei Limits programmieren, ein Soft Limit das alle anderen Verbraucher bei einem gewissen Schwellwert abschaltet und ein Hard Limit das auch den Mikrocontroller abschaltet. Werde das mit einplanen. Der BQ34Z100-G1 selbst braucht nur ca. 150 uAmpere, ein kleiner LDO nur für ihn sollte dabei auch nicht so viel ziehen, so das der Batterie dann noch vielleicht 200 - 300 uAmpere entnommen werden. @Bully Ich habe jetzt mehrere Fahrten gemacht wo ich häufiger autark stand. Ich fahre aber auch kein Schlachtschiff. Im Sommer nehme ich kein Stromkabel mit, da bin ich von der Batterie abhängig. Zudem möchte ich gerne das sie heile bleibt und nicht bis aufs letzte entladen wird. Man müsste das ja auch nicht unbedingt Anzeigen aber das Display zu proggen ist das einfachste. Spannungsbasierte Überwachung der Batterie funktioniert nur subobtimal wenn die Stromentnahme stark schwankt. Deswegen der aufwändige Coulomb Counter.
Hallo Willem, sehr schönes Projekt. Welche Wasserstandssensoren hast Du verwendet? Stellst Du eine Nachbauanleitung mit Plänen und Code noch ein? Grüße Jürgen
Insofern das ganze dann funktioniert poste ich den Code und die Pläne. Wie gesagt, sind in der derzeitigen Version auch noch Hardware Bugs die ich fliegend verdrahtet ausmerzen musste. Ich habe momentan eine Wasseranzeige für Resistive Messung. In meinem Tank befinden sich dafür schon Elektroden. Das ganze wird über LM339D Analog Komparatoren mit open Drain Output von 12 V auf Mikrocontroller freundliche 3,3 V übersetzt. Ich habe aber schon gesehen das hier einige Projekte für eine Kapazitive Tankmessung laufen, mal sehen wie die sich entwickeln, vielleicht kann man da ja was von integrieren. TI hätte mit dem FDC1004 auch einen I2C kompatiblen Chip für kapazitive Tankmessung auf dem Markt. Es wäre hiermit möglich mit wenigen externen Bauteilen, dem FDC1004 und dem PCA9615 und einem kleinen LDO z.B. eine kapazitive Tanksonde direkt über I2C anzuschließen, der PCA9615 ist ja multipoint fähig.
Für den in diesem Projekt benutzten BQ34Z100-G1 wird ein Firmware update benötigt. Von Haus aus wird er mit Firmware für einen bestimmten typ LiIonen Akkus geliefert. Glücklicherweise hat TI ein relativ einfaches Format, das fs Flash Stream Format, in dem die I2C Kommandos direkt stehen. Man bekommt die Datei aus BQStudio, dem TI Programm für die Batterie Managment ICs. Anbei ein kleines linux Terminal Programm, das die fs Datei einliest, dekodiert und per USB com port an den Mikrocontroller STM32F103 sendet. Dieser sendet die Daten per I2C weiter an den BQ34Z100-G1. Vorweg, ich bin kein professioneller Programmierer und wenn jemand meint das besser schreiben zu können, so mag er den Code doch einfach ändern. Der Code funktioniert in so weit das der MCU auf den I2C Bus das "richtige", also das was in der Datei steht sendet. Auch die Compare Routine funktioniert. Fehlerbehandlung ist noch nicht implementiert. Ich habe mir zum testen mal eine minimalistische bq.fs Datei geschrieben, die die Standard register des BQ34 adressiert. Was ich leider nicht weiß und wozu ich noch keine Antwort von TI bekommen habe ist ob der BQ34 im Flash Modus bei einem Compare Commando akzeptiert das das Kommando in I2C write und I2C read (ohne repeated start) geteilt ist. Ich habe nämlich noch kein I2C write read implementiert. Im nicht Flash Modus macht er das problemlos. Die usb_cdc.c ist meine usb cdc Datei für den STM32. void decode_usb_message(void) wird aus der main in der while(1) endlos schleife aufgerufen. Edit Sorry, vergessen den GPL Header als Kommentar einzufügen.... Die Dateien im oberen Archiv sind nicht kompilierbar. Sollte man zwar sehen aber falls es jemand testen will /* */ vor und hinter den GPL Header einfügen.
:
Bearbeitet durch User
Mal wieder ein kleines update.. Um die TI BQ Chips zu kalibrieren muss man einige Daten in die Register schreiben. Wenn man nicht gerade die TI Software weil die nur mit dem EV 2300 Programmer funzt kann man ein Tabellenkalkulationsprogramm zur Hilfe nehmen.... Ich habe in der Tabelle die Bits die man laut Datasheet während des Designs ändern sollte in Grün markiert. In Blau sind sonstige Bits markiert. Unter den Register Daten habe ich teilweise noch kleine Berechnungsguides für Werte stehen. Die Eingabefelder sind auch grün. Ich habe teilweise nicht alle Bytes in der jeweiligen Tabelle aufgeführt, weil nicht alle Flash Bereiche gefüllt sind. Ein Byte das Null ist ändert auch nichts an der später benötigten Checksumme. Generell wird immer für einen 32 Byte block eine Checksumme generiert. Diese wird in der Tabelle automatisch berechnet. Ich habe immer zunächst alle 32 byte an Register Daten für einen Flash Block in die Tabelle abgetippt und geschaut ob die berechnete Checksumme mit der im Register 0x60 Gespeichterten übereinstimmt. Dann meine Änderungen vorgenommen und die entsprechenden Bytes oder aber den ganzen Block zurück geschrieben und die Checksumme gespeichert. Das hat bei mir gut funktioniert. Die Daten haben die Formate z.B. U2 = unsigned Int 16 Bit oder I = signed int 8 Bit F4 ist einspezielles TI Format was floating point Zahlen speichert.... Siehe Dokument "How EVSW Display the Raw Data V1.03.pdf" Ich hoffe die Tabelle kann eventuell noch jemandem nützen und ist nicht ganz undurchsichtig.
Kleines Update, das Projekt läuft soweit, ein erster Test im Feldeinsatz hat sich über einen kleinen Ausflug am Wochenende stabil erwiesen, allerdings wurde der Akku nicht so leer das er die verbraucher abgeschaltet hat. Beim kalibrieren des BQ34Z100-G1 konnte ich diese Funktion allerdings schon testen. Auf dem Display sind noch einige Debug ausgaben zu sehen wie der Strom und die Spannung, in der Endversion soll das noch anders aussehen. Ich Poste mal die Schaltpläne, erweitert um den LDO für den BQ34Z100-G1 also so das im Falle einer absolut leeren Batterie nur noch der BQ34Z100-G1 Strom verbraucht. Falls jemand irgendwelche Unsinnigkeiten in den Schaltplänen entdeckt kann er mir die gerne schreiben. Wie gesagt, die Schaltung tut das was sie soll, aber vielleicht fehlt noch die ein oder andere Schutzbeschaltung oder ähnliches. Als nächstes plane ich in der tat noch eine kapazitive Tanksonde, da die resistive Messung mit alter der Sonde immer schlechter funktioniert. Die Software kann ich die Tage auch noch posten allerdings ist die momentan noch sehr unaufgeräumt. Grüße
Sorry, habe einen Pullup falsch eingezeichnet... Der sitzt am BQ34Z100-G1 Alarm Ausgang. hier die korrigierte Version der Schaltung.
Tolles Projekt, sehr anspruchsvoll! Solche nützlichen Sachen selber bauen finde ich super, und dein Display ist offensichtlich ja auch für andere sehr interessant. Torsten
Hier ist ja schon eine gewisse Zeit nichts mehr passiert. Leider komme ich momentan nicht zur Weiterentwicklung, nicht zuletzt weil das System seit Juli im permanenten Einsatz ist. Es ist immerhin seit 3 Monaten weder abgestürzt noch kaputt gegangen. Bis jetzt hält es durch und hat im Notfall auch schon funktioniert. Allerdings muss ich noch durch eine saubere Batterie Kalibrierung... Nun ja, bald kommt der Winter, der Wagen steht und es kann weiter gehen. Für alle Leute die es interessiert, ich habe den Quellcode auf mein GitHub Profil geladen. Er ist für das V1 Board, also ohne die von anderen Usern vorgeschlagenen Hardware Änderungen. Ich weise darauf hin.... Bitte lest den Code nur wenn ihr schlechten Programmierstil abkönnt. Nur weil er funktioniert heißt das nicht das er 1. Fertig oder 2. Sauber ist. Ansonsten werde ich Updates bei GitHub einfließen lassen. Programmiert ist es teilweise basierend auf einem Referenz Projekt für STM32. https://github.com/mrwillem Grüße,
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.