Immer leuchten, überall leuchten. Teil 2


Die aktuelle Version der Prozessormodulkarte

Der zweite Teil des Materials über das selbstgemachte Steuerungssystem für die Fahrradbeleuchtung ist eingetroffen. Ich möchte Sie daran erinnern, dass ich beschlossen habe, ein RS-485-Netzwerk aufzubauen, in dem sich Steuerungs- und Ausführungsgeräte befinden. Der Master ist ein Computer, auf dem das Programm ausgeführt wird, das die Logik implementiert. Bevor ich mit der Beschreibung der Logik des Systems fortfahre, werde ich über Verbesserungen und Paradigmenwechsel in Bezug auf Hardware sprechen, die sich aus der Diskussion und dem Testen von Prototypen aus dem ersten Teil ergeben haben .

Dopilirovanie

Zunächst wurde beschlossen, die Drüsen in Analogie zu Arduino und einer Reihe anderer Projekte modular zu gestalten. Ich dachte mir, dass mein Hauptmodul (Prozessormodul) mehr Komponenten als Funktionsmodule enthält, also wird es das Motherboard sein. Und "Schilde" werden eingefügt. In Bezug auf die Schaltung wurden die folgenden Änderungen vorgenommen:

1) Ein Leistungsstabilisator (AMS1117-5.0) wurde hinzugefügt.
2) Die Stromverdrahtung des Mikrocontrollers wird geändert.
3) Die Platine des Hauptmoduls ist unter Berücksichtigung der industriellen Fertigung geschieden, die zweite Kupferschicht wird jedoch auf ein Minimum reduziert - Sie können zu Hause eine einschichtige Platine herstellen und Jumper setzen.
4) Endpunkt-Jumper hinzugefügt, um die Leitung auf dem letzten Gerät zu beenden.
5) RST Lock-Jumper hinzugefügt, um das Zurücksetzen des Mikrocontrollers zu blockieren.
6) Ähnlich wie in Abschnitt 3 sind die Tochterplatinen des Encoders und des LED-Streifentreibers geschieden.
7) Ich warte auf die erste Probebestellung von Leiterplatten, während nur die Hauptmodule (ITEAD Studio).


Die Tochterplatine des LED-Streifentreibers

Vanity um RS-485

Nun wende ich mich an den Netzwerkmaster. In Bezug auf Eisen ist dort alles einfach - zumindest dachte ich das. Ich nahm einen USB-UART-Adapter, schloss eine kleine Platine mit MAX485 und mehreren Widerständen an und begann zu arbeiten. Und er trat auf einen ausgezeichneten Rechen, der ziemlich dokumentiert war, aber für einen Anfänger war es völlig nicht offensichtlich.

Der MAX485 muss zwischen Empfangen (niedrig an den Pins ~ RE und DE) und Senden (hoch) umgeschaltet werden. Anhand einer einfachen Logik habe ich den DTR-Ausgang des Konverters (auf CP2102) verwendet, um den Modus zu steuern und ihn programmgesteuert zu ziehen. Und bekam eine Schande. Das System funktionierte irgendwie nur mit unannehmbar großen Verzögerungen zwischen Empfang und Übertragung. Und das alles, weil der DTR langsam schaltet. Wie langsam hatte ich nichts zu messen, also gebe ich nur einen Link zu einer vernünftigeren Rechenstudie mit einem Oszilloskop.

Aus dem gleichen Material habe ich Folgendes verstanden: Die Verwendung von FT232 ist am wenigsten schmerzhaft, da die Schlussfolgerung gezogen wird, dass der Chip, wenn er standardmäßig konfiguriert ist, nur zum Umschalten des RS-485-Modus ausgelegt ist. Einfach ausgedrückt, wird beim Senden über UART ein hoher Pegel angezeigt. Also wurde der chinesische Klon Arduino Nano aus den Behältern extrahiert, ~ RST ist mit Masse kurzgeschlossen, der Draht ist mit dem 13. Bein von FT232 verlötet und das Ganze ist mit dem MAX485 verbunden. Es funktioniert wie eine Uhr. In der "Kampf" -Version des Systems wird ein solches Design natürlich nicht verwendet - die chinesische Industrie freut sich, ähnliche vorgefertigte Boards anbieten zu können.

Systemlogik

Zum Schluss, wie der gesamte Prozess aus Sicht des Masters aussieht. Es funktioniert mit Geräteobjekten, die gesteuert oder ausgeführt werden können. Manager sind in reale ("Eisen"), virtuelle und Timer unterteilt. Executive kann nur real sein.

Virtuelle Steuergeräte werden benötigt, wenn eine komplexere Systemverwaltung implementiert wird, insbesondere wenn eine Webschnittstelle daran angehängt wird. Sie sind auch nützlich für die Integration in etwas, das ich mir noch nicht ausgedacht habe. Ja, hier muss ich wahrscheinlich sagen, dass sich ein solches „Gerät“ im Allgemeinen im System befindet.

Ein Gerät ist ein Objekt der Geräteklasse. Die Mindestmenge an Attributen ist der Name, der Typ und das Verwendungsflag. Abhängig vom Typ können außerdem die Adresse auf dem Bus, der Name des Slave-Geräts, die Priorität der Steuerung, die Anfangswerte der Register und einige andere Attribute hinzugefügt werden. Die Hauptmethoden der Klasse beziehen sich auf die Arbeit mit realen Geräten - das Lesen und Schreiben von Registern.

Und jetzt, nachdem wir uns mehr oder weniger für die Programmstruktur des Systems entschieden haben, können wir mit der Implementierung beginnen. Derzeit gibt es Folgendes:
1) Comm485-Modul mit einer Beschreibung der Conn-Klasse. Klassenmethoden öffnen und schließen eine Verbindung, senden und empfangen ein Paket und überprüfen eine Prüfsumme.
2) Das Device485-Modul enthält die oben beschriebene Device-Klasse.
3) das Hauptsoftwaremodul.


Encoder Daughter Board

Tatsächlich sind im Hauptmodul zwei Dinge implementiert. Die erste besteht darin, die erforderlichen Objekte der Geräteklasse gemäß der Konfigurationsdatei zu erstellen. Die zweite ist direkt die Logik des Systems.

Dabei

funktioniert derzeit Folgendes:

1) Zusammenstellung einer Liste der beteiligten Aktuatoren.
2) Für jeden Künstler wird eine Liste der beteiligten Steuergeräte erstellt.
3) Die Werte der Register des Steuergeräts mit der höchsten Priorität werden in den Registern des Stellglieds und der Steuerung aufgezeichnet, die eine niedrigere Priorität haben.

Nehmen wir an, wir haben einen Encoder (Eisen) mit niedriger Priorität und ein virtuelles Steuergerät mit hoher Priorität. Im Standby-Modus ist das virtuelle Gerät deaktiviert. Wenn Sie das Licht einstellen müssen, ohne den fünften Punkt vom Sofa abzuheben, wird ein virtuelles Gerät (für kurze Zeit) aktiviert, um dem Interpreten und dem Encoder neue Parameter zu geben.

Nach einer kleinen Änderung der Software ist der Hauptmodus jedoch wahrscheinlich der folgende: Es gibt zwei Steuergeräte mit derselben Priorität. Beim Ändern der Register eines von ihnen werden die Werte in die Register des Executors und des anderen Managers geschrieben, der keine Änderungen vorgenommen hat.

Eigentlich vorerst. Das Projekt ist auf Github verfügbar.Im Host-Ordner können Sie sehen, wie Python-Code gekühlt wird. Es gibt zwei Module (Comm485, Device485), das Hauptprogramm (Host) und den Ordner cfg, in dem sich die Konfigurationsdateien befinden: Einrichten einer UART-Verbindung und eine Liste der Geräte.

Die Fortsetzung wird sicherlich folgen.

PS Als Opfer der Migration aus Habr sind die Möglichkeiten begrenzt.

Source: https://habr.com/ru/post/de381907/


All Articles