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 – zdroj, COM port s galvanickým oddělením, výstupní část s budiči, vstupní část.
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í.
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.
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.
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).
Vstup Output Enable je trvale připojen na napájení, stejně jako vstup Strobe. Strobe 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)
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.
Testování výstupní části
Pro testování výstupní části jsem napsal jednoduchej testovací program.
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.
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.
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 0, DTS 1, DTR 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.
Fotky I/O karty
To sem zvědavej kdy ukážeš ňáký zapojení s tou kartou 😉
Dobrý den,mohu použít Vámi provedené galvanické oddělení i na jiném zapojení,které mám na com port?
[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 🙂
[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í 🙂
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 ?