Documentos de Académico
Documentos de Profesional
Documentos de Cultura
NACIONAL
ESIME CULHUACÁN
INGENIERÍA EN COMPUTACIÓN
ALUMNOS:
Rojano Peñaloza Eduardo
No. De boleta: 2020350273
Suarez González Edwin Deninson
No. De boleta: 2019350949
Flores Avalos Rodrigo Emmanuel
No. De boleta: 2020350915
Osorio Ramírez Christian
No. De boleta: 2019350183
Ojeda Hernández María de la Luz
No. De boleta: 2020350258
Santa Cruz Guerrero Dylan
No. De boleta:
GRUPO: 7CM32
ASIGNATURA: Teoría de Control Digital
PROFESOR: Loaiza Brito José Antonio
FECHA: 1/12/2022
“Control PID digital para la posición
angular de un motor de cd”
Introducción
Los sistemas de control de datos discretos y digitales difieren de los sistemas
continuos, o analógicos, en que las señales en una o más partes de ellos se
encuentran en forma de trenes de pulsos o códigos numéricos.
ARDUINO UNO
Encoder incremental
360° 𝑚𝑒𝑐á𝑛𝑖𝑐𝑜𝑠
360° 𝑒𝑙𝑒𝑐𝑡𝑟𝑖𝑐𝑜𝑠 =
𝑁° 𝑖𝑚𝑝𝑢𝑙𝑠𝑜𝑠/𝑔𝑖𝑟𝑜
El error de división en un encoder, está dado por el máximo desplazamiento
expresado en grados eléctricos, de dos frentes de onda consecutivos. Este
error existe en cualquier encoder y se debe a los factores antes citados. En
los encoder ELTRA dicho error está incluido entre ± 25º eléctricos máx. En
cualquier condición ambiental declarada, que corresponden, en porcentaje, a
un desplazamiento de ±7% del valor nominal. Por lo que se refiere al desfase
entre dos canales, nominalmente de 90º eléctricos, éste se aleja en ±35º
eléctricos máx. que corresponden a aproximadamente ±10%.
Doble puente H L293D.
Todas las entradas del circuito Integrado L293D son compatibles con TTL, por
lo que pueden manejarse con la mayoría de los micro controladores y
circuitos lógicos del mercado. La salida de los drivers puede activarse y
desactivarse en pares, mediante señales de habilitación. Cuando se presenta
un 1 lógico en los pines de habilitación, las señales correspondientes de
salida estarán activas y en fase con la señal de entrada. Cuando las entradas
de habilitación presentan un estado lógico 0, las salidas se encuentran en
estado de alta impedancia.
Modulo HC-05
Este módulo cumple con las especificaciones del estándar Bluetooth 2.0 que
es perfectamente compatible con celulares o smartphones Android, más no
con los iPhone. Para trabajar con iPhone recomendamos utilizar el Módulo
Bluetooth 4.0 BLE HM-10, que también es compatible con los celulares
Android modernos.
Motor DC 5V
• Rango de tensión: 3 V a 6 V
• Corriente: 800 mA
• Diámetro del eje: 2 mm
• Velocidad de recorrido libre @ 6 V: 8000 rpm
• Dimensiones motor: 20 mm X 15 mm X 25 mm
Desarrollo
Modelo de Motor DC
𝑑𝑖(𝑡)
𝐿 = 𝑣(𝑡) − 𝑅𝑖(𝑡) − 𝐸𝑎(𝑡) (1)
𝑑𝑡
𝑑𝑤 (𝑡)
𝑇𝑚 (𝑡) = 𝐽 + 𝐵𝑤(𝑡)
𝑑𝑡
𝑑𝑤 (𝑡)
𝐽 = 𝑇𝑚 (𝑡) − 𝐵𝑤(𝑡) (2)
𝑑𝑡
Ea(t)=Kaω(t) (3)
sustituimos ec 7 y ec 8 en la ec 5
𝑇𝑚 (𝑠) 𝑇𝑚(𝑠)
𝐿𝑠 = 𝑣(𝑠) − 𝑅 − 𝑘𝑎 𝑤(𝑠)
𝐾𝑚 𝐾𝑚
(𝑅 + 𝐿𝑠)𝑇𝑚 (𝑠)
𝑣(𝑠) = + 𝑘𝑎 𝑤(𝑠) (9)
𝐾𝑚
𝑇𝑚 (𝑠)
𝑤(𝑠) = (10)
𝐽𝑠 + 𝐵
Sustituyendo Ec 10 en Ec 9
(𝑅 + 𝐿𝑠) 𝐾𝑎
𝑣(𝑠) = ( + )𝑇𝑚(𝑠)
𝐾𝑚 𝐽𝑠 + 𝐵
(𝑅 + 𝐿𝑠)(𝐽𝑠 + 𝐵)𝐾𝑎 𝐾𝑚
𝑣(𝑠) = 𝑇𝑚 (𝑠) (11)
𝐾𝑚 (𝐽𝑠 + 𝐵)
𝑇𝑚 (𝑠) 𝐾𝑚 (𝐽𝑠 + 𝐵)
=
𝑣(𝑠) 𝐿𝐽𝑠 2 + (𝑅𝐽 + 𝐿𝐵)𝑠 + 𝑅𝐵 + 𝐾𝑎 𝐾𝑚
𝐸𝑎 𝐾𝑚𝐾𝑎
=
𝑣(𝑠) 𝐿𝐽𝑠² + (𝑅𝐽 + 𝐿𝐵) 𝑠 + 𝑅𝐵 + 𝐾𝑚𝐾𝑎
𝑖(𝑠) 𝐽𝑠 + 𝐵
=
𝑣(𝑠) 𝐿𝐽𝑠² + (𝑅𝐽 + 𝐿𝐵)𝑠 + 𝑅𝐵 + 𝐾𝑚𝐾𝑎
𝑤(𝑠) 𝐾𝑚
=
𝑣(𝑠) 𝐿𝐽𝑠² + (𝑅𝐽 + 𝐿𝐵)𝑠 + 𝑅𝐵 + 𝐾𝑚𝐾𝑎
Espacio de Estados
x1=w x2=w
𝑥1̇=𝑤̇ 𝑥̇ 2=𝑤̇
𝐵 𝐾𝑚
𝑥̇ 1 = − x1 + 𝑥
𝐽 𝐽 2
𝑅 𝐾𝑎 1
𝑥̇ 2 = − 𝑥2 − 𝑥1 + 𝑣
𝐿 𝐿 𝐿
𝐵 𝐾𝑚
− 0
̇ 𝐽 𝐽 𝑋1
[𝑥1] = [ ] + [1]𝑣
𝑥2 ̇ 𝐾 𝑎 𝑅 𝑋2
𝐿
[− 𝐿 − ]
𝐿
𝑦1 1 0 𝑥1
[ ]=[ ][ ]
𝑦2 0 1 𝑥2
En unidades SI, el par motor y las constantes de emf de retorno son iguales a
través de la técnica paramétrico dimensional demostrado que en literatura
que es válido para motores DC, basándose en utilizar expresiones que
guardan una relación paramétrica dimensional directa entre 𝐾𝑚 con la
constante de voltaje 𝐾𝑎 , es decir:
𝐾𝑎 = 𝐾𝑚
𝐾𝑚
𝑠(𝑠 + 𝑎)
Parámetros de Motor DC
Parámetro Símbolo Valor Unidad
Momento de Inercia J 0.00032749 Kg.m^2
Constante de Fricción viscosa B 0.0020694 N.m.s
Constante de Fuerza
Ka 0.2195589 V/rad s
Electromotriz
Constante del Par del Motor Km 0.2195589 N.m/A
Resistencia de Armadura R 4.6 Ohms
Inductancia eléctrica L 0.0015 H
Constante Electromotriz
Va (v) Ia (A) W(RPM) W(rad/s)
5.3 0.19 192.5 20.1586
Parámetros de Motor DC
Parámetro Símbolo Valor Unidad
Tiempo de Estabilización
tmss 0.125 s
Mecánica
Constante de Tiempo Mecánica tm 0.03125 s
Corriente de Arranque iarr 0 A
Torque de Fricción Tf 0 N.m
Torque Mecánico Tm 0.04171619 N.m
(1) (1)
𝐺𝐻(𝑧) = 𝑘𝑍 { − 𝑒 −𝑇𝑠 }
𝑠 2 (𝑠 + 𝑎) 𝑠 2 (𝑠 + 𝑎)
(1)
𝐹(𝑠) =
𝑠 2 (𝑠 + 𝑎)
1
𝐺𝐻𝑧 = 𝑘𝑍{𝐹𝑠 − 𝐹𝑠 𝑒 −𝑇𝑠 } = 𝑘𝑍{𝐹𝑠 } − 𝑍{𝐹𝑠 𝑒 −𝑇𝑠 } = 𝑘(1 − 𝑧 −1 )𝑍{ }
𝑠 2 (𝑠 + 𝑎)
−1 ){𝐴
𝑇𝑍 −1 1 1
(1
𝐺𝐻𝑧 = − 𝑍 [ ] + 𝐵 ( ) + 𝐶( )}
(1 − 𝑍 −1 ) 1 − 𝑍 −1 1 − 𝑒 −𝑎𝑇 − 𝑍 −1
𝐴𝑇𝑍 −1 𝐵 𝐶(1 − 𝑍 −1 )
𝐺𝐻𝑧 = + +
(1 − 𝑍) 1 (1 − 𝑒 −𝑎𝑇 − 𝑍 −1 )
𝐴𝑇𝑧 −1 𝐵 𝐶(1 − 𝑍 −1 )
𝐺𝐻𝑧 = + +
(1 − 𝑧 −1 ) 1 (1 − 𝑒 −𝑎𝑇 − 𝑍 −1 )
𝑏0 𝑧 −2 + 𝑏1𝑧 −1 + 𝑏22
𝐺𝐻𝑧 =
𝑎2𝑧 −2 − 𝑎1𝑧 −1 − 𝑎0
a0=1, a1=(a-aT-1) b0=C+Be-aT-Ate-aT
a1=(e-aT-1) b1=AT-B(1+e-aT)-2C
a2=e-aT b2=B+C
Calculamos A, B y C
1 1
𝑎= += = 27.97150268
1𝑚 0.0417162
𝑘 0.2195589
𝐴= = = 0.009159163
𝑎 23.97150268
𝑘 0.2195589
𝐵= 2
= = −0.000382085
𝑎 23.971502682
𝑘 0.2195589
𝐶= 2
= = 0.000382085
𝑎 23.971502682
B0=0.000382085+1-0.000382085(e-127.97150268(0.1))-0.009159163(0.1)(e-127.97150268x0.1)=0.000303
B1=0.009159163(0.1)-(-0.000382085(1+e-27.97150268(0.1))210.000382085)=0.000916
B2=0 A0=1
A1=1.06098 A2=0.060984
Ahora tenemos:
𝑏0 𝑧 2 + 𝑏2 𝑧 −1 + 𝑏2
𝐺(𝑧) =
𝑎2 𝑧 −2 + 𝑎1 𝑧 −1 + 𝑎0
0.000303𝑧 2 + 0.000916𝑧 −1 + 0
𝐺(𝑧) =
0.060984𝑧 −2 + 1.060984𝑧 −1 + 1
𝑅(𝑧) 𝑘𝐺(𝑧)
=
𝐶(𝑧) 1 + 𝑘𝐺(𝑧)𝐻(𝑧)
𝑘(0.000303𝑧 2 + 0.000916𝑧 −1 )
1+ =0
0.060984𝑧 −2 + 1.060984𝑧 −1 + 1
𝑧 𝑘(0.000303𝑧 2 ) + 0.000916
𝑧 𝑧 [𝑧 𝑘(0.000303𝑧 2 ) + 0.000916]
=
(𝑧 + 0.060984 ) (𝑧 + 1) (𝑧 + 0.060984)(𝑧 + 1)
𝑧2
Polos 𝑧1 = −0.060984 𝑧2 = −1
Ceros
𝑧1 = 0 , 𝑧1 = 0
𝑧2 = 0.000303 , 𝑧2 = −0.000303
𝑧3 = 0.000916
3. Determinar el LGR sobre el eje real
-
1
Número de polos 𝑛 = 2
Número de ceros 𝑚 = 5
𝑛 − 𝑚 = 2 − 5 = −3
• Centroide
𝜎𝑎 = 0.353967
• Ángulo de la asíntota
180° (2 × 0) + 1
𝜃= = −60 + 180° = 120°
−3
5. Encontramos los puntos de ruptura de salida y entrada
1 + 𝑘𝐺(𝑧)𝐻(𝑧) = 0
𝑘𝐵(𝑧)
1+ =0
𝐴(𝑧)
𝐴(𝑧)
𝑘=
𝐵(𝑧)
𝑧 [ 𝑧 𝑘 (0.000303𝑧 2 ) + 0.000916]
=0
(𝑧 + 0.060984)(𝑧 + 1)
𝑧 2 + 1.06098𝑧 + 0.060984
𝑧 2 (0.000303𝑧 2 ) + 0.000916𝑧
0.000303𝑧 4 + 0.000916𝑧
𝑧 2 + 1.06098𝑧 + 0.060984
𝑘=
0.000303𝑧 4 + 0.000916𝑧
𝐴′ = 2𝑧 + 1.06098
𝐵′ = 0.001212𝑧 3 + 0.000916
1
𝑧 2 𝑘(0.000303𝑧 2 ) + 𝑧 2 + 1.0619𝑧 + 0.060984 =
𝑘
𝑘 ≈ −4.52694
𝑤 = −0.465809
−0.0655052
𝑑𝑣 = −0.0689327925
−0.344127524
Circuito propuesto
Diagrama de flujo
Código
#include <PID_v1.h>
#define motor 6
#define motAdel 4
#define RevMot 7
String leerCad;
int EntradaUsuario = 0;
int encoderPin1 = 2;
int encoderPin2 = 3;
volatile int UltValEncoder = 0;
volatile long ValEncoder = 0;
int PPR = 2400;
int Angulo = 360;
int REV = 0;
int MSB = 0;
int LSB = 0;
double kp = 5, ki = 1, kd = 0.01;
double input = 0, output = 0, setpoint = 0;
PID myPID(&input, &output, &setpoint, kp, ki, kd, DIRECT);
void setup()
{
pinMode(motor, OUTPUT);
pinMode(motAdel, OUTPUT);
pinMode(RevMot, OUTPUT);
Serial.begin(9600);
pinMode(encoderPin1, INPUT_PULLUP);
pinMode(encoderPin2, INPUT_PULLUP);
digitalWrite(encoderPin1, HIGH);
digitalWrite(encoderPin2, HIGH);
attachInterrupt(0, actualizarEncoder, CHANGE);
attachInterrupt(1, actualizarEncoder, CHANGE);
if (leerCad.length() > 0)
{
Serial.println(leerCad.toInt());
EntradaUsuario = leerCad.toInt();
}
REV = map(EntradaUsuario, 0, 360, 0, 2400);
Serial.print("Estas son las Rev - ");
Serial.println(REV);
setpoint = REV;
input = ValEncoder;
Serial.print("Valor del ecoder - ");
Serial.println(ValEncoder);
myPID.Compute();
Salidapwm(output);
}
void Salidapwm(int out)
{
if (out > 0) {
analogWrite(motor, out);
adelante();
}
else
{
analogWrite(motor, abs(out));
reverso();
}
leerCad = "";
}
void actualizarEncoder()
{
int MSB = digitalRead(encoderPin1);
int LSB = digitalRead(encoderPin2);
int encoder = (MSB << 1) | LSB;
int sum = (UltValEncoder << 2) | encoder;
if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011)
ValEncoder++;
if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000)
ValEncoder--;
UltValEncoder = encoder;
}
void adelante()
{
digitalWrite(motAdel, HIGH);
digitalWrite(RevMot, LOW);
}
void reverso()
{
digitalWrite(motAdel, LOW);
digitalWrite(RevMot, HIGH);
}
void terminar()
{
digitalWrite(motAdel, LOW);
digitalWrite(RevMot, LOW);
}
Simulación
Referencias
https://www.arcaelectronica.com/blogs/tutoriales/modulo-bluethoot-hc-05-y-
hc-06-
arduino#:~:text=La%20principal%20diferencia%20entre%20estos,puede%20s
er%20usado%20como%20esclavo.
https://www.alldatasheet.com/datasheet-
pdf/pdf/22432/STMICROELECTRONICS/L293D.html
https://arduino.cl/arduino-uno/
https://docs.google.com/file/d/0B93S-
Z6qmW9ER3hyRmNIazd4bVE/edit?resourcekey=0-
W53BbEVeBm1WtThyrl1fIA
https://www.picuino.com/es/control-pid-digital.html
https://controlautomaticoeducacion.com/analisis-de-sistemas/modelo-de-
motor-dc/
https://naylampmechatronics.com/drivers/223-driver-puente-h-l293d.html
https://electronicamade.com/puente-h-l293d/