Está en la página 1de 16

PLOTTER

DESCRIPCION DEL PROYECTO:


Descripción y funcionamiento de un motor paso a paso:

Los motores unipolares tienen una toma


intermedia en cada bobina, esta vá a Vcc o a
masa según sea el circuito de control, luego solo
tenemos que alimentar la bobina
correspondiente. Tienen 6 cables pero en
algunos modelos los dos comunes están unidos
internamente y solo tienen 5.

Funcionamiento Funcionamiento
Medio paso:
simple: doble:
Es una mezcla de las
Las bobinas se Cada vez se activan
dos anteriores, primero
activan una a una por dos bobinas, así el
se activa una bobina y
separado, de esta motor tiene más
luego dos, así el
forma se consigue un fuerza ya que son dos
ángulo de los pasos se
poco menos de fuerza bobinas las que
reduce a la mitad al
pero el consumo es arrastran y sujetan el
igual que la velocidad.
menor. rotor.

Usando el puerto paralelo de una PC 

Introducción:

 El puerto paralelo de una PC es ideal para ser usado como herramienta de
control de motores, relés, LED's, etc. El mismo posee un bus de datos de 8 bits
(Pin 2 a 9) y muchas señales de control, algunas de salida y otras de entrada
que también pueden ser usadas fácilmente.

Las PC's generalmente poseen solo uno de estos puertos (LPT1) pero con muy
poco dinero se le puede adicionar una tarjeta con un segundo puerto paralelo
(LPT2).
En reglas generales la dirección hexadecimal del puerto LPT1 es igual a 0x378
(888 en decimal) y 0x278 (632 en decimal) para el LPT2. Esto se puede
verificar fácilmente en el setup de la PC o bien en el cartel que generalmente la
PC muestra en el momento del booteo. Puede darse el caso que el LPT1
asuma la dirección 0x3BC (956 en decimal) y el LPT2 0x378, en ese caso
habrá que tratar de corregir el setup y/o los jumper de las tarjetas en caso que
sea posible. De lo contrario se puede modificar el software que veremos mas
adelante para aceptar esas direcciones. 

Breve descripción del puerto paralelo:

El puerto paralelo de un PC posee un conector de salida del tipo DB25 hembra


cuyo diagrama y señales utilizadas podemos ver en la siguiente figura:

Si deseamos escribir un dato en el bus de salida de datos (pin 2 a 9) solo


debemos escribir el byte correspondiente en la dirección hexadecimal 0X378
(888 en decimal) cuando trabajamos con el LPT1 y 0x278 (632 en decimal)
cuando trabajamos con el LPT2. Los distintos pins (bits) de salida
correspondientes al bus de datos no pueden ser escritos en forma
independiente, por lo que siempre que se desee modificar uno se deberán
escribir los ocho bits nuevamente.

Para leer el estado de los pins de entrada (10, 12, 13 y 15) se debe realizar una
lectura a la dirección hexadecimal 0x379 (889 en decimal) si trabajamos con el
LPT1 o bien leer la dirección 0x279 (633 en decimal) si trabajamos con el
LPT2. La lectura será devuelta en un byte en donde el bit 6 corresponde al pin
10, el bit 5 corresponde al pin 12, el bit 4 corresponde al pin 13 y el bit 3
corresponde al pin 15.

En la siguiente tabla se puede ver lo antedicho en una forma más gráfica:


Escritura: Salida de Datos
Escritura en dirección 0x378 (LPT1) o 0x278 (LPT2)
DATO BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0

DB25 Pin 9 Pin 8 Pin 7 Pin 6 Pin 5 Pin 4 Pin 3 Pin2

CN5 TTL 7 TTL 6 TTL 5 TTL 4 TTL 3 TTL 2 TTL 1 TTL 0


No
CN4 HP 6 HP 5 HP 4 HP 3 HP 2 HP 1 HP 0
usar

Lectura: Entrada de Datos


Lectura en dirección 0x379 (LPT1) o 0x279 (LPT2)
DATO BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
No Pin Pin No No
DB 25 Pin 13 Pin 15 No usar
usar 10 12 usar usar
No Input Input Input Input No No
CN6 No usar
usar 3 2 1 0 usar usar

Interfaz:

La interfaz nos provee 8 salidas TTL, 7 salidas de potencia (500ma) y cuatro


entradas TTL. Es importante tener en cuenta que las salidas TTL entregan una
tensión de 5v y solo se les puede exigir un mínimo de corriente, apenas
suficiente para activar un transistor o bien un par de compuertas TTL.

Así mismo las entradas TTL deben ser alimentadas con una tensión máxima de
5v o de lo contrario el chip resultará dañado. Esta tensión se obtiene desde
VDD a través del regulador U1 (7805).

Las 7 salidas de potencia no son mas que la amplificación mediante un array


de transistores Darlington (ULN2003) de las salidas TTL 0 a 6 (la salida 7 no es
usada). Este chip puede drenar una corriente máxima de 500ma, lo que es
suficiente para activar un LED, un relé y hasta un motor DC de bajo consumo
(tipo motor de grabador).

 La teoría de funcionamiento es muy simple, solo se usan unas compuertas del
tipo Buffer (74HC245) para poder conectarnos con seguridad al puerto paralelo,
y un array de transistores Darlington (ULN2003) para brindar una salida de
mayor potencia.

Cabe aclarar que los dos integrados 74HC245 se alimentan del regulador de
voltaje 7805, el cual se encarga de reducir la tensión de entrada (VDD) a 5v
(Vcc). La tensión VDD debe estar comprendida entre 9 y 12v.
La tensión de entrada VHH alimenta directamente al ULN2003 para obtener
mayor voltaje en caso de querer manejar un relé o bien un pequeño motor. La
tensión VHH debe estar comprendida entre 3 y 15v. VHH podrá conectarse
directamente a VDD (y de esa forma usar solo un fuente de alimentación)
siempre que esto no provoque problemas de ruido.

En los siguientes diagramas se pueden apreciar un ejemplo de conexionado de


un LED y un Relé a las salidas de potencia. En forma análoga podríamos
conectar también un pequeño motor DC.

L293D: Controlando Motores DC


El integrado L293D incluye cuatro circuitos para manejar cargas de potencia
media, en especial pequeños motores y cargas inductivas, con la capacidad de
controlar corriente hasta 600 mA en cada circuito y una tensión entre 4,5 V a 36
V.

Los circuitos individuales se pueden usar de manera independiente para


controlar cargas de todo tipo y, en el caso de ser motores, manejar un único
sentido de giro. Pero además, cualquiera de estos cuatro circuitos sirve para
configurar la mitad de un puente H.

El integrado permite formar, entonces, dos puentes H completos, con los que
se puede realizar el manejo de dos motores. En este caso el manejo será
bidireccional, con frenado rápido y con posibilidad de implementar fácilmente el
control de velocidad.

Diagrama de los PINES

Las salidas tienen un diseño que permite el manejo directo de cargas


inductivas tales como relés, solenoides, motores de corriente continua y
motores por pasos, ya que incorpora internamente los diodos de protección de
contracorriente para cargas inductivas.
Las entradas son compatibles con niveles de lógica TTL. Para lograr esto,
incluso cuando se manejen motores de voltajes no compatibles con los niveles
TTL, el chip tiene patas de alimentación separadas para la lógica (VCC2, que
debe ser de 5V) y para la alimentación de la carga (VCC1, que puede ser entre
4,5V y 36V).

Las salidas poseen un circuito de manejo en configuración "totem-pole"


(término en inglés que se traduce como "poste de tótem", nombre que,
gráficamente, nos remite a un "apilamiento" de transistores, como las figuras en
los famosos totems indígenas).

En esta estructura, unos transistores en configuración Darlington conducen la


pata de salida a tierra y otro par de transistores en conexión seudo Darlington
aporta la corriente de alimentación desde VCC2. Las salidas tienen diodos
incorporados en el interior del chip para proteger al circuito de manejo de
potencia de las contracorrientes de una carga inductiva.
Estos circuitos de salida se pueden habilitar en pares por medio de una señal
TTL. Los circuitos de manejo de potencia 1 y 2 se habilitan con la señal 1,2EN
y los circuitos 3 y 4 con la señal 3,4EN.
Matlab GUIDE

Esta es una potente herramienta de matlab que permite la creación de una


interfaz grafica mediante el cual, el usuario puede interactuar con el programa
de una manera rápida y eficiente, para el presente trabajo, hemos hecho uso
del algoritmo descrito en la primera parte para dibujar un triangulo de
rectángulo ingresando la longitud de uno de los catetos.

1.- Como primer paso para crear una interfaz grafica, digitamos GUIDE en la
ventana de comandos, luego nos mostrara un grafico como el que mostramos a
continuación.

Escogimos la sección blank y luego diseñamos la forma de la ventana como


aparece a continuación.
2.- Como segundo paso, recurrimos al archivo *.m creado, para darle funciones
realizables a cada botón colocado dentro de la ventana, cada uno de estos
botones están relacionados a través de un tac con las funciones del archivo
*.m los algoritmos y comandos utilizados, no serán explicados pues están lejos
del alcance del presente.

3.- En esta ventana hemos colocado algunos comandos que hacen un poco
amena la interacción con el usuario.

A continuación, mostramos la apariencia de nuestra interfaz gráfica.


Codificación de Ventana Interactiva

El texto de color rojo son las explicaciones de cada paso realizado.

function varargout = Imprime(varargin)


% IMPRIME M-file for Imprime.fig
% Este programa permite ejecutar el dibujo de un triangulo
rectangulo
% ingresando la longitud de uno de sus catetos.
% Fue desarrollado en GUIDE de matlab y contiene el
algoritmo
% presentado en la entrega del proyecto.
% el día 8 Abril 09.
% Last Modified by GUIDE v2.5 05-Apr-2009 10:33:23

% Begin initialization code - DO NOT EDIT


gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Imprime_OpeningFcn,
...
'gui_OutputFcn', @Imprime_OutputFcn,
...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State,
varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before Imprime is made visible.


function Imprime_OpeningFcn(hObject, eventdata, handles,
varargin)
% Choose default command line output for Imprime
handles.output = hObject; % Identificador de datos de
aplicación.
guidata(hObject, handles); % Sentencia para salvar datos de
aplicación.

function varargout = Imprime_OutputFcn(hObject, eventdata,


handles)

% Get default command line output from handles structure


varargout{1} = handles.output;
% Banner
% En el texto estatico de la interfaz mostramos un mensaje.
mostrar = '.........¡¡¡ Ingenieria
Electronica !!!, ¡¡¡ Y el que diga que no.......!!! ';
set(handles.mostrar, 'String',mostrar); %
Escribe el mensaje en el static-text.
pause(3); % Espera un tiempo.
for t = 1:length(mostrar); % Desplazamos el
texto a lo largo del Static-text.
set(handles.mostrar, 'String',
mostrar(t:length(mostrar)));
pause(.04);
end;
mostrar = 'Dibujo de un Triangulo Rectangulo';
set(handles.mostrar, 'String',mostrar);

function varargout = edit1_Callback(h, eventdata, handles,


varargin)

p = get(h,'string'); % Almacena el dato ingresado y lo


guarda en p.
d = str2double(p); % Transforma p a formato doble.
handles.edit1 = d; % Almacenamos en identificador.
guidata(h,handles); % Salvamos el identificador.

% --- Executes during object creation, after setting all


properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version
of MATLAB
% handles empty - handles not created until after all
CreateFcns called

% Hint: edit controls usually have a white background on


Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% --- Executes on button press in pushbutton1.


function pushbutton1_Callback(hObject, eventdata, handles)
% Boton Imprime

x = handles.edit1; % Guardamos el tamaño del triangulo en


x.
if x<3.1 % Condicional ya que nuestro plotter solo dibujara
triángulos de lado menores a 3.1cm.

PtoParalelo=digitalio('parallel'); % Habilitamos el puerto


paralelo.
M1=addline(PtoParalelo,0:3,0,'out'); % Pines 0-3 para el
motor 1.
M2=addline(PtoParalelo,4:7,0,'out'); % Pines 4-7 para el
motor 2.
M3=addline(PtoParalelo,0:1,2,'out'); % Pines 0-1 para el
motor3 (Actuador de lápiz).

%%%%%%% Jalamos un poco el papel %%%%


% Para el motor1 n=1 nos da un desplazamiento de 0.034cm.
Medido experimentalmente.
% Donde n es el número de vueltas.
% Motor 1.
derecha=[3 6 12 9]; % Combinacion para que gire hacia
adelante.
for n=1:400 % Nos desplazamos 13.6cm en la hoja.
for m=1:4
putvalue(M1,derecha(m)); % Envia a M1 el valor m de la
matriz derecha.
%retardo
for q=1:1000
for d=1:1000
end
end
end
end

% Para el motor2 n=1 nos da un desplazamiento de 0.2cm.


% Motor 2
izquierda=[9 12 6 3]; % Combiancion para q se mueva a la
izquierda.
for n=1:8 % Nos desplazamos 1.6cm.
for m=1:4
putvalue(M2,izquierda(m)); % Envia a M2 el valor m de
la matriz izquierda.

%retardo
for q=1:1000
for d=1:1000
end
end
end
end
%%%%% Bajamos el lapiz %%%%%%
% Movemos el motor para que el lapiz descienda.
% Motor 3
abajo = 2;
putvalue(M3,abajo); % Envia a M3 el valor correspondiente a
‘abajo’(2).
%retardo 1
for q=1:4000
for d=1:10000
end
end
putvalue(M3,3); % Envia a M3 el número 3.

%%%%% DIBUJAMOS %%%%%%%


% Dibujamos en el recuadro de plot el triangulo rectangulo.
a = [x 0 x]; % X longitud de uno de los catetos en cm.
y = x*5.8; % y longitud del otro cateto en cm.
b = [0 y 0];
plot(b,a); % Dibujamos eñ triangulo.
n1 = (x*200)/6.8; % Convertimos la longitud del triangulo a
numero de vueltas.

%%%% Desplazamos eje y


derecha=[3 6 12 9]; % Combinación.
for n=1:n1 % Giramos hacia adelante n1 vueltas que equivale
a x cm.
for m=1:4
putvalue(M1,derecha(m)); % Envia a M1 el valor m de la
matriz derecha.
%retardo
for q=1:1000
for d=1:1000
end
end
end
end

%%%%%% Desplazamos eje x


izquierda=[9 12 6 3]; % Combinación.
for n=1:n1 % Nos movemos a la izquierda n1 vueltas.
for m=1:4
putvalue(M2,izquierda(m)); % Envia a M2 el valor m de
la matriz izquierda.

%retardo
for q=1:1000
for d=1:1000
end
end
end
end

%%%% cerramos Pto pararalelo


delete(PtoParalelo);

%%%% Habrimos puerto pararalelo%%%


PtoParalelo=digitalio('parallel');
Ambos=addline(PtoParalelo,0:7,0,'out'); % Pines 0-7 para
mover los 2 motores a la vez.
M3=addline(PtoParalelo,0:1,2,'out'); %Pines 0-1 para el
motor 3(Actuador de lapiz).

% Regreso es la combinación necesaria para que los motores


vuelvan a punto
% original donde el motor 1 avanza hacia atras y el motor 2
gira a la
% derecha.
Regreso = [57 108 198 147];
for n=1:n1 % Giramos n1 vueltas.
for m=1:4
putvalue(Ambos,Regreso(m)); % Envia a Ambos el valor m
de la matriz Regreso.
%retardo
for q=1:1000
for d=1:1000
end
end
end
end

%%%% Levantamos Lapiz


% Movemos el motor para que el lapiz suba.
arriba = 1;
putvalue(M3,arriba); % Envia a M3 el valor correspondiente
a ‘arriba’(1).
%retardo 1
for q=1:4000
for d=1:10000
end
end
putvalue(M3,3); % Envia a M3 el número 3.

% Regresamos el motor 2 al punto de origen.


derecha=[48 96 192 144]; % Combinación para regresar el
motor.
for n=1:8 % Retornamos 1.6 cm a la derecha.
for m=1:4
putvalue(Ambos,derecha(m));
%retardo
for q=1:1000
for d=1:1000
end
end
end
end

%%%% Botamos el papel


% Avanzamos hacia adelante para mover el papel.
derecha=[3 6 12 9];
for n=1:580 % Giramos 580 vueltas.
for m=1:4
putvalue(Ambos,derecha(m));
%retardo
for q=1:1000
for d=1:1000
end
end
end
end

% En el texto estatico de la interfaz mostramos el


siguiente mensaje 'Lado
% B del triangulo mide'.
mostrar = 'Lado B del triangulo mide...';
set(handles.mostrar, 'String',mostrar);
pause(3);
for t = 1:length(mostrar);
set(handles.mostrar, 'String',
mostrar(t:length(mostrar)));
pause(.04);
end;

% En el texto estatico de la interfaz mostramos la longitud


del otro cateto desconocido.
mostrar = y;
set(handles.mostrar, 'String',mostrar);

% En caso de que la longitud ingresada sea mayor a 3.1 la


interfaz nos
% envia un mensaje de error 'Introduzca una longitud menor
a 3'.
else
errordlg('Introduzca una longitud menor a 3','Impresora');
end

Paginas consultadas:

http://www.bitacorasguatemala.com/?p=214
http://www.sebyc.com/reess/componentes/74hc245.htm#

También podría gustarte