Solar Controller

Links und Informationen/ Quellen


Modell einer "Off Grid Solar Station"

Motivation

Solartechnik ist immer noch sehr populär. Mich Interessiert aber schon seit einiger Zeit dieses Thema und ich würde gern etwas damit experimentieren. Einfach im Geschäft dazu ein Männchen kaufen, welches bei Lichteinfall anfängt auf dem Fahrrad zu trampeln ist aber nicht die Richtung, welche ich meine.

Viel mehr würde mich einmal Interessieren wie eine "Off Grid Station", also ein völlig netzunabhängiges System zu betreiben ist. Wer sich mit dem Thema Fliegen beschäftigt muss ja auch nicht gleich einen Pilotenschein machen .....

Ich glaube schon das in einer modellhaften Umgebung einiges zu diesem Thema erarbeitet werden kann und sich dann von der echten Welt nicht sehr weit distanziert.

Zielbeschreibung

Meine kleine Umgebung soll wie folgt ausschauen.

  • Ein Solarpanel, welches z.B. bei Camping, oder zum Funken in der Wildnis, ... genutzt werden kann
  • Ein 12 Volt Akku (Handelsüblich, z.B. ein Bleiakku)
  • Ein Solarcontroller

Das Solarpanel und den Akku würde ich kaufen. Der Controller möchte ich selbst bauen. Die Anforderungen an den Controller sind wie folgt:

  • Als CPU kommt ein PIC16F690 in Frage
  • Schaltung und Platine werden ebenfalls selbst gemacht, zumindest das CAD Zeug. Die Herstellung der Platine ist wohl eher was für die Experten. Es soll auch vernünftig aussehen
  • Die Programmierung des PIC erfolgt in Assembler oder einer Hochsprache ( Mitlerweile ist die Entscheidung zugunsten XC8 gefallen )
  • Per RS232 (serielle Verbindung) kann der Controller mit der Außenwelt kommunizieren

Schematics und PCB

Der Bauplan des Controllers basiert auf diversen Standard Modulen. Bereits 2013 hatte ich den Controller entworfen und auch das PCB dazu, die Platine bestückt und die einzelnen Module getestet. Eine kleine Anpassung muss eigentlich noch erfolgen damit die InCircuit Programmierung des PICs noch erfolgen kann. Die beiden Bauteile waren einfach nicht vorgesehen und mussten unter der Platine in Freiluftverdrathung eingebaut werden. Die Programmierschnittstelle hingegen ist auch bereits vorgesehen. Im Bild rechts ist es zu erkennen wie der PIC über das PicKit2 angesteuert wird. In einer Version 2.0 könnte dann auch im Schaltplan die entsprechende Bauteile für die InCircuit Programmierung eingeplant werden, dann währe es perfekt.

Die Platine selbst ist kommerziell hergestellt, doppelseitig mit Durchkontaktierungen und Bestückungsaufdruck, Lötlack, ...

Das Modell

Das Modell

Das Modell sieht vor, an dem Solar Controller wird das Solar Panel, der Akku und die externen Verbraucher angeschlossen. Erst einmal ist alles auf 12V/DC ausgelegt. Ein Spannungswandler von 12 auf 230V kann optional dann auch mit eingesetzt werden. Dieser ist aber als externes Gerät später einfach nachzurüsten.

Zur Funktion des Solar Controllers ist folgendes zu sagen:

  • Einer der ADC auf dem 16F690 wird die Spannung des Solar Panels beobachten
  • Einer der ADC auf dem 16F690 wird die Akkuspannung beobachten
  • Der externe Anschluß wird durch den Solar Controller freigegeben (Das verhindert die Tiefentladung des Akkus)
  • Das Ladeverhalten, also ab wann, bis wan, .... übernimmt der Controller
  • Statusmeldungen (und vielleicht auch später einmal Profileinstellungen) können über die serielle Schnittstelle abgefragt/ eingetragen werden

Als Akku kommt ein 12V/1.2Ah Bleiakku zum Einsatz. Ein 20Watt Solarpanel ist generell erst einmal etwas überdimensioniert, dazu komme ich aber im weiteren Verlauf noch drauf zu sprechen. Im Moment ist es erst einmal wichtig die grundlegenden Komponenten zu haben und erst einmal zusammen zu schalten. Für die Zukunft ist dann eine Optimierung geplant.

Etwas Theorie zum Bleiakku

Bleiakkumulatoren haben eine typische Zellenspannung von 2 Volt. Das bedeutet sie schwankt zwischen 1,75 und 2,4 Volt. Sie zeichenen sich durch eine hohe Lebensdauer und Verlässlichkeit aus.

Der Laderegler beobachtet die Zellenspannung. Anhand der Leerlaufzellenspannung kann der Ladergler den Ladezustand ableiten. (Das ist ein wichtiger Hinweis)

Bis zu einer Zellenspannung von 2,3 bis 2,35 Volt wird mit ca. 1/10 des Nennstromes geladen. Ist die Zellenspannung erreicht, geht der Laderegler auf die Erhaltungsladung zurück. Der Einsatz eines geschlossenen Bleiakkus bringt den Umstand mit sich keine Gasentladung durchführen zu können. Konkret bedeutet das, der Laderegler muss dafür sorgen den Akku nicht zu überladen, sonst droht im schlimmsten Fall die Zerstörug/ Explosion.

Etwas Theorie zum Solarmodul

Das Solarmodul wird mit folgenden elektrischen Parametern beschrieben:

  • Pmax = 20Watt
  • Vmp = 17,8Volt
  • Imp = 1,12Ampere
  • Voc = 22,3Volt

Das bedeutet, dieses Panel kann eine maximal Leistung von 20 Watt liefern. Dazu muss der Verbraucher eine Spannung von 17,8Volt anliegen haben.

Wenn man jetzt auf die Bleiakkus schaut, so ist der Bereich des Akkus von 10,5V bis 14,4V geringer. Unter der Annahme das Solar Panel kann keinen höheren Strom liefern als 1,12A wird diese Leistung von 20W niemals in diesem Betriebsumfeld erreicht. Der Grund ist einfach, sollte ein Bleiakku als Verbraucher direkt mit dem Solar Panel verbunden sein, darf die Spannung 14,4V nie übersteigen. Somit ergibt sich eine für diese Konstellation maximale Leistung von Pmax = Umax * Imp = 14,4V * 1,12A = 16,128W. Warum nun ein solches Solar Panel einsetzen? Ist dann nicht besser ein Panel zu verwenden, welches ein Ump = 14,4V hat und damit genau diese Pmax = 20W erreicht?

Prinzipiell ja, wenn das Solar Panel unmittelbar mit dem Laderegler und dem Akku verbunden ist.

Betrachten wir einmal die Kabelwege, diese Reserve von 17,8V - 14,4V geben hier den Bereich vor, der durch Kabelverluste entstehen darf ohne das dieses Solar Panel nicht mehr funktionieren würde.

Somit ist der ohmsche Wiederstand zwischen Solar Panel und Laderegler/ Akku:
R = (Ump - Umaxakku) / Imp = (17,8V -14,4V) / 1,12 = 3,036 Ohm. Das reicht aus um hier mit handelsüblichen Kabeln einen beachtlichen Weg zu bestreiten und ist für das Modell hier sicher ausreichend. Damit hat man für ein solches "Off Grid System" die Flexibilität das Panel an einen geeigneten Ort zu installieren. Die Differenz von 20W - 16,128W wird nun leider in Form von thermischer Energie auf dem Übertragungswege verschwendet. Diese ca. 20% werden jetzt erst einmal geduldet.

(Ein Gedankengang hierzu ist einen DC/DC Wandler einzusetzen um die Spannungsanpassungen zu machen. Es ist sicherlich einen Versuch Wert mal darüber Nachzudenken, ob dadurch nicht eine optimalere Anpassung und somit bessere Leistungsübertragung möglich sein könnte.)

Wer misst misst Mist ....

Ein nicht mal 5€ teurer MC ist nun mal kein Präzisionsmessmittel, wie genau ist er denn jetzt und ist der Wert brauchbar?

Zu erst einmal muss man wissen wovon die Genauigkeit abhängt und welche Störgrößen es gibt.

  • Die Referenzspannung für den A/D Wandler: Ich verwende der Einfachheit halber Vdd
  • Die Wandlungszeit: Diese ist für mich unkritisch. Sie liegt im Bereich von wenigen µS
  • Die Frequez des Oszillators: Ich verwende den internen mit f=4MHz. Laut Datenblatt muss dann die Conversion Clock (ADCS) auf Fosz/16 gesetzt werden

Das sind die Parameter welche direkt auf dem PIC zu setzen sind. Hinzukommen noch einige die man nicht so einfach erkennt oder mindestens mal prüfen muss.

  • Wird die Messung im Sleep Mode des PIC gemacht?
  • Wie stabil ist die Referenzspannung, diese darf natürlich nicht schwanken
  • Wir die Schaltung mit einem Schaltnetzteil betrieben? Wenn ja sind Peaks vorhanden die Einfluß auf die Messung haben können?

Auf dem Papier ist das alles recht einfach und in der Praxis dann sehr seltsam...

Die Anwendung als Solar Controller erfordert keine Echzeitmessung, daher ist die Geschwindigkeit der Messung für mich nicht entscheident. Auch eine Messgenauigkeit von unter 10% ist immer noch verträglich. Damit ist der Rahmen ganz grob gesetzt.

Meine erste Messung mit dem PIC war generell erfolgreich, zeigte zumindest das die Register entsprechend gesetzt waren und ich auf dem richtigen Weg bin. Allerdings schwankte das Messergebnis in jedem Durchlauf um einige Bits. Das wiederum hätte ich nicht erwartet, da ja die Spannung am Messport konstant ist. Um das Ergebnis nach der Messung ausgeben zu können habe ich nach der Messung den Wert auf der RS232 Schnittstelle ausgegeben. Da der Messzyklus erheblich schneller ist hatte ich zwischen Ausgabe und neuer Messung einen Delay von 1s eingefügt. 

Die Werte schwanken jetzt zwischen 0,175 Volt bis 0,260Volt. Durch eine Vergleichsmessung mit einem Digitalmultimeter konnte 0,21Volt ermittelt werden. Grob zeigt sich also das der A/D Wandler Werte um den eigentlichen Wert ausgibt. Die Abweichungen nach oben liegen also bei ca. 23% und nach unten 17%. Folgende Überlegung stand jetzt an. Ich nehme einfach das Mittel von vielen Samples und schaue mal wo das Ergebnis dann liegt. Bei einer (fast) symetrischen Abweichung müsste ich doch auf diesem Wege dem Ziel näher kommen. Bei einer Samplingrate von 100 beträgt die Abweichung nur noch wenige mv und pegelt sich schon recht stabil ein. Bei einer Samplingrate von 1000 Messwerten ist das Ergebnis stabil und identisch zum Digitalmultimeter. Der Wert 1000 ist experimentell ermittelt, Wert darüber machen den Wert stabiler. ich habe es mit 10.000 und mehr probiert. Es geht,  eine Verbesserung ist aber nicht mehr unbedingt erkennbar.

Damit sollte die Routine zur Ermittlung der Spannung laufen. Da für den Einsatz als Solar Controller aber mehere AD Wandler Kanäle benötigt werden, musste die noch entsprechend mit Variablenn parametrisiert werden. Eine Messung erfolgt nun für alle AD Kanäle und die Werte werden in eine entsprechendes Werte Array geschrieben.

Messpunkte setzen

Ich habe jetzt einmal 4 Kanäle vorgesehen, welche für die eigentliche Steuerung relevant sein sollten.

  1. Die Spannung am Solar Panel.
    Solange diese Spannung unter der Akkuspannung ist darf das Panel mit dem Akku NICHT verbunden werden.
  2. Die Spannung des Solar Panels am Solar Controller
    Zwischen Solar Panel und Solar Controller befindet sich hier in der Übersicht ein Widerstand eingezeichnet. An diesem darf max. die Spannung von Vmp-14.4Volt (Also in diesem Fall 3,4V inkl. aller Kabelverluste auf der Strecke) abfallen. Der Unterschied von Messpunkt 1 zu Messpunkt 2 zeigt an, ob ein Ladestrom fließt.
  3. Die Spannung am Solar Controller
    Das ist wichtig um zu erkennen ob überhaupt noch ein Verbraucher hinzugeschaltet werden darf. Liegt diese Spannung bei 10,5 Volt ist der Akku vor der Tiefentladung und kann bei weiteren Verbrauchern zerstört werden
  4. Die Spannung nach dem Relais auf der Verbraucherlinie
    Diese Spannung sollte im normalen Betrieb identisch sein mit Messpunkt 3 sein.

 

 

Schaltzustände

In der Tabelle sind die Schaltzustände abgebildet mit den jeweiligen Bedingungen

Ein erster Test ohne Controller

Das Solarpanel und Akku sind jetzt da. Dann kann es mal losgehen. Als Verbraucher dient eine 12Volt Autolampe mit 21Watt. Also genau so viel wie das Solar Panel leistet. Die Sonne ist ebefalls hin und wieder da, so kann also ein erster Versuch unternommen werden. In diesem Fall aber immer noch ohne Regler.

Das Foto zeigt die Messdaten. Das Solar Panel liefert ca. 1.4A Strom und die Spannung des Akkus schwank zwischen 12,2V und 13,3 Volt. Da der Verbraucher etwas "überdimensioniert" ist, entleert sich der Akku trotz Nachladung über das Panel.

Test mit Controller

Im Laboraufbau wurde jetzt der Controller getestet. Das Solarpanel wurde durch ein Labornetzteil ersetzt, bzw. das Netzteil hat das Solarpanel simuliert. Durch die Einstellung der Spannung am Labornetzgerät konnte die Sonneneinstrahlung simuliert werden. Folgende Punkte sind dabei als Aufgaben noch hinzugekommen, bzw. wurden geklärt:

  • Eine Hysterese muss in das Programm eingebaut werden, welche das Solarpanel bei erreichen der max. Ladespannung vom Akku trennt. Damit der Controller nicht in einen Schwingungszustand verfällt muss beim erreichen der maximalen Ladespannung eine gewisse Zeit vergehen bis das Solarpanel erneut mit der Ladung des Akkus fortsetzt. (Besser ist hier wahrscheinlich eine def. Mindestspannung am Akku abzuwarten. Das sorgt dann für eine Entladung des Akkus). Mal probieren was das Beste ist....
  • In den Ladestrom muss eine Diode eingebaut werden, um die Meesergebnisse am Akku und am Solarpanel zu trennen. Ohne diese Diode zeigen beide Messpunkte identische Werte an.
  • Der Spannungsteiler für die AD Kanäle muss noch optimiert werden.
  • Im Programm ist noch einmal aufräumen angesagt und die teilweise für experimentellen Werte eingesetzten Variablen und Programmcode ist durch ein richtiges Release zu ersetzen
  • Für das Programm muss ein PDL geschrieben werden (PDL steht für Programm Desicription Language und ist eine "free format English-like text that describes the flow of control and data in a program". Hierbei handelt es sich um eine generelle Definition um daraus ein Programm zu schreiben und ist einfacher als ein Flow Chart zu zeichnen.
  • Das Interface für den Anschluß aller Komponenten ist designed und beauftragt. Die Platine wird bis kommende Woche erwartet und muss dann nur noch bestückt werden.

17.4.15: Die Wahl des Gehäuses und das Frontplattendesign

Das Design in MS-Visio
Gehäuse in der Totalen
Ausdruck vor der Alu Frontplatte
Gehäuse innen

Die Schaltung benötigt ein vernünftiges Gehäuse. Was in der Regel auf der Strecke bleibt ist das vernünftige Frontplattendesign. Was bringt eine aufwendige Elektronik, wenn diese nicht entsprechend gewürdigt verpackt wird. Wie ist der Plan?

  • Als Gehäuse kommt ein BOPLA Kunstoffgehäuse in betracht mit ALU Front- Rückplatte (Ja, das ist teuer aber gut!)
  • Als Beschriftung kommt eine Aufklebfolie von DigiCut zum Einsatz die entsprechend farbig gedruckt und Abriebfest ist

Die Folie kann mit MS-Visio oder einem anderen Frontplattendesigner erstellt werden. DigiCut kann mit der PDF Datei dann das Resultat erstellen. Danach aufkleben und dann sollte es gut aussehen. Soweit der Plan.

Jetzt hab ich mal einen ersten Entwurf gemacht und auf Papier ausgedruckt. Das Ergebnis ist auf den Bildern zu sehen. Das genaue Design kann erst gemacht werden, wenn die Spannungs- Amperemeter angekommen sind. In der Beschreibung bei Amazon sind keine Abmessungen angegeben. Hoffentlich sind die schön klein. Ebenso die Befestigungslöcher sind noch eine Unbekannte.

Einbau der Platinen in das Gehäuse:

Im Gehäuse gibt es diverse Befestigungspunkte. Ich denke ich werde ein dünne Kustoffplatte als Träger machen, welche dann mit 4 Schrauben in dem Gehäuse besftigt wird. Auf der Trägerplatte werden die beiden Platinen des Solarcontrollers befestigt. Auf diese Art bleibt es kompakt und kann mit einem Rutsch im Gehäuse eingebaut werden.

13.05.15: Interface Platine #2

Schaltplan
PCB

In den letzten 3 Wochen hatte ich mit der Programmierung und Optimierung zu tun. Das Programm ist nun komplett auf C umgestellt und auch auf RAM und ROM optimiert. Dabei hat sich herausgestellt, das ROM vom 16F690 kommt hier schon an seine Grenzen und nicht alles was als feature eingebaut werden könnte, kann auch eingebaut werden.

Anpassungen gab es auch an der Interface Platine. Für die erste Version war es absehbar, diese ist nicht die finale Version. Es gab eine ca. 10 Punkte Planung die geändert werden müssen. Angefangen von Leiterbahnstärken bis hin zu weiteren features und natürlich die falsche Portbelegung von RC3 und RC4, wodurch die beiden AD Wandler Kanäle nicht nutzbar waren.

Neu enthalten ist nun auch die Laststufe für die PWM (Pulsbreitenmodulation) zum laden des Akkus. Genau damit lassen sich nun einige Themen umsetzen, welche mit dem normalen schalten des Relais nicht umsetzen lassen.

Bis die neue Interface Platine geliefert ist, geht es weiter mit der Anpassung der Software. PWM muss noch implementiert werden.

18.05.15: PWM Modul

Auf der neuen Platine ist die Möglichkeit vorgesehen, den Akku per PWM zu laden. Das Modul musste natürlich auch erst noch programmiert wierden. Dazu bietet der PIC 16F690 eine Funktion, welche natürlich entsprechend parametrisiert sein muss. Dazu ist ein wenig probieren notwendig aber danach kann es im Programm verwendet werden.

PWM Parameter sind speziell die Timings. Bei meinem Aufbau läuft der PIC mit dem int. Oszillator bei 4MHz und einer PWM Frequenz von 243 Hz. Diese kann noch angepasst werden.

Das Tastverhältnis wird über das 8 Bit breite Register CCPR1L verändert. Screenshots zeigen die unterschiedlichen Impulsbreiten. Anhand einer LED, welche am PWM Ausgang angeschlossen ist, kann man sehr gut sehen wie die Helligkeit auf Basis der Pulbreiten sich ändert.

PWM Software; C-Code

25.05.15: Interface Platine 2 und wie geht es weiter

Links die Interface Platine V2

Pünktlich vor Pfingsten kam die neue Interfaceplatine. Nach der Bestückung, welche bis auf einen kleinen Knall alles gut lief, alle Elkos waren falsch herum eingebaut. Einer nahm es persönlich.

Nun ging es an die Anpassung des Programms. Das Thema AD Converter holte mich erneut ein. Auf dem PIC16F690 befindet sich ein AD Wandler und 12 Kanäle. Diese werden entsprechend konfiguriert und dann zur Messung auf den Wandler geschaltet. Jetzt ist mir aufgefallen, AN8 ..AN11 sind zwar wie im Datenblatt selektierbar liefern aber seltsame Werte die überhaupt ncht zu der am Pin angelegten Spannung passen.

Ohne eine Lösung und Klarheit darüber geht es aber nicht weiter, also steht "Root Cause Analysis" und Debuggen auf dem Programm. Nach ca. 12 Stunden ist es nicht hinzubekommen. Mir gelingt es nicht die Ports, welche durch das ANSELH Register als "Analog In" konfiguriert werden sollen als solche zu konfigurieren. Sie bleiben einfach auf "Digital In" stehen und damit lässt sich kein analoger Wert messen. Auch Internet lässt sich nichts brauchbares dazu finden. Nun gibt es zwei Alternativen:

  1. Die 2 betroffenen Ports werden durch 2 andere Ports ersetzt. Das bedeutet aber das die Platine nochmal geändert werden müsste oder auf der bestehenden "herumgefummelt" werden muss. Das ist nicht wirklich eine tolle Lösung
  2. Vielleicht liegt es an dem Controller und es geht ein Anderer? Dürfte eigentlich nicht sein ... vielleicht bin ich nur zu blöd dazu

Ich entscheide mich mal für Lösung 2 als bevorzugter Weg und suche mal was wir da nehmen können. PIC 16F1829 ist ein Kandidat. Die Kenndaten sind:

  • PIN Kompatible
  • Mehr RAM
  • Mehr ROM
  • Mehr EEPROM
  • Schneller -> bis 32MHz mit int. Osz.
  • Mehere wirkliche Referenzspannungsquellen (Nicht nur VDD, welche so genau nun gar nicht ist)
  • günstiger Preis und verfügbar bei CONRAD Electronic -> schwupp mal 5 Stück bestellt.
  • bessere Integration in MPLABx, sogar der Code Generator kann jetzt genutzt werden

Ich schreibe ein Programm um den Bug vom 16F690 beim 16F1829 zu überprüfen und siehe da, alle PINs wie gewünscht auf Ain. Das sieht gut aus.

Bei der gesamten Aktion hatte ich noch Gelegenheit mich noch intensiver in den C-Compiler einzuarbeiten. Eine Tips und Tricks konnte ich bereits umsetzen und die modularität hat eine erhebliche Optimierung des Programms und der Verbrauch an RAM gebracht. Dabei ist das Programm nun lesbarer und mit dem Simulator komme ich mitlerweile sehr gut zurecht. Er ist mein Freund geworden!

Das mit dem 16F690 lässt mich aber noch nicht ganz in Ruhe. Ich werde am Programm wohl die Anpassungen so gestalten, dass im Compiler beide Controller möglich sind. Die generelle Lösung ist ja Device unabhängig, nur die Configs müssen angepasst werden. Das ist nun im MPLABx über die Projekteinstellungen und Configs mit etwas Fingerspitzengefühl sehr gut möglich. Die Anpassungen im Source Code werden dann mit#ifdef und #endif hinterlegt.

Hier ein Beispiel:

#ifdef _16F1829
    ANSELA  = 0b00010111; // 16F161829
    ANSELB  = 0b11110000; // 16F161829
    ANSELC  = 0b11001111; // 16F161829
#endif

#ifdef _16F690
    ANSEL   = 0b11111111; //Nur 16F690
    ANSELH  = 0b00001111; //Nur 16F690
#endif

Der Compiler verwendet dann den Code für den Chip der in der Config angegeben ist. Das ist mal super praktisch.

Wie geht es jetzt weiter?

Um die Interface Platine in zusammenarbeit mit dem Controller zu testen muss nun am Programm gearbeitet werden und dann müssen alle Module ein Einklang gebracht werden. Da ist jetzt erst einma einiges an Programmieren angesagt und dann, wenn im laufe der Woche die neuen PICs kommen, mal ein Test mit den neuen Controllern machen. Wenn dann die richtigen Werte auf der RS232 ausgegeben werden ist es einen deutlichen Schritt weiter.

28.05.15: Die Lösung für das Problem ist da

Nach einigen Tagen debuggen und im Internet nach einer Lösung suchen ist die Lösung jetzt da.

Der Controller ist kaputt.

Damit hatte ich nicht gerechnet und weiß auch leider nicht wie es passiert ist. Fakt ist aber, der Austausch des Chips brachte sofort die richtigen Funktionen und Ergebnisse. Jetzt kann es mit der Programmierung weiter gehen und der neuere Controller wird auch zum Einsatz kommen.

Hier noch die Links auf die Foren, die letztendlich auch dazu führten die Lösung zu finden.

https://www.mikrocontroller.net/topic/367497

http://www.microchip.com/forums/m866126.aspx?tree=true

Ein Ergebnis ist auch, man muss nicht alles glauben was die SW einem so präsentiert. Der Microchip Simulator hat ausgerechnet bei dem 16F690 und den Ports AN8..AN11 einen Bug.

30.05.2015: Basis Version läuft jetzt

SC-1 mit Beschreibung
MPLABx Dashboard

Die Basis Version läuft jetzt. Nach einigen Problemen und viel Investierter Zeit ist jetzt quasi die erste Version ohne viel SchnickSchnack am laufen. Das bedeutet:

  • Modulare Software (Aufteilung in unterschiedliche Module in eigenen Dateien, HW Vorbereitung für leistungsfähigeren µC ohne Code neu schreiben zu müssen)
  • Die AD Ports berechnen jetzt in einem passenden Rahmen die richtige Spannung inkl. der schaltungsbedingten Anpassungen der Dioden
  • Ausgabe der Werte am RS232 Port
  • Grundsätzliche Ladung des Akkus auf basis der minimal- und maximal Spannungen

Mitlerweile sind auch die PIC 16F1829 eingetroffen und nach einem Update des PICKIT2 kann ich diese jetzt auch programmieren. Allerdings nicht in der Schaltung. Das muss noch genauer untersucht werden. Auch sind in der 16F1829 Version die Funktionen noch nicht exakt gegeben. Um es out of the box zu machen, ist da noch Anpassung am Programm nötig. Dennoch ist der richtige Weg eingeleitet und mit etwas troubleshooting und debugging geht es jetzt weiter. Auch das In Circuit Programming steht ganz oben auf der Liste. Jedesmal den PIC aushebeln nervt doch etwas. MPLABx erkennt nicht das der PICKIT2 auch den 16F1829 programmieren kann, da ist dann doch mal ein PICKIT3 angesagt ..... Mal einen in China bestellen. Für ca. 40€ kann man da nix falsch machen.

Mit dem 16F690 ist es an Features und Funktionen jetzt generell am Ende. Die Ausgabe an der RS232, bzw. die Stringbearbeitung kostet ziemlich Speicherplatz im ROM. Mehr Funktionen gehen mit dem Controller jetzt nur noch, wenn die Ausgabe an der RS232 reduziert wird.

Memory Summary:
    Program space        used   FDAh (  4058) of  1000h words   ( 99.1%)
    Data space           used    CCh (   204) of   100h bytes   ( 79.7%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    Data stack space     used     0h (     0) of    1Ah bytes   (  0.0%)
    Configuration bits   used     1h (     1) of     1h word    (100.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

Mit dem 16F1829 kommt dann das PWM Modul. Dann wird sich zeigen ob der 2N3055 das schalten kann oder ob der MOS FET die bessere Lösung ist. (Ich persönliche glaube der MOS FET macht das Rennen ;-) )

Software Version SC1-V3

  • SC1-V3.X.zipSoftware version SC1-V3 mit MPLABx V2.3.5 und XC8 V1.3.4 erstellt.2.2 M

13.06.15: Erster Live-Test

Von gestern auf heute gab es einen ersten Live-Test. Am Controller hat sich jetzt einiges getan, die Software wird immer besser. Hier die wesentlichen Änderungen:

  • Der Ladevorgang wird jetzt auf Basis PWM gemacht.
  • Das eingebaute EEPROM wird jetzt für "Special Flags" genutzt. 
  • Der 16F690 ist wohl durch den 16F1829 abgelöst. Eine Lösung auf Basis 16F690 ist vermutlich nicht mehr zielführend und würde auch mit der Software nicht mehr gut zusammen laufen. Anfangs dachte ich noch beide unterstützen zu können, dem ist aber nicht so.
  • Die RS232 Schnittstelle wird nun auch zur Eingabe verwendet. Damit sind jetzt mehr Möglichkeiten um mit dem Benutzer zu interagieren
  • Unterschiedliche Akku Profile können hinterlegt werden, dafür sind jetzt die Vorbereitungen grundsätzlich getroffen. Die Profile müssten dann im EEPROM abgelegt werden. 
  • Der 16F1829 ist nun "In Circuit" programmierbar, also kein neuer Prommer notwendig. Es geht mit meinem PICKIT2 allerdings nicht mehr aus der IDE heraus. Das ist aber kein Problem.

Wie sah der Live Test aus?

Eine 12 Volt Lampe soll bei Dunkelheit eingeschaltet werden und bei ausreichender Helligkeit angehen. Tagsüber soll der Controller den Akku laden damit die Lampe nachts nicht ausgeht. Auch bei bewölktem Himmel soll die Ladung des Akkus so stattfinden, das ausreichend Energie für die Nacht im Akku ist. Natürlich soll der Akku weder tief- noch überladen werden.

Als Lampe kam eine 3Watt LED Lampe zum Einsatz mit einer G4 Fassung, die hängt an einer Konstruktion aus Kabel, Schrumpfschlauch und Kabelbinder an meiner Antennzuleitung für die Kurzwellen FD3 direkt an der Hauswand. (Ein Provisorium hält immer am besten? Der Platz ist einfach gut) Die Lampe ist einfach auf der Terrasse in Richtung Garten gerichtet und mal sehen wie viel Licht die wirklich in den Garten bringt. Die Lichtausbeute ist glaube ich so um die 225-250Lumen. Die Lampe kostet so ca. 3.99€

Tagsüber wurde der Akku geladen. Der Akku besteht aus zwei Panasonic 7Ah Blei-Gel Akkus, also in Summe 14Ah. Es sind nicht mehr die neuesten aber mal sehen, für den Test reicht es. Die Ladung des Akkus erfolgte mit dem 20W Solarpanel. Je nach Betrahlung lieferte das Panel bis zu 1,2A das über die PWM Regelung bis zu einer Ladeentspannung von 14.5 geladen wurde und dann auf dem Level blieb, bis durch die geringe Sonneneinstrahlung/ Helligkeit die Spannung auf ca. 12.5 bis 12.3V am Akku zurück ging. Das war dann auch der Indikator für die Steuerung den Verbraucher einzuschalten, so gegen 22.30 Uhr.

Ergebnis der ersten Nacht!

Am morgen gegen 07.00 Uhr war die Lampe noch an, immer noch recht hell. Der Akku hatte eine Spannung von ca. 10.8 Volt, also noch nicht zu sehr entladen (zumindest nichts kritisches) Gegen 08.30 war dann die Sonne so hell, dass auch die Lampe aus ging.

Wie geht es weiter?

Die Steuerung bleibt aktiv, der vermeintlich erste Test geht also weiter. Heute war der Tag nicht ganz so sonnig wie gestern mal sehen ob es ausgereicht hat den Akku entsprechend zu laden.

In der Zwischenzeit habe ich an der Software gebastelt (da findet sich immer etwas)  und nun sind auch ein paar Interaktionen über die RS232 mit dem SC-1 möglich.

  • Abfragen der AD und PWM Module
  • Ein- Ausschalten des Verbrauchers

Mit der PWM Frequenz muss ich noch etwas spielen, die Spule und die Frequenz sind aus dem Bauch heraus noch nicht optimal. Derzeit ist die Frequenz ca. 8kHz bei einer PWM Auflösung von 10-Bit. Wenn ich in der Frequenz nach oben gehe, geht es zu lasten der Auflösung. Da ist vielleicht ein Kompromiss zu suchen, denn je höher die Frequenz, desto kleiner kann die Spule von der Induktivität ausfallen.

14.06.15: Tag2 des Live Tests

Der gestrige Tag hatte weniger Sonnenstunden oder aber hatte nicht die ideale Bestrahlung um den Akku entsprechend aufzuladen. Wenn auch die kritische Phase noch nicht erreicht war, so war heute morgen der Akku unter 10Volt und da schlug dann der Tiefentladeschutz in der Steuerung an.

Die Erkenntnis daraus ist, mit einem 20Watt Solar Panel ist es keinesfalls möglich die Anlage dauerhaft zu betreiben. Die Phase in der der Akku ideal geladen wird ist zu kurz und auch die Ausrichtung des Solar Panels alles andere als optimal.

Zwei entscheidende Parameter ergeben sich daraus.

  • Bei indirektem Licht muss das Panel so viel Energie liefern, dass der Akku innerhalb der Tageslichtphase voll geladen wird und auch die Steuerung genug Energie bekommt.
  • Die Ausrichtung des Solar Panels spielt eine signifikante Rolle bei der Energiegewinnung. Hier wird schnell klar, eine Ausrichtung durch automatische Nachführung währe wohl das Beste. Alle anderen Lösungen sind mehr oder weniger schlecht und ineffektiv. 

29.06.15: Live Tests sind erfolgreich

PWM Aufbereitung (Oben 5V Digital, unten am SolarPanel)
Console View RS232
XC8 Dashboard

Seit einigen Tagen ist das System nun im Betriebsmodus. Das bedeutet:

  • 24 Stunden Betrieb
  • Der Akku wird tagsüber geladen
  • Mit Einbruch der Dunkelheit geht die Beleuchtung im Garten an
  • Das 100W Solar Panel ist angeschlossen und hat eine richtige Position zur Sonne im Garten gefunden

Die in Summe 14Ah Batterie kommt auch nicht mehr an die Grenze der Tiefentladespannung seit das 100Watt Panel angeschlossen ist. In dem Microcontroller sind jetzt alle A/D Wandler in Betrieb und soweit optimiert, dass auch nur mit einem Zyklus der Wandlung/ Messwertes gearbeitet werden kann. In der Software sind einige Features implementiert, welche geziehlt auf die Gartenbeleuchtung und auf die Ladekurve des Akkus hinarbeiten. Bei der Compilierung der Sofware kommen keine Fehler oder Warnungen mehr.

Allerdings ist der Speicherplatz in dem Controller jetzt auch am Limit, mit den verbleibenden ca. 180 Bytes an ROM ist es nun nicht mehr möglich, noch weitere Features zu implementieren.

Auf dem zweiten CPU Board habe ich auch mitlerweile den XPORT bestückt und ein Firmware Update durchgeführt. Dadurch ist das Controllerboard und auch die Bedinung über das Ethernet/ Internet möglich. Dieses Feature wird allerdings mit einem relativ hohen Stromverbrauch bezahlt. Der Xport benötigt dann ca. 250 bis 300mA bei 3,3 Volt Versorgungsspannung. Bei einer kleinen Akkukapazität kann dieses inbesondere bei Nacht und wenig Sonneneinstrahlung dazu führen, der Akku kommt an die Grenze zur Tiefentladung. Dieses ist noch ein offener Punkt und wird sich vermutlich nur dann lohnen eine Ethernet Version zu bestücken, wenn die Performance auf der Solar Seite und die Akku Kapazität entsprechend ausgelegt ist. Um dennoch mit dem System zu arbeiten und den Controller über das Internet ansprechen zu können habe ich RS232 auf Ethernet Konverter bestellt. Diese liegen vom Preis niedrieger als die XPORTs selbst und können dann als externes Gerät zwischen Ethernet Switch und RS232 geschaltet werden. Ich bin mal gespannt wie und ob die Funktionieren.

Eine Schwachstelle auf der Interface Platine ist im PWM Leistungsteil derzeit die Drossel. Der Wert wurde zwar irgendwie rechnerrisch ermittelt aber die Funktion ist noch nicht so wie es sein sollte. Fakt ist, im Betrieb hat sich herausgestellt wird die Drossel einfach überbrückt ändert sich eigentlich nix. Kann sie auch weggelassen werden? Wenn Ja, so könnte der PWM Leistungsteil spürbar mehr Strom vom Solar Panel zum Akku steuern. Bedingt durch die Drossel ist hier bei ca. 1A Dauer Schluss! Wenn die durch eine Brücke ersetzt wird sind auch 10A oder mehr möglich. Die Grenze währe dann der P-Kanal MosFET und da müsste man sich im Detail ansehen wie das Schaltverhalten ist. Bei den wenigen Milliohm zwischen Drain- und Source könnten dann 20-30A Schaltstrom möglich sein. (Dann würden aber die Klemmen und die Leiterbahnen eher die Schwachstelle darstellen)

Wie geht es jetzt weiter?

  1. Akkukapazität erhöhen -> mein Ziel ist zwischen 30 und 60Ah
  2. Erfahrung im Dauerbetrieb sammeln und ein Gefühl für das Sizing bekommen. Wie viel Last, zu welcher Zeit kann dem System abverlangt werden ohne das es in den Tiefentladungsbereich abwandert
  3. Solar- und Akkukapazität erhöhen bis zum wirklichen Grenzwert der Steuerung
  4. Überarbeiten der Software (Features, Speicherbereinigung, ...... Optimierung allgemein)
  5. Internetanschluss des Systems (DAS IST RICHTIG WICHTIG!!!)

01.07.15: Akkukapazität ist erhöht

Blick auf die Console

Nachdem das mit dem 100 Watt Solar Panel nun ganz gut läuft ist ja ein Ziel die Kapazität zu erhöhen. Das ist jetzt erfolgt. Als Energiespeicher sind nun 6x7Ah, also 42Ah, angeschlossen.

Der Internetanschluss ist nun auch über den XPORT realisiert. Im derzeitigen Testbetrieb wird die Spannungsversorgung allerdings noch nicht aus dem Akku hergestellt. Sollte sich bei ausreichender Kapazität nun zeigen das es mit der Ladung- und Entladung auch an bewölkten Tagen nicht zu Problemen kommt, kann das aber schnell aus dem Akku erfolgen. (Der XPORT braucht fast 300mA, das ist genauso viel wie die angeschlossene LED Lampe in der Nacht braucht)

Erhöhung der Akkukapazität:

Die kommende Ausbaustufe wird dann noch einmal eine Verdoppelung der Kapazität sein und auch die Solarfläche wird um min. ein 100Watt Panel erweitert. Das allerdings erst in ca. 2 Wochen. Was die Solar Panel Position und Befestigung angeht habe ich mich jetzt doch für eine bodennahe Installation entschieden. Das hat zum einen den Vorteil, man kommt sehr gut dran und kann auch die Ausrichtung zur Sonne noch in kleinen Grenzen optimieren. Für den Träger der Module habe ich schon eine Idee. Allerdings müssten dann auch höhere Kabelquerschnitte zum Einsatz kommen.
Akkus zur Erhöhung der Kapazität um weitere 56Ah sind bereits vorhanden, so kann in der Endausbaustufe schon einmal mit 12x 7Ah (Summe 84Ah) gerechnet werden.

Tiefpassfilter im PWM Leistungsteil:

Im PWM Leistungsteil befindet sich ein Spule die in Kombination mit dem Kondensator einen Tiefpass darstellt. Das Problem mit der Spule ist, sie ist das schwächste Glied in der Kette und bestimmt den Strom der bei der Ladung in den Akku fließt. Bisher ist das so auf ca. 2 Ampere begrenzt. Würde die Spule durch eine Brücke ersetzt kann man bestimmt das 10 fache ansetzen.

21.07.15: Langzeittest ohne Probleme

(21.07.15) Seit fast 3 Wochen läuft das System nun störungsfrei und völlig von allein. Die Akkukapazität wird jetzt noch bis auf ca. 85Ah erhöht und auch die Solarleistung ist seit dem 20.07.15 auf 200Watt max. erhöht. Damit stehen bei direkter oder optimaler Sonneneinstrahlung ca. 10-12A Ladestrom zur Verfügung und was am wichtigsten ist, selbst bei total bedecktem Himmel sind ca. 1-1,5A möglich.

Neben dem Feature eines Internetanschlußes ist auch die Verkabelung nun nicht mehr provisorisch. Hier ist die Zuleitung jetzt in 4mm2 erfolgt und damit ist der Widerstand des Kabels reduziert.

Im Garten ist noch eine Lampe hinzugekommen, die Idee die Gartenlampen selbst zu bauen hat auf einfache Weise erst einmal geklappt. Dazu an anderer Stelle und anderer Zeit mal mehr. Eins kann man aber an der Stelle sagen, die beiden LED Lampen mit je 3Watt machen schon ganz gut Licht ;-)

Da der Langzeittest nun gut geklappt hat steht dann wohl doch endlich mal der Einbau in ein Gehäuse an. Dieses sollte dann als nächstes angegangen werden.

In dem Bild ist noch einmal der aktuelle Test (Laboraufbau) zu sehen. Die Lampen dienen einfach nur der Belastung und leuchten so vor sich hin.

Sagt man nicht ein Provisorium hält immer am längsten?

02.08.15: Das finale Produkt entsteht

Controller und Interface im Gehäsue
Mit Vorderansicht
In der totalen von vorn, angeschlossen

Am letzten Freitag ist die Frontplatte für das Gehäuse gekommen. Ahh, das hatte ich noch gar nicht geschrieben, die habe ich jetzt doch bei der Schaeffer AG bestellt. Die Entscheidung ist gefallen, weil die eine tolle Software haben für das Design der Frontplatten und man daraus sofort bestellen kann. Ich hab keine Lust gehabt hier eine Bastelstunde einzulegen und Stundenlang mich damit zu beschäftigen. Kurzum, die 38€ war es mir Wert.

Die Controller Steuerungsplatine und die Interfaceeinheit können jetzt also in die Verpackung. Die Akkus haben noch etwas Zuwachs bekommen, jetzt sind 70Ah verbaut, weitere 14Ah folgen noch. Dann sind in Summe 84Ah als Endausbau vorhanden.

An der Software des Controllers ist auch noch ein wenig passiert. Einige Bereinigungen haben stattgefunden. Es gibt jetzt eine Versionsliste mit allen Änderungen, also auch eine History, eine Bug- Wishlist. Auch sind alle ifdef Anweisungen für den 16F690 jetzt raus. Eine Zweigleisigkeit beider Controller ist wohl aufgrund von dem geringen ROM des 16F690 nicht möglich. Vielmehr wird auch der 16F1829 zu klein sein. Es sind nun noch 650Bytes ROM übrig und da lässt sich nicht mehr viel mit machen. Es wird wohl so kommen das entweder ein Adaptersockel für die CPU herhalten muss oder eine neue CPU Platine kommt. Ein 16F1788 ist vermutlich die Lösung.

Besonderes Augenmerk liegt auf der Tag- Nachtschaltung. Diese war bisher adhoc über eine Lampe, angeschlossen am 20Watt Solar Panel und über einen Fotowiderstand am AD Port realisiert. Die Logik war ganz einfach, wenn die Lampe leuchtet ist es Tag, wenn Sie dunkel ist, ist es Nacht. Da ich keinen weiteren Sensor auf der Frontplatte vorgesehen hatte ist es jetzt mit etwas Trick und softwareseitig gelöst. Eine Abfrage des Solar Panels gibt Aufschluss über Tag und Nacht. Das ist jetzt gut möglich weil die Messung ohne Last erfolgen muss, dazu wird jetzt einfach für die Messung der Duty Cycle auf 0 gesetzt und danach geht es weiter. Mit einem Relais währe das eine endlose "klapperei" geworden. das Ganze hat übrigens auch den Vorteil, keine zusätzlichen Kabel etc.

Thema Internetanschluß. Es scheint so zu sein, ein externer RS232/ Ethernetwandler ist eine gute Lösung. Hier auf RS232 zu gehen ist die kleinste gemeinsame Basis und einen XPORT extern anzuschliessen ist kein Hexenwerk. So läuft es jetzt auch hier. Bei der Gelegenheit hat die RS232 ein SüpeedUp bekommen und läuft jetzt mit 19200Baud anstatt mit 9k6 Baud.

Im Garten sind nun 5 LED Lampen verbaut. Der Betrieb ist sichergestellt, das Gesamtsystem schafft das problemlos von der Performance. Weitere 4-6 Lampen folgen noch. Wir werden im Herbst mit Sonnenbrille nachts im Garten sitzen ;-)

Mitlerweile ist neben der Gartenbeleuchtung eine weitere Nutzung als Vision und stellt sich nunmehr immer realistischer dar. Weitere 2-3 100Watt Solar Panele müssen dazu noch kommen und dann soll ein 500Watt NetzInverter die Power für den IT Kram im Rack erzeugen. Der Inverter kommt direkt an die Akkus und soll eine Unterspannungskontrolle haben. Damit ist dann der Solar Controller nur mit dem Laden beschäftigt und der Inverter macht die Energie aus den Akkus. .... Naja, da muss noch etwas nachgedacht werden und die Solar Dinger müssten dann doch aufs Dach.

Version SC1-4.0.4

  • SC1-V4.0.4.zipBackup des xIDE Ordners mit dem Solar Controller Projekt4.8 M

01.09.2015: Auswertung der Akkuladung

Chart
EXCEL Daten

Durch die Möglichkeit des Controller über das Internet abzufragen besteht auch die Möglichkeit einer automatischen Auswertung.

Ich habe da mal unter Linux ein Skript geschrieben, welches die Daten alle 15 Minuten vom Solar Controller einsammelt und dann in eine Textdatei schreibt. Die Daten sind dann in EXCEL einzulesen und man kann dann unter anderem Charts von der Akkuladung erzeugen. Der anzuzeigende Zeitraum lässt sich bequem in EXCEL filtern.

Das Skript unter Linux ist ganz einfach, teilt sich in 2 Bereiche auf. a) Das Skript was die eigentliche Auswertung macht und die Daten für die Textdatei aufbereitet und b) Das EXPECT Script welches die Kommunikation zum Controller herstellt und den Datenstrom ausliest

******** START of SCRIPT ********

#/bin/bash
HOME="/root/SC1"
LOGFILE="./SC1_ADVALUES.txt"
TEMPFILE="./TEMP"
SCRIPT="$HOME/getSC1.sh"
DATUM=`date +%D`
TIME=`date | cut -f4 -d" "`
cd $HOME
$SCRIPT > $TEMPFILE
dos2unix $TEMPFILE
AD6=`cat $TEMPFILE | grep AD6: | cut -b1-6 | tr -d "\n"`
AD7=`cat $TEMPFILE | grep AD7: | cut -b1-6 | tr -d "\n"`
AD71=`cat $TEMPFILE | grep AD7.1: | cut -b1-6 | tr -d "\n"`
AD8=`cat $TEMPFILE | grep AD8: | cut -b1-6 | tr -d "\n"`
AD9=`cat $TEMPFILE | grep AD9: | cut -b1-6 | tr -d "\n"`
AD10=`cat $TEMPFILE | grep AD10: | cut -b1-6 | tr -d "\n"`
echo "$DATUM,$TIME,$AD6,$AD7,$AD71,$AD8,$AD9,$AD10" >> $LOGFILE
cat $LOGFILE | grep -v ,, | grep -v ctrl > /data/samba-shares/Transfer/$LOGFILE

******** END of SCRIPT ********

 

******** START of SCRIPT ********

#!/usr/bin/expect

spawn /usr/bin/telnet 192.168.8.51 10001
send "m\n"
sleep 5
send ctrl+d
expect eof

******** END of SCRIPT ********

28.10.2015 Step Down Wandler im Ausgang eingebaut

Step-Down Wandler

Seit Anfang September hat sich der Sonnenstand dahingehend negativ verändert, dass die Sonne und Wolkensituation nicht mehr verlässlich ausreicht die nächtliche benötigte Energie in die Akkus zu laden. Dieses kann man sehr gut in den Charts erkennen. Diese habe ich von den letzten 3 Monaten einmal als PDF zur Verfügung gestellt.

Ich habe zwei Dinge in Betracht gezogen.

Zum einen war mein Versuch mit einem Step-UP Wandler die wenige Energie durch die Solarzellen auf einen höheren Spannungswert zu bringen und somit dann noch die Möglichkeit einer Akkuladung zu erreichen. Das hat leider nicht geklappt. Dennoch muss dieser Punkt noch einmal durchdacht werden. Dazu aber an anderer Stelle mehr und das ist für die neue Generation Solar Controller wichtig.

Der zweite Punkt ist am Ausgang zu arbeiten. Da hier LED Lampen ihren Dienst erbringen war meine Idee diese zu Dimmen. Die volle Helligkeit ist im Garten gar nicht notwendig, Stand heute ist die Beluchtung dort bereits überdimensioniert. Also kam hier ein Step-Down Wandler zum Einsatz. Das ist heute Nacht zum ersten male gelaufen und die Akkustände sind prima.

Warum wird ein Step-Down Wandler eingesetzt und nicht einfach ein Spannungsregler um die Spannung kleiner zu machen. Auf hohem Niveau folgende Antwort. Bei einem Spannungregler wird die Differenzspannung und Strom in Wärme verwandelt bei einem Step-Down Wandler wird die Zeit wie lange die Spannung an dem Verbraucher anliegt reduziert. macht man das mit entsprechend hoher Frequenz ist es für das Auge nicht ersichtlich und im übrigen ist das die einzigste Möglichkeit LED Lampen zu dimmen. Genau das habe ich getan mit einem kleinen Modul was in China wenige Cent/ Euro kostet.

28.10.2015: Auswertung der Lade- Entladezyklen

  • SC1.pdfAuswertung November bis 8.11.15 17:00 Uhr185 K

Warum?

Das Solar Controller Projekt ist aus einem Spaß entstanden und dient in keiner Weise dazu kommerzielle Interessen zu verfolgen.

Vielmehr ist es ein reines Lernprojekt und dient dem Erfahrungsgewinn im Bereich der Solartechnologie und µC Entwicklung