EL MOTOR PASO A PASO
en inglés Stepper Motor.

Creado por: V. García.

Introducción.

Tanto los motores de corriente alterna como los de corriente continua, son utilizados cotidianamente en infinidad de máquinas. Uno de los problemas que presentan estos motores, consiste en la imposibilidad de controlar la inercia mecánica, lo cual, los deja fuera de un sector que la industria de alta precisión demanda con mayor insistencia cada día. Nos referimos al control de giro de un motor que no se vea influenciado por la mencionada inercia mecánica, dicho control se logra con la mayor exactitud posible inferior a 1º grado, mediante un sistema de control lógico sencillo. La industria necesitaba un motor que aunque no girara a grandes velocidades si lo hiciera con la precisión y estabilidad máxima, en la medida que esto se lograra más se utilizaría en las nuevas tecnologías. 

Asumimos cierto conocimiento básico por parte del lector en conceptos básicos de programación y electrónica. Lea con atención y sin prisas el contenido de este tutorial, nos proponemos describir cómo funcionan los motores paso a paso, de forma que se entienda, por lo que seguiremos estos puntos:

Constitución de un motor de paso.
Funcionamiento del motor de paso.
Parámetros de los motores de paso.
¿Reconocer los polos de un motor de paso?
Control de los motores paso a paso.
Control de un motor pap con el PC.
   * El puerto paralelo
   * Ensamblador
Control de un motor de paso con un PIC.

Los motores paso a paso o también conocidos como motores de paso, han estado con nosotros desde los años 60. El inconveniente que Fig. p1-  Aspecto del motor paso a paso tenía su uso, pasaba por lograr un sistema electrónico fiable y sencillo, de modo que la industria se autoabastece a si misma, día a día se iba logrando un mayor control, con mayor sencillez y de esta forma nos encontramos con sistemas tan sencillos de controlar como los que se utilizan en nuestros días.

Las principales aplicaciones donde se pueden encontrar los motores de paso son: robótica, tecnología militar y aeroespacial, radar, antenas parabólicas, en control de discos duros y flexibles, en unidades de CD-ROM o de DVD e impresoras, en sistemas informáticos, manipulación y posicionamiento de herramientas y piezas en general. 

Constitución de un motor de paso

Los motores eléctricos de corriente alterna como los de continua, están constituidos básicamente por un estator y un rotor que gira libre y ambos están normalmente bobinados, su funcionamiento se basa en la fuerza que generan los campos electromagnéticos creados por la circulación de corrientes eléctricas por sus bobinados. En cambio, los motores paso a paso, en la actualidad están constituidos por unas armaduras como estator en las que se dispone un bobinado único y en otros casos el bobinado dispone de una toma intermedia denominada común, por otro lado está el rotor habitualmente compuesto por un imán permanente. En este tutorial sólo contemplaremos el motor paso a paso de imán permanente, de seis cables o cinco, llamados unipolares.

Fig. p2- Motor pap de 6 polos     
      Fig. p1    

Fig. 3- Estator del motor paso a paso La figura p1 representa el esquemático y a la derecha, se muestra el estator de un motor paso a paso de un pequeño ventilador de refrigeración de la CPU. Este tipo, lleva en la placa de soporte un circuito integrado complementario que le proporciona la posibilidad de funcionar desde el exterior mediante los dos polos, positivo y negativo.

Esto se puede describir mejor con una imagen, véase la figura p2, en la cual se puede apreciar lo descrito anteriormente.  Podemos ver las dos armaduras (estator) y sus bobinados, veremos además que se pueden obtener dos modos de funcionamiento de este tipo de motor, debido a que sus bobinados están provistos de una toma media o común. El modo bipolar, no contemplaría la mencionada toma común, por lo que tendríamos un bobinado compuesto por F1-F3 y otro por F2-F4. El modo unipolar contempla el común y el bobinado F1, el común y F3, el común y F2 y el común y F4, un total de cuatro bobinas. 

Fig. p4- Motor pap esquematizado
Fig. p2

Los motores paso a paso pueden ser muy precisos, la característica principal de estos motores es el hecho de poder moverlos un paso por cada pulso que se le aplique. El grado de precisión de este paso puede variar desde los 90° por pulso, es decir, que se necesitarán 4 pasos para desplazar 90°, hasta pequeños pasos de tan solo 1.8°, es decir, se necesitarán 200 pulsos para completar un giro de 360°. Esto significa, a más pasos, más precisión.

En el párrafo anterior está la respuesta a la pregunta como alguno hace de ¿cuantas vueltas o revoluciones da un motor de paso? una repuesta sería; recuerda que se llaman paso a paso de ahí su nombre y aunque no es su cometido, pueden girar más de 360º, incluso girar a bajas revoluciones, los motores de los discos duros de última generación rebasan fácilmente las 7200 rpm. y aún no está todo dicho .

Otra particularidad de estos motores es que, al contrario de lo que ocurre con los motores eléctricos tradicionales en los que su rotor queda libre cuando no están excitados, en éstos como digo, su rotor está bloqueado cuando se encuentra activo y permanece semifijo debido a la reluctancia magnética que ejerce el imán permanente del rotor sobre los polos del estator.

Por cierto, cuando se disponga de un motor p. a. p.  usado o bien nuevo y no disponemos de sus hojas de datos. Es posible reconocer los polos de un motor de paso y el cable común en un motor unipolar de 5 o 6 cables, siguiendo las instrucciones que se detallan a continuación:

Siguiendo la figura p4, un primer examen visual de los cables puede indicarnos cual es el común (si hay 5) o el par de comunes (caso de 6), también podemos utilizar una tensión de 5Vcc, probando el desplazamiento del rotor al aplicar el positivo al común y el negativo a uno de los cables, marcamos dicho cable con una señal y la dirección, a continuación procedemos con otro cable, lo marcamos y dirección, así podemos averiguar los cables y trazaremos el orden de los bobinados para su activación. Utilizando un polímetro podremos chequear la resistencia entre pares de cables, el cable común por ser la toma media del bobinado, será el que presente la mitad de la resistencia entre él y el resto de los cables.

Funcionamiento del motor de paso

Vamos a tratar de describir el funcionamiento de este tipo de motores de paso, como ya se ha dicho, básicamente están compuestos por bobinados que se pueden activar de forma independiente. Sugerimos que se tenga en mente el esquema de la figura p2, ya que a él nos referiremos en su seguimiento. Para comprender mejor el funcionamiento vamos a dividir en dos partes el modo de activar estos bobinados. 

La disposición de varios bobinados como estator en los motores de imán permanente, permite diferentes formas de agrupar para su alimentación dichos bobinados. Estas formas de conexión permiten clasificar los motores paso a paso en dos grupos:

  1. Los motores bipolares, por que disponen de dos bobinados independientes.

  2. Los motores unipolares, con 4 bobinados los cuales disponen de 5 o 6 u 8 terminales de salida.

Los motores del primer grupo no lo vamos a considerar por lo que directamente entramos en el grupo de los unipolares. Tengamos en cuenta que los motores unipolares de 6 u 8 hilos, podremos conectarlos como motores bipolares, si no utilizamos las tomas centrales o comunes, en cambio no ocurre lo mismo con los de 5 hilos. Así pues, además de los hilos extremos de los bobinados hay otros terminales que corresponden a las tomas intermedias de las bobinas, los cuales se conectan directamente al positivo de la fuente de alimentación para su correcto funcionamiento.

Aclarados estos puntos, pasaremos a describir con más profundidad su funcionamiento por lo que podemos considerar los siguientes puntos:

  • Tomemos el bobinado F1 de una de las armaduras, el contacto a utilizar será F1 y su Común.

  • Por otro lado de la segunda armadura tomaremos el contacto F3 y su Común.

  • En tercer lugar disponemos del contacto F2 y el Común.

  • Y por último el contacto F4 y por supuesto su Común.

De modo que se puede decir que en el primer paso, activaríamos F1, que hará girar el rotor 90º, en el segundo paso F2, lo que produciría un salto del rotor sobre su eje de 90º hasta obtener el máximo flujo magnético, el tercer paso activaríamos F3, lo que haría girar otros 90º el eje y por último activaríamos F4, completando así los 90º restantes del giro de 360º. Analicemos más detenidamente esto a continuación.

De forma que en el primer paso, al conectar la bobina F1, el campo electromagnético generado al circular la corriente eléctrica por el  estator, el rotor girará como máximo 90º, hasta equilibrar su flujo magnético orientando sus respectivos polos opuestos con el estator. En el segundo paso, conectaremos la bobina F2 y como respuesta el rotor volverá a girar esta vez 90º. El tercer paso, esta vez conectemos la bobina formada por F3, lo que hará girar de nuevo 90º más en la misma dirección y por último al conectar F4, se producirá un nuevo paso de 90º con lo que se habrá completado el giro de 360º. Observar que hemos necesitado 4 pasos (o pulsos) para lograr los 360º.

Quizás en la figura p3 se puede comprender mejor la secuencia de lo descrito. Si nos fijamos en la primera línea de la figura, veremos que, otra posible secuencia sería conectar en el primer paso los bobinados F1-F2 en el segundo paso F2-F3, en el tercer paso F3-F4 y en el cuarto paso F4-F1.

Fig. p5- Fases de un motor pap
Fig. p3

Con en estas secuencias, si mediante un sistema eficaz unimos ambas secuencias, podemos entender que hemos logrado una secuencia de 8 pasos para completar un giro, a todas luces se comprende que habremos conseguido una mayor exactitud a la hora de posicionar el eje de nuestro motor de paso. 

Desde el punto de vista de su construcción diremos que existen 3 tipos de motores paso a paso:

  • De imán permanente: es el modelo que hemos analizado en párrafos anteriores; el rotor es un imán permanente en el que se mecanizan un número de dientes limitado por su estructura física. Ofrece como principal ventaja que su posicionamiento no varía aún sin excitación y en régimen de carga.

  • De reluctancia variable: este tipo de motores poseen un rotor de hierro dulce que en condiciones de excitación del estator y bajo la acción de su campo magnético, ofrecen menor resistencia a ser atravesado por su flujo en la posición de equilibrio. Su mecanización es similar a los de imán permanente y su principal inconveniente radica en que en condiciones de reposos (sin excitación) el rotor queda en libertad de girar y, por lo tanto, su posicionamiento de régimen de carga dependerá de su inercia y no será posible predecir el punto exacto de reposo.

  • Híbridos: Son la combinación de los dos tipos anteriores; el rotor suele estar constituido por anillos de acero dulce dentado en un número ligeramente distinto al del estator y dichos anillos montados sobre un imán permanente dispuesto axialmente.

Parámetros de los motores paso a paso.

Conozcamos el significado de algunas de las principales características y parámetros que se definen sobre los motores paso a paso:

  • Par dinámico de trabajo ( Working Torque): Este depende de sus características dinámicas, son el momento máximo que el motor es capaz de  desarrollar sin perder paso, es decir, sin dejar de responder a algún impulso de excitación del estator y dependiendo, siempre de la carga.

    Generalmente el fabricante ofrece, curvas denominadas de arranque sin error (pull-in), que relacionan el par en función el número de pasos. Debe tenerse en cuenta que, cuando aumenta la velocidad de rotación del motor, se produce un aumento de la f. c. e. m. generada por dicho giro, por tanto, se produce una disminución de la corriente absorbida por los bobinados del estator y como consecuencia de todo esto, disminuye el par motor.

  • Par de mantenimiento (Holding Torque): Es el par exigido para desplazar, en régimen de excitación, un paso el rotor cuando la posición anterior es estable, es mayor que el par dinámico y actúa como freno para mantener el rotor en una posición estable dada.

  • Para de detención ( Detention Torque): Se llama al par de freno propio de los motores de imán permanente, es debido a la acción de la reluctancia del rotor cuando los devanados del estator están desactivados.

  • Angulo de paso ( Step angle ): Se define como el avance angular de un paso que, se produce en el motor por cada impulso de excitación. Se mide en grados

  • Momento de inercia del rotor: Es el momento de inercia asociado que se expresa en gramos por centímetro cuadrado.

Todos estos parámetros que acabamos de definir, se miden en miliNewtons por metro cuadrado. 

Control de los motores paso a paso. 

hbridpte.gif- Puente híbrido En un principio vamos a describir un sencillo control de motor paso a paso, que nos muestre donde pueden surgir los problemas cuando nos proponemos realizar este tipo de práctica. 

 Para realizar un control de estos motores, será necesario como se ha descrito, generar una secuencia determinada de impulsos. Además, es necesario que estos impulsos sean capaces de entregar la corriente necesaria para que los bobinados del motor se exciten, en la figura de la derecha, se muestra el diagrama de bloques de un sistema híbrido de control para motores paso a paso. 

Se pueden apreciar los cuatro transistores de potencia con sus diodos de protección para evitar en lo posible la f.c.e.m. (fuerza contra-electromotriz) generada en las bobinas, por el efecto de los campos electromagnéticos implicados. 

En cuanto al modo de activar la carga se realiza en la secuencia Q1-Q3 y Q2-Q4, esta es una de las posibles formas de realizar una etapa de potencia. En la figura p4, para el circuito de potencia se ha utilizado un circuito integrado el ULN2003, se trata de un dispositivo con encapsulado DIL (dual in line), que alberga siete transistores de hasta 0'5A, que para muchos de los casos es suficiente al igual que nuestro caso. La diferencia entre el anterior y el ULN2803 es que éste  tiene 8 pares de transistores en darlington. En la figura que sigue, la patilla 10 de este dispositivo normalmente se conecta al positivo para reducir los efectos de los bobinados del motor.

drivul28.gif- Driver con el UL2803
Fig. p4

Ahora, vamos a describir el circuito de control, la etapa que se encarga de realizar la secuencia de los impulsos que activarán los transistores de la etapa de potencia. El esquema completo del generador de impulsos en la secuencia que hemos descrito se puede apreciar a continuación, figura p5. En esta figura destacamos dos partes, las cuales están enmarcadas para realzar su relevancia.

fig. p9- Esquema del control mpp con dos IC.
Fig. p5

555astable.gif - 555 monostable.En primer lugar se aprecia un oscilador formado por dos inversores IC1a e IC1b y una red R/C, que ataca la entrada de reloj del CD4017, está compuesto por un contador Johnson de 5 etapas, con diez salidas que incluye un reset (pin 15) y una entrada inhibida (pin 14).  Bien, el circuito utilizado como oscilador lo podemos sustituir por un circuito 555 conectado como astable, se puede ver en la figura de la derecha. Los valores de los componentes se elegirán de modo que la frecuencia, se pueda ajustar entre ciertos valores de los que dependerá la velocidad del motor paso a paso, ciertamente no puede ser elevada. 

Este oscilador nos parece más 'robusto', se trata de un circuito integrado al alcance de muchísima gente por sus prestaciones y costo, destaca su sencillez de manejo y que el lector ya habrá experimentado con él en otras aplicaciones. Utilizar el CD4017, es debido igualmente a su simplicidad a la hora de obtener unas salidas consecutivas de un pulso de igual amplitud que el aplicado a la entrada.

l293b.gif - Esquemático del L293B
Fig. p6

Por último destacamos la etapa de registro de señales para la salida hacia el sistema de potencia elegido, corresponde al área enmarcada de la derecha figura p5. Esta etapa puede lograrse de distintas formas, siempre atendiendo a los medios que dispongamos para su realización, un modo es el de la figura p5. En la figura p7, se ha optado por utilizar el circuito integrado ULN2003, que puede sustituirse por el ULN2803 (8 transistores) y a su vez este circuito puede sustituirse por el viejo L293B, cuyo esquemático se muestra en la anterior figura p6.

  Fig. mppesq3ci.gif- Circuito completo del control de un mpap
Fig. p7

Repasando viejos esquemas y distintos circuitos que uno guarda en ciertos momentos, encontré uno que para ilustrar el presente trabajo creo que es idóneo figura p8. 

Fig. p12b - Un nuevo control de mpap
Fig. p8

Como se puede ver es bastante sencillo y puede sernos bastante útil en muchas ocasiones ya que no exige muchos componentes para obtener un control relativamente fácil y lo mejor es que es económico ya que los sistemas comerciales son bastante más caros. Este circuito está hecho por componentes normalizados y puede adaptarse fácilmente para ser controlado por una computadora.

Pueden utilizarse transistores para Q1-Q4 de mayor o menor potencia dependiendo del motor a utilizar y también intercalar el ULN2003. Por cada impulso de reloj que apliquemos a la entrada PASO, el motor avanzará un paso y mediante el conmutador S1, podremos decidir el sentido de giro.

Control de un motor paso a paso con el PC.

Por cierto, todos estos sistemas de control para motores de paso descritos, una vez montados, experimentados y puestos a punto, son muy eficientes sin ninguna duda, pero en este tutorial no nos paramos aquí y vamos a abordar otro sistema de control para este tipo de motores realizado desde la consola o teclado de nuestra computadora personal o PC.

Este tutorial pretende, cubrir en parte la necesidad de una guía práctica para la adquisición de datos y cierto control de dispositivos como una alternativa al uso de los PLC (Controladores Lógicos Programables) y tarjetas de Adquisición de Datos, de modo que los interesados puedan adquirir experiencias con sistemas en tiempo-real. Pretendemos dar a conocer algunos aspectos relevantes del puerto paralelo, de modo que se pueda utilizar como una interfase de entrada/salida que funcione de modo subordinado a nuestras rutinas de software, los puertos de E/S se constituyen en el medio por el cual el microprocesador de una computadora se comunica con el mundo de su entorno.

El puerto paralelo de un computador personal (PC) es ideal para ser usado como herramienta para control de motores, relés, LED's, etc. El cual 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 computadores 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).

Para lo cual tendremos que, revisar algunos conceptos sobre este elemento, en otros casos aprenderemos algunas de las posibilidades que nos ofrece ésta que, puede ser la herramienta que sirve para 'todo', estamos hablando del más conocido como PC. Una aclaración, el concepto de entrada/salida es respecto del punto de vista del PC.

Lo que necesitamos es la consola en modo DOS (en la mayoría de los casos será suficiente), desde la que trataremos los programas en algunos casos a nivel de ensamblado en código máquina, puede que alguno disponga de otra herramienta como algún programa más sofisticado que permita hacer lo mismo desde una interfase más 'amigable'. 

De todos modos el tratamiento de datos para el control será similar. Antes de discutir el sistema de control y para los que no tengan muy claro el cometido del bus de salida de una computadora personal (PC), creemos que es conveniente revisar al menos teóricamente el bus paralelo que utilizamos normalmente para la impresora llamado también, puerto paralelo de impresora LPT.

Como hemos dicho mediante el PC, es un modo adecuado de controlar este tipo de motores, con ayuda de un programa conseguiremos  variar la velocidad, sentido de giro y ángulo de giro a placer; además también seremos capaces de programar una secuencia compleja de posicionamiento, velocidad y aceleración del motor. Pero lo dicho, vayamos por partes.

RECORDATORIO.

1.- Se recomienda que antes de utilizar una interfase de cualquier tipo, se verifiquen a fondo todas y cada una de las conexiones y nunca nos cansaremos de advertir que se haga hincapié en las tensiones que se utilicen. Por este motivo recomendamos utilizar circuitos buffers para separar y preservar el bus del PC de cualquier posible error, lo que conlleva, la más que posible destrucción del puerto paralelo.
 2.- Bajo ningún pretexto se deben rebasar los niveles TTL (tensión 0 a 5V), las corrientes de consumo deben llevar un circuito separador. La inversión de la tensión de alimentación, destruirá el puerto paralelo.
 
3.- Para la conexión o desconexión entre la interfase y el PC es imprescindible que ambos estén apagados.   

El puerto paralelo.

En la actualidad, muchos circuitos de control robótico usan el puerto paralelo del PC (conocido por Centronics) como medio flexible y fácil para programarlos de manera rápida y segura o como control y procesamiento de sistemas, evitando con ello circuitería complementaria. En ciertas aplicaciones también es habitual utilizar el puerto serie mediante una interfase RS232, que en este tutorial no se contemplará. Su apariencia es la siguiente:

Fig. p13- Conector puerto paralelo del PC
Fig. p9 - Conectores paralelo Centronics PC/Impresora

Fig. p14-  Conector serie BD9
Fig. p10 - Conector serie DB9

En resumen, el puerto paralelo está formado por las 17 líneas de señales y 8 líneas de tierra. Las líneas de señales, están formadas por estos tres grupos de registros: 

    • 4 Líneas, registro de control

    • 5 Líneas, registro de estado

    • 8 Líneas, registro  de datos

Todos estos pines no se controlan con un único registro de datos sino que, un puerto Centronics (LPT1, LPT2, etc...) dispone de 3 registros para poderlo controlar, esto es: 

  • Enviar Datos (salida)

  • Entrar Datos (entrada)

  • Registros de control 

Para acceder a los tres registros de cada puerto al programar, nos hemos de referir a cada registro con una dirección de memoria implícita, fijada por la BIOS al botar el ordenador. Aunque aquí comentaremos las más usuales, sería conveniente disponer de un algoritmo que nos informase de la dirección de memoria de cada uno de los tres registros, ya que las máquinas difieren entre si. Pero comentemos cada registro con detalle:

Enviar Datos (salida)

Como ya se ha comentado éste registro es de sólo escritura, por lo que es el medio que nos servirá para enviar datos a un dispositivo externo (motor pap)  y nunca para recibirlos, y estos datos serán enviados byte a byte. Las direcciones más habituales, en hexadecimal de estos registros son para: LPT1 = 0x378 h  o 78:03 (888 en decimal) y LPT2 = 0x278 h o 78:02 (632 en decimal). Esto se puede verificar fácilmente en el setup del PC o bien en la ventana que generalmente muestra el PC en el momento del botado.

Por tanto, para escribir un dato en el bus de salida de datos pines 2 a 9, debemos escribir el byte correspondiente en la dirección hexadecimal 0X378 cuando trabajemos con el LPT1 y 0x278 cuando trabajemos 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.

Además, esta función es la más conocida del puerto Centronics. Este registro controla los pines del 2 al 9, que son las líneas de datos de D0 a D7. El registro que lo controla es el siguiente:

Registro de salida de datos

Peso de los Bits del registro  7 6 5 4 3 2 1 0
Nombre D0 D1 D2 D3 D4 D5 D6 D7
Nº de pin  (2) (3) (4) (5) (6) (7) (8) (9)

Entrada Datos

Este es un registro de entrada, por tanto de sólo lectura, o sea, sólo nos servirá para recibir datos procedentes de un dispositivo externo y nunca para enviarlos, este registro es, únicamente modificable desde el exterior y por hardware. Ciertamente, la recepción de datos ya no resulta tan evidente como el envío, al parecer en los tiempos que se planificó la norma del puerto Centronics, no se pensó en que el dispositivo externo enviase datos de forma masiva al PC y solo se le dotó de 5 patillas al puerto para recibir datos del dispositivo externo.

 Peso
0 0

 \

  NO SE USAN

 /

1 0
2 0
3 Error pin 15
4 SLCT pin 13
5 PE pin 12
6 ACK pin 10
7 BUSSY pin 11

Para leer el estado de los pines de entrada (10, 12, 13 y 15) se debe realizar una lectura en 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 cuyo 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.

Queda claro que, disponemos de sólo 5 pines de entrada, esto hace imposible que el PC en un ciclo de reloj, reciba un byte completo,  desde el dispositivo externo. Lo que se suele hacer normalmente para salvar este problema, es usar un pin que haga las funciones de control, por ejemplo BUSY, con el que por cada flanco de subida o bajada, el PC interpretará que el dato de entrada es válido. De esta manera, en cada ciclo, el PC recibe un Nibble del dato, lo que conlleva la necesidad de dos ciclos para recibir un byte (8 bits). 

Nota.- Un byte, está compuesto como ya se sabe, por dos partes de 4 bits llamadas Nibble alto y Nibble bajo, por ejemplo la dirección del puerto 0378h, la de menor peso 78h y la de mayor peso 03h. Si consultamos desde DOS con el debug, la dirección del puerto se encuentra en forma invertida (78 03), entonces la dirección es 0378 en hexadecimal. Recordemos que para salir del debug, es necesario escribir en la línea de comandos, q y luego Intro.

Fig. p15- Ventana del Debug, 
      para ver el puerto
Fig. p11

Registros de control (externo)

Este registro, contrariamente a los anteriores, es del modo Lectura/Escritura y normalmente es usado para el caso concreto donde el dispositivo externo es una impresora, aunque hay algún pin que nos servirá, como ya veremos al  describir las patillas. 

Peso de los Bits

 
 

0

  STROBE * (pin1)
 

1

  AUTO FEED (pin 14)
  2   INIT * (pin 16)
  3   SLCT IN (pin 17)
  4   IRQ ENABLE
 

5

   
  6    
  7    

Estos pines tienen funciones concretas, como descripción general podemos considerar una impresora como dispositivo de salida.    
STROBE *

Esta línea se activa a 0, esto indica a la impresora que hay un carácter correcto a la salida del conector Centronics. Pero esta señal para que la impresora no lea el carácter dos veces, debe desaparecer inmediatamente.

BUSY

Es una línea de entrada que utiliza la impresora para indicar al PC que está ocupada (busy) y así, evitar que el PC le envíe mas caracteres. Habitualmente la impresora usa este recurso justo después de reconocer STROBE, y procesar el dato recibido con tiempo.

ACK

La señal de Acknowledge (reconocido), es de entrada y la manda la impresora al PC, para indicarle que ha recibido correctamente el dato enviado por éste.

AUTO FEED

Esta señal a 1, le indica a la impresora si debe avanzar una línea después de cada retorno de carro, ya que hay impresoras que de no hacerlo así, machacarían una línea tras otra. Le indica, si ha de enviar automáticamente un LINE FEED después de cada CARRIAGE RETURN (código ASCII nº 13). 

INIT *

Con esta línea, el PC tiene la posibilidad de realizar una inicialización o RESET a la impresora. Este bit está a 1 y brevemente debe ponerse a 0 para volver a cargarse con un 1, ya que sino, la impresora realizaría un reset tras otro indefinidamente.

SLCT IN

Esta línea debe de estar normalmente a 1. Mediante esta línea el ordenador puede poner a la impresora en modo Off-Line y realizar pausas. 

IRQ ENABLE

Esta línea es una señal de interrupción habilitada que envía la impresora cuando ocurre alguna interrupción inesperada.

SLCT

Esta señal corresponde normalmente al interruptor ON-LINE de la impresora, para que el usuario pueda seleccionarla.

D0 - D7

Estas son las 8 líneas de datos del registro de salida, ya comentadas anteriormente.

PE

Esta línea de entrada sirve para que la impresora comunique al PC que se ha quedado sin papel (PAPER END). Esta señal diferente a la señal de ERROR *, normalmente es procesada dando como resultado una pausa en la impresión, para dar tiempo al usuario a poner más papel. En un dispositivo que no sea una impresora, ambas señales podrían ser tratadas como diversos niveles de error del sistema.

ERROR *

Como ya se ha comentado antes, se trata de un error irrecuperable y suele ser debido a fallos de transmisión y recepción u otros más graves.

Funcionamiento mediante el BIOS y el MS-DOS.

El BIOS (Basic Input Output System) de IBM, en el momento del arranque o POST (Power On Seft Test) crea una tabla con 4 direcciones base de puerto paralelo de impresora, en el espacio de la memoria principal (RAM), estos se almacenan como 4 bytes empezando con la dirección de memoria 408h. Durante el arranque, el BIOS comprueba si hay puertos paralelos en las direcciones base 3BCh, 378h y 278h, en ese orden y almacena la dirección base de cualesquiera que hayan sido encontrados en posiciones consecutivas de dicha tabla. Las posiciones que no son usadas pueden estar a 0, o como algunos BIOS lo hacen, le asignan la dirección del primer puerto encontrado.

Algunos programas pueden ignorar esta tabla, aunque ésta es utilizada al menos por el propio BIOS (mediante la interrupción INT 17, de E/S de impresora) y por el MS-DOS. El BIOS detecta estos puertos escribiendo AAh en el registro de datos (en la dirección de E/S Base + 0) y luego, si en el registro de datos se lee AAh, significa que hay un puerto activo.

Asignación de direcciones:

Dirección Nombre Ubicación
3BCh lpt1 Adaptador de impresión primario
378h lpt2 Adaptador de impresión secundario

Las referencias a cada registro del puerto se realizan de la siguiente forma:  
Permite acceder a los siguientes bits

Registro de datos

Base (datos)=base+0 Base (datos)=378h D0, D1, D2, D3, D4, D5, D6, D7
Estado Estado=base+1 Estado=379h S3, S4, S5, S6, S7
Control Control=base+2 Control=37Ah C0, C1, C2, C3

Ensamblador.

A continuación se darán las funciones a utilizar para leer y escribir puertos en ensamblador. En Ms-DOS no tenemos ningún tipo de restricción de acceder a los puertos. En Windows 3.x, 9x y Me tampoco hay restricciones normalmente a no ser que el puerto esté bajo el control de un controlador de dispositivo virtual. En Windows NT, el sistema operativo tiene control total sobre la máquina por lo que hay que pedir un permiso que se hace mediante un driver.

Los opcodes IN y OUT permiten leer y escribir, respectivamente, datos a un puerto cualquiera. La secuencia a seguir podría ser. 

Para leer:

mov dx,Puerto ’DX = Puerto (puede ser ctte.  o ref. de memoria si es variable.
in al,dx  ’Leer del puerto DX y lo guardo en AL

Y para escribir:

mov dx,Puerto                             ’DX = Puerto (puede ser cte. o ref. de memoria si es variable.
out dx,al                                        ’Manda AL al puerto DX

La interfase.

Para utilizar el puerto paralelo descrito, será necesario procurarnos una interfase. Como puede que en el comercio no encontremos este tipo de interfase, es preciso que nos dispongamos a realizar un pequeño trabajo artesanal, pero no por ello, menos interesante y al mismo tiempo efectivo ya que, será un elemento hecho a medida como el de la figura p12.

Fig p16.gif - Esquema del interface del Puerto paralelo
Fig. p12 Click para ampliar

 La placa de interfase, nos presenta tres conectores, uno de 8 salidas TTL, uno con 7 salidas de potencia (500mA) y un tercero de cuatro entradas TTL. Es importante tener en cuenta que las salidas TTL entregan una tensión de 5V y sólo se les puede exigir un mínimo de corriente, apenas suficiente para activar un transistor o bien unas pocas puertas TTL.

Un conector de alimentación de 3 patillas, una, nos proporcionará los 15V de tensión máxima (ULN2003), otra patilla es masa o GND y la tercera nos proporciona la seguridad ante la inversión al conectar el conector o 'plug'. Un regulador 7805 regulará su salida a 5V (TTL), para los circuitos integrados U2 y U3.

La tensión de alimentación como se ha mencionado, se obtiene a través del regulador U1 (7805), con el que dispondremos de los 5V máximos, típicos de la TTL, para no dañar los distintos chips implicados. Para la potencia de las salidas TTL, utilizaremos el ULN2003, como ya se ha mencionado, se trata de una amplificación en corriente.

En teoría el funcionamiento es muy simple, sólo se usan unos Buffer triestado del tipo TTL 74HC245 (U2, U3) para poder conectarnos con seguridad al puerto paralelo y una matriz  de transistores Darlington ULN2003 (U1) para obtener una salida de potencia de 0'5 Amperios. 

Las 3 entradas (Input 0-3), se ponen a nivel alto al estar conectadas a VCC mediante la matriz de resistencias (Array 1).  La función de estas resistencias hace que las entradas que no estén utilizadas se verán siempre en estado "1", a esto se conoce como puesta en alto o Pull-Up. Por lo tanto, las entradas, sólo serán leídas como estado "0" cuando sean conectadas expresamente a GND (masa).

En la salida del ULN2003 se han conectado una resistencia de 270Ω y un diodo LED por cada salida, para que nos sirva de indicador visual del estado de las salidas en cada instante. Desde este conector ya disponemos el control sobre el propio motor al que vamos a controlar.

Con esto consideramos que está bastante descrito el sistema utilizado en algunos casos cuando se pretende el control de un motor de paso, para el que se aprovecha el puerto paralelo del PC.

Un colaborador como es Javier Pérez, ha tenido la gentileza de cedernos un tutorial del que es su autor, nos parece apropiado para ilustrar con sus conocimientos nuestro 'sitio', lo que hacemos público y notorio. Siga este enlace para descargar el tutorial mencionado.

Como las técnicas siguen su curso, en otro tutorial abordaremos el uso de los modernos micros. CONTINUARÁ...

 

Creado el: 06-10-2004
Actualizado el: 16-03-2007