Steuerung von Geräten über den USB-Anschluss eines Computers am ATmega8. UniCOM – Geräteverwaltung über den COM-Port des Computers

Viele von uns würden wahrscheinlich gerne elektrische Schaltkreise über einen Computer steuern. Und was? Es wäre toll, wenn. Stellen Sie sich vor, ein Freund ruft Sie an und sagt: „Ich bin in 20 Minuten da“, dann vergehen 20 Minuten, es klingelt an der Tür, aber Sie möchten nicht vom Computer aufstehen, die Türen öffnen usw. Stellen Sie sich eine andere Situation vor: Es klingelt an der Tür, auf Ihrem Monitor erscheint eine Meldung wie „Sie haben Gäste“, Sie drücken eine Taste am Computer – das Magnetschloss an der Tür öffnet sich und Sie schreien das ganze Haus an: „Komm rein, ” oder Sie müssen den Wasserkocher, das Licht oder etwas anderes einschalten. Heutzutage ist dies keine Fantasie mehr, sondern durchaus realistisch, nur aufgrund der schlechten Wirtschaftslage kann sich nicht jeder auch nur das einfachste „intelligente Haus“ leisten, aber wenn Sie Lust und direkte Hände haben, können Sie Stromkreise problemlos über den PC steuern .

Heutzutage wissen viele Leute, wie man programmiert; sie können ein Programm für einen Computer schreiben, der es steuern kann Externe Geräte, aber wie schließt man denselben Wasserkocher an einen Computer an? Nun ja, das geht zum Beispiel über einen LPT-Anschluss, aber den sieht man kaum noch irgendwo, was bleibt dann übrig? USB!!!

Lassen Sie uns ein Gerät herstellen, das an USB angeschlossen wird und in der Lage ist, Stromkreise zu steuern (z. B. das Licht einzuschalten), auf das Schließen von Tasten zu reagieren (z. B. eine Türklingel) und noch etwas anderes.

Also, woraus machen wir es? Wer sich für dieses Thema interessiert, hat wahrscheinlich schon vom Ke-USB24A-Modul gehört.

Beschreibung:

Das Ke-USB24A-Modul dient zur Verbindung externer digitaler und analoger Geräte, Sensoren und Aktoren mit einem Computer über einen USB-Bus. Als optional (virtuell) definiert COM-Port. Das Modul verfügt über 24 diskrete Ein-/Ausgangsleitungen (entweder logisch 0 oder logisch 1) mit der Möglichkeit, die Richtung der Datenübertragung (Eingabe/Ausgabe) zu konfigurieren, und einen integrierten 10-Bit-ADC. Zur Steuerung des Moduls steht ein Satz Textsteuerbefehle (KE-Befehle) zur Verfügung.

Unterscheidungsmerkmale:

  • Schnittstellenmodul für USB-Schnittstelle
  • Wird vom Windows/Linux-Betriebssystem als virtueller COM-Port definiert
  • erfordert keine zusätzlichen Schaltungselemente, ist sofort einsatzbereit
  • 24 diskrete Ein-/Ausgabeleitungen mit der Möglichkeit, die Richtung der Datenübertragung (Eingabe/Ausgabe) unabhängig zu konfigurieren und Einstellungen im nichtflüchtigen Speicher des Moduls zu speichern
  • eingebauter 10-Bit-ADC mit garantierter Abtastfrequenz bis zu 400 Hz.
  • Dynamikbereich der Eingangsspannung Analogsignal für ADC von 0 bis 5 V.
  • eine Reihe vorgefertigter High-Level-Textsteuerungsbefehle (KE-Befehle)
  • praktischer Formfaktor in Form eines Moduls mit DIP-Block und USB-B-Anschluss
  • Möglichkeit der Stromversorgung sowohl über den USB-Bus als auch über eine externe Stromquelle (der Modus wird durch einen Jumper auf der Platine ausgewählt)
  • Möglichkeit, Benutzerdaten im nichtflüchtigen Speicher des Moduls zu speichern (bis zu 32 Byte)
  • Möglichkeit, den String-Deskriptor zu ändern USB-Geräte
  • Jedes Modul hat ein Unikat Seriennummer programmgesteuert zugänglich
  • Unterstützung für Windows 2000, 2003, XP 32/64 Bit, Vista 32/64 Bit und Windows 7 32/64 Bit
  • Betriebssystem Linux-Unterstützung

Es scheint, als ob das genau das ist, was wir brauchen, ABER... der Preis für dieses Wunder beginnt bei 40 $. Wahrscheinlich haben Sie bereits die Lust am Kauf verloren.

Lassen Sie uns ein solches Modul besser selbst zusammenbauen, damit es auch für einen hungrigen Studenten zugänglich ist!

Obligatorische Kriterien: niedrige Kosten und einfache Verfügbarkeit der Komponenten, einfache Montage.

Nehmen wir als Mikrocontroller den weit verbreiteten ATmega8 (ohne das L am Ende). Die Eigenschaften unseres Moduls werden wie folgt sein:

  • Über USB mit dem PC verbinden.
  • wird vom Windows-Betriebssystem als USB-HID-Gerät erkannt, kein Treiber erforderlich.
  • Sofort startklar.
  • 7 Ausgangsleitungen mit logischem Zustand (aktiv/inaktiv).
  • 2 Ausgangsleitungen mit stufenloser Spannungsregelung von Minimum bis Maximum. Nur ist dies kein DAC (Digital-Analog-Wandler), sondern PWM ( Pulsweitenmodulation). Aber mit Hilfe eines Filters können Sie ihn ganz einfach in einen DAC verwandeln.
  • 7 Eingangsleitungen mit logischem Zustand (aktiv / inaktiv).
  • 1 ADC (Analog-Digital-Wandler) mit der Möglichkeit, eine externe Referenzspannungsquelle (RP) anzuschließen.
  • Möglichkeit zum Befüllen neue Firmware direkt über USB.

Warum habe ich mich für HID und nicht für einen virtuellen COM-Port (CDC) entschieden? Erstens werden keine Treiber benötigt, zweitens belastet HID den Mikrocontroller um ein Vielfaches weniger als CDC, da Daten nicht ständig angefordert werden, sondern nur dann, wenn der Host (Computer) sie benötigt, und im Allgemeinen ist der COM-Port heutzutage bereits im Sterben Es gibt praktisch keine Hardware-COM-Ports, es bleiben nur virtuelle übrig. Logische Ausgangsleitungen sind so konzipiert, dass sie nur zwei Zustände steuern – ein oder aus. Im ausgeschalteten Zustand liegt der Ausgang (Mikrocontroller-Zweig) bei 0 V, im eingeschalteten Zustand bei 5 V. Hier können Sie einfach eine LED anschließen und sie von einem PC aus steuern, oder Sie können eine Verbindung herstellen ein Relais (über einen Transistor) und steuern eine stärkere Last (Beleuchtung usw.). Ausgangsleitungen mit Spannungsregelung (PWM-Ausgang) ermöglichen eine stufenlose Änderung der Spannung am Mikrocontroller-Zweig von 0 V auf +5 V in Schritten von 5/1024 V. Boolesche Zustandseingabeleitungen dienen zur Überwachung des Zustands von Schaltflächen, Tasten usw. Wenn die Leitung mit Masse (Gehäuse, GND) kurzgeschlossen ist, ist ihr Zustand = 0, wenn nicht geschlossen - 1. Mit dem ADC können Sie Spannung messen, Sie können hier ein Potentiometer, einen analogen Temperatursensor oder etwas anderes anschließen, nur die Spannung , auf diesem Bein sollte die Spannungsernährung nicht überschritten werden. Als Referenzspannungsquelle für den ADC kann sowohl ein externer ION als auch die Modulversorgungsspannung verwendet werden. Damit Sie beim Flashen den Mikrocontroller nicht an den Programmierer anschließen müssen, ermöglichen wir das direkte Hochladen der Firmware über USB, ohne einen externen Programmierer zu verwenden.

Gerätediagramm:

Wie Sie sehen können, ist das Diagramm recht einfach, nur habe ich die Anschlüsse im Diagramm nicht in der richtigen Reihenfolge angebracht. Dies liegt daran, dass der ATmega8 Beine für jeden Port hat. Aus irgendeinem Grund sind diese verstreut angeordnet, aber auf der Platine selbst sieht es so aus Schön.

Leiterplatte:

Nun, das Ergebnis ist folgendes:

Lassen Sie uns nun herausfinden, was wir wo verbinden.

  1. USB-Anschluss. Ich denke, jeder kennt ihn.
  2. Kraftmesser.
  3. Logikeingang 1.
  4. Logikeingang 2.
  5. Logikeingang 3.
  6. Logikeingang 4.
  7. Logikeingang 5.
  8. Logikeingang 6.
  9. Logikeingang 7.
  10. ADC-Eingang.
  11. Eingang zum Anschluss von ION.
  12. Dieser Pin ist mit der Stromversorgung des Geräts verbunden. Schließen Sie die Pins 12 und 13 mit einer Brücke, damit die ION-Spannung der Versorgungsspannung entspricht.
  13. Logikausgang 1.
  14. Logikausgang 2.
  15. PWM-Ausgang 1.
  16. PWM-Ausgang 2.
  17. Logikausgang 3.
  18. Logikausgang 4.
  19. Logikausgang 5.
  20. Logikausgang 6.
  21. Logikausgang 7.

Was ist GND?

Sogar ein unerfahrener Funkamateur weiß, was GND ist, aber für manche Menschen scheinen es gruselige Buchstaben zu sein. GND ist sozusagen der gemeinsame Kontakt. Man nennt es auch Erde und Masse. Der Draht ist normalerweise schwarz (manchmal weiß oder etwas anderes). GND ist auch mit dem Metallgehäuse des Geräts verbunden. Auf der Platine wird in den meisten Fällen der gesamte freie Raum durch GND in Form großer Polygone ausgefüllt. Unser Modul verfügt über Polygone in Form eines Netzes, diese sind auch mit dem Gehäuse des USB-Steckers verbunden.

Mikrocontroller-Programm.

Da ich Ihnen in dem Artikel erklären möchte, wie Sie Schaltkreise über USB mit einem vorgefertigten Modul steuern, werde ich nicht erklären, wie das Mikrocontroller-Programm funktioniert; Sie können den Quellcode unten herunterladen und sehen, es gibt dort viele Kommentare . Hier werde ich einfach über Gerätekennungen schreiben.

In den Quellen gibt es also eine Datei usbconfig.h, es hat Linien

#define USB_CFG_VENDOR_ID 0x10, 0x00

#define USB_CFG_DEVICE_ID 0x01, 0x00

#define USB_CFG_VENDOR_NAME „k“, „i“, „b“, „e“, „r“, „m“, „a“, „s“, „t“, „e“, „r“,.“ ,„p“, „l“, „.“, „u“, „a“

#define USB_CFG_VENDOR_NAME_LEN 17

#define USB_CFG_DEVICE_NAME „U“, „S“, „B“, „-“, „C“, „o“, „n“, „t“, „r“, „o“, „l“

#define USB_CFG_DEVICE_NAME_LEN 11

Die ersten beiden Zeilen sind die Geräte-ID und die Produkt-ID, jedes USB-Gerät hat diese, nur wird in dieser Datei zuerst das Low-Byte angezeigt, dann das High-Byte, in einem Computerprogramm ist es umgekehrt. Als nächstes folgt der Name des Herstellers (Vendor) und der Name des Gerätes, außerdem wird die Länge der Zeile in Bytes angegeben. Das PC-Programm sucht zunächst anhand der ID nach Geräten und sucht dann unter den gefundenen Geräten nach dem Namen.

Geräte-Firmware.

Suchen Sie in den heruntergeladenen Dateien im Ordner MCUusb_bootloader die Datei main.hex- Dies ist ein USB-Bootloader, er muss mit einem externen Programmierer in den MK geladen werden. Nach dem Gießen müssen Sie außerdem die Sicherungen im Programmierfenster richtig einstellen STK500 sollte so aussehen:

Wenn Sie ein anderes Programm verwenden, können Sie einfach die Werte der Sicherungsbits HIGH und LOW eingeben (siehe Screenshot).

Nach erfolgreicher Firmware können Sie versuchen, das Gerät über einen Bootloader zu flashen. Wie funktioniert er? Wenn Sie den MK einschalten (einfach beim Anlegen der Stromversorgung oder nach einem Reset), startet der Bootloader sofort, er prüft den Zustand, wenn er wahr ist, startet die Initialisierung des Bootloaders (der Computer findet das Gerät). Als Bedingung haben wir „Logischer Eingang 1 = 0“, das heißt, um den Bootloader zu starten, müssen Sie den logischen Eingang 1 mit GND verbinden und die RESET-Taste am Gerät drücken; ein neues HID-Gerät sollte im Gerät erscheinen Manager, der auch keine Treiber benötigt:

Ok, jetzt führen wir die Datei im Ordner MCUUSB_Controldefault aus boot.bat, sollte ein Fenster mit herumlaufenden Zahlen auftauchen:

Wenn sich das Fenster sofort schließt, haben Sie etwas falsch gemacht. Wenn alles in Ordnung ist, benötigen Sie für dieses Gerät keinen externen Programmierer mehr. Sie können nun den Logikeingang 1 von GND trennen. Und für alle Fälle drücken Sie RESET. Das HID-Gerät sollte auch im Gerätemanager erscheinen (der Computer meldet, dass ein neues gefunden wurde). Stellen Sie sicher, dass dieses bestimmte Gerät im Manager angezeigt wird.

Gastgeber- Damit wird das Gerät gesteuert, in unserem Fall ein Computer. Ich werde die Steuerung des Geräts von einem PC aus genauer beschreiben.

Für Delphi-Programmierer wird das Schreiben eines HID-Steuerungsprogramms kein Problem darstellen, da es im Internet viele Informationen gibt. Aber für C++ Builder-Programmierer ist nicht alles so schön, aber wie sich herausstellte, ist nicht alles so schlecht. Ich habe die Bibliothek hidlibrary.h im Internet gefunden und mit ihrer Hilfe werden wir mit dem HID-Gerät arbeiten.

Laden Sie die Quellen herunter und führen Sie sie aus USB Control.cbproj(C++Builder 2010).

Im Ordner hidlibrary.h Ganz oben ist eine Linie

Erstellen wir ein Formular. Das Formular verfügt über eine CheckListBox zur Steuerung logischer Ausgänge, 2 ScrollBars zur Steuerung von PWM-Kanälen, eine ListBox zur Anzeige logischer Eingänge, ein Label zur Anzeige des ADC-Status und einen Timer. Es sollte so aussehen:

Benennen Sie die ScrollBars in ScrollBar_PWM1 und ScrollBar_PWM2 um und legen Sie in ihren Eigenschaften Max=1023 fest.

Lassen Sie uns eine Struktur erstellen

#pragma pack (push, 1)

struct status_t(

unsigned char logical_outputs;

unsigned char logical_inputs;

unsigned char ADC_DATA;

unsigned short int PWM1;

unsigned short int PWM2;

struct status_t DeviceStatus;

#pragma pack (pop)

Das Paket #pragma wird benötigt, um zu verhindern, dass der Compiler die Struktur ausrichtet. IN logische_Ausgaben Der Zustand aller logischen Ausgänge wird im bitweisen Modus gespeichert, d. h. das erste Bit speichert den Zustand des ersten Ausgangs, das zweite den Zustand des zweiten usw. bis zum siebten. Ebenfalls logische_Eingaben speichert den Zustand logischer Eingänge. IN ADC_DATA Der ADC-Zustand wird gespeichert, der Minimalwert ist 0, der Maximalwert ist 255. V PWM1 Der Zustand des ersten PWM-Ausgangs wird gespeichert (sanfte Spannungsregelung), in PWM2- Zustand der Sekunde, Minimalwert 0, Maximalwert - 1023.

Im PC-Programm müssen Sie diese Struktur vom Mikrocontroller auslesen und anschließend die empfangenen Daten verarbeiten. Um neue Ausgabewerte festzulegen, müssen Sie zunächst neue Werte in die Struktur schreiben und dann die geänderte Struktur an den Mikrocontroller senden. Beim Festlegen neuer Werte müssen Sie nur das erste, das vierte und das fünfte Element bearbeiten; die Bearbeitung der restlichen beiden hat keine Auswirkung.

HIDLibrary versteckt;

Und fügen Sie die Funktion connect() hinzu.

Jetzt können Daten von einem HID-Gerät mit der Funktion hid.ReceiveData angefordert werden, wobei ein Zeiger auf die Struktur als Parameter angegeben wird. Vor der Anfrage müssen Sie lediglich prüfen, ob das Gerät verbunden ist:

Fügen wir nun unser Programm hinzu (oder laden Sie einfach die Quellen herunter, dort ist alles bereit).

Fügen Sie diese Zeilen irgendwo im Code hinzu (vorzugsweise direkt nach der Struktur):

Geben Sie in den Timer-Eigenschaften Enabled = True, Interval = 500 an. Doppelklicken Sie darauf und schreiben Sie in den Handler

if (!connect()) return; // Beenden, wenn das Gerät nicht verbunden ist

hid.ReceiveData(&DeviceStatus); // Daten vom Gerät lesen

für (char i = 0; i< 7; i++)

CheckListBox_LogOuts->Checked[i] = CheckBit(DeviceStatus.logical_outputs, i);

ScrollBar_PWM1->Position = DeviceStatus.PWM1;

ScrollBar_PWM2->Position = DeviceStatus.PWM2;

ListBox_LogInputs->Clear();

für (char i = 0; i< 7; i++)

ListBox_LogInputs->Items->Add(" Logische Eingabe "+IntToStr(i+1)+" = "+BoolToStr(CheckBit(DeviceStatus.logical_inputs, i)));

Label_ADC->Caption = DeviceStatus.ADC_DATA;

Ich denke, hier ist alles klar und bedarf keiner Erklärung.

Doppelklicken Sie auf CheckListBox und schreiben Sie den Handler ein

Das ist alles, Sie können kompilieren!

Probefahrt.

Also, alles ist fertig: Das Gerät ist zusammengebaut, der Mikrocontroller ist geflasht, ein Programm für den Computer ist erstellt, Sie können es testen.

Schließen Sie das Gerät an den PC an und starten Sie das Programm. Links in der Listbox wird der Status aller logischen Eingänge angezeigt; wenn beispielsweise Logikeingang 1 nicht mit GND kurzgeschlossen ist, wird „Log. Eingang 1 = -1″, falls angeschlossen, dann „Log. Eingang 1 = 0″. Hier ist der Bildschirm:

Das Ergebnis der ADC-Konvertierung wird unter dieser Listbox angezeigt. Schließen Sie den ADC-Eingang an Minus, dann ist das Ergebnis 0, bei + Leistung ist das Ergebnis 255. Sie können hier ein Potentiometer oder etwas anderes anschließen. Die Spannung am ADC-Pin kann mit der Formel berechnet werden: Spannung_ION/255*ADC_Ergebnis.

Schließen Sie nun eine kleine Last an Logikausgang 1 an (LED oder einfach ein Voltmeter). Aktivieren Sie das Kontrollkästchen neben „Logischer Ausgang 1“ – die LED leuchtet auf.

Schließen Sie ein Voltmeter an den ersten PWM-Kanal an, drehen Sie den Schieberegler – die Spannung ändert sich.

Fertigstellung.

Jetzt können Sie mit diesem Modul Beleuchtung oder andere Elektrogeräte steuern. An die logischen Eingänge können Sie einen Klingeltaster oder einen anderen Schlüssel anschließen. Sie können einen analogen Feuchtigkeitssensor, einen Temperatursensor oder einen Fotowiderstand an den ADC-Eingang anschließen (Sie wissen, ob es draußen Tag oder Nacht ist).



Was halten Sie von diesem Artikel?

Der Autor hat ein Programm und ein Gerät zur Steuerung verschiedener Elektro- und Funkgeräte mithilfe eines Computers entwickelt. Das Gerät wird an einen der COM-Ports angeschlossen und die Geräte können sowohl über Bildschirmtasten als auch über externe Sensoren gesteuert werden.

Das Gerätediagramm ist in dargestellt Abb.1. Seine Basis ist der 74HC595-Chip, ein 8-Bit-Schieberegister mit seriellem Eingang sowie seriellen und parallelen Informationsausgängen. Die parallele Ausgabe erfolgt über ein Pufferregister mit Ausgängen, die drei Zustände haben. Das Informationssignal wird dem SER-Eingang (Pin 14), das Schreibsignal dem SCK-Eingang (Pin 11) und das Ausgangssignal dem RSK-Eingang (Pin 12) zugeführt. Der DA1-Chip enthält einen 5-V-Spannungsregler zur Versorgung des DD1-Registers.

Abbildung 1. Gerätediagramm

Das Gerät wird an einen der COM-Ports des Computers angeschlossen. Informationssignale kommen an Pin 7 der XS1-Buchse an, Informationsaufzeichnungssignale gehen an Pin 4 und Informationsausgangssignale gehen an Pin 3. COM-Port-Signale haben gemäß dem RS-232-Standard Pegel von etwa -12 V (log. 1) und etwa +12 V (log.0). Diese Pegel werden mit den Eingangspegeln des Registers DD1 über Widerstände R2, R3, R5 und Zenerdioden VD1-VD3 mit einer Stabilisierungsspannung von 5,1 V gepaart.

An den Ausgängen Q0-Q7 des Registers DD1 werden Steuersignale für externe Geräte generiert. Der hohe Pegel entspricht der Versorgungsspannung der Mikroschaltung (ca. 5 V), der niedrige Pegel beträgt weniger als 0,4 V. Diese Signale sind statisch und werden aktualisiert, wenn am RSK-Eingang (Pin 12) des DD1 ein hoher Pegel ankommt registrieren. Die LEDs HL1-HL8 dienen zur Überwachung des Gerätebetriebs.

Die Steuerung des Geräts erfolgt über das vom Autor entwickelte UmiCOM-Programm. Aussehen Das Hauptprogrammfenster wird angezeigt Abb.2.

Abbildung 2. Aussehen des UniCOM-Programms

Nach dem Start sollten Sie einen freien COM-Port und eine Ausgangsschaltgeschwindigkeit auswählen. In den Tabellenzeilen wird der Zustand jedes Geräteausgangs eingetragen (High-Pegel – 1, Low-Pegel – 0 oder leer). Das Programm „Sortieren“ durch die Tabellenspalten im Arbeitszyklus setzt die entsprechenden logischen Pegel an den Geräteausgängen. Die in die Tabelle eingegebenen Informationen werden beim Beenden des Programms automatisch gespeichert und beim nächsten Start wieder geladen. Aus Gründen der Übersichtlichkeit sind auf der linken Seite des Programmfensters die Anzahl der Ausgänge hervorgehoben, an denen der hohe Pegel eingestellt ist.

Geräte können auch über externe Kontaktsensoren gesteuert werden, die an die Eingänge 1-3 und die +5-V-Leitung angeschlossen werden. Sie müssen funktionieren, um Kontakte zu schließen oder zu öffnen. Ein Beispiel für einen Sensoranschlussplan ist in dargestellt Abb. 3.

Abbildung 3. Kontaktsensoren anschließen

Wenn Sie den Softkey „Input Setup“ drücken, öffnet sich das Fenster „Input and Output Assignment“ ( Abb.4.), wobei Eingänge ausgewählt werden, die den Zustand der Ausgänge ändern. Sie können die Bedienung der Eingänge simulieren, indem Sie die Bildschirmtasten „1“, „2“, „3“ des Hauptprogrammfensters drücken. In Fällen, in denen Geräte nicht mit gesteuert werden können logische Ebenen, sollten Sie ein Relais verwenden, dessen Anschlussplan in dargestellt ist Abb.5, oder Transistor-Optokoppler ( Abb.6.).

Abbildung 4. Eingabe- und Ausgabeanpassung

Abbildung 5. Relais-Anschlussdiagramm

Abbildung 6. Anschlussdiagramm eines Transistor-Optokopplers

Die meisten Teile sind auf einer Leiterplatte aus einseitigem Folien-Glasfaserlaminat mit einer Dicke von 1...1,5 mm montiert, deren Zeichnung in dargestellt ist Abb.7. An den Anschlüssen der Buchse XS1 sind die Widerstände R1-R6 montiert.

Abbildung 7. PCB-Zeichnung

Das Gerät verwendet die Widerstände C2-23. MLT, Oxidkondensatoren – K50-35 oder importiert, XS1-Sockel – DB9F. Zusätzlich zu den im Diagramm angegebenen Zenerdioden können Sie beliebige LEDs vom Typ BZX55C5V1 oder Haushalts-KS174A verwenden. Die Stromversorgung des Geräts erfolgt über eine stabilisierte oder unstabilisierte Stromquelle mit einer Spannung von 12 V und einem Strom von bis zu 100 mA.

Schaltgeschwindigkeit

Auswahl eines COM-Ports

Start- und Pause-Taste

(Portfreigabe)

Stopp-Taste

(Port deaktivieren)

Schaltfläche zur Ausgabeeinstellung

Manuelle Tasten

Steuereingänge (1, 2, 3)

Schaltfläche „Tabelle löschen“.

Hilfe-Schaltfläche

Exit-Taste

Indikatoren, die simulieren

Ausgabevorgang

Tabellenraster mit Werten

(leere Zellen
gleich Null)

Um die Last in Stromkreisen mit konstanter Spannung, beispielsweise 24 V, zu steuern, können Sie beliebige leistungsstarke Verbundtransistoren verwenden – in unserem Fall KT829.

Zum Umschalten Wechselstrom Bei 220 V lässt sich am einfachsten der sogenannte Halbleiter-Wechselstromschalter verwenden, der am Eingang über einen Optotreiber mit Phasennullerkennung verfügt, der für eine galvanische Trennung sorgt.

Um den Schaltstrom zu erhöhen, wird ein Triac auf einem Kühler installiert. Bitte beachten Sie, dass im Hochspannungsteil Widerstände mit einer Leistung von 0,5 W verwendet werden.

Vergiss es nicht Sicherheitsvorkehrungen - Berühren Sie während des Betriebs des Schalters keine freiliegenden Elemente und trennen Sie den Schalter beim Nachlöten von Teilen und Drähten vom Netzwerk.

Die Platine besteht aus einseitiger Folienplatine. Plattengröße 30x25mm. In die Platine unter dem Mikroschaltungsgehäuse ist ein Jumper eingelötet. Um eine Überhitzung des Mikroschaltkreises beim Löten zu verhindern, wird ein 16-poliges Panel für den Mikroschaltkreis verwendet.

Um die Ausgänge (LEDs) anzusteuern, muss das Gerät lediglich mit einem 4-adrigen Kabel an einen PC angeschlossen werden. Das Kabel ist an einen Standardstecker des COM-Ports angelötet – eine DB9-Buchse.

Das +5V-Signal für die gemeinsame Leitung der digitalen Eingänge wird aus dem Gerätestromkreis entnommen. Widerstände in den digitalen Eingangsleitungen können in das DB9-Buchsengehäuse eingelötet werden.

Sie können Taster, Kippschalter und Mikroschalter an digitale Eingänge anschließen.

Referenzinformationen

Die Basis des Geräts ist der verfügbare 74hc595-Chip, bei dem es sich um ein serielles Schieberegister mit Ausgangssperre handelt. Zur Steuerung dieser Mikroschaltung genügen drei Signalleitungen. In unserem Fall werden die Signale im UniCOM-Steuerungsprogramm initiiert und über die RS-232-Schnittstelle (COM-Port) ausgegeben. Als Signalleitungen werden in dieser Schnittstelle die Leitungen eines 9-poligen Steckers verwendet: RTS – 7-polig, DTR – 4-polig und TxD – 3-polig.

Das Funktionsprinzip der Mikroschaltung 74hc595 besteht darin, nacheinander Logiksignale mit hohem und niedrigem Pegel aufzuzeichnen, die dem DS-Eingang (14-polig) zugeführt werden. Die Aufzeichnung erfolgt durch die fallende Flanke (Übergang von logisch 1 nach logisch 0) am Eingang SH_CP (Pin 11). Die Ausgabe der aufgezeichneten Daten erfolgt ebenfalls mit fallender Flanke, jedoch am Eingang ST_CP (12. Zweig). Somit erscheinen an den Pins 1-7 und 15 die Pegel der letzten acht aufgezeichneten Signale.

Ein hoher Signalpegel an den Ausgängen (Pins 1-7 und 15) entspricht der Versorgungsspannung der Mikroschaltung – in unserem Fall +5 Volt, und ein niedriger Pegel entspricht 0 Volt. Die Ausgangssignale sind statisch, d.h. unverändert, bis der nächste Impuls am ST_CP-Eingang eintrifft (12. Zweig). Es ist zu beachten, dass ein Absinken der Versorgungsspannung unter den Mindestwert zu einem Zurücksetzen der Ausgangssignale führt. Laut Dokumentation der Mikroschaltung beträgt die minimale Versorgungsspannung 2 Volt.

Die RS-232-Schnittstelle ist über 5,1-V-Zenerdioden mit der Mikroschaltung 74hc595 verbunden. Gemäß der Spezifikation für RS-232 liegt der hohe Signalpegel im Bereich von +3 bis +25 V, was uns eine Organisation ermöglicht Rückmeldung mit UniCOM-Steuerungsprogramm.

Bei Habré über die Steuerung einer Lampe über das Internet kam mir die Idee, die Beleuchtung zu Hause von einem Computer aus zu steuern, und da ich bereits eine Computersteuerung mit konfiguriert habe Handy Dies bedeutet, dass das Licht vom selben Telefon aus gesteuert werden kann. Nachdem er den Artikel einem meiner Arbeitskollegen gezeigt hatte, sagte er, dass dies genau das sei, was er brauchte. Denn beim Anschauen von Filmen am Computer schläft er oft ein. Einige Zeit nach dem Ende des Films schläft auch der Computer ein und schaltet den Monitor aus, aber das Licht im Raum bleibt an. Diese. Es wurde beschlossen, dass dieses Ding nützlich war, und ich begann, Informationen und Details zu diesem Wunder zu sammeln.
Die restlichen Informationen finden Sie unter Habracut (Vorsicht, es sind viele Bilder vorhanden - Verkehr).

Gerätediagramm

Das ursprüngliche Schema wurde einem der im Internet gefundenen Schemata entnommen und sah folgendermaßen aus:

Aber nur mit einer kleinen Änderung: Zwischen dem 1. Pin des 4N25-Optokopplers und dem 2. LPT-Pin wurde ein 390-Ohm-Widerstand hinzugefügt, außerdem wurde eine LED zur Anzeige des Einschaltens hinzugefügt. Die Schaltung wurde im Testmodus zusammengebaut, d.h. einfach nach Bedarf mit Drähten verbinden und testen. In dieser Version schaltete sie einfach eine alte sowjetische Taschenlampe ein und aus.
Es wurde beschlossen, dass wir die Steuerung nicht für ein Gerät, sondern für mindestens 4 Geräte durchführen sollten (basierend auf: einer Lampe auf dem Tisch, einem Kronleuchter mit zwei Schaltern, einer Ersatzsteckdose). In diesem Stadium wurde es notwendig zu bauen komplettes Schema Gerät begann die Auswahl verschiedener Programme.
Eingerichtet:

  1. KiCAD
  2. Adler
Nachdem ich mir alle angeschaut hatte, entschied ich mich für Eagle, da es „ähnliche“ Teile in seiner Bibliothek hatte. Folgendes ist darin passiert:

Das Diagramm verwendet den DB9-Port, d. h. ein normaler COM-Port, dies geschah aus Gründen der Platzersparnis sowohl auf der Platine als auch bei den Anschlüssen selbst (ich hatte COM-Anschlüsse), und da wir nur 5 Leiter verwenden werden, reicht uns das mit einer Reserve. Also wir mache auch einen Adapter von DB25 (LPT) auf DB9 (COM), in meinem Fall geht das wie folgt:
LPT 2-9 Pin = COM 1-8 Pin sind Datensteuerpins;
LPT 18-25 Pin (oft sind sie miteinander verbunden) = COM 9 Pin – das ist unsere Masse.
Die Schaltung verwendet außerdem eine zusätzliche 12-V-Stromversorgung, um das Relais mit Strom zu versorgen; laut Plan wird es ein einfaches chinesisches Ladegerät oder vielleicht ein 9-V-Krona sein (ein Relais funktioniert einwandfrei, Sie müssen nach vier gleichzeitig suchen). Zur Absicherung des Rechneranschlusses dienen eine separate Stromversorgung und eine galvanische Trennung mittels Optokoppler. Wenn Sie möchten, können Sie es natürlich über ein 12-V-Computernetzteil mit Strom versorgen, aber das macht jeder selbst und auf eigene Gefahr und Gefahr.

Notwendige Teile zum Erstellen des Geräts
  1. COM-Port - 1 Stück
  2. Stromanschluss - 1 Stk.
  3. grüne LED - 4 Stk
  4. Optokoppler 4n25 - 4 Stk
  5. Sitz für einen Optokoppler (ich hatte nur einen für 8 Beine) - 4 Stk.
  6. Widerstand 390 Ohm - 4 Stk.
  7. Widerstand 4,7 kOhm - 4 Stk.
  8. Transistor KT815G - 4 Stk.
  9. Relais HJR-3FF-S-Z - 4 Stk.
  10. Klemmen für 3 Kontakte - 4 Stk.
  11. Folienplatine

Vorbereiten des PCB-Schemas

Nachdem ich versucht hatte, Eagle zur Vorbereitung einer Leiterplatte zu verwenden, wurde mir klar, dass es etwas kompliziert sein würde, und ich beschloss, eine einfachere Option zu finden. Diese Option bietet das Programm Sprint Layout 5, auch wenn es für Windows gemacht ist, läuft aber in Wine unter Linux problemlos. Die Benutzeroberfläche des Programms ist intuitiv, auf Russisch und das Programm verfügt über eine ziemlich klare Hilfe (Hilfe). Daher wurden alle weiteren Maßnahmen zur Entwicklung der Leiterplatte im Sprint-Layout 5 (im Folgenden SL5 genannt) durchgeführt.
Obwohl viele Leute es benutzen dieses Programm Um Boards für meine Geräte zu entwickeln, waren nicht die Teile enthalten, die ich brauchte (selbst im Stapel heruntergeladener Makrosammlungen). Daher mussten wir zunächst die fehlenden Teile erstellen:
  1. COM-Port (derjenige, der laut den Befestigungslöchern nicht derselbe war wie meiner)
  2. Steckdose
  3. dreizackige Klemme
  4. Relais HJR-3FF-S-Z
Art dieser Teile:

Nach dem Hinzufügen der notwendigen Teile begann der eigentliche Entwurf der Leiterplatte. Es brauchte mehrere Versuche, es waren etwa fünf. Jede Version der Tafel wurde auf Karton gedruckt, Löcher gestanzt und Teile hineingesteckt. Tatsächlich wurde festgestellt, dass mein COM-Port nicht mit dem in SL5 übereinstimmt. Auch im Relaisschaltkreis trat ein kleiner Fehler auf – tatsächlich war das Relaisgehäuse um 2-3 mm verschoben. Selbstverständlich wurden alle Fehler korrigiert.
Auf der ersten gedruckten Version stellte sich außerdem heraus, dass der Transistor falsch angeschlossen war, zwei Kontakte waren vertauscht.
Nach all den Korrekturen und Anpassungen sah das resultierende Board so aus:

SL5 verfügt über eine Fotoansichtsfunktion zum Betrachten der Platine. So sieht sie darin aus:

Die endgültige Version des Boards wird einige weitere Optimierungen an den Gleisen aufweisen, ansonsten sieht es jedoch gleich aus.

SL5 hat auch bequeme Option Beim Drucken einer Platine können Sie unnötige Ebenen ausblenden und die Druckfarbe jeder Ebene auswählen, was sehr nützlich ist.

Vorbereiten der Leiterplatte

Es wurde beschlossen, die Platine im LUT-Verfahren (Laser-Eisen-Technologie) herzustellen. Als nächstes ist der gesamte Vorgang auf dem Foto.

Schneiden Sie ein Stück Leiterplatte auf die gewünschte Größe aus.

Wir nehmen feinstes Schleifpapier und reinigen die Kupferoberfläche sorgfältig.

Nach der Reinigung muss die Oberfläche gewaschen und entfettet werden. Sie können es mit Wasser waschen und mit Aceton entfetten (in meinem Fall war es Lösungsmittel 646).
Als nächstes drucken wir weiter Laserdrucker auf beschichtetem Papier unser Board, nicht vergessen, den Drucker auf den dicksten Druck einzustellen (ohne Toner zu sparen). Diese Option erwies sich als etwas erfolglos, da der Toner verschmierte, aber ein weiterer Versuch war genau richtig.

Jetzt müssen Sie die Zeichnung vom Papier auf Textolite übertragen. Dazu schneiden wir das Motiv aus und tragen es auf den Textolithen auf, versuchen es nach Bedarf auszurichten und erhitzen es dann mit einem Bügeleisen. Es ist notwendig, die gesamte Oberfläche gründlich zu erhitzen, damit der Toner schmilzt und an der Kupferoberfläche haftet. Dann lassen wir das Brett etwas abkühlen und befeuchten es unter fließendem Wasser. Wenn das Papier nass genug ist, muss es vom Karton getrennt werden. Nur der festsitzende Toner verbleibt auf der Platine. Es sieht aus wie das:

Als nächstes müssen Sie eine Lösung zum Ätzen vorbereiten. Ich habe dafür Eisenchlorid verwendet. Auf dem Gefäß mit Eisenchlorid steht, dass die Lösung im Verhältnis 1 zu 3 hergestellt werden muss. Ich bin ein wenig davon abgewichen und habe 60 g Eisenchlorid pro 240 g Wasser hergestellt, d. h. Es stellte sich heraus, dass es 1 zu 4 war, trotzdem verlief das Ätzen der Platine normal, nur etwas langsamer. Bitte beachten Sie, dass beim Auflösen von trockenem Eisenchlorid in Wasser Wärme entsteht. Sie müssen es daher in kleinen Portionen in das Wasser gießen und umrühren. Natürlich ist es zum Ätzen notwendig, nichtmetallische Behälter zu verwenden; in meinem Fall war es ein Kunststoffbehälter (wie ein Hering). Ich habe diese Lösung:

Bevor ich das Brett in die Lösung senkte, klebte ich es mit Klebeband fest Rückseite Angelschnur, um das Entfernen und Umdrehen des Bretts zu erleichtern. Wenn die Lösung auf Ihre Hände gelangt, sollten Sie sie schnell mit Seife abwaschen (Seife neutralisiert sie), es können jedoch dennoch Flecken zurückbleiben, alles hängt von den jeweiligen Bedingungen ab. Flecken aus der Kleidung werden überhaupt nicht entfernt, aber ich hatte Glück, das nicht selbst testen zu müssen. Die Platine sollte mit der Kupferseite nach unten und nicht ganz flach, sondern schräg in die Lösung eingetaucht werden. Von Zeit zu Zeit empfiehlt es sich, die Platine von Minen zu reinigen, da diese das weitere Ätzen erschweren. Dies kann mit Wattestäbchen erfolgen.

Der gesamte Ätzvorgang hat bei mir 45 Minuten gedauert, 40 Minuten hätten gereicht, aber ich war nur mit einer weiteren Sache beschäftigt.
Nach dem Ätzen waschen wir das Brett mit Seife, reißen das Klebeband mit der Angelschnur ab und erhalten:

Aufmerksamkeit! Gießen Sie die Eisenchloridlösung nicht in die Spüle (Abwasserleitung) – dies kann die Metallteile der Spüle beschädigen und die Lösung kann im Allgemeinen trotzdem nützlich sein.
Als nächstes müssen wir den Toner abwaschen, dies gelingt erfolgreich mit demselben Lösungsmittel 646, das zum Entfetten verwendet wurde (längerer Kontakt des Lösungsmittels mit der Haut kann diese beschädigen).

Der nächste Schritt besteht darin, die Löcher zu bohren. Ich hatte zunächst 1-mm- und 1,5-mm-Löcher auf der Platine, da ich keine dünneren Bohrer finden konnte. Außerdem war es in unserer Stadt nicht möglich, ein Spannzangenfutter zu finden, um es an einen Elektromotor anzuschließen, also wurde alles mit einer großen Bohrmaschine erledigt.

Das erste Gerät ist eingetroffen

Beim ersten Mal habe ich nur zwei Bohrer genommen, und als ich einen solchen Bohrer benutzte, stellte sich heraus, dass dies nicht ausreichte. Ein Bohrer war gebrochen und der andere verbogen. Alles, was ich am ersten Tag bohren konnte:

Am nächsten Tag kaufte ich fünf Bohrer. Und es gab gerade genug davon, denn wenn sie nicht kaputt gehen (übrigens ist nur einer der fünf kaputt gegangen), werden sie stumpf, und wenn man sie mit stumpfen Stücken bohrt, verschlechtern sich die Leiterbahnen und das Kupfer beginnt sich abzulösen. Nachdem wir die Platine vollständig gebohrt haben, erhalten wir:

Nach dem Bohren muss die Platte verzinnt werden. Dafür habe ich verwendet Alter Weg- Lötkolben, TAGS-Flussmittel und Zinn. Ich wollte es mit Rose-Legierung ausprobieren, aber es gibt sie in unserer Stadt nicht.

Nach dem Verzinnen erhalten wir folgendes Ergebnis:

Als nächstes müssen Sie die Platine waschen, um Flussmittelrückstände zu entfernen. Da TAGS mit Wasser gereinigt werden kann, kann dies entweder mit Wasser oder Alkohol erfolgen. Ich habe etwas dazwischen gemacht – ich habe es mit altem Wodka gewaschen und mit Wattestäbchen abgewischt. Nach all diesen Schritten ist unser Board fertig.

Einbau von Teilen

Um die Korrektheit der Platine zu überprüfen, baue ich zunächst nur eine (von vier) Teilezeilen zusammen, man weiß nie, wo sich ein Fehler eingeschlichen hat.

Nach dem Einbau der Teile schließen wir das Gerät per LPT an den Computer an; dazu wird ein Adapter von DB25(LPT) auf DB9(COM) in folgender Form eingelötet:

  • 2-poliger DB25 auf 1-poliger DB9
  • 3-poliger DB25 auf 2-poliger DB9
  • 4-poliger DB25 auf 3-poliger DB9
  • 5-poliger DB25 auf 4-poliger DB9
  • 6-poliger DB25 auf 5-poliger DB9
  • 7-poliger DB25 bis 6-poliger DB9
  • 8-poliger DB25 bis 7-poliger DB9
  • 21-poliger DB25 (jeder von 18 bis 25 ist möglich) bis 9-poliger DB9
Da der verwendete Draht normal war verdrilltes Paar, dann fehlte eine Verkabelung, aber für dieses Geräts Es reichen also nur fünf Drähte diese Option passt. Unsere geschaltete Last ist eine einfache sowjetische Taschenlampe. Nun, als Netzteil - ein universelles chinesisches Netzteil (4 Anschlüsse und Netzteil von 3 bis 12 V). Hier ist alles zusammengebaut:

Aber das Gerät funktioniert bereits:

Damit endete ein weiterer Abend und der Einbau der restlichen Teile wurde für den nächsten Tag aufgeschoben.

Und hier ist das fertig zusammengebaute Gerät:

Nun, ein kurzes Video darüber, wie es funktioniert (die Qualität ist nicht sehr gut, es gab keine Möglichkeit, es richtig zu filmen)

Das ist alles, es bleibt nur noch, eine normale Hülle für das Gerät zu finden und es in Betrieb zu nehmen.

Softwareteil

Natürlich braucht man zur Steuerung des LPT-Ports eine Art Software, aber da ich zu Hause Linux habe, habe ich beschlossen, einfach selbst ein einfaches Programm zu schreiben, es dann hinzuzufügen und nach Bedarf anzupassen. Sie sah ungefähr so ​​aus:
#enthalten
#enthalten
#enthalten
#enthalten
#define BASE 0x378
#define TIME 100000
int main()
{
int x = 0x0F;
int y = 0x00;
if (ioperm(BASE, 1, 1))
{
perror("ioperm()");
Ausgang(77);
}
outb(x,BASE);
0 zurückgeben;
}

Dieses Programm sendet 0x0F = 00001111 an den LPT-Port, d.h. liefert 1 an die Pins 2-5 (Data0-Data3), und dies ist unsere Steuerspannung zwischen den Pins 2-5 und Masse (Pins 18-25), sodass alle vier Relais eingeschaltet werden. Das Programm zum Senden von 0x00 an einen Port zum Herunterfahren funktioniert genauso, es sendet nur y statt x - outb(y, BASE). Sie können den Portstatus auch lesen:
#define BASEPORT 0x378 /* lp1 */
...
printf("status: %d\n", inb(BASEPORT));
...

Die einzige Einschränkung dieses Programms besteht darin, dass es als Root ausgeführt werden muss an einen einfachen Benutzer Die ioperm-Funktion ist nicht verfügbar. Ich denke, wir müssen Ihnen nicht sagen, wie man ein solches Problem löst; jeder wird die Option wählen, die ihm besser passt.

Anschließend wurde das Programm so modifiziert, dass durch die Übergabe von Parametern Befehlszeile Es konnte festgelegt werden, mit welchem ​​Gerät und was zu tun ist.
Ausgabe von „sw --help“:
Programm zur Steuerung von Relais über den LPT-Port.
Ein Programm kann einen oder zwei Parameter haben.
Parameterformat: sw [Gerätenummer] [Aktion]
Gerätenummer - von 1 bis 8
Aktion – „on“, „off“, „st“ – ein, aus, Status
Beispiel: „sw 2 on“, um das zweite Gerät einzuschalten oder „sw --help“, um Hilfe anzuzeigen

PS: Wenn es jemand braucht, kann ich die Datei des Platinendiagramms in SL5 und den Quellcode des Steuerungsprogramms irgendwo posten.

gastroguru 2017