You are on page 1of 16

c   

 
c 

c   

› 

  




 
 
 
 




 

  
 
  

›            controladora).

INTRODUCCIÓN

La controladora para motor cc consiste en dos circuitos opto-acoplados. Uno controlado a


través del puerto paralelo del ordenador y otro que activa directamente el motor en ambos
sentidos y con función de paro automático.

El circuito de control dispone de dos pulsadores marcha y paro, dos interruptores de fin de
carrera y dos led indicadores. El circuito de potencia activa un motor de corriente continua
alimentado con una fuente externa de 12 voltios. La conexión entre ambos circuitos se
realiza a través de dos opto-acopladores que generan una señal lógica de dos bits, cuyos
cuatro estados gobiernan el motor cc.

ESQUEMA CONTROLADORA

Estos esquemas muestran los circuitos de entrada de los pulsadores e interruptores marcha-
paro: un circuito anti-rebotes utilizando un disparador 7414 y un flip-flop con un par de
puertas nand 7400.
Las salidas de estos circuitos se leen mediante los bits D3,D4,D5 y D7 del puerto de estado.

{bml S1YS2.bmp}

Este otro esquema muestra el diagrama lógico del circuito que controla el motor cc (como
la alimentación es de 12 V se utilizan puertas cmos 4011 (nand) y una 4030 (xor).

El control se realiza mediante los bits D0 y D1 del puerto de datos del ordenador.
 › 

Este esquema muestra los conectores de alimentación de 12 y 5 voltios, al PC (25


pines) y al dispositivo controlado (15 pines):

CONECTORES DEL DISPOSITIVO CONTROLADO

El esquema muestra la conexión a la controladora del dispositivo (escalera, puerta, barrera,


etc) a través de un conector Sub-D de 15 pines.
PUERTOS DEL PC UTILIZADOS

Para leer la información del dispositivo conectado al PC, se utiliza el puerto de estado
(dirección 379 hexadecimal) leyéndose los bits d7, d5,d4 y d3.?

En la imagen puede verse cómo se aplica una máscara al byte de estado (10111000) para
obtener la información de estos bits únicamente.

Las salidas del programa se envían a la controladora utilizando los bits de menor peso (d0 y
d1) del puerto de datos (dirección 378h) para controlar la dirección del motor, y los bits d2
y d3 para activar dos leds o indicadores.

››› !"#

Algunos dispositivos que pueden conectarse a la controladoras son:

una barrera, una puerta automática, un ascensor, etc.


BARRERA ELECTRÓNICA

ASCENSOR ESCALERA

PUERTA AUTOMATICA

$ %" #"›#›

„ ???PRJESCAL.EXE está realizado en DELPHI 2.0 y permite


controlar cualquier dispositivo conectado a la controladora a través del puerto
paralelo del PC.

Aquí puedes ver su aspecto:


La pantalla de simulación muestra tres animaciones de diferentes dispositivos que pueden
activarse pulsando sobre los botones P1 y P2. Los dos grupos de leds muestran el estado del
puerto de salida y del puerto de entrada de la impresora, a donde está conectada la
controladora.
La otra pantalla muestra el estado real de los interruptores y pulsadores del
dispositivo controlado.

A continuación se proponen ejemplos de utilización de la controladora desde


TurboPascal y QBasic:

„ 

program ESCALERA;

uses crt,dos,TEXTLIB;

var x,n,s:integer;

B,A,BB:BYTE;

C:CHAR;
V ,V,S ,S:boolean;

VERTOiN,VERTOouT:word;

function d7(b:byte):byte;assembler;

asm

XOR AX,AX

MOV AL,B

AND AL,$80

end;

function d6(b:byte):byte;assembler;

asm

XOR AX,AX

MOV AL,B

AND AL,$40

end;

function d5(b:byte):byte;assembler;

asm

XOR AX,AX

MOV AL,B

AND AL,$0

end;

function d4(b:byte):byte;assembler;

asm

XOR AX,AX

MOV AL,B

AND AL,$ 0
end;

function d3(b:byte):byte;assembler;

asm

XOR AX,AX

MOV AL,B

AND AL,$08

end;

function d(b:byte):byte;assembler;

asm

XOR AX,AX

MOV AL,B

AND AL,$04

end;

function d (b:byte):byte;assembler;

asm

XOR AX,AX

MOV AL,B

AND AL,$0

end;

function d0(b:byte):byte;assembler;

asm

XOR AX,AX

MOV AL,B

AND AL,$0

end;
BEGIN

{repeat

b:=LEEHIGHNIBBLE(b);

GOTOXY( 0, 0); WRITE(B);

until KEYVRESSED; HALT;}

CLRSCR;

WRITELN;

WRITELN;

WRITELN(' CONTROLADORA MOTOR C.C. ');

gotoxy(0, );

writeln(' : Vuerto LVT : Vuerto LVT');

REVEAT NTIL KEYVRESSED; c:=readkey;

if c=' ' then begin VERTOout:=$378;VERTOin:=$379;end;

if c='' then begin VERTOout:=$78;VERTOin:=$79;end;

GOTOXY(40,8);WRITELN('Vuerto: ',VERTOout);

CSROFF;clrscr;

B:=0;

V :=false;

V:=false;

GOTOXY(8, ); WRITE(' CONTROLADORA MOTOR (ESCALERA,VERTA ATOMATICA..)');

GOTOXY(8,); WRITE('
__________________________________________________');

GOTOXY(8,3); WRITE(' V pulsado y s activado : $90 00 0000');

GOTOXY(8,4); WRITE(' V pulsado y s desactivado : $0 000 0000');

GOTOXY(8,5); WRITE(' V pulsado y s activado : $8 00 0 000');

GOTOXY(8,6); WRITE(' V pulsado y s desactivado : $0 00 0 0000');


GOTOXY(8,3); WRITE(' : Vort LVT : Vort LVT S: subir B: bajar ESC:
Salir');

{c:=#3;}

WHILE NOT (c=#7) DO

BEGIN

c:=#3;

bb:=0; {para que el OR 0000 0000 no afecte al byte b}

IF KEYVRESSED THEN

begin

c:=readkey;

if c=' ' then begin VERTOout:=$378;VERTOin:=$379;end;

if c='' then begin VERTOout:=$78;VERTOin:=$79;end;

if (c='s') or (c='S') then bb:=$0;

if (c='b') or (c='B') then bb:=$ 0;

end;

b:=port[VERTOin]; { $379];}

b:=b AND $B8; {a cero ACK y bits no usados D0 D y D = 0 000}

b:=b OR bb; {activar bits D5 o D4 V o V !}

if (b=8) and not(p ) then

begin

port[VERTOout]:= 5; { $378]:= 5;}

V :=false; V:=false;

end;

if (b= 8) and not(V) then

begin
port[VERTOout]:= 5;

V :=false; V:=false;

end;

S :=(b and $80)=$80; S:=(b and $08)=$08;

if b=$90 then V:=true; {si s activado y se pulsa bajar p 00 0000}

if b= 6 then begin V:=true; V :=false; end;

if b=$8 then V :=true; {si s activado y se pulsa subir p 00 0 000}

if b=3 then begin V :=true; V:=false; end;

if b=$30 then port[VERTOout]:= 5;

if V then port[VERTOout]:=5;

if V then port[VERTOout]:= 0;

a:= port[VERTOout];

GOTOXY( 3,9); WRITE(B,' ',A,' ');

gotoxy( 3, 0); write('status data S S');

gotoxy( 0, );WRITE('D7 ',D7(b),' ',D7(a),' ',S ,' ',S,' ');

gotoxy( 0, );WRITE('D6 ',D6(b),' ',D6(a),' ');

gotoxy( 0, 3);WRITE('D5 ',D5(b),' ',D5(a),' ');

gotoxy( 0, 4);WRITE('D4 ',D4(b),' ',D4(a),' ');

gotoxy( 0, 5);WRITE('D3 ',D3(b),' ',D3(a),' ');

gotoxy( 0, 6);WRITE('D ',D(b),' ',D(a),' ');

gotoxy( 0, 7);WRITE('D ',D (b),' ',D (a),' ');

gotoxy( 0, 8);WRITE('D0 ',D0(b),' ',D0(a),' ');

writeln;

writeln('--------');

if not(V ) and not(p) then begin gotoxy( 0,0);write('Û.............--


DETENIDA --...........Û');END;
if V then begin gotoxy( 0,0);write('ÛÛÛ.....ÚÙ..<-- SBIENDO
...............');END;

if V then begin gotoxy( 0,0);write('............... BAJANDO --


>.....ÚÙ...ÛÛÛ');END;

END;

C:=READKEY;

CSRON;

END.

„   

false = 0

true = -

CLS

VRINT

VRINT

VRINT " CONTROLADORA MOTOR C.C. ');"

LOCATE , 0

VRINT " : Vuerto LVT : Vuerto LVT);"

c$ = ""

WHILE c$ = "": c$ = INKEY$: WEND

'C$ = INKEY$

IF c$ = " " THEN VERTOout = 888: VERTOin = 889

IF c$ = "" THEN VERTOout = 63: VERTOin = 633

LOCATE 8, 40: VRINT "Vuerto: "; VERTOout

CLS

b = 0

V = false

V = false
LOCATE , 8: VRINT "' CONTROLADORA MOTOR (ESCALERA,VERTA
ATOMATICA..)');"

LOCATE , 8: VRINT "'


__________________________________________________');"

LOCATE 3, 8: VRINT "' V pulsado y s activado : $90 00 0000');"

LOCATE 4, 8: VRINT "' V pulsado y s desactivado : $0 000 0000');"

LOCATE 5, 8: VRINT "' V pulsado y s activado : $8 00 0 000');"

LOCATE 6, 8: VRINT "' V pulsado y s desactivado : $0 00 0 0000');"

LOCATE 3, 8: VRINT "' : Vort LVT : Vort LVT S: subir B: bajar ESC:
Salir');"

'{c:=#3;}

WHILE c$ <> CHR$(7)

c$ = CHR$(3)

BB = 0'{para que el OR 0000 0000 no afecte al byte b}

c$ = INKEY$

IF c$ = " " THEN VERTOout = 888: VERTOin = 889

IF c$ = "" THEN VERTOout = 63: VERTOin = 633

IF (c$ = "s") OR (c$ = "S") THEN BB = 3

IF (c$ = "b") OR (c$ = "B") THEN BB = 6

b = INV(VERTOin)' { $379];}

b = b AND &HB8' {a cero ACK y bits no usados D0 D y D = 0 000}

b = b OR BB'{activar bits D5 o D4 V o V !}

IF (b = 8) AND NOT (V ) THEN : OT VERTOout, 5: V = false: V = false

IF (b = 8) AND NOT (V) THEN OT VERTOout, 5: V = false: V = false

s = (b AND &H80) = &H80: s = (b AND &H8) = &H8

IF b = &H90 THEN V = true'{si s activado y se pulsa bajar p 00 0000}

IF b = 6 THEN V = true: V = false


IF b = &H8 THEN V = true'{si s activado y se pulsa subir p 00 0 000}

IF b = 3 THEN V = true: V = false

IF b = &H30 THEN OT VERTOout, 5

IF V THEN OT VERTOout, 5

IF V THEN OT VERTOout, 0

A = INV(VERTOout)

LOCATE 9, 3: VRINT b; " "; A; " ";

LOCATE 0, 3: VRINT "status data S S";

LOCATE , 0: VRINT "D7 "; b AND 8; " "; A AND 8; " "; s ; " "; s;
" ";

LOCATE , 0: VRINT "D6 "; b AND 64; " "; A AND 64; " ";

LOCATE 3, 0: VRINT "D5 "; b AND 3; " "; A AND 3; " ";

LOCATE 4, 0: VRINT "D4 "; b AND 6; " "; A AND 6; " ";

LOCATE 5, 0: VRINT "D3 "; b AND 8; " "; A AND 8; " ";

LOCATE 6, 0: VRINT "D "; b AND 4; " "; A AND 4; ' ';

LOCATE 7, 0: VRINT "D "; b AND ; " "; A AND ; " ";

LOCATE 8, 0: VRINT "D0 "; b AND ; " "; A AND ; " ";

VRINT

VRINT "--------"

LOCATE , 70: VRINT V ; " "; V

IF NOT (V ) AND NOT (V) THEN LOCATE 0, 0: VRINT "Û.............--


DETENIDA --...........Û"

IF V THEN LOCATE 0, 0: VRINT "'ÛÛÛ.....ÚÙ..<-- SBIENDO


..............."

IF V THEN LOCATE 0, 0: VRINT "............... BAJANDO --


>.....ÚÙ...ÛÛÛ"

WEND

c$ = ""
WHILE c$ = "": c$ = INKEY$: WEND

You might also like