CONTROLADOR PID DE
VELOCIDAD DE UN MOTOR DC
CONTROL ANALOGICO
Adrián Rosero - Camilo Andrés Erazo Román – Juan David Iguad
INGENIERIA ELECTRONICA
UNIVERSIDAD CESMAG
PASTO
Resumen- En el desarrollo de este documento se presenta la voltaje dado que inician su funcionamiento desde
caracterización y control de un motor DC, desarrollada en dos 1V hasta 12V teniendo en cuenta las
etapas. La primera etapa se encarga de la toma de datos para características de cada motor.
determinar la función de transferencia que identifique el
comportamiento del motor DC ante una entrada escalón y para la
segunda etapa se parte de la función de transferencia del motor a la Estos motores están elaborados mediante el uso de
implementación del controlador PID aplicando la sintonización de imanes los cuales se encuentran fijados a la
Zingler Nichols para encontrar los respectivos valores de Kp. Ki, Kd, estructura del motor junto a una serie de
para el sistema de control PID. embobinados de cobre fijados a su eje como se
puede observar en la siguiente figura.
I. INTRODUCCIÓN
Los motores son un componente electrónico fundamental para
sistemas industriales de la actualidad, por tal motivo el
presente laboratorio consiste en la caracterización y control de
un motor DC bajo el sistema y control tipo PID.
Para el desarrollo de esta práctica se modelo un motor DC
mediante el control ante entradas escalón que permiten
identificar las zonas de operación del motor y del sensor de
herradura utilizado para la toma de datos y medición constante
ante una entrada escalón de magnitud Vf/2 la cual
corresponde a la variación de ciclo útil en donde permite Figura 2: Estructura interna de motor DC
evidenciar el comportamiento del motor ante una entrada de
un 50% Ciclo útil. Este tipo de motores permiten un amplio rango de
velocidad y existen dos tipos de control que son
lazo abierto y lazo cerrado.
II. MARCO TEORICO
Lazo abierto
a) Motor DC La estructura ante un modelo de control de lazo
Para el desarrollo de este laboratorio se hizo uso de abierto corresponde a la siguiente figura.
un motor de DC cuyo voltaje de trabajo es de 5v,
dentro de la electrónica su principal aplicación se
encuentra dentro de sistemas embebidos de baja
potencia.
Figura 3: sistema lazo abierto
Este tipo de sistemas no consta de una
realimentación a la salida del sistema y ( t ) y al no
Figura 1. Motor DC contar con la realimentación en estos sistemas no
es posible evidenciar el correcto funcionamiento de la
Este tipo de motores se encuentran comúnmente en respuesta ante la señal de entrada r (t ).
juguetes debido a su bajo costo y a su bajo nivel de
Lazo cerrado c) Transistor 2N3904
La estructura del modelo de control de lazo El transistor 2N3904 es uno de los más
cerrado corresponde a la siguiente figura. comunes en el mercado y pertenece a la
familia de transistores NPN. Este transistor
gracias a sus características de rápida
conmutación es indispensable para el
funcionamiento del sistema y sus
características son las siguientes:
Figura 4: Sistema lazo cerrado
Características:
Este tipo de sistemas permite recolectar información Transistor Bipolar (BJT) NPN: Es un
en cuanto se refiere al comportamiento del sistema dispositivo diseñado para operar como
comprobando que el sistema se encuentre en su amplificador y switch de propósito general.
correcto funcionamiento.
El primer paso es plantear un modelo el
´
ectrico del motor,
el cual se observa en la Figura 2.
b) Placa Arduino
Arduino es un software libre que integra
microcontroladores reprogramables que permiten la
conexión de periféricos o módulos que establecen
conexiones con el microcontrolador de manera
rápida y sencilla.
“Es una plataforma de desarrollo basada en una placa
electr
´ Figura 6: Transistor NPN 3904
onica de hardware libre que incorpora un
microcontro-
lador re-programable y una serie de pines hembra, los Su rango dinámico útil se extiende hasta 100
que mA como switch y hasta 100 MHz como
permiten establecer conexiones entre el
microcontrolador y los
amplificador. Posee un encapsulado TO-92 y
diferentes sensores y actuadores de una manera muy su estructura es NPN.
sencilla
Especificaciones:
Disipación total del dispositivo (Pc): 0.31 W
Tensión colector-base (Ucb): 60 V
Tensión colector-emisor (Uce): 40 V
Tensión emisor-base (Ueb): 6 V
Potencia total disipada (Pd): 625 mW
Corriente del colector DC máxima (Ic): 0.2 A
Temperatura operativa máxima (Tj), : 150 °C
Polaridad de transistor: NPN
Ganancia o hfe entre 30 -300 (hfe)
Figura 5: Placa Arduino UNO Frecuencia de trabajo 300 Mhz (Ft)
d) Encoder-FC
Las placas de Arduino permiten ser programadas
mediante el entorno de desarrollo integrado Este módulo contiene un sensor emisor receptor
estableciendo una conexión por medio de un cable infrarrojo que consta de un lado de un Led
USB tipo B, estas pueden ser energizadas mediante emisor IR y por el otro lado un fotodiodo
baterías externas de 9V y gracias a su etapa de receptor. Estos componentes están ubicados
regulación admiten voltajes entre 7v y 20v frente a frente, distanciados tan solo por 5mm
estableciendo un tipo de conexión STK500.
permitiendo que un objeto externo pueda
interrumpir el haz de luz infrarrojo, teniendo
como resultados cambios en la señal lógica
digital de salida.
Figura 10: Esquema de conexiones
Figura 7: Enconder-FC
III. DESARROLLO Esquema simulado de conexiones de los
componentes del montaje
Para el desarrollo de la conexión de la etapa de potencia se hizo
uso del esquema de conexiones suministrado en la guía de
laboratorio donde el transistor es el que permite encender o
apagar el motor gobernado por la señal.
Figura 11: Esquema simulado de conexiones
Figura 8: Esquema para la etapa de potencia
Montaje del diseño
Figura 7: Diagrama de bloques de sistema
analogWrite(ena, 153);
s1 = 1; cont = 0;
break;
case '2':
analogWrite(ena, 168);
s1 = 1; cont = 0;
break;
case '3':
analogWrite(ena, 199);
s1 = 1; cont = 0;
break;
case '4':
analogWrite(ena, 214);
s1 = 1; cont = 0;
break;
case '5':
analogWrite(ena, 229);
s1 = 1; cont = 0;
break;
case '6':
analogWrite(ena, 133);
s1 = 1; cont = 0;
Figura 12: Montaje del diseño de control break;
default:
analogWrite(ena, 255);
s1 = 0; cont = 0;
Código de Arduino: break;
}
//Definiciones de FUNCIONES a los PINES }
#define ena 7 // u(t) }
#define encoder 2
unsigned int cont, y; void funcionContador()
unsigned char dato, s1; {
cont = cont + 1;
void setup() { }
attachInterrupt(digitalPinToInterrupt(encode
r), funcionContador, RISING); Codigo de Matlab:
pinMode(encoder, INPUT);
pinMode(ena, OUTPUT); %% Configuración del Puerto Serial
analogWrite(ena, 0); s1 =
cont = 0; serial('COM8','BaudRate',9600,'DataBits',8,'D
s1 = 0; ataTerminalReady','off');
Serial.begin(9600); fopen(s1);
} opcion = menu('Escoja el ciclo útil de la
entrada [0, 255] = [0, 100]%',...
void loop() { '92','107','122','137','153','168','184','199','2
if( s1 == 1){ 14','229','245','255');
delay(50); //Tiempo de muestreo switch opcion
//y = (cont/5)/0.05; // conversión de case 1
contador a RPS Amp = 92; cmd_arduino = '1';
y = 4*cont; case 2
Serial.println(y); Amp = 107; cmd_arduino = '2';
cont = 0; case 3
} Amp = 122; cmd_arduino = '3';
if(Serial.available() > 0){ case 4
dato = Serial.read(); Amp = 137; cmd_arduino = '4';
switch(dato){ case 5
case '0': Amp = 153; cmd_arduino = '5';
analogWrite(ena, 0); case 6
s1 = 0; cont = 0; Amp = 168; cmd_arduino = '6';
break; case 7
case '1': Amp = 183; cmd_arduino = '15';
case 8 IV. CONTROLADOR PID
Amp = 199; cmd_arduino = '8';
case 9
Para la segunda etapa partimos de la previa recopilación de
Amp = 214; cmd_arduino = '14';
datos que por medio de las herramientas del toolbox de
case 10
MATLAB nos permite la identificación de la función de
Amp = 228; cmd_arduino = '13';
transferencia del motor para la posterior implementación del
case 11
controlador PID, aplicando la sintonización de Zingler Nichols,
Amp = 248; cmd_arduino = '11';
para encontrar los valores de Kp. Ki, Kd, para el controlador
case 12
del motor.
Amp = 255; cmd_arduino = '12';
end Se procede a la estimación de la función de transferencia en
T = 6; %tiempo de simulación donde la estimación se realiza la asignación de polos y ceros
dt = 50e-3; %Tiempo de Muestreo para la siguiente interfaz:
K = T/dt; %Número de instantes discretos
datos = zeros(1,K); i = 1;
fwrite(s1,cmd_arduino);
pause(T)
while(s1.bytesAvailable > 0)
A partir de los códigos se pudo calcular los siguientes valores:
Tabla15: tabla de valores calculados
A partir de los datos obtenidos en la tabla se
obtuvo la siguiente gráfica de la curva de entrada y
salida del motor DC. Luego de la obtención de la función de transferencia
se procede a realizar la respectiva sintonización a
través de los métodos vistos en clase, bajo el cual
Curva entrada y salida tomamos como referencia el método de sintonización
Motor DC de Ziegler Nichols haciendo uso del siguiente código:
200 CODIGO MATLAB ZIEGLER NICHOLS
clear all;
150 clc
100 s= tf('s');
S= sym('S');
50 u=1/S;
0 trans=3.097/(s^2+15.5s+116.3);
0 1 2 3 4 5 6 Ys=3.097/(s^2+15.5s+116.3);
figure(1)
Figura 16: Grafica de curva de entrada y salida step(trans)
Y=expand(Ys*u)
De la figura 16 podemos concluir que la zona de operación o
trabajo del motor se encuentra entre el rango de 0v a 150V siendo
%% simbolica
la zona donde el motor más trabajo realiza. yt=ilaplace(Y);
pretty(yt)
figure(2) 300
Z-N
fplot(yt),axis([0 0.8,0 1.13])
250
%% punto de inflexión
dyt= diff(yt,1) 200
d2yt= diff(yt,2) 150
Pi= vpa(solve(d2yt == 0),4) X: 0.1
Y: 88.93
100
pi=Pi(2)
ypi= vpa(subs(yt,pi) ) % cordenada 50
y del punto inflexion 0
0 0.5 1 1.5 2 2.5 3
m=subs(dyt,pi);
% recta en el punto Pi
%y=m(t-pi)+ypi
t= sym('t') Los valores de las variables de Kp, Ki y Kd calculados
mediante la sintonización de Ziegler Nichols son:
R= m*(t-pi)+(ypi)
figure(2),hold on
fplot(R),axis([0 0.8,0 1.13])
%% puntos de corte con el ejex de
la recta
L= solve (m*(t-pi)+(ypi)==0) %
tiempo min
t2= solve (m*(t-pi)+(ypi)==1.13)
T= t2-L
%% ganancias Kp,Ki,KD
%% PID Serie
k=1.2*(T/L)
ti= 2*L
Td= 0.5*L
%% PID paralelo
Kp=2*double(k)
Ki=0.9*double(k/ti)
Kd=10*double(k*Td)
%% PID sobre el proceso
% c= funcion de trnasferencia
c= Kp+ Ki/s+Kd*s Con estos valores se procede a implementarlos en el código de
cYs=c*trans; PID en la tarjeta Arduino.
cYsr=feedback(cYs,1)
CODIGO EN ARDUINO
figure(3)
step(trans),hold on,step (cYsr)
legend('lazo abierto','PID') float r=0;
float e= 0;
El anterior código nos permite calcular las constantes Kp, Ki, Kd, float ea= 0;
correspondientes para nuestra planta en él se puede identificar el float ie = 0;
comportamiento del controlador PID mediante el cálculo de la float de = 0;
segunda derivada para encontrar el punto de inflexión de la float u = 0;
respuesta al escalón de nuestra función de transferencia. // sintonizacionZN
//float kp = 6.9446;
//float ki = 5.908;
//float kd = 2.040;
//PID TUNE
float kp = 6.9446;
float ki = 5,908;
float kd = 0.1020;
float rps=0;
unsigned contador, cont;
unsigned char dato;
void setup() {
pinMode(2,INPUT);
Entrada
pinMode(5,OUTPUT); 4
Serial.begin(9600); 3.5
} 3
Voltaje
void loop() {
contador = 0; 2.5
if(Serial.available()>0){ 2
r=160; 1.5
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
} tiempo [s]
else { Velocidad
r=0; From: u1 To: y1
} 600 Adquirida
Filtrada
// r=160; 500
Transfer Function
400
attachInterrupt(0, funcionContador, RISING);
RPS
300
analogWrite(5,u); //ciclo_util = 0; 200
delay(50); //Tiempo de Espera o Muestreo 100
vf = 539.6209RPS
rps = (contador/(4*0.05)); 0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Serial.println( rps ); //Imprimir contador tiempo [s] (seconds)
e = r-rps;
ie = ie+(e*0.05); //integral
de = (e-ea)/0.05; //derivada
u = (kp*e)+(ki*ie)+(kd*de); V. CONCLUSIONES
ea = e; //guarda el error anterior Tras el desarrollo del laboratorio
u = min(u,200); //ciclo ´util m´aximo 100% = 255
logramos analizar que los motores DC
u = max(u,0); //ciclo ´util m´ınimo 0
dependiendo de su modelo pueden
analogWrite(5, u); presentar un alto o bajo tiempo de
/* if (Serial.available()) respuesta a la hora de hacer las
{ mediciones las cuales son esenciales para
r = Serial.parseFloat(); determinar la zona de trabajo.
}
Respecto a los valores de entrada del
*/ ciclo útil se puede afirmar que dependen
//Serial.println( "RPS " ); //Imprimir contador del tipo de motor DC y del número de
//Reinicio del Contador aspas que este tenga al momento de
realizar la caracterización.
}
Mediante la caracterización del motor
void funcionContador(){
contador = contador + 1; se pudo comprobar que este método
} permite un ajuste optimo del regulador
de voltaje del sistema, sin embargo, los
valores de entrada del ciclo útil se
En la siguiente figura podemos observar cómo es limitan a una zona de trabajo especifica
el resultado del comportamiento del motor DC haciendo que al sobrepasar el sistema
ante en control PID y bajo la sintonización de esté presente inestabilidad.
Ziegler Nichols. Para la respuesta del sistema los
resultados que se muestran representan
un aporte a nuestro conocimiento en
cuanto se refiera a la caracterización de
un motor DC para la obtención de la
velocidad del motor y también para la
etapa de potencia.
Con los resultados obtenidos podemos
concluir que el motor da respuestas con
la suficiente aproximación a la respuesta
real del sistema ya que el motor se
estabiliza de forma rápida luego de pasar
por los valores indicados.
También podemos concluir que existen [2] K. Ogata, Ingeniería de control moderna, 5th
limitaciones frente al uso del motor DC ed., vol. 5, no. 10. PEARSON, 2018.
como es la zona de trabajo y los valores
[3] “Arduino UNO | Arduino.cl - Compra tu Arduino
en los que este tipo de controlador puede
en Línea.” https://arduino.cl/arduino-uno/
optimizar la señal de salida. Cabe
(accessed Jun. 15, 2020).
resaltar que en estas respuestas también
influye el comportamiento del motor ya [4] ROHM, “RPI-579,” 2008.
que si su tiempo de subida es muy https://www.alldatasheet.com/datasheet-
rápido posiblemente trabaje solo con pdf/pdf/187086/ROHM/RPI-579.html (accessed
valores altos. Jun. 15, 2020).
En conclusión, el presente laboratorio [5] N. . Nise, Control Systems Engineering, 6th ed.
aporto al entendimiento y aclaración de Jefferson City: WILEY, 2011.
lo que se puede lograr al hacer uso de
los controladores, en este caso fue con
un motor DC, donde se pudo evidenciar
como se puede controlar su velocidad y
la estabilidad de su salida frente a
diferentes sets point (punto donde se
desea mantener la variable controlada).
Un motor el
´
ectrico de corriente continua es
esencialmente una m
´
aquina que convierte energ
´
ıa
el
´
ectrica en movimiento o trabajo mec
´
anico, a trav
´
es de
medios electromagn
´
eticos, que para funcionar se vale
de las fuerzas de atracci
´
on y repulsi
´
on que existen entre
los p
REFERENCIAS
[1] B. Kuo, “Sistemas de Control Automatico.pdf.” p.
931, 1996.