Jste zde

Připojení čidla do PC

Velmi vtipné a neotřelé připojení jednoduchého čidla do PC, které není plně využito a potřebuje

galvanické oddělení.

Vše je založeno na vlastnostech aktivního optočlenu PC900V. Ten má na vstupu svítivou diodu. Výstupní tranzistor NPN má vyveden kolektor a je řízen aktivním obvodem s hysterezí, který potřebuje napájení. Na následujícím obrázku je schéma připojení optočlenu k sériovému rozhraní PC.

Schéma 

zapojení

Napájení je zajištěno přímo ze sériového rozhraní. Trochu netypické zapojení optočlenu na sériový port je zvoleno proto, že při nulovém proudu LED musí být na signálu TXD záporné napětí (log.1 pro RS232), což je klidový stav tohoto rozhraní. Hodnoty rezistorů jsou zvoleny tak, aby rozkmit napětí na TXD byl +-5V. Optočlen si tedy vlastně mění napájecí napětí z 15V v klidu na 5V při sepnutí výstupního tranzistoru. Nevím jestli výrobce PC900V něco takového předpokládal, ale mně to funguje bez problémů na rychlosti 115200 Bd. Tato rychlost se nastavuje na straně počítače hodnotou dělitele (viz ukázka programu dále).
Oznaceni TXD a RXD je z pohledu periferie! Na konektoru PC se tedy tyto signaly pripoji na jejich protejsky.

 


Při měřeních optočlenu při napájecím napětí 5V, kolektorovém rezistoru 1k2 a budicím proudu LED asi 1.6mA (sériový rezistor 2k2) bylo zpoždění hran H>L a L>H shodné a činilo asi 2us. Optočlen pracoval do kmitočtu 300kHz. Vyšší kmitočty už neměly stejnou střídu jako na vstupu a při 450kHz signál neprošel vůbec.
Zapojení jsem použil ke spojení počítače s osmibitovým A/D převodníkem řízeným procesorem PIC16C84. Převodník posílá 10k vzorků za sekundu. Galvanické oddělení dovoluje "kouknout" se i na exotičtější místa, jako třeba na telefonní linku a podobně.

Ukázka části programu v PASCALu k ovládání a čtení ze sériového portu :

{ Umisteni promenne COM na vektory seriovych portu }
var
  COM                  : 

array [0..1] of word absolute $0000:$0400;
{ Nastaveni serioveho portu }
procedure SETCOM;
begin
  NUM:=0; {natvrdo se vybere COM1 (pro COM2 je NUM:=1)
  DATA:=COM[NUM]; {ziskani ridich adres registru serioveho rozhrani}
  INTE:=COM[NUM]+1;
  INTF:=COM[NUM]+2;
  CONT:=COM[NUM]+3;
  PFC:=COM[NUM]+4;
  PFD:=COM[NUM]+5;
  PFE:=COM[NUM]+6;
  port[PFC]:=$01; {nastaveni registru}
  port[CONT]:=128;
  port[DATA]:=1;  {ZDE JE DELITEL}
  port[INTE]:=0;
  port[CONT]:=7;
  HL:=port[PFD];HL:=port[DATA];
  port[INTE]:=0;
end;
{ Cteni ze serioveho portu }
function SEM:byte;
begin
  repeat until (keypressed or ((port[PFD] and 1) = 1));
  SEM:=port[DATA];
end;

Hodně úspěchů Vám přeje Petr Simandl
simandl@feld.cvut.cz
21PS

 

datum poslední změny : 23. února 1998
Hodnocení článku: