SolarControllerV4

Projekttagebuch

Hier auf dieser Seite wird chronologisch die Entwicklung dokumentiert. Die Form ist wie ein Tagebuch und zeigt die unterschiedlichen Schritte der Entwicklung auf. Ebenfalls dokumentiert werden Tip und Tricks, Hintergrundinformationen Code Schnipsel und Ergebnisse.


28.05.2016: RTCC klappt, 4zeiliges Display

oben das blaue 4-zeilige Display

Die vermeintlichen Probleme mit der RTCC scheinen wohl im Rahmen der Programmierung und des Betriebs am PICKIT zu liegen. Scheinbar sind durch die Programmierung und die Restarts in dem Zusammenhang ein paar Bits gekippt.

Läuft die Platine ohne das der Controller Programmiert wird, läuft auch die Uhr mit erwarteter Genauigkeit. Sowohl wenn das System Online ist, als auch wenn das System aus dem Standby eingeschaltet wird.

Schon seit einiger zeit ist das 4-zeilige Display angekommen und liegt bereit. Da es nicht Pinkompatibel ist muss auf dem Steckboard erst die Beschaltung gemacht werden und dann wird auch noch die Bibliothek anzupassen sein. Mal sehen ob da am Wochenende ein wenig Zeit für übrig ist.

Im Bild links ist unten das Display mit 2 Zeilen zu sehen und der kleine Baustein hochkant ist der Strommesser mit dem Hall Sensor.

15.05.2016: Referenzspannungsquelle installiert, RTCC noch mit Problemen

Der Baustein für die Referenzspannungsquelle ist nun im DIP8 Gehäuse gekommen. Er ist pinkompatibel mit dem MicroSMD Gehäude und muss nun noch mit den entsprechenden Pins verbunden werden. Auch wenn es etwas komisch ausschaut, hier geht es erst einmal darum das es funktioniert. Auf dem finalen PCB wird das dann richtig gemacht.

Die Einstellung der Spannung erfolgt nach folgendem Muster bei einem MCP4812 (10Bit DAC):

VOUT = VREF * D/1024

Vref ist dabei 2.048V. Der DAC hat somit eine Auflösung von 2mV. Da auf dem Chip nun 2 DACs verbaut sind, können diese auch unabhängig voneinenader gesetzt werden. Über ein paar wenige Status Flags werden spezielle Funktionen auf dem Chip gesteuert. So lässt sich je Kanal auch noch einmal die Verstärkung um den Faktor 2 schalten, dann erreicht der DAC eine Auflösung von 4mv. Ein besonderes Feature ist, beide DACs können auf den gewünschten Wert Programmiert werden und über den PIN /LDAC kann das Latch beider DACs synchronisiert werden.

Kanal 1 geht bei meiner Anwendung auf Vref+, Kanal 2 auf Vref- des Microkontrollers. Damit stehen nun für den µC fast alle möglichen Optionen zur Steuerung des ADCs zur Verfügung und können über die Programmierung softwareseitig gewählt werden.

Sorgen macht mir immer noch die Uhr. 2 Dinge sind noch offen und da habe ich noch keine richtige Lösung für.

  • a) Sporadisch wird beim "Return from Backup" die falsche Zeit gesetzt
  • b) Am Tag läuft die Uhr ca. 10 Minuten zu schnell.

11.05.2016: RTCC und Referenzspannungsquelle

Die Uhrzeit macht mir noch ein wenig Sorgen. Aus bisher nicht erklärlichen Gründen behält die Uhr die Zeit nicht und auch im laufenden Betrieb geht sie meiner Meinung nach nicht genau genug. Die externe Batterie ist angeschlossen und hat auch die richtige Spannung. Ich habe mehrere Tests gemacht wo die Uhr die Zeit hält und dann sporadisch steht wieder eine komplett falsche Zeit im Display. Laut Datenblatt kann das nur passieren wenn das HT (HALT) Register gesetzt ist und die Register 0-7 beschrieben werden. Das ist im Programm sichergestellt das dieses nicht passiert. Das stellen der Uhr geht dafür recht einfach über die RS232. Die entsprechenden Routine dafür ist fertig.

Inzwischen ist auch der Baustein für die Referenzspannungsquelle im DIP8 Gehäuse gekommen. Das Mini SMD Gehäuse habe ich versucht auf den SMD Sockel zu löten, bekomme das aber nicht vernünftig hin. In der finalen Version des PCB kommt hier dann das DIP 8 Gehäuse zum Einsatz. Die SMD Version ist mir zu klein. Der DIP8 Baustein muss in der Version jetzt "provisorisch" auf den Micro SMD Platz gebaut werden.

05.05.2016: RTCC läuft

Ausgabe von Datum und Zeit auf dem LCD

Die Uhr geht jetzt und lässt sich jetzt auch mit im Kern mit einer einzigen Routine beschreiben und auslesen. Ein paar Schönheitskorrekturen sind noch notwendig aber dann ist es schon fertig.

Das Stellen der Uhr erfolgt über das Terminalprogramm, das ist einfacher und auch derzeit die einzigste Möglichkeit Daten einzugeben. (Vermutlich wird es auch so bleiben)

Selbst die Spannungsabschaltung überlebt das System gut. Das angeschlossene Batteriepack scheint zu funktionieren. Nun wird sich zeigen ob an der Genauigkeit noch etwas gemacht werden muss oder ob es ausreichend ist.

Bis jetzt hat sich gezeigt, es ist sinnvoll die Anleitung UND die Application Notes des Herstellers zu dem Chip zu lesen. Auch hier war es wieder so, wertvolle Hinweise kamen erst durch das lesen der App Notes.

04.05.2016: RTCC ist gekommen, weiter geht es

Der M41T93 im 18poligen SMD Gehäuse

Nachdem ich nun das Steckboard wieder richtig angeschlossen hatte geht auch das LCD Display wieder. Auch die anderen Komponententen verhalten sich immer noch so wie es sein soll.

Nach dem überprüfen der Spannungen an dem M41T93 wird der Taktausgang SQW an PIN 7 geprüft, dieser sollte nun 32760Hz anzeigen. Frequenzzähler dranhalten und siehe - es passt. AN JP21 wird die Backup Batterie angeschlossen. Dazu habe ich ein Batteriegehäuse mit 2 Mignonzellen und Ein- Ausschalter besorgt.

Laut Datenblatt erfolgt das Lesen und Schreiben des M41T93 indem sequentiell die 32 Bytes ein- oder ausgelsen werden. Bietet sich an ein Datenarry dazu zu definieren.

03.05.2016: Zwangsweise Pause

Skulptur im Klostergarten Rietberg

Kreative Pause!

Um jetzt weiter machen zu können benötige ich die restlichen Bausteine die an den SPI Bus angeschlossen werden. Das ist die Referenzspannungsquelle und die Echtzeituhr. Sowohl Conrad und RS können die leider im Moment nicht liefern. Also Pause.

Dann kann also schon mal etwas kreativ gearbeitet werden. Nachgedacht werden muss noch über das Thema Menüführung und die PWM Steuerung für die Akkuladung und den DC OUT Anschluß. Also Zeit nutzen und mal eine Runde spazieren gehen und vielleicht ein paar Fotos machen.

30.04.2016: Uhrzeit und Datum

Die Uhrzeit und Datum ist wichtig um zu wissen wann genau was passiert ist. Vorgesehen ist eine Echtzeituhr (RTCC). Da dieser Baustein noch nicht geliefert ist habe ich mal angefangen auf dem Controller eine Uhr zu implementieren. Sobald dann der RTCC Baustein da ist, kann auf die Uhrzeit zurückgegriffen werden auch nach dem Stromausfall.

Wie ist es umgesetzt? Die Idee ist wie bei UNIX Systemen die Ticks seit 1970 zu nehmen. Da der Timer3 bereits so eingestellt ist das alle 1 Sekunden ein Interrupt ausgelöst wird (bzw. eine Routine aufgerufen wird) bietet sich dieses an. Diverse Funktionen setzen auf diesen zentralen Zähler auf. Also habe ich eine globale Variable "clock" eingeführt, welche in der ISR incrementiert wird. Der Preset der Variable liegt bei 0 und kann über die RS232 gesetzt werden. Im Moment noch mit dem 10-stelligen Integer Wert. Später dann auch in einem Format nach Datum und Uhrzeit. Alles weitere machen dann die String Formatierungen. Nun werde ich das System mal einige Stunden laufen lassen und dann die Abweichung kontrollieren.

30.04.2016: EEPROM am SPI Bus

Das EEPROM lässt sich nun auch ansteuern. Damit steht über den SPI Bus ein weiterer Speicher zur Verfügung. Da es sich um ein EEPROM handelt steht dieser gespeicherte Wert auch zur Verfügung, nachdem die Spannung von der Schaltung entfernt wurde. Er ist also nicht flüchtig.

Getestet habe ich das durch ein definiertes schreiben in den Baustein und auslesen, vergleichen. Das hat fehlerfrei funktioniert.

verwendet habe ich hier ein 25C040. Der Baustein ist 512x8Bit (4kBit) organisiert. Verwendet werden können aber auch andere Bausteine bis zum 25C1024 (1Mbit). Dann müsste allerdings die Software angepasst werden, weil sich die Adressierung anders darstellt als bei den kleinen EEPROMs.

29.04.2016: Display Problem gelöst

Das Problem mit dem Display ist gelöst. Durch einen RESET (CLK und RS auf HIGH) danach min. 40ms warten war das Thema gefixed.

Das erklärt auch warum nach einem µC Reset das Display angeht, die Ports werden bei diesem RESET auf HIGH gelegt.

        LCD_RS_SetHigh();
        SCK_SetHigh();
        __delay_ms(10);
        __delay_ms(10);
        __delay_ms(10);
        __delay_ms(10);
        __delay_ms(10);
        __delay_ms(10);
        LCD_RS_SetLow();
        SCK_SetLow();

28.04.2016: Display geht erst an wenn ....

Das DOG-M LCD Display ist jetzt gut ansteuerbar. Dennoch gibt es noch ein Problem, denn das Display geht erst an, wenn ein Reset auf dem Controller ausgeführt wird. So adhoc ist da keine Lösung gefunden. Die Signal- und Steuerleitungen habe ich bereits geprüft und die Pegel und Timings sehen gut aus. Da steckt noch der Wurm drin.

Zu prüfen ist:

  • SPI Connectivity: //SPI mode: rising edge, MSB first, clock idle high
  • RESET des Display Controllers: CLK und CSB auf High; das muss vor der Initialisierung erfolgen und nach dem Reset ist min. 40ms zu warten, besser 50.

26.04.2016: LCD Display ist ansprechbar

Aktueller Testaufbau

Das Display ist nun auch ansteuerbar. Auch hier ist wieder eine Besonderheit aufgetreten. Der SPI Bus ist an diesem Display anders als an anderen Chips. Neben den Standard Signalen CLK, MOSI, MISO und CS gibt es hier einen RS. Dieser Anschluss steuert die Ansteuerung der Register. Das bedeutet, ein weiterer Port ist notwendig.

Grundsätzlich geht es jetzt erst einmal. Damit es aber auch im Programm nutzbar ist muss jetzt noch die Bibliothek erstellt werden mit einigen Makros und Funktionen. Erst danach ist es fertig.

Auf dem Bild ist der aktuelle Testaufbau zu sehen. Das DOGM LCD Display rechts auf dem Steckboard ist noch etwas lose verdrahtet. Das Poti rechts unten am Display ist für den Test des PGA und des AD Wandlers.

26.04.2016: PGA läuft jetzt

Der PGA läuft jetzt auch. Per SPI ist der Kanal und die Verstärkung einstellbar. Der MCP6S26 arbeitet vom Prinzip als nichtinvertierender Operationsverstärker. Die Verstärkung ist dabei von 0 bis 32 in 8 Stufen einstellbar. Mein Versuchsaufbau hat ein Poti zwischen GND und Vdd, darin habe ich eine Spannung am Schleifer von 0.2Volt eingestellt. Diese Spannung wird hardwareseitig noch einmal durch 2 geteilt bevor diese auf den Eingang des MCP6S26 geht. Eine Verstärkung von 2 entspricht also der realen Spannung.

Am Poti habe ich eine Spannung von 0,2 Volt eingestellt. Ein paar Verstärkungen habe ich dann eingestellt und lasse mir die vom AD Wander des Controllers gemessenen Spannungen anzeigen. Natürlich kann die Spannung nicht höher als Vdd werden.

Fazit: Funktioniert, zeigt das die kleinste Spannung die gemessen werden kann theoretisch Vdd /(Auflösung ADC * max. Gain * Vorteiler) = 3,3V / (1024 * 32 * 2) = 0,2mv ist. Mal sehen wie die Praxis ausschaut. Je höher die Verstärkung ist, desto höher wird auch die Ungenauigkeit sein.

25.04.2016: RS232 funktioniert jetzt auch, PGA noch nicht ganz

Ausgabe der Temperatur
Quelle: Microchip Datenblatt

Nachdem der TC77 die Temperatur gemessen hat und die Ausgabe auf dem PORT B in Form von LEDs erfolgte hat sich die Situation nun noch verbessert. Heute sind die MAX3232 eingetroffen und die RS232 konnte in Betrieb genommen werden. Jetzt ist das Debuggen und die Kommunikation spürbar besser. Die Routine zum Abfragen des TC77 wurde noch ein wenig angepasst und diese liefert nun die Temperatur in Grad Celsius als Floatwert zurück. Damit lässt sich der Wert jetzt ganz einfach auf der RS232 ausgeben. Dann kann es jetzt wohl mit weiteren SPI Komponenten weiter gehen.

Der PGA (Programmable Gain Amplifier) funktioniert noch nicht so richtig. Sobald der Baustein eingesteckt ist, passiert auf dem SPI Bus nix mehr. Hier ist schief gegangen was schief gehen kann. Vdd ist falsch angeschlossen, ebenfalls GND. SDO darf nicht auf den BUS gelegt werden. Sobald CS auf low geht wird SDO auf low gezogen. Hintergrund ist folgender. Der Baustein hat nur eine Funktion in der er beschrieben wird. Der SDO Port wird ausschliesslich für die Daisy Chain Config verwendet. In diesem Fall bedeutet das, er wird nicht verbunden mit dem BUS.

 

Die Programmierung ist wie folgt:

  • CS auf Low
  • 1. Byte Instruction  (Kanal oder Verstärkung wählen)
  • 2. Byte Kanal oder Verstärung einstellen
  • CS auf High
  • Pause
  • CS auf Low
  • 1. Byte Instruction  (Kanal oder Verstärkung wählen)
  • 2. Byte Kanal oder Verstärung einstellen
  • CS auf High

Idealerweise muss also die Routine welchen den PGA einstellt beide Funktionen bedienen, AD Kanal und verstärung einstellen. Der Aufruf könnte dann so aussehen.

void PGA (uint8_t channel, uint8_t gain);

23.04.2016: TC77 Temperatursensor liefert Daten

Nachdem nun alle SPI Komponenten auf 3,3Volt umgestellt sind konnte begonnen werden mit den ersten Modulen Daten zu erfassen. Der TC77 sollte dann wohl am einfachsten sein. Nach vielen Test stellt sich dann allerdings heraus, das durch eine falsche Konfiguration des MISO Ports am µC der TC77 mehfach den Ausgang (SDO) gegen Masse gelegt hat und es nicht überlebt hat. Hier war der MISO Port fälschlicherweise auf Ausgang anstatt auf Eingang konfiguriert.

Da ich noch keine Möglichkeit habe die Daten an die Aussenwelt zu senden (RS232) habe ich als ersten Test das Messergebnis auf den RB Port gelegt. Dort sind ja 8 LEDs angeschlossen und man kann jetzt deutlich erkennen, wenn die Temperatur sich ändert, verändert sich auch die "provisorische" Anzeige. Um hier dennoch mit echten Daten zu hantieren kann die Protokollanalyse auf dem Logic Analyser verwendet werden. Diese zeigt nicht nur die Timing der Signale an, sndern auch die übertragenen Werte. Aus diesen Werten ist dann die Temperatur zu errechnen. Die Formle sollte folgende sein.

Temp = (MSB(0-6) * 32 + ((LSB)/8)) * 0,0625

Das Bit 7 beim MSB gibt das Vorzeichen an und wird nicht in die Berechnung einbezogen. Bit 0-2 bei dem LSB sind Status Flags, die ebenfalls nicht in die Berechnung einfliessen.Daraus ergibt sich bei folgenden Werten MSB = 11 und LSB = 135 eine Temperatur von 23 Grad. Vermutlich ist da noch ein Fehler drin. Das muss noch einmal geprüft werden.

Die CLK Rate ist übrigens 1MHz und damit läuft der BUS zumindest was das Signal angeht ganz gut.

22.04.2016: Signalpegel Problem gelöst?

Das Signalpegelproblem könnte gelöst sein. Alle Bausteine die mit einander kommunizieren und gemeinsame Signalleitungen haben können mit 3,3 Volt betrieben werden. Damit sollte dieses Problem gelöst sein. Folgende Bausteine arbeiten sowohl mit 3,3 Volt als auch mit 5Volt.

  • RTC (M41T93)
  • Instrumentenverstärker (MCP6S26)
  • EEPROM (25LC1024)
  • Temperatursensor (TC77)

Der SHUNT Monitor hat keine eigene Spannungsversorgung, wird quasi aus der Schaltung gespeist wo der Strom gemessen wird und arbeitet von 4-80Volt.

Nun stellt sich generell noch die Frage ob 5 Volt Spannungsversorgung überhaupt noch notwendig ist? Es scheint so als ob die 5V Versorgung komplett entfallen kann.

21.04.2016: Änderungen am Schaltplan und am Board

So langsam stellen sich die notwendigen Änderungen heraus. Es sind doch ein paar Designfehler die ich hier eingebaut habe.

Zum einen passte der Programmieranschluss nicht richtig, die Verbindung Vdd war verlorengegangen. Das ist ein kleines Problem, lässt sich mit einem kurzen Draht lösen.

Gravierender ist die Erkenntnis das Bausteine die mit SPI vernetzt sind und unterschiedliche Betriebsspannungen haben nun mal auch unterschiedliche Signalpegel produzieren. Das bedeutet, sind Bausteine am BUS angeschlossen die nicht mit 3.3Volt laufen können müssen diese mit einer Pegelanpassungen angeschlossen werden. Ist wohl die Kategorie "fehlende Erfahrung".

Im Internet gibt es dazu einige Lösungsvorschläge mit genauso vielen Vor- und Nachteilen. Ich will mal sehen ob die Lösung mit Zener Diode funktioniert. Scheint erst einmal am einfachsten zu sein.

20.04.2016: Bestückung der Platine

Die zweite Lieferung der Bauteile ist auch gekommen. Heute habe ich angefangen die Platine zu bestücken, es sind zwar noch nicht alle Bauteile geliefert worden aber die können auch nachbestückt werden. Eigentlich klappt alles, bis auf ein Problem mit den Instrumentenverstärkern. Das die Dinger klein sind hatte ich mir gedacht. Allerdings hab ich mich mit dem Gehäuse vertan. Es ist viel kleiner als geplant und somit muss etwas improvisiert werden. Es ist abenteuerlich aber vielleicht geht es.

Auf einen Träger aus Karton klebe ich den Chip. Das ist notwendig weil sonst Kurzschlüsse mit den Anschlüssen auf der Platine entstehen können. Dann mit sehr viel Feingefühl, Lupe und super dünnem Lötzinn schliesse ich den Chip an den Anschlüssen auf der Platine an. Als Anschlussdraht nehme ich eine einzelne Kupferbahn aus einer Litze. Sieht nicht super aus aber besser als gar nix. Elektrisch ist alles TipTop. Wenn es mit dem einen geht mache ich den anderen auch noch. Ist schon anstrengend für die Augen und dauert mal gerade über eine Stunde. Hier nun noch ein Beweisfoto. Vielleicht sollte ich doch mal schauen ob es den Chip nicht doch noch in einem anderen Gehäuse gibt.

17./19.04.2016: Bauteile sind bestellt und erste Lieferung ist da

Steckbrücken aus China

So ist man das gewohnt bei Reichelt,  schnelle Lieferung. Die ersten Bauteile sind heute eingetroffen und auch Conrad Electronic hat schon einem Mail geschickt das die anderen Dinge morgen kommen werden.

Ebenso eingetroffen sind die Steckbrücken für das Experimentierboard. Günstigste Variante ist derzeit diese über Amazon in China zu bestellen. Das dauert zwar ein wenig aber preislich unschlagbar.

 

 

15.04.2016: Platinen sind gekommen

Platine Unter- und oberseite

Heute in der Post waren die beiden bestellten Prototypen für die Controllerplatine. Die erste Sichtkontrolle ist in Ordnung. Nun müssen die fehlenden Bauteile bestellt werden und die Bestückung kann starten. Insbesondere die Shunt Monitore werden dann ja doch noch ein paar Tage Lieferzeit haben.

Das erste Mal sind jetzt auch SMD Bausteine vorgesehen, weil es die ICs in konventioneller technik nicht gibt.

14.04.2016: PWM Signal und Nutzung der Timer + Interrupts

Kanal 6 zeigt eine Periode von 0,999716s

Die Nutzung der PWM Generatoren auf dem Chip ist jetzt geklärt. Leider ist zwar auf dem Board jetzt ein PIN falsch verdrathetet aber das kann manuell gefixed werden. Somit ist das Thema Software PWM vom Tisch.

Geklärt ist nun auch das Timing mit den Interrupts. Die Ungenauigkeit die jetzt noch vorhanden ist kann wohl fertigungsbedingt nicht anders sein. Sollte es nun notwendig sein wirklich auf viele Stellen hinter dem Komma zeitlich genau zu sein muss es eine andere Lösung oder einen Workaround geben. Bei einem Test einen Interrupt genau jede Sekunde aufzurufen kam nun heraus, eine Abweichung von ca. 0,3 bis 0,5ms wird es wohl immer geben. Da ich hier keine Uhr baue, soll das wohl gehen.

Die Erkenntnis ist allerdings, TMR0 ist wohl am wenigsten für solche genauen Dinge geeignet.

10.04.2016: PWM finaler Test; Einsatz von SW PWM nur wenn es nicht anders geht

Screenshot vom Logic Analyser

Der PIC hat 2 von der Hardware unterstütze PWM Systeme. Beide Systeme sind mit dem Timer "TMR2" gekoppelt. Das bedeutet die PWM Frequenzeinstellungen gelten für beide Systeme. Das Puls- Pausenverhältnis lässt sich individuell einstellen.

Die Tests mit den durch Software realisierten PWM haben gezeigt das die Performance doch um einiges hinter der Hardware gestützen Solution bleibt. Zum einen ist die Auflösung bei weitem nicht so hoch und auch die PWM Frequenz ist nicht mal 10% der "on Board" Lösung. Dazu kommt, die software seitige Umsetzung beansprucht CPU Ressourcen und natürlich Platz für den Code.

Der Screenshot vom Logic Analyser zeigt 4 Kanäle. Kanal 1 und 2 sind die hardwareseitige Umsetzung des PWM Signals mit 15.640kHz. Kanal 3 zeigt die softwareseitige Umsetzung mit ca. 1.4KHz und Kanal 4 zeigt den Interrupt mit ca. 32kHz. Alle PWM Signale haben fast das gleiche Puls- Pausenverhältnis, jedoch andere Frequenzen und andere Auflösung.

Bei den Test ist u.a. auch herausgekommen, auf der Platine ist für den ersten PWM Kanal der falsche Port verwendet worden. Es gibt also schon die erste Änderung obwohl die Platine noch nicht da ist ;-) Anstatt P1B (Pin 28) muss natürlich der Port CCP2 (Pin 16) verwendet werden.

08.04.2016: Software PWM Generator und Berechnung

Timerconfig: Alle 15,75uS ein Interrupt
Screenshot Logic Analyser

Der Controller bietet bereits "on Chip" PWM Funktionalität. Es kann aber passieren das man PWM Funktionalität nachbilden muss, weil entweder die Chipbelegung so nicht passt oder zu wenig native PWM Ports verfügbar sind.

Ein kleiner Ausflug was ist eigentlich PWM. Bei der Pulsbreitenmodulation wird das Signal in Impulse mit einer bestimmten Länge (Breite) eingeteilt. Dabei bestimmt die Ein- Ausschaltzeit innerhalb dieses Impulses das Puls- Pausenverhätnis. Die zeitliche Aufteilung des Impulses in einzelene Phasen bestimmt die Auflösung der Pulsbreitenmodulation.

Die softwareseitige Nachbildung kann am einfachsten mit einem Timer erfolgen. Dieser Timer erzeugt beim Überlauf einen Interrupt. In dieser Interruptroutine wird in jedem Aufruf die Position innerhalb eines Impulses inkrementiert und auf Basis des Puls- Pausenverhätnisses der Zustand des Ausgangs auf High oder Low gesetzt. Nach Ablauf eines vollständigen Impulses beginnt es wieder von vorn.

Bei diesem Verfahren sind folgende Faktoren für das Timing verantwortlich:

  • Die Frequenz des Aufrufs der Interruptserviceroutine
  • Die Enteilung der Impulsbreite (Auflösung des PWM Signals)

Ansatzweise kann dazu folgende Berechnung als Grundlage angewendet werden.

F(pwm) = F(osz) / (4 * TimerPrescaler * TimerÜberlauf * PWMAuflösung)

Deutlich wird, dass hohe Impulsfrequenzen und PWM Auflösungen bei der Software Variante die entscheidende Rolle spielen können. Es ist also wichtig zu überlegen, welche Auflösung sinnvoll und notwendig ist. Die hardwareseitige Auflösung von 1024 Schritten ist sehr komfortabel aber diese softwareseitig umzusetzen nicht zielführend. In meinen Tests mit einer einfachen LED hat sicher ergeben, eine Auflösung von 32 Phasen eines Impulses ist ausreiched für das Dimmen einer LED. Höhere Werte bringen keinen wirklichen Mehrwert. Ab einem gewissen Wert reicht auch die CPU Frequenz nicht mehr aus.

Die Softwarevariante hat aber nicht nur Nachteile. Mit wenigen Instruktionen lassen sich nun mehrere Ports einbinden, allerdings ist bei der Verwendung eines Timers die Parametrisierung identisch, bis auf das Puls- Pausenverhältnis (Duty Cycle).

Ein weiterer Aspekt ist auch, hat dei CPU ausreichend Zeit weitere Befhle abzuarbeiten? Geht man davon aus, ein befhl benötigt 4 Takzyklen dann ist in meinem Fall noch Zeit für 252 Befehle bis zum nächsten Timer Interrupt. t(cyclus) = 1/ (F(osz) / 4) = 1/ (64MHz /4) = 625ns. Anzahl der Instructionen = t(INT) / t(cyclus) = 15,75uS / 625ns = 252

Das sollte ausreichen um die CPU nicht nur mit der PWM Steuerung zu beschäftigen.

Hinweise zu Bildern:

Folgende Kanäle sind analysiert

  • 0-PWM2: (Hardware PWM Modul auf dem Controller)
  • 2-TMR0 ISR: Interrupt; Frequenz des Aufrufes
  • 1-RE0-PWM: Signal als Ergebnis des Software PWM Lösung (Auflösung 32 Steps)

Der Interrupt wird mit einer Frequenz von 27.397kHz aufgerufen. daraus resultiert eine PWM Frequenz von 1.708672kHz und einem Duty Cycle von 21% bei dieser Einstellung.

07.04.2016: MPLAB X Version 2 oder 3

Nach einigem spielen mit den Entwicklungsumgebungen muss ich sagen das ich doch wieder mit der Version 2 starten werde. Der Grund dafür sind die subjektiven Probleme mit dem "MPLAB Code Configurator".

Die Konfiguration des PIC18F46K20 hat in der V2 problemlos funktioniert. Auch wenn hier einige Register nicht so detailiert konfigurierbar sind, ist doch alles wesentliche vorhanden und wird auch korrekt unterstützt.

Die Nutzung des XC8 Compilers wird von beiden Versionen gleichzeitig supported. Es spricht also doch im Moment mehr zu V2 als für V3.

05.04.2016: Erste Ergebnisse mit dem PIC18F46K20

Realterm an USB COM5

Das LCD Display auf dem Expolrer8 Board funktioniert nach ähnlichem Prinzip wie das was ich ausgesucht hatte für das Controller Board zu verwenden. Erste test waren auch ganz erfolgreich.

Probleme machte nun aber leider die RS232. Auf dem Explorer8 Board ist ein Pegelwandler vom Typ MCS2221 verbaut. Nachdem die ichtigen Treiber unter Windows installiert sind, sollte damit ein Connect mit einem Terminalprogramm möglich sein. Wie der teufel es will, geht es bei mir nicht. Eine Anfrage im Microchip Forum brachte gestern abend die Lösung. Ein Bug im Code Configurator mit dem Environment führt dazu das es nicht korrekt konfiguriert wird. Nachdem die Umstellung auf US-English erfolgte ging es dann auch in meinem Code korrekt.

Hier der Link zum Forum wo mein Request aber auch die Lösung dokumentiert ist.

Thema Display: Das Display das ich verwenden werde ist ein DOGM163 mit SPI Interface. Kostet ca. 12€, 3 Zeilig, 16 Zeichen

31.03.2016: Explorer8 Board und PicKit3 sind gekommen

Explorer8 Demoboard und Pickit3

Nun ist auch "Just in Time" das Explorer 8 Board und PicKit3 gekommen. Mit diesem Board lassen sich einige Dinge Entwicklen und dann anschliessend auf die Zielhardware portieren.

Den Unboxing Artikel gibt es hier

Nun ist es auch wichtig auf die neuesten Tools zu setzen. Ab jetzt ist MPLAP X in der version 3.2x angesagt und auch der C-Compiler ist auf XC8 1.37 upgedated.

Der MPLAB Code Configurator ist nun auch in Version 3 verfügbar.

29.03.2016: Schaltplan und PCB sind fertig

Schematic 1/2
Schematic 2/2
PCB

Mitlerweile ist der Schaltplan fertig geworden und somit auch das PCB. Die Platine hat nun erst einmal alles drauf was für den Controller gebraucht wird und kann auch noch mit Erweiterungen umgehen. Insbesondere der SPI Bus macht jetzt Erweiterungen flexibel möglich.

Die Komponenten sind wie folgt:

  • Controller 18F46K20 (64k ROM/ 4kByte RAM, bis zu 64MHz CPU Clock)
  • ICP für das InCircuit Programming
  • AD Wandler
  • Programmierbare Referenzspannung für AD Wandler mit SPI Interface
  • SPI BUS
  • RS232
  • RTC mit SPI Interface
  • Temperatursensor on Board mit SPI Interface
  • Shunt Monitor für DC-OUT und Solar IN
  • LCD mit SPI Interface
  • 6 Kanal Instrumentenverstärker mit SPI Interface
  • EEPROM mit SPI Interface
  • 8 Kanal open Collector Treiber (auch für Induktive Last, Relais)
  • Feature Connector
  • Dual Power Supply 3,3V und 5V
  • Beide Ausgänge (DC-OUT und Akkuladung) sind PWM Controlled mit P-Kanal MOS-FET Booster bis 20A

 Am 29.03.2016 habe ich die Daten zu Bilex geschickt und die beiden Platinen sollten dann so im laufe der ersten 2 April Wochen eintreffen.

In der Zwischenzeit heisst es warten auf das Microchip Explorer 8 Demoboard und die Bauteilebestellung initieren. Auf dem Explorer Board können dann mit der CPU schon die ersten Module geschrieben werden, diese müssen dann nur noch angepasst werden für die Solar Controller Hardware.

SC4_DevelopmentBoard_Rev.0.5_schematic+PCB

14.03.2016: Die Frage des richtigen PIC ist noch nicht geklärt

Auswahlmatrix

Um diese Entscheidung treffen zu können habe ich mir die gesamte Palette an PICs von Microchip heruntergeladen und in EXCEL importiert. Wichtiges Kriterium für mich ist, der MCC muss für den PIC verfügbar sein. Ohne den MCC hat man sehr viel arbeit die Peripherie zu konfigurieren und den Programmieraufwand möchte ich mir ernsthaft ersparen.

Die Liste der MCC programmierbaren PICs ist ebenfalls im X-IDE verfügbar. Nun noch ein wenig SVERWEIS in Excel, eine Pivotauswertung mit meinen Features und siehe da, die Wahl fällt auf 2 Systeme. PIC18F26K20 und PIC18F46K20.

Der PIC18F46K20 ist bei Reichelt verfügbar, also erst einmal ein paar bestellt. mit 3,30€ ist das kein Problem. Dieses Modell hat jetzt allerdings nur 64kByte Speicher. Mal sehen ob das reichen wird.

11-13.03.2016: DM164120-5 PICkit PIC18 J-Series 64/80-Pin Demo Board

Anleitung des Demoboards
Demoboard

Das Demoboard enthält eine CPU vom Typ PIC 18F87J10. Der Prozessor ist vorprogrammiert mit einer demonstration software die LEDs in Abhängigkeit vom Potentiometer aufleuchten lassen. Geht nur leider bei mir nicht. Entweder ich habe das Programm jetzt gelöscht oder es war nicht drauf - die CPU kann ich aber auslesen. Die ist leer.

Mal überlegen ob das hier die richtige Solution ist. Ich habe jetzt eine zeitlang versucht das schematic des Boards zu finden, erfolglos. Vielleicht ist das EXPLORER8 Board doch besser geeignet. Das kann allerdings sein, dass es nicht mit dem PicKit2 zu programmieren geht. Nach einiger recherge scheint es mir doch am besten zu sein das explorer 8 Board und auch PicKit3 zu verwenden. Das Demoboard hat eine CPU drauf, welche nur bedingt zur Entwicklung meines Vorhabens hilft. Der Controller 16F87J10 ist auch nicht im Code Configurator enthalten und allein das macht es schwieriger mit der Programmierung. Also Board und PICKit3 ist bestellt.

Weiter geht es mit dem Setup der Development Umgebung. Hier hat sich in einigen Monaten doch auch etwas getan. Ich hatte bis letztes Jahr noch mit Version 2.3.x gearbeitet, nun gibt es 3.26. Dann werde ich jetzt mal ein Update machen und schauen was sich geändert hat. Bei der Gelegneheit habe ich dann auch den C-Compiler auf die aktuelle Version gebracht (Version 1.36)

Das erste Testprogramm ist jetzt fertig. Damit ist sicher, der PICKIT2 kann das Board programmieren. Die 8 LEDs an dem Port D werden jetzt einfach einmal als Lauflich angesteuert und gehen auch. Nun müsste auf dem Board noch der SPI Port und RS232 herausgeführt werden. Für RS232 wid noch ein Pegelwandler mit MAX232 gebraucht, der kann auf der Platine mit aufgebaut werden. Der SPI Port ist dann wohl etwas einfacher, das sind nur 2 Pins. Dann werden noch ein paar GIOs benötigt, u.a. für die Chip Selects beim SPI. 4 AD-Kanäle sollten sich auch noch auf einen Connector legen lassen.

Dann kann mit dem Board schon einiges gemacht werden. Leider hatte die neue Entwicklungsumgebung zum PIC18F87J10 auch keinen Code Configurator enthalten, bedeutet hier ist einiges von Hand zu tun. Leider.

Dann ist da noch das Problem mit der externen Taktung des Oszillators. Hier half dann erst einmal meine Anfrage im Microchip Forum, die Leute da sind echt klasse! Aufgrund der Daten auf dem Board konnte man mir das nicht sagen aber jemand dort hatte natürlich einen einfachen un funktionierenden Vorschlag. Einfach mit dem Frequenzzähler am OSC2 eingang messen und siehe da, 10.0 MHz. Jetzt, da die Quartsfrequenz bekannt ist, können auch die Timings für die zeitabhängigen Systemteile wie UART, PWM, .... eingestellt werden. Weiterhin habe ich jetzt auch noch einen Link zu dieversen Infomaterialien zum Demoboad, inkl. Schematic und Demo Software. Hier der Link dorthin

Das Testprogramm für den PIC 16F87J10 (LED Lauflicht)

  • newmain.cEin einfaches Programm mit dem das Demobaord grundsätzlich initialisiert wird und die LEDs der Reihe nach aufleuchten. Nur zum prüfen ob die Programmierung klappt.2.8 K

24.02.2016: Widerstandsdraht ist eingetroffen

Der im Videocast angekündigte Drath den ich bestellt hatte ist eingetroffen. 4mm sind schon ganz schön massiv. Als nächster Schritt muss nun ein Test mt entsprechendem Strom erfolgen, der Spannungsabfall muss dann mit dem Instrumentenverstärker verstärkt und mit dem AD Wandler gemessen werde.

19.02.2016: Strommessung neuer Anlauf

9.11.15: Strommessung und Aufbereitung mit Instrumentenverstärker MCP6S21/2/6/8

Blockschaltbild: Quelle Microchip Datenblatt

Das Thema Strommessung ist bisher nicht umgesetzt, soll aber in der neuen Controllerversion integriert sein. Das ist notwendig um auch die Leistung bestimmen zu können. Die Messung an für sich ist einfach, die Aufbereitung der Messung hat es vermutlich in sich. Zum einen soll der Widerstand über dem die Spannung zur Berechnung des Stroms sehr klein sein um thermische Verluste zu vermeiden und auf der anderen Seite darf die Spannung nicht zu klein sein, da sonst eine Messung mit dem ADC nicht in entsprechender Qualität erfolgt.

Was ist der Plan? Mit einem Instrumentenverstärker wird die über dem Widerstandsdrath abfallende sehr kleine Spannung entsprechend verstärkt. Hierzu eignet sich der MCP6S6 von Microchip. Er hat mehrere Multiplexeingänge und die Verstärkung lässt sich in einem hohen Bereich einstellen. Die Einstellung erfolgt per SPI Interface. Dazu kommt, der Baustein ist mit unter 3€ erschwinglich. Ein weiterer entscheidender Vorteil ist, der Baustein wird mit asymetrischer Spannung betrieben. Dadurch sind keine weiteren Bauteile notwendig und macht es einfacher. 

Der Shunt wird mit Widerstandsdrath realisiert. Hier gibt es unterschiedliche Parameter. Ich habe der Einfachheit halber jetzt einen verwendet der 1?/Meter hat. Mit einem Wert von geplanten 0,2? sollte dann eine Länge von 1000mm * 0,02? /1? = 20mm passen. Genaues werden dann die Tests ergeben. Dann müsste der theoretische Leistungsabfall, die thermische Belastung bei 100A mit 2Watt im Rahmen liegen.

Datenblatt MCP6S21/2/6/8

  • 21117B.pdfDatenblatt MCP6S21/2/6/8 von Microchip724 K

7.11.2015: SPI Communication

Quelle: Datenblatt Microchip PIC16F1829

Das Thema SPI ist ein weiterer wichtiger Grundstein für das neue Projekt. Die einzelnen Baugruppen  müssen über ein BUS System mit dem Controller verbunden werden. SPI und I²C bieten sich dazu an. Auf dem Testboard hab ich jetzt erst einmal angefangen mit dem SPI Bausteine mit einem Controller zu verbinden, generell um Erfahrungen zu sammeln. I²C hat sicherlich den Vorteil keine weiteren Adressleitungen zu benötigen und kommt somit einfach mit einer 2 Drahtleitung aus. SPI hat eine klassiche Master/ Slave Verteilung und kann auch mehere Systeme ansprechen, dann allerdings im Daisy-Chain Verfahren oder über eine direkte Chip Select Leitung. Auf dem Experimentierboard hab ich das mal mit 2 PICs 16F1829 simuliert und nach eingen anfäglichen kleinen Problemen mit dem verständnis und der Programmieung war es dann doch ganz einfach. Halt wie immer - gewusst wie.

Das Thema Leistungsmessung geht ebenfalls voran. Das Konzept ist ein def. Stück Wiederstandsdraht verwenden und die Spannung mit einem Instrumentenversärker auf einen messbaren Level anheben. Auch hier bietet sich SPI an, denn von Microchip gibt es auch etwas zu dem Thema. MCP6S26 nutzt nur eine positive Spannung (andere benötigen eine symetrische Spannung) und die Verstärkung ist per SPI einstellbar. Mal bestellen und testen, das Ding kostet so um 2,70€ bei Conrad.

4.11.2015: Jetzt geht es langsam los

Heute hab ich mal etwas an den Vorbereitungen für das neue Solar Controller Projekt begonnen, endlich mal wieder ein wenig Praxis.

Nachdem ich mir nun ein programmierbares Netzteil bestellt habe und damit jetzt auch Spannungsbereiche oberhalb von 15 Volt einstellen kann, soll es losgehen. Um jetzt etwas flexibler zu sein hab ich beschlossen einige Dinge erst einmal auf Experimentier Steckboards zu machen. Da ein Großteil der Arbeit nun am PC stattfinden wird, Programmierung und Layout etc., sollte die Steuerung auch von meinem Arbeitsplatz oder besser von überall auf der Welt erreichbar sein. Das ist jetzt auch erfolgt über einen Silex Device Server. Der stellt einen USB Port im Netzwerk zur Verfügung. Damit ist zumindest sobald der aktive USB Hub morgen da ist mein Picstart2 und mein Oszi schon mal remote nutzbar. Der Oszi (DSO) braucht einen aktiven Port um mit den 5 Volt betrieben zu werden.

Um das mit dem Prommmer schon mal zu testen hab ich mit dem PIC16F1829 ein kurzes Demosetup gemacht. Mehr als etwas Spannungsversorgung und ein Port zur Programmierung benötigt man dafür nicht und "yes it works".

Final wird ein ganz anderer Controller zum Einsatz kommen aber einzelne Softwaremodule kann man auch auf einem kleineren Controller schreiben. Die Ports etc. kann man softwareseitig entsprechend anpassen und auf den neuen Controller umbiegen. Ist halt ein Vorteil einer Hochsprache.

Wie geht es jetzt weiter? Auf dem Experimentierboard muss noch eine RS232 drauf, also mit MAX232 etc. Dann kann es schon fast losgehen. Wenn die RS232 (der USART) läuft geht es an den A/D Wandler. Hier möchte ich konkret einen Spannungsbereich von 0 bis min. 60 Volt messen können und die Ausgabe auf der RS232 soll formatiert mit 2 Stellen hinter dem Komma erfolgen. Danach das PWM Modul, danach .... lassen wir das. Eins nach dem anderen.

05.09.2015: Planung der Version 4

Hier das HighLevel Concept

Nachdem nun der Solar Controller  seit einigen Monaten ununterbrochen läuft und den Garten nachts mit Licht versorgt ist es an der Zeit eine neue Version zu erstellen. Das Bild zeigt den Blockschaltplan von der Version 2, welche im Planungsstand nur ein theoretisches Release war. Die Annahmen in der Version 2 war relativ schnell über den Haufen geworfen und somit ist es jetzt Version 3.

Die wesentlichen Bereiche aus dem Blockschaltbild sind allerdings für die Version 3 bereits gültig. Die Betsandteile sind :

  1. Die CPU
  2. Refernzspannungsaufbereitung
  3. ICP zur Programmierung
  4. SPI für Erweiterungen und Kommunikation
  5. AD Wandler
  6. PWM Generatoren 1 und 2 (Akku Ladung und DC OUT für Verbraucher) mit den zugehörigen Bosstern
  7. USARTs für RS232 und ggf. für Ethernet
  8. Netzteil auf PWM Basis für unterschiedliche Spannungen der Systeme

Als Controller (CPU) kommt ein Microchip Controller vom Typ PIC 18F87J50 zum Einsatz. Dieser hat im wesentlichen mehr ROM/RAM und deutlich mehr AD Kanäle. Der Controller ist im 80poligen TQFP Gehäuse als SMD verfügbar, womit das klassische ein- ausstecken entfällt.

Für die ersten Gehversuche bietet Microchim ein PIM Board und ein Experimentierboard an. Das PIM Board ist bereits da und das Experimentierboard ist in der Lieferung. Damit kann ein wesentlicher Teil begonnen werde, die Software Erstellung.

Das Demo Board hat folgende Spezifikationen: Teilenummer DM164120-5 - PICkit PIC18 J-Series 64/80-Pin Demo Board (https://www.microchipdirect.com/productsearch.aspx?Keywords=DM164120-5)
Das PIM Board hat folgende Spezifikationen: Teilenummer MA180021 - PIC18F87J50 FS USB PIM Demo Board (https://www.microchipdirect.com/productsearch.aspx?Keywords=MA180021)

Bei der ersten Version habe ich gute Erfahrungen mit der Projektsteuerung- und Dokumentation im Teamwork.PM (https://www.teamwork.com/) gemacht. Dieses wird mit der Version ebenfalls noch optimiert und genutzt.