Stiskněte "Enter" pro přeskočení obsahu

I/O karta na COM port

5

V dobách dávno minulých, když země byla ještě mladá měli počítače LTP a COM (RS232) porty, takže s ovládáním elektroniky víceméně nebyl problém. Dnes najdete na počítačích spíš USB porty, HDMI apod.

Ale co když potřebujete opravdu něco ovládat a nechcete kupovat drahé I/O karty, nebo externí PLC? Pokud si vystačíte se třemi výstupy a čtyřmi vstupy, stačí sériový port, s tím není problém ani dnes – existují převodníky USB-RS232 (u nich je většinou problém s dodržením napěťových hladin). Existují i převodníky USB-LTP (s těmi je však větší problém).

Rozhodl jsem se tedy postavit si vstupně výstupní kartu s 8 digitálními vstupy a 8 digitálními výstupy, kterou lze připojit na COM port (resp. převodník USB-RS232).

Celý obvod se dělí na 4 části – zdrojCOM port s galvanickým oddělenímvýstupní část s budičivstupní část.

Blokové schéma obvodu

Schéma celého obvodu

1. část – Zdroj

Jde o zcela jednoduchý zdroj. Za vstupní svorkou je dioda (ochrana proti přepólování), 5V stabilizátor s blokovacími kondenzátory 100n a LED signalizující napájecí napětí.

Schéma zdroje

2. část – Galvanické oddělení

Jeden z nejduležitějších parametrů obvodu je absolutní (včetně napájení) galvanické oddělení COM portu a ostatní elektroniky. To je provedeno jedním čtyřnásobným optočlenem KP1040.

Schéma galvanického oddělení

Výstupní signály (TXD, DTR a RTS) rozsvěcí proti pinu GND příslušnou diodu optočlenu – tím se sepne tranzistor, který je napájen 5V. Log. 0 na výstupech tranzistorů je zajištěna pull down rezistory 10KΩ, které jsou připojeny na emitor. Výstup z třetího optočlenu (signál RTS) je potřeba negovat. Log. 1 je tedy zajištěna rezistorem 660Ω a log. 0 sepnutím tranzistoru.

Pokud je potřeba data přijímat musí být na výstupu RTS log. 1. Tím se na kolektoru čtvrtého tranzistoru objeví log. 1, kterou spíná tranzistor přímo na vstupní pin CD. Log. 0 na vstupu CD je zajištěna pull-down rezistorem 10 kΩ.

Na pull-up a pull-down rezistory nezapomínejte! Pak to posílá/přijímá do/z počítače kraviny.

Vnitřní zapojení optočlenu

Rezistory mezi COM portem a diodami v optočlenu je potřeba spočítat podle konkrétního COM portu. Ten můj má napěťové hodnoty ±7 V. Odpor se vypočítá podle vzorce

  • R=(Un – Ud – Usd)/Id [Ω; V, V, A]
  • R – Odpor předřadného rezistoru
  • Un – Napětí COM potru
  • Ud – Úbytek napětí na diodě v optočlenu
  • Usd – Úbytek napětí na sériové diodě
  • Id – Doporučený proud diodou v optočlenu
  • V mém případě tedy
  • R=(7 – 1,2 – 1)/0,02 = 240Ω
 

Testování galvanického oddělení

Tuto část obvodu lze otestovat pomocí aplikace COM Port. Pomocí této aplikace lze spínat jednotlivé výstupy a čist vstupy. Multimetrem, nebo LEDkou lze zjistit, jestli se tranzistory v optočlenu spínají jak mají. Zapnutím signálu RTS a připojením kladného napájecího napětí na čtvrtou diodu v optočlenu lze otestovat vstup.

3. část – Výstupní obvod

Výstupní část je založena na SIPO posuvném registru CMOS 4094. Stejný princip byl použit u LED Displeje (obvod (výstupní část) by měl jít tímto programem ovládat, ovládací signály jsou kompatibilní. Ovšem netestoval jsem to).

Schéma výstupního obvodu

Vstup Output Enable je trvale připojen na napájení, stejně jako vstup StrobeStrobe slouží k odeslání stavu posuvného registru na výstupy až po úplném naplnění. Při pomalém odesílání dat by byl patrný posuv hodnot v registru což není úplně žádoucí. Časem ho možná přepojím.

Q1 až Q8 jsou paralelní výstupy posuvného registru.

Vstupy DATA a CLOCK slouží k naplnění posuvného registru log. hodnotami. Nejprve se na vstup data přivede požadovaný log. stav a ten se zapíše náběžnou hranou signálu CLOCK. Tento postup se 8× opakuje, až se posuvný registr celý naplní. Pokud tedy chcem na výstupu mít log stavy 11001100 bude signál vypadat takto (jednotlivé bity jsou odděleny prázdným řádkem):

  • DATA (TXD): log.1 (první bit (Q1) informace – log. 1)
  • CLOCK (DTR): log. 1 (zapsání prvního bitu)
  • CLOCK (DTR): log. 0 (sestupná hrana)
  • DATA (TXD): log.1 (druhý bit (Q2) informace – log. 1)
  • CLOCK (DTR): log. 1 (zapsání druhého bitu)
  • CLOCK (DTR): log. 0 (sestupná hrana)
  • DATA (TXD): log.0 (třetí bit (Q3) informace – log. 0)
  • CLOCK (DTR): log. 1 (zapsání třetího bitu)
  • CLOCK (DTR): log. 0 (sestupná hrana)
  • DATA (TXD): log.0
  • CLOCK (DTR): log. 1
  • CLOCK (DTR): log. 0
  • DATA (TXD): log.1
  • CLOCK (DTR): log. 1
  • CLOCK (DTR): log. 0
  • DATA (TXD): log.1
  • CLOCK (DTR): log. 1
  • CLOCK (DTR): log. 0
  • DATA (TXD): log.0
  • CLOCK (DTR): log. 1
  • CLOCK (DTR): log. 0
  • DATA (TXD): log.0 (osmý bit (Q8) informace – log. 0)
  • CLOCK (DTR): log. 1 (zapsání osmého bitu)
  • CLOCK (DTR): log. 0 (sestupná hrana)
Rozložení pinů na CMOS 4094

Výstupy obvodu 4094 jsou přivedeny do budiče CMOS 4010 a poté přímo na svorkovici výstupů. Budič slouží k zvětšení výstupního proudu.

Rozložení pinů a vnitřní zapojení CMOS 4010

Testování výstupní části

Pro testování výstupní části jsem napsal jednoduchej testovací program.

Testovací program výstupů

Po spuštění programu je potřeba ho připojit s určitému COM portu. To se provede stisknutím tlačítka Obnovit, výběrem portu a kliknutím na tlačítko Připojit.

Tlačítko Vymazat slouží k nastavení všech výstupů na log. 0. Tlačítko vše log. 1 slouží k nastavení všech výstupů na log. 1. Check box reverz slouží k reverzování odesílaných dat (místo 1 se bude posílat 0).

Do textového pole se zapíše hodnota, která se má odeslat. Znak „1“ odešle log. 1. vše ostatní log. 0 (v případě reverzace se to bude chovat opačně). Tlačítkem Odeslat se odešlou požadovaná data na výstupy.

4. část – Vstupní obvod

Tento obvod je asi nejsložitější část. Ale zas tak hrozný to není. Na vstupy PISO posuvného registru CMOS 4021 se přivedou paralelní data, ty se poté zaznamenají signálem PL a hodinovým signálem CP se posunují na sériový výstup O7.

Schéma vstupního obvodu

Rozložení pinů a vnitřní zapojení CMOS 4021

Data je potřeba nejprve zaznamenat do posuvného registru. To se provede při sestupné hraně na vstutu PL. Jenže je potřeba mít signál RTS v log. 1, aby byl napájen tranzistor v optočlenu. Proto je signál negovaný – při RTS=1 je na vstupu PL log. 0. Na vstupech posuvného registru je zajištěna log. 0 pull-down rezistory 10 kΩ

Dál už je funkce jednoduchá. Na hodinový vstup CP se posílá střídavý signál a po každé náběžné hraně se čte signál CD. To se provede celkem osmkrát. Uložená data poté reprezentují napětí na vstupních svorkách.

Čtení tedy vypadá takto:

  • RTS: 1 (náběžná hrana)
  • RTS: 0 (sestupná hrana – uložení paralelních vstupů do posuvného registru)
  • RTS: 1 (napájení tranzistoru v optočlenu)
  • DTR: 1 (1. náběžná hrana – posuv prvního bitu na sériový výstup)
  • CD: ? (čtení prvního bitu)
  • DTR:0 (sestupná hrana)
  • DTR: 1 (2. náběžná hrana – posuv druhého bitu na sériový výstup)
  • CD: ? (čtení druhého bitu)
  • DTR:0 (sestupná hrana)
  • DTR: 1
  • CD: ?
  • DTR:0
  • DTR: 1
  • CD: ?
  • DTR:0
  • DTR: 1
  • CD: ?
  • DTR:0
  • DTR: 1
  • CD: ?
  • DTR:0
  • DTR: 1
  • CD: ?
  • DTR:0
  • DTR: 1 (8. náběžná hrana – posuv osmého bitu na sériový výstup)
  • CD: ? (čtení osmého bitu)
  • DTR:0 (sestupná hrana)

Testování vstupní části

Pro testování vstupní části jsem napsal jednoduchej testovací program.

Testovací program vstupů

Po spuštění programu je potřeba ho připojit s určitému COM portu. To se provede stisknutím tlačítka Obnovit, výběrem portu a kliknutím na tlačítko Připojit.

V programu jsou dále tlačítka RTS 0DTS 1DTR 0 a DTR 1. Těmito tlačítky lze manuálně ovládat dva výstupy COM portu. Při každém stisknutí DTR 1 se navíc čte vstup CD. Stav tohoto vstupu se zapisuje na CheckBox „Výstup“ a do textového pole ve tvaru čísla 0 (v případě log. 0) a 1 (v případě log. 1). Dvoukliknutím do tohoto pole ho vymažete.

Asi nejzajímavější je tlačítko Číst data. Tím se uloží data ze vstupů do posuvného registru a všech 8 bitů se postupně přečte. Data se zapíší do textového pole a na osm CheckBoxů. Čtení tedy lze jak odkrokovat (při ladění obvodu) tak automaticky vyčíst.

Ovládací program

Obvod je tedy funkční a otestován. K obvodu je dispozici knihovna LMSIOCard.dll, kterou lze importovat do jiné aplikace a přes ní tento obvod ovládat. Více se o této knihovně dočtete zde.

Jednoduchý program na ovládání karty

Fotky I/O karty

Testování oddělovače pomocí obvodu s LED a tlačítkem
Galvanické oddělení
Kompletní, funkční obvod
Pokusně zapojené pull-down rezistory na CMOS 4094

  1. Diego Diego
    3.2.2012 - 16:01:15

    To sem zvědavej kdy ukážeš ňáký zapojení s tou kartou 😉

    • Peťan: No, zatím nic konkrétního neplánuju… V létě není čas. Do zimy možná něco vymyslím. A co ty, už se něco rýsuje?
  2. XXX XXX
    18.4.2018 - 17:41:52

    Dobrý den,mohu použít Vámi provedené galvanické oddělení i na jiném zapojení,které mám na com port?

  3. Peťan: Pokud vyhovuje, tak nevidím důvod proč ne.
  4. XXX XXX
    18.4.2018 - 18:10:35

    [2] XXX: Díky za velmi rychlou odpověď 🙂

    konkrétně do tohoto mého zapojení :
    https://svetelektro.com/…alu-320.html

    mezi mé zapojení v odkaze a PC bych vložil toto galvanické oddělení.Proto se radši ptám 🙂

  5. Peťan: No, tak tohle by asi moc oddělit nešlo, protože je to z portu napájeno. Leda tak pin CTS, ale stejně se to v operáku potká, takže by to moc spásný nebylo. Napadá mě na vstup připojit třeba nějakej transil, kterej by ochránil celý obvod před přepětím. Ale ochranu počítače ti rozhodně nezaručím 🙂
  6. XXX XXX
    18.4.2018 - 19:09:13

    [3] XXX: Díky 🙂 transily mě také napadly ještě předtím než jsem to zapojení na těchto stránkách.právě ,že je z portu napájen.

    Asi to bude jediné řešení 🙂

  7. XXX XXX
    18.4.2018 - 20:57:29

    A poslední věc : Když by transil zareagoval (zkratoval se) ,tak nepoškodí se VSTUP na PC? když by byl jeden ze signálu
    chvíli zkratovaný proti GND ?

  8. Peťan: Tak transil by se napojil na vstup – zkratoval by vstupní signál = z výstupu OZ by mělo jít 0 V. Nebo to jednoduše napájej z externího zdroje a opticky oddělen jenom výstupní signál z OZ.

Napsat komentář

Vaše emailová adresa nebude zveřejněna.