Controller für astronomisch gesteuerten Solartracker mit 2 Achsen.


aktualisiert am 10.11.2019

zurück zum Hautmenue



Das Herz des Controller ist ein PIC 18F4620. Der Chip werkelt mit 20 Mhz und erledigt soweit alle Aufgaben.
Die Daten der Standortkoordinaten, Uhrzeit und Datum liefert ein kleiner GPS-Receiver der Firma uBlox.
Damit kann der Tracker Standort unabhängig eingesetzt werden. Es müssen keinerlei Parameter eingegeben werden.

Da der Microcontroller nur eine serielle Schnittstelle besitzt, muss sich der GPS-Receiver und ein angeschlossenes TFT-Display diese teilen.
Über einen Tristate-Bustreiber (IC9a und IC9b) wird nach Bedarf der GPS-Receiver (J7) oder das Display (J8) auf die serielle Schnittstelle geschaltet.
Der Timer NE555 hat für die eigentliche Funktion keine Bedeutung und dient nur zur Signalisierung serieller Daten. So wird die evtl. Fehlersuche vereinfacht.
LED 5 signalisiert GPS-Daten. Die Ansteuerung der Motoren arbeitet wechselweise über die AND-Gatter IC3 a und IC3b.

Die Motorenendstufe benötigt nur 2 Signale pro Motorachse: DIR (Laufrichtug) und ein PWM-Signal für die Geschwindigkeitsregelung.
DIR=logisch 0 vorwärts, DIR= logisch 1 rückwärts. Es können aber auch Motorendstufen angeschlossen werden die 2 Signale für die Laufrichtung benötigen. Dazu später mehr.

Die Rückmeldung der Position für die jeweilige Achse wird über die Tristate-Bustreiber IC1a und IC1b für die horizontale Achse bzw. IC1c und IC1d für die vertikale Achse.
Die Signale der Hallgeneratoren für die Positionsmeldung wird also nach Bedarf auf die jeweilige Antriebsachse geschaltet. Die aktive Ache und Laufrichtung wird durch die LED´s 6, 7 und 12, 13 signalisiert.

Jede Achse wird mit 2 Endschalter überwacht. Die horizontale, linke Position (HomePosition) duch LED 8, Max-Position durch LED 9. Die untere Position (HomePosition) durch LED 10 und vertikale Max-Position durch LED 11.
Zusätzlich sind zwei Endschalter (Schliesser) erforderlich. Dises sind die sogenannten Bremsschalter. Da der Tracker bei Stromausfall nicht weiss wo er steht,
wird er zuerst syncronisiert indem er in die Parkposition gefahren wird. Kurz vor erreichen der Position (ca. 2 Winkelgrade) werden die Endschalter betätigt und der Motor wird langsam abgebremst.
Das schont zum einen die Getriebe und Zahnräder und verhindert das der Aufbau der gesamten Konstruktion schlagartig zum stehen kommt.

Der Windmesser wird an JP5 angeschlossen und liefert eine Signal zwischen 0 bis 5 Volt, was einer Windgeschwindigkeit von 0 bis 30 m/Sek oder 0 bis 120 Km/h entspricht.
Den Grenzwert für die maximale Windgeschwindigkeit wird an R10 eingestellt. Wird der Grenzwert erreicht, fährt der Tracker in eine einstellbare Position (Schutzposition)

An J4 kann bei Bedarf ein Buzzer angeschlossen werden. Dieser signalisiert akustisch bestimmte Aktionen.
J9 ist der Anschluss für 2 Schalter. Eingang 1 schaltet die Motoren ab, Eingang 2 fährt die vertikale Achse in die waagerechte Position (um unter der Anlage auch mal Rasen mähen zu können).

J13 ist der Alarmausgang. Falls mal ein Fehler in den Antrieben auftritt, schaltet der Port zur Masse. Belastung: max. 100mA !!!

Das LAN-Modul WIZ810MJ braucht nicht bestückt werden. Es ist für spätere Erweiterungen nur schon mal im Layout aufgenommen worden. Somit spare ich mir den Entwurf und Herstellung einer weiteren Platine.
JP1, D5 und das Releis K1 sind nur für die Softwareentwicklung und Programmierung des Controller PIC18f2620 erforderlich. Die Bestückung kann entfallen.
Dafür müssen auf J10 die Brücken zwischen PIN 1 und PIN 2 sowie zwischen PIN 3 und PIN 4 mittels Jumper gesetzt werden.




Der Schaltplan:

Der Schaltplan Die Anzahl der Bauteile ist überschaubar. Es werden auch kaum speziellen Bauteile benötigt,
Die meisten Bauteile sind bei Reichelt, Conrad o.ä. zu beschaffen. Einzig der Ceramic-Resonator mit 20 Mhz ist nicht so leicht zu finden.
Aber mit etwas Glück wird er bei EBAY zum Kauf angeboten.

Einige Bauteile müssen nicht bestückt werden, da diese nur zum Test und zur Programmierung des PIC 18F4620 notwendig sind.
Auch das LAN bzw. Funk-Modul muss im Moment noch nicht bestückt werden, da die Software dieses noch nicht unterstüzt.


Den Schaltplan des Solartracker als PDF gibt es hier.

Die Stückliste Stückliste als Textdatei ist hier zu finden.



Die gedruckte Schaltung:

Platine V.1.0 Die gedruckte Schaltung. Der Controller PIC 18F4620, 2 x Tristate-Bustreiber, ein AND-Gatter und zwei Timer NE555. Dann noch ein paar Widerstände, Kondensatoren und Status-LED.
Mehr Baueteile sind nicht erforderlich. Alles auf einer Platine von 100 x 100mm

Es sollten auf der Platine alle IC´s mit Fassungen versehen werden. Falls mal ein Softwareupdate erforderlich ist lassen Sie der PIC und evtl. weitere Bauteile einfach tauschen.

Allerdings sind so einiges an Singnalleitungen für Endschalter, Signaldecoder und Motorsteuerung erforderlich. Der Aufwand hält sich aber in Grenzen.

Die Schaltung kommt mit 5 Volt Versorgungsspannung aus. Auch eine LAN-Schnittstelle ist schon vorgesehen, wird aber von der Software noch nicht unterstüzt.
Ich habe noch nicht alle Funktionen für das LAN bzw Funk-Modul ausgearbeitet und weiss auch noch nicht genau was alles damit gesteuert bzw. überwacht werden soll.
Also eine Erweiterung für spätere Zeiten.

Der gesamte Aufbau ist unkritisch. Die Widerstände können bis zu 10% abweichen. Die beiden Transistoren sind einfache NPN-Typen (z.B. BC 547) ausreichend.

Bis auf die Spannungsversorgung habe ich auf Schraubklemmen verzichtet. Ist zwar etwas flicklige Lötarbeit aber die Lötleisten lassen sich leichter abziehen bzw aufstecken.
Wer möchte kann sich diese Anschlüssen auf eine Hutschine mit Schraubklemmen führen.

Die Software wurde in C geschrieben, als Compiler habe ich MPLAB eingesetzt. Die Codegröße beträgt im Moment 21 KB, also kein kleines Projekt und so einige Funktionen stehen noch auf der Liste.



Die Software:

Die vom GPS-Receiver gelieferten Daten werden gefiltert um nur den Datensatz $GPRMC zu erhalten. Dieser Datensatz liefert
Datum, Uhrzeit und die genauen Standort-Koordinaten. Da die Standort-Koordinaten in Winkelgrade geliefert werden, müssen diese erst in Dezimalgrade
umgerechnet werden. Dann wird über eine recht komplexe Formel der Winkel zur Sonne (Höhe und Azimut) berechnet. Über einen Soll- und Istwertvergleich
wird der Tracker der Sonne passend zur Jahreszeit nachgeführt. Die Aktualisierung der Trackerposition wird alle 5 Minuten vorgenommen.
Diese Taktung ist vollkommend ausreichend um eine recht genaue Nachführung realisieren zu können.

Die Steuerung ist so ausgelegt, dass sie bei einem Y-Winkel von 8 Grad automatisch ist die Parkposition fährt.
Die Parkposition liegt bei Y 8 Grad (Azimut) und bei 60 Grad in der Horizontalen. Erreicht der Sonnenstand am nächsten Morgen einen Wert von Y 8 Grad
beginnt der Tracker wieder mit der Nachführung.

Die Nachführung erfolgt über PWM-gesteuerte Motoren mit Rückmeldung per Hallsensoren bzw. Quadratur-Encoder.
Die Auflösung der Hallsensoren von ca. 1000 Schritte pro Winkelgrad lässt eine sehr genaue Nachführung zu.

Die Achsen werden nacheinander syncronisiert, so dass nur immer ein Antrieb arbeitet.

Zudem wird in regelmässigen Abständen der Eingang für den Windsensor abgefragt. Der Sensor liefert einen Wert von 0 bis 5 Volt,
was einen Wingeschwindigkeit von 0 bis 120 Km/h oder von 0 bis 30 m/Sek entspricht. Wird eine frei einstellbare Windgrenze erreicht,
fährt der Tracker in eine frei programmierbare Schutzposition. Diese behält er solange bei, bis die Wingeschwindigkeit wieder unter den Grenzwert fällt.
Auch die Verweildauer in der Schutzposition ist von 5 bis 40 Minuten einstellbar.

Per Jumper lässt sich die Steuerung auf Einachs-Betrieb (Nur X-Achse) umstellen. Wer also die Y-Achse (Azimut) mehrmals pro Jahr von Hand nachjustiert,
kann auf die 2. Achse verzichten. Ein Antrieb, also nur die X-Achse ist natürlich vom Preis her günstiger, kleiner und damit deutlich leichter.

Um die Steuerung unterschiedlichen Antrieben und Hallsensoren anpassen zu können, ist ein Setup-Programm zum Anlernen der Motoren eingebaut.
Die beim Anlernen erechneten Daten werden in einem EEProm gespeichert und sind damit selbst bei Stromausfall geichert.

Zusätzlich gibt es einen Eingang um die Y-Achse (Azimut) auf 90 Grad zu positionieren. So kann unter den Zellen auch mal der Rasen gemäht werden.
Ein weiterer Eingang stoppt den Tracker. ACHTUNG: das ist keine NOT-AUS-Funktion sondern hält nur den Tracker an, solange
der Schalter den Eingang auf Low-Pegel hält.

Die Software ist in C geschrieben. Als Compiler setze ich MPLAB von der Firma MicroChip ein.

Etwas zur Genauigkeit: Ich habe viel Vergleiche mit anderen Softwarepaketen angestellt. Der erreichte Fehler lag bei ca. einem Winkelgrad.
Allerdings muss man berücksichtigen, dass etwa nur alle 5 Minuten der Tracker nachgeführt wird. Somit "läuft" der Tracker immer der Sonne etwas nach.
Die Abweichung ist aber zu vernachlässigen. Hinzu kommt, je wenigen Bewegungen durchgeführt werden um so mehr werden die Getriebe bzw. Zahnräder geschont.



Das Display:

Bei dem Display handelt es sich um ein programmierbares, serielles 3,5 Zoll TFT-Display mit einer Auflösung von 380 x 400 Pixel.
Es hat die genaue Bezeichnung "NX4832T035_011R (R: Resistive touchscreen)" und ist leich über EBAY zu beschaffen.

Von einem herkömmlichen TFT-Display mit SPI-Schnittstelle habe ich Abstand genommen da die Geschwindigkeit das gesamte System ausbremste.
Obwohl das NEXTION-Display seriell betrieben wird, ist es unglaublich schnell. Durch die Programmierung können Texte, Textpositionen und
auch die Farben schon vorher festgelegt und im EEprom des Display abgelegt werden.

Der Monitor Das NEXTION-Display ist eine feine Sache. Hat man sich erst einmal in die Programmierung eingearbeitet lassen die tolle Dinge damit anstellen.
Div. Funktionen werden bereit gestellt, um dem Display tolle Funktionen zu entlocken.

Die Programmierung erfolgt entweder über die serielle Schnittstelle oder mittels Micro SDCard.
Das Display hat eienen Micro SDCard Slot. Karte einstecken, Spannung anlegen und schon beginnt automatisch der Upload.

Die Software des Display kann von mir per Micro SDCard bezogen werden. Oder gleich ein programmiertes Display.
Es sollte aber klar sein, dass beim Nachbau nichts an der Programmierung geändert werden kann/darf da sonst
das Zusammensipiel zwischen Controller und Diplay nicht mehr funktioniert.


Dazu stellt NEXTION eine kostenlose Entwicklungsumgebung für Windows bereit.
Die ist meiner Meinung nach nicht perfekt aber für die meisten Anwendungen ausreichend.
Wer sich dafür interessiert kann sich bei NEXTION die Entwicklungsumgebung herunter laden.

Es sollte aber klar sein, das man nachträglich keine Änderungen an der Display-Programmierung vornehmen kann. Zum Einen wäre dazu der Quellcode erforderlich
und die Anpassung im C-Code der PIC18f4620, da sonst das Zusammenspiel von Controller und Display nicht mehr funktionieren würde.

Bei dem Display handelt es sich um ein Touchscreen-Display. Tolle Sache, da sich so auch gleich einige Setup-Eingaben realisieren lassen.



Der GPS-Receiver:

GPS Empfänger Der kleine GPS-Receiver der Firma uBlox liefert die Daten wie Uhrzeit, Datum und Standordkoordinaten.
In kurzen Abständen werden die Daten eingelesen und berechnet. Aufgrund der berechneten Daten wird der Tracker genau der Sonne nachgeführt.

Die Standard Baudrate ist 9600 Baud. Ich arbeite aber mit 57600 Baud.
Dazu muss der GPS-Empfänger mit der kostenlosen Software von uBlox umprogrammiert werden.
Und das ist mal gar nicht so einfach. Ich beschreibe die Programmierung im Kapitel "Inbetriebnahme" Schritt für Schritt.

Zur Programmierung des GPS-Empfänger wird noch ein USB-Seriell Kabel benötigt. In Verbindung mit der Software uBlox kann der Empfänger auf die
gewünschte Baudrate (57600 Baud) und die Taktrate (1 Datensatz/Sek) programmiert werden. Leider funktionieren die Treiber für den Adapter PL2303
NICHT unter Windows 10. Man benötigt also Windows 7 oder Windows XP! Eine Alternative ist ein FTDI Adapter. Hier ist die Unterstützung von Windows 10 gegeben.

Die kostenlose Software u-center der Firma uBlox kann hier herunter geladen werden.
Die genaue Bedienung für die Programmierung der Baudrate erfolgt später.



Der Windstärkenmesser:

Der Windstärkenmesser erfasst die gerade anstehende Windstärke. Bei Überschreitung eines frei einstellbaren Grenzwertes fährt der Tracker in seine Schutzposition.
Die Schutzposition sollte so eingestellt werden, das das Solarpanel möglichst wenig Windangriffsfläche bietet.

Der Windstärkenmesser Winstärkenmesser gibt es reichlich. Allerdings muss darauf geachtet werden, dass die Sensoren für 9 bis 24 Volt Arbeitsspannung haben
und einen Analogausgang von 0 bis 5 Volt haben was einer Windgeschwindigkeit von 0 bis 30 m/Sek oder 0 bis 120 Km/h entspricht.
Sensoren, die mit Reedrelais arbeiten bzw. Pulse ausgeben nicht nicht brauchbar !!

Es ist also darauf zu achten, dass es sich genau um so einen Sensor handelt.
Es gibt viel Angebote die ähnlich aussehen aber nicht diese Spazifikationen haben.
Die Sensoren werden mit Analog (0 bis 5 Volt)- und Stromausgang (4 bis 20 mA) angeboten und haben 4 Anschlüssdrähte.
Also genau darauf achten was gekauft wird.

Der hier gezeigte Sensor arbeitet einwandfrei und dreht sich schon bei der kleinsten Luftbewegung.
Die gelieferten Messwerte sind ausreichend genau um ihn bei einem Solartracker einsetzen zu können.


Der Windsensor wird an JP1 angeschlossen. Es dürfen die Anschlüsse auf keinen Fall vertauscht werden, da der Sonsor mit 24 Volt Versorgungsspannung arbeitet.
Des Messeingang arbeitet mit 0 bis 5 Volt.

Wird eine bestimmte Wingeschwindigkeit erreicht, fährt der Tracker in seine vorgegebene Schutzposition.
Die Schuztposition sollte so gewählt werden, dass das Solarpanels möglicht geringe Windangriffsfläche bietet.
Allerdings ist das nicht immer einfach, da man ja nicht weiss aus welcher Richtung der Wind bläst.
Zwar kann man das Panel sehr flach positionieren aber nicht so, dass es wie ein Flugzeugflügel wirkt.

Ich habe gerade einen Windrichtungsanzeiger in Entwicklung, der tatsächlich von 0 bis 360 Grad, also endlos drehen kann.
Sobald dieser fertig ist, kann die Software den Tracker immer so drehen, das das Solar Panel von der Seite angeblasen wird
und somit kaum Windangriffsfläche bietet.



Die Motoren Endstufe:

Die Treiberkarte der Motoren von der Firma Cytron steuert die Motoren an.
Es handelt sich um einen Motortreiber mit bidirektionaler Steuerung für 2 Gleichstrom-Bürstenmotoren.
Die Ansteuerung erfolgt über nur zwei Signalleitungen. Richtungssignal low=links drehen, high= rechts drehen.
Die Drehzahl wird per PWM (Pulsweiten Modulation) erreicht.
Ich habe versucht den Treiber an seine Grenze zu bringen und eine Dauerlast von 10 Ampere über 30 Minuten anzulegen.
Kein Problem. Die Endstufe wurde noch nicht einmal handwarm.

Der Motortreiber
Der Motortreiber mit bidirektionaler Steuerung für 2 Gleichstrom-Bürstenmotoren.
Das Board liefert maximal 10 A Dauerstrom pro Kanal und und 30 A Spitze (10 Sekunden). Motorspannungsbereich: 5V - 30V
Also vollkommen ausreichend für den Antrieb, da die Motoren nur jeweils max. 2,5 Ampere aufnehmen.
Bei einem Preis von knapp 20 Euro lohnt es sich nicht eine eigene Endstufe zu entwickeln.

Ich habe die Endstufe mit den Originalmotoren vom Antrieb über 6 Monate im Dauereinsatz getestet
und kann nur meine Empfehlung aussprechen.


Die Treiberkarte ist z.B. beim Roboter Shop zu beziehen.
Wer spezielle Motoren einsetzt kann sich natürlich auf dieser Seite die geeigneten Treiberkarten aussuchen.



Die Stromaufnahme:
Um einen möglichst hohen Solarertrag zu erreichen, sollte die gesamte Steuerung möglichst wenig Strom verbrauchen.
Dementsprechend habe ich die Steuerung so ausgelegt, das nur wenige Milliampere benötigt werden. Mit 120mA Ruhestrom braucht die Steuerung sehr wenig Energie.

Die Motoren "fressen" allerdings zwischen 0,3 und 2,5 Ampere Strom. Dieses ist natürlich abhängig von der Last die der Antrieb bewegen muss.


-------