Antologia de Control Automatico
Antologia de Control Automatico
Antologia de Control Automatico
TECNNOLÓGICA INDUSTRIAL
CONTROL AUTOMÁTICO
INDICE
INTRODUCCIÓN
Objetivo
2. Lenguaje C de programación…………………………………………….21
2.1 Sentencias…………………………………………………………………25
2.2 Funciones …………………………………………………………………37
INTRODUCCIÓN
Otras ventajas de emplear una PC como elemento de control para los sistemas
de esta categoría industrial son los siguientes:
1. Panorama de la PC en la industria
2. Lenguaje especifico de control
3. Aplicación de una estrategia de control a un sistema dinámico
OBJETIVO
Ello ha sido debido a las diferencias entre ambas máquinas, que las separan, en
cuanto a su aplicación, más de lo que las une su semejanza básica, a saber, su
carácter de sistemas programables construidos alrededor de un
microprocesador.
PLC PC
Hardware
Software
Con ellas, se pueden desarrollar aplicaciones para ordenadores (tipo PC, por
ejemplo), con captura de datos, análisis de señales, presentaciones en pantalla,
envío de resultados a disco e impresora, etc.
Requisitos.
Módulos de un SCADA.
1.3 GRAFCET
Los principios que inspiraron la creación del GRAFCET y en los que se basa su
aplicación son los siguientes:
Ejemplo:
Dentro de las estructuras básicas de GRAFCET existen tres tipos que resuelven
la mayoría de los problemas secuenciales de la industrial:
• Secuencia Lineal
• Convergencia y divergencia “OR” (Subprocesos alternativos)
• Convergencia y divergencia “AND” (Subprocesos simultáneos)
Divergencia y convergencia OR
2) Una serie de caminos simultáneos con una macro estructura lineal, aunque
pueden contener otras estructuras más complejas. Una o más confluencias
AND de dichos caminos, de manera que la macro estructura debe ser global
mente cerrada.
Ejemplo:
Como se puede observar en la figura anterior existen tres estaciones para las
cuales existen tres procesos que se pueden resolver de manera independiente y
sólo existe una condición para iniciar este proceso la cual será mostrada por el
instructor empleando la divergencia AND.
2. Lenguaje de programación C.
El lenguaje C fue inventado por Dennis Ritchie en 1972, cuando trabajaba junto
con Ken Thompson, en el diseño del sistema operativo UNIX.
/*****************************************************/
Antología elaborada por. M. en C. Bautista Quintero Ricardo 18
Departamento de control
CNAD
CONTROL AUTOMÁTICO
#include <stdio.h>"
main ()
{
printf ("Hola mundo");
}
Tipos de datos
#include <stdio.h>
i=1
c=c
f = 1.000000
d = 0.100000
Operadores
Operador Acción
int x, y; int x, y;
x = 2; x = 2;
y = ++x; y = x++;
/* ahora x tiene el valor 3 /* ahora x tiene el valor 3
e y tiene el valor 3 */ e y tiene el valor 2 */
Los operadores del mismo nivel de precedencia son evaluados por el compilador
de izquierda a derecha. Se puede alterar el orden de evaluación utilizando
paréntesis.
Ejemplo:
x1 = 2 + 3 * 4; /* x1 = 14; */
x2 = (2 + 3) * 4; /* x2 = 20; */
x3 = -4 - (-1); /* x3 = -3; */
x4 = 10 / 2 % 3; /* x4 = 2; */
x5 = ++x3 - x4; /* x3 = -2; x5 = -4; */
x6 = x3++ - x4; /* x6 = -4; x3 = -1; */
x1 = -x1; /* x1 = -14; */
x2 = (x1 + x2) / x3; /* x2 = -6; */
Antología elaborada por. M. en C. Bautista Quintero Ricardo 21
Departamento de control
CNAD
CONTROL AUTOMÁTICO
La palabra relacional se refiere a la relación entre unos valores y otros. La palabra lógico
se refiere a las formas en que esas relaciones pueden conectarse entre sí.
Los operadores se basan en la idea de cierto (true en inglés) y falso (false en inglés). En
C, cualquier valor distinto de cero es cierto, y el valor 0 es falso. Las expresiones que son
ciertas toman el valor de 1 y las que son falsas toman el valor de 0.
Ejemplo:
void main (void)
{
int x1, x2, x3, x4, x5, x6;"
x1 = 10 < 12; /* x1 = 1; */
x2 = 10 > 12; /* x2 = 0; */
x3 = -1 && 5; /* x3 = 1; */
x4 = 0 || x3; /* x4 = 1; */
x5 = x1 >= x2 <= x3; /* x5 = 1; */
x6 = x1 == x2 || x3 != x4; /* x6 = 0; */
x1 = !x1; /* x1 = 0; */
x2 = ! (!x1 || x3 <= x3); /* x2 = 0; */
x3 = 1 && 0; /* x3 = 0; */
x4 = 1 || 0; /* x4 = 1; */
x5 = !(-10); /* x5 = 0; */
x6 = !!x4; /* x6 = 1; */
Antología elaborada por. M. en C. Bautista Quintero Ricardo 22
Departamento de control
CNAD
CONTROL AUTOMÁTICO
}
Operadores a nivel de bits
Estos operandos realizan operaciones sobre los bits de un byte o una palabra
(dos bytes). Solo se pueden utilizar con los tipos char e int. Estos operadores
son:
Operador Acción
& Y
| O
^ O exclusiva (XOR)
~ Complemento (NOT)
>> Desplazamiento a la derecha
<< Desplazamiento a la
izquierda
2.1 Sentencias
Sentencia if
if ( expresión )
sentencia
o
if (expresión)
sentencia_1
else sentencia_2
Ejemplos:
if (x <= y)
if (x <= z)
numero_menor = x;
else
numero_menor = z;
else
if (y <= z)
numero_menor = y;
else
numero_menor = z;
El else siempre está asociado al if más cercano. Los dos siguientes ejemplos
son distintos:
/**** Ejemplo 1: ****/
if (n > 0)
if (a > b)
z = a;
else
z = b;
Sentencia switch
switch (expresión)
{
case expresión_constante_1:
sentencias_1
break;
case expresión_constante_2:
sentencias_2
break;
case expresión_constante_3:
sentencias_3
break;
.
.
.
default:
sentencias_n
}
Una expresión constante es una expresión en la que todos los operandos son
constantes.
El switch evalúa expresión. A continuación evalúa cada una de las expresiones
constantes hasta que encuentra una que coincida con expresión. Cuando la
encuentra ejecuta las sentencias correspondientes a ese case. Si no hay
ninguna expresión case que coincida con expresión, se ejecuta las sentencias
correspondientes al default.
Ejemplo:
switch (operando)
{
case 1:
x=x * y; break;
case 2:
x=x / y; break;
case 3:
x=x + y; break;
case 4:
x=x- y; break;
default:
printf ("ERROR");
}
Observaciones
Sentencias iterativas
Sentencia while
Sintaxis
Descripción
Ejemplo:
While(conta<10)
{
gotoxy(10,10);
printf(“El contador es:%d”,conta);
conta++;
delay(300);
}
Sentencia for
Descripción
Ejemplo:
#include <stdio.h>
{
int i;
for(i=0;i<100;i++)
{
printf(“Variable i=%d”,i);
}
}
Observación
La instrucción:
for (;;)
sentencia; es un bucle infinito. Sin embargo, aunque en este bucle no es posible
salir por la condición del for, se puede salir por otros medio (por ejemplo,
mediante la sentencia break.
Sentencia do
Sintaxis
do
sentencia
while (expresión);
#include <stdio.h>
Observación
Por ejemplo:
int var1[10];
char nombre[50];
float numeros[200];
long double cantidades[25];
var1[5] = 40;
contador = var1[3] + 7;
if(var1[0] >>= 37)
Por supuesto los subíndices resultantes de las operaciones tienen que estar
acotados a aquellos para los que el array fue declarado y ser enteros. La
inicialización de los arrays sigue las mismas reglas que vi para los otros tipos de
variables, es decir: Si se declaran como globales ( afuera del cuerpo de todas las
funciones ) cada uno de sus elementos será automáticamente inicializado a
cero. Si en cambio, su declaración es local a una función, no se realiza ninguna
inicialización, quedando a cargo del programa cargar los valores de inicio.
int numero[8] = { 4, 7, 0, 0, 0, 9, 8, 7 };
Obsérvese que la lista está delimitada por llaves. Otra posibilidad, sólo válida
cuando se inicializan todos los elementos del array, es escribir:
int numero[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int numero[10] = { 1, 1, 1 };
En éste caso los tres primeros elementos del mismo valdrán 1, y los restantes
cero en el caso que la declaración sea global, ó cualquier valor impredecible en
el caso de que sea local.
Ambas maneras son equivalentes. Sin embargo hay, en el lenguaje C, una forma
más compacta de declararlos:
mas común para este caso es, declarar el array como unsigned char, con lo que
se lleva el alcance de sus elementos a 255. Para el caso de tener que albergar
en un string el caracter EOF ( -1 ) y al mismo tiempo caracteres con ASCII mayor
que 127, se podría definir el array como int, pero su inicialización se tendrá que
hacer obligatoriamente usando llaves, como se vio anteriormente. Se deduce
entonces, de lo antedicho que un string sigue siendo un array de caracteres, con
la salvedad del agregado de un terminador, por lo que las propiedades que se
estudiarán a continuación, se aplicaran indistintamente a ambos.
Los arrays, como todos los otros tipos de variables, pueden ser pasados como
argumentos a las funciones. Vea esquemáticamente como sería la sintaxis:
datos y las variables simples vistas anteriormente, ya que los arrays son
pasados a las funciones por DIRECCION y no por valor.
En el lenguaje C se prefiere, para evitar el uso abusivo del stack, cuando hay
que enviar a una función una larga estructura de datos, en lugar de copiar a
todos ellos, cargar el stack sólo con la dirección de la posición de memoria
donde está ubicado el primero. El nombre de un array equivale sintácticamente a
la dirección del elemento cero así será:
Esto habilita a las funciones a que puedan acceder a los arrays directamente, allí
donde el programa los ha ubicado en la memoria, por lo que pueden
MODIFICARLOS EN FORMA PERMANENTE aunque no hayan sido declarados
como locales a la función misma ni globales al programa.
Es muy importante recordar este último concepto, a fin de evitar errores muy
comunes, en los primeros intentos de programación en C. Otra característica
importante de los arrays es que, su nombre ( ó dirección del primer elemento )
es una CONSTANTE y no una variable. El nombre de los arrays implican para el
compilador el lugar de memoria donde empieza la estructura de datos por lo que,
intentar cambiar su valor es tomado como un error, así si escribiera por ejemplo:
Arrays multidimensionales.
Las estructuras de datos del tipo array pueden tener más de una dimensión, es
bastante común el uso de arrays "planos" ó matriciales de dos dimensiones, por
ejemplo:
Si declara:
int matriz[3][4];
columnas: 0 1 2 3
char dia_de_la_semana[7][8] = {
"lunes", "martes", " miercoles",
"jueves", "viernes", "sábado",
"domingo"
};
En este caso el elemento [0][0] será la "l" de lunes, el [2][3] la "r" de miércoles,
el [5][2] la "b" de sábado, etc. Nótese que los elementos [0][5], [1][6], etc. están
inicializados con el caracter NULL y demás [0][6] y [0][7], etc. no han sido
inicializados. Si le parece que en este párrafo se nos escapó un error, está
equivocado, lo que ocurre es que se olvidó de contar los índices desde 0. Este
último ejemplo también podría verse como un array unidimensional de strings.
Declaración:
Observaciones:
Las instrucciones inp y inpw son macros que leen del puerto de entrada
especificado por portid.
Las instrucciones outp y outpw son macros que escriben a la salida del puerto
especificado por portid.
Valor de Retorno:
Para poder manipular los bits de los puertos de entrada y salida, usaremos la
estructura normal de programación de C.
Primero se verá el manejo de las instrucciones inp y outp, para el caso de leer
un puerto y sacar un dato por un puerto de salida.
NOTA IMPORTANTE: La tierra de estas señales es del pin 18 al 25 en DB25, del pin 19
al 30, 33 centronics 17 tierra al chasis
3. ALGORITMOS DE CONTROL
Como se puede observar esta fue la primera idea operativa sobre control
automático, esto inicio una gran secuela de desarrollo e implementación de
sistemas de control a lazo cerrado, y dentro de estos desarrollos se inicio el
estudio de algoritmos de control de diversas formas, es decir, las “recetas” de
control implementadas fueron dando a la comunidad científica una guía de que
se debía aplicar para los diversos sistemas. A partir de esto se intensifico los
trabajos de cómo modelar matemáticamente los procesos y los diversos
controladores, con esto se logro dar resultados importantes la estabilidad y la
observabilidad de sistemas dinámicos con el fin de mantener reguladas una o
varias variables.
Antología elaborada por. M. en C. Bautista Quintero Ricardo 36
Departamento de control
CNAD
CONTROL AUTOMÁTICO
This part will show you the characteristics of the each of proportional (P), the
integral (I), and the derivative (D) controls, and how to use them to obtain a
desired response. In this analysis, we will consider the following unity feedback
system:
e(t)
R
Controller Plant
Y
The transfer function of the PID controller looks like the following:
K
KP + I + KDs
s
1. KP = Proportional gain
2. KI = Integral gain
3. KD = Derivative gain
First, let's take a look at how the PID controller works in a closed-loop system
using the schematic shown above. The variable (e) represents the tracking error,
the difference between the desired input value (R) and the actual output (Y). This
error signal (e) will be sent to the PID controller, and the controller computes both
the derivative and the integral of this error signal. The signal (u) just past the
controller is now equal to the proportional gain (Kp) times the magnitude of the
error plus the integral gain (Ki) times the integral of the error plus the derivative
gain (Kd) times the derivative of the error.
de(t )
u = K P e(t ) + K I e(t )dt + K D
dt
This signal (u) will be sent to the plant, and the new output (Y) will be obtained.
This new output (Y) will be sent back to the sensor again to find the new error
signal (e). The controller takes this new error signal and computes its derivative
and its integral again. This process goes on and on.
A proportional controller (Kp) will have the effect of reducing the rise time and will
reduce ,but never eliminate, the steady-state error. An integral control (Ki) will
have the effect of eliminating the steady-state error, but it may make the transient
response worse. A derivative control (Kd) will have the effect of increasing the
stability of the system, reducing the overshoot, and improving the transient
response. Effects of each of controllers Kp, Kd, and Ki on a closed-loop system
are summarized in the table shown below.
S-S
CL RESPONSE RISE TIME OVERSHOOT SETTLING TIME
ERROR
Kp Decrease Increase Small Change Decrease
Ki Decrease Increase Increase Eliminate
Small
Kd Small Change Decrease Decrease
Change
Note that these correlations may not be exactly accurate, because Kp, Ki, and Kd
are dependent of each other. In fact, changing one of these variables can change
the effect of the other two. For this reason, the table should only be used as a
reference when you are determining the values for Ki, Kp and Kd.
Example Problem
•• •
m x + b x + Kx = F (1)
The transfer function between the displacement X(s) and the input F(s) then
becomes
X ( s) 1
=
F ( s ) Ms + bs + k
2
Let
M = 1kg
b = 10 N.s/m
k = 20 N/m
F(s) = 1
X (s) 1
= 2
F ( s ) s + 10s + 20
The goal of this problem is to show you how each of Kp, Ki and Kd contributes to
obtain
num=1;
den=[1 10 20];
step(num,den)
Running this m-file in the Matlab command window should give you the plot
shown below.
The DC gain of the plant transfer function is 1/20, so 0.05 is the final value of the
output to a unit step input. This corresponds to the steady-state error of 0.95,
quite large indeed. Furthermore, the rise time is about one second, and the
settling time is about 1.5 seconds. Let's design a controller that will reduce the
rise time, reduce the settling time, and eliminates the steady-state error.
Proportional control
From the table shown above, we see that the proportional controller (Kp) reduces
the rise time, increases the overshoot, and reduces the steady-state error. The
closed-loop transfer function of the above system with a proportional controller is:
X (s) KP
= 2
F ( s ) s + 10s + (20 + K P )
Let the proportional gain (Kp) equals 300 and change the m-file to the following:
Kp=300;
num=[Kp];
den=[1 10 20+Kp];
t=0:0.01:2;
step(num,den,t)
Running this m-file in the Matlab command window should gives you the
following plot.
Note: The Matlab function called cloop can be used to obtain a closed-loop
transfer function directly from the open-loop transfer function (instead of obtaining
closed-loop transfer function by hand). The following m-file uses the cloop
command that should give you the identical plot as the one shown above.
num=1;
den=[1 10 20];
Kp=300;
[numCL,denCL]=cloop(Kp*num,den);
t=0:0.01:2;
step(numCL, denCL,t)
The above plot shows that the proportional controller reduced both the rise time
and the steady-state error, increased the overshoot, and decreased the settling
time by small amount.
Proportional-Derivative control
Now, let's take a look at a PD control. From the table shown above, we see that
the derivative controller (Kd) reduces both the overshoot and the settling time.
The closed-loop transfer function of the given system with a PD controller is:
X (s) KDs + KP
= 2
F ( s ) s + (10 + K D ) s + (20 + K P )
Let Kp equals to 300 as before and let Kd equals 10. Enter the following
commands into an m_file and run it in the Matlab command window.
Kp=300;
Kd=10;
num=[Kd Kp];
den=[1 10+Kd 20+Kp];
t=0:0.01:2;
step(num,den,t)
This plot shows that the derivative controller reduced both the overshoot and the
settling time, and had small effect on the rise time and the steady-state error.
Proportional-Integral control
Before going into a PID control, let's take a look at a PI control. From the table,
we see that an integral controller (Ki) decreases the rise time, increases both the
overshoot and the settling time, and eliminates the steady-state error. For the
given system, the closed-loop transfer function with a PI control is:
X (s) KPs + KI
= 3
F ( s ) s + 10s + (20 + K P ) s + K I
2
Let's reduce the Kp to 30, and let Ki equals to 70. Create an new m-file and enter
the following commands.
Kp=30;
Ki=70;
num=[Kp Ki];
den=[1 10 20+Kp Ki];
t=0:0.01:2;
step(num,den,t)
Run this m-file in the Matlab command window, and you should get the following
plot.
We have reduced the proportional gain (Kp) because the integral controller also
reduces the rise time and increases the overshoot as the proportional controller
does (double effect). The above response shows that the integral controller
eliminated the steady-state error.
Proportional-Integral-Derivative control
Now, let's take a look at a PID controller. The closed-loop transfer function of the
given system with a PID controller is:
X ( s) KDs2 + KPs + KI
= 3
F ( s) s + (10 + K D ) s 2 + (20 + K P ) s + K I
After several trial and error runs, the gains Kp=350, Ki=300, and Kd=50 provided
the desired response. To confirm, enter the following commands to an m-file and
run it in the command window. You should get the following step response.
Kp=350;
Ki=300;
Kd=50;
num=[Kd Kp Ki];
den=[1 10+Kd 20+Kp Ki];
t=0:0.01:2;
step (num,den,t)
Now, we have obtained the system with no overshoot, fast rise time, and no
steady-state error.
When you are designing a PID controller for a given system, follow the steps
shown below to obtain a desired response.
Lastly, please keep in mind that you do not need to implement all three
controllers (proportional, derivative, and integral) into a single system, if not
necessary. For example, if a PI controller gives a good enough response (like the
above example), then you don't need to implement derivative controller to the
system. Keep the controller as simple as possible.
Torque
Voltaje Fricción
u T viscosa
[v] [N F
m] [N y[rad]
m]
Motor Load
d2y dy
J 2
+c = ku
dt dt
y la inercia J es:
dy
=
dt
Js2Y + csY = kU
k
U Y
Js + cs
2
Esta función de trasferencia relaciona la posición del eje del motor y el voltaje
aplicado a este.
R
E g
U
1
b1 Y
s + a1 s
Simplificando:
Y ( s) b1 g
G( s) = = 2
R( s ) s + a1 s + b1 g
Donde:
a1 = c , b1 = k
J J
E U 1 Y
b1
R s
g s + a1
-
-
f
s 2 + 2n s + n
2
Amplitud
deseada 4
0
0 0.2 0.4 0.6 0.8 1
Time (secs)
-4
x 10
Amplitud 4
deseada
3.5
2.5
1.5
0.5
0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4
Time (secs)
-4
Amplitud x 10
deseada 4
3.5
2.5
1.5
0.5
0
0 0.2 0.4 0.6 0.8 1
Time (secs)
s = − n 2 − n
d2y dy
J 2
+c = ku
dt dt
x2=dy/dt
x1
x=
x2
d x1 0 1 x1 0
x = 0 − a x + b u
dt 2 1 2 1
Y el vector de salida es:
x1
y = 1 0
x2
CONTROL ÓPTIMO
Para situar los polos del sistema de lazo cerrado en el lugar mas apropiado y
realiza un control mas eficiente, existen varios métodos útiles para este caso se
empleará el control óptimo, el que utiliza un función llamada “Función de
desempeño” la que representa la energía que el sistema emplea por lo tanto
esta función buscando el valor mínimo, lo que como resultado nos produce el
mínimo gasto de energía para mantener controlado el sistema.
1
J=
2 k =0
{x ( k ) T Qx ( k ) + ru( k ) 2 }
1 T
J min = x0 Px0 k T = (r + bT Pb) −1bT PA
2
Para obtener las ecuaciones del sistema completo se muestra una figura que
representa la dinámica del sistema:
y
ƒ
Æ J
( px , p y )
mg
F F
( px , p y )
Donde:
px = x + l sin py = l cos
m 2 J
( p x + p y ) + 2
2
2 2
U = mgl cos
La ecuación de Lagrange
d T T D U
− + + = i
dt qi qi qi qi
Sustituyendo en el sistema:
x + ( J + ml 2 ) − mgl sin + = 0
ml cos
x + ml cos − ml2 sin + x x = F
( Mc + m)
( M c + m) x + ml = F
mlx + ( J + ml 2 ) − mgl = 0
BOOLEAN LOGIC
FUZZY LOGIC
4. ADQUISICIÓN DE DATOS
Los temas son desarrollados en función de una aplicación de control y con esto
se habla sobre el muestreo, la necesidad de hacerlo a intervalos de tiempo
constantes y definidos por la dinámica del sistema.
Posteriormente se darán las guías para implementar filtros digitales los cuales
son auxiliares en la adquisición de los datos y la estimación de variables o
estados.
Por último en este capitulo se mostrará como realizar un control de lazo cerrado
y las consideraciones para que modele y caracterice.
y controlan la temperatura un par de veces por segundo. Así que para que el
controlador de temperatura sea estable, debe ejecutar los lazos de control en el
orden de un par por segundo. Es el grado de inseguridad con cada tiempo de
ciclo del lazo de control el que define los requerimientos de Tiempo Real de un
sistema.
4.1 MUESTREO
Si una señal continua, S(t), tiene una banda de frecuencia tal que fm sea la
mayor frecuencia comprendida dentro de dicha banda, dicha señal podrá
reconstruirse sin distorsión a partir de muestras de la señal tomadas a una
frecuencia fs siendo fs > 2 fm.
Para cumplir los requerimientos que se le exigen entre los que se encuentran:
d señal muestreadora
Obsérvese que la respuesta del filtro, debe ser plana hasta una frecuencia, como
mínimo, igual a fm, para caer posteriormente de forma brusca a cero, antes de
que la frecuencia alcance el valor de fs-fm.
Al otro extremo del canal habrá que separar las distintas señales muestreadas
para hacerlas pasar después por el filtro paso bajo que las reconstruya.
La mayoría de las señales que un sistema digital como una PC puede adquirir
tiende a estar contaminada de señales indeseables que deben ser eliminadas
para su análisis, comprensión, tratamiento digital o simple manipulación
aritmética para un proceso de control.
Por estas razones, los filtros digitales están reemplazando rápidamente a los
filtros analógicos.
Los bits contados pasan por un circuito multiplexor para ser transferidos a la PC,
esto se hace para los dos contadores de los 2 codificadores: Los 16 bits
provenientes de los dos contadores se leen por nibbles, es decir, en cuatro
operaciones dentro de la rutina de interrupción. Este procedimiento se tratará
con mas detalle en el capítulo de programación. La adquisición de datos se limita
a leer las posiciones del servomotor, las velocidades de éstos son estimadas por
medio del programa. La finalidad de usar la interfase paralela de la PC así como
en el servo amplificador es evitar el uso de interfases costosas y montar el
experimento en cualquier PC portátil.
A continuación en la
Detección
giro Contador 1
A
PC
Mu
x
CODIFICADOR DE PULSOS
Las dos señales entregadas por los sensores del codificador están desfasadas
90 grados entre sí, es decir, una de las señales cae en la mitad del ciclo en alto
de la otra, como se muestra en la
Fase A
Fase B
R1
R2
4
2 . 2K
U6 A 2 . 2K
2
R
DIR Q
3
CL K FASE A
1 5
Q D FASE B
S
4 01 3
6
CONTADOR DE PULSOS
360 pulsos
posición =
resolución gear _ ratio
Donde:
entrada CE del contador 2, esto es una señal de acarreo al segundo. Los dos
contadores en esta configuración se pueden contar pulsos entre 0 y 255,
siempre lleva el valor absoluto a pesar que el motor gire en sentido horario o
anti-horario.
RE SE T
U4 U5
12 11 12 11
TC PL TC PL
13 5 13 5
D7 RC U/D RC U/D DIR
4 4
D6 CE CE
14 14
D5 CL K CL K CL K
D4
CT A7 7 9 CT A3 7 9
D3 Q3 P3 Q3 P3
CT A6 6 10 CT A2 6 10
D2 Q2 P2 Q2 P2
CT A5 2 1 CT A1 2 1
D1 Q1 P1 Q1 P1
CT A4 3 15 CT A0 3 15
D0 Q0 P0 Q0 P0
7 4HC1 91 7 4HC1 91
MULTIPLEXOR DIGITAL
1
Señal para contar ascendente y descendente T itle
Antología elaborada por. M. en C. Bautista Quintero Ricardo 71Size
Departamento de control Nu mb er
B
CNAD Da te: 1 2-Ju n-2 00 1
File: C:\M is do cu me nto s\. . \co nta d
2 3 4 5
CONTROL AUTOMÁTICO
U1
4 2 A0
n E rror 1Y 1A D0
3 A4
1B D1
7 5 A1
Sele ct 2Y 2A D2
6 A5
2B D3
9 11 A2
Pap erE n d 3Y 3A D4
10 A6
3B D5
12 14 A3
n Ack 4Y 4A D6
13 A7
4B D7
1
A/B
15
G
7 4HC1 57
U2 F
13 12
n Init
7 4HC1 4
En el circuito final se tiene una línea para inicializar o dar reset a los 4 Da te:
File:
1 2-Ju n-2 00 1
C:\M is do cu me nto s\. .
2 contadores, esta línea es3 el bit 3 del puerto de control
4 del puerto paralelo, 5
2
Señal de habilitación de lectura
Antología elaborada por. M. en C. Bautista Quintero Ricardo 72
Departamento de control
CNAD
CONTROL AUTOMÁTICO
llamado nSelectn el cual es invertido como la señal de los bits 0 y 1. Por lo tanto
al escribir un 0 lógico las salidas q de los 4 contadores son 0.
R1
D RC7 D
2K
U1 R2
13 1K
25
12 R3
RC6
24 2K
11 VCC R4
23 1K
10
22 R5
U4
20
RC5 U3 VCC
9 PB7 2K 1 3
21 U2 R6 IN- OSC/SYNC 1
2 16 2
8 PB6 PB0 2 VCC 18 1K IN+ V(REF) U5
D1 Q1 RC1 4 12
20 PB1 3 17 SNSE+ COL A MOTOR
D2 Q2 RC2 R7 5 13 1
7 PB5 PB2 4 16 R1 5 SNSE- COL B T1
D3 Q3 RC3 RC4 9 11 2
19 PB3 5 15 2K COMP EMIT A
D4 Q4 RC4 1 0K 15 14 2 N22 2 2 3
6 PB4 PB4 6 14 R8 V+IN EMIT B
6 10
GND
D5 Q5 RC5 1K RT SD 4
18 PB5 7 13 7
D6 Q6 RC6 CT 5
5 PB3 PB6 8 12
D7 Q7 RC7 R9
17 PB7 9 11 RC3 VCC POWER
D8 Q8 RC8
4 PB2 2K R1 6 LM3 52 4 DN(1 6)
8
16 1 R1 0 RS
GND
E1 C1 1 0K C2
3 PB1 19 2K 1K D1
E2 0 .0 1 UF 0 .0 0 1u F T2 DIODE
C 15 C
R1 1 TIP1 20
2 PB0 7 4HC5 4 1 RC2
14
10
1K R1 2
1
2K
DB2 5
R1 3
RC1
RB7 2K
R1 4
RB6 2K
C3 C4
33 pF 3 3p F
CR1 4 MHz
VCC
R2 4 VCC
1 0K
B B
14
U7
16 15
VDD
OSC1/CLKIN OSC2/CLKOUT
4 7
MCLR RB1
17 8
RA0 RB2
18 9
RA1 RB3
1 10
RA2 RB4
2 11
RA3 RB5
3 12
VSS
U6
4
3
2 VER 1 DIR SEPARADA
VCC
1
ENCODER R1 8
R1 7
1 0K
1 0K
A A
VCC Title
Cabe aclarar que la distribución de los bits de entrada y de salida son los que
cualquier PC IBM o compatible. Este sistema tiene la posibilidad de ser portátil a
otra PC sin necesidad de emplear interfases adicionales.
CONCLUSIONES
BIBLIOGRAFIA
[2] Borland
C++ V. 3.0 User’s Guide
Borland