0% encontró este documento útil (0 votos)
29 vistas18 páginas

Control de Péndulo Invertido

cdvdfsvdfcxz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
29 vistas18 páginas

Control de Péndulo Invertido

cdvdfsvdfcxz
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD EL BOSQUE

CENTRO DE DESARROLLO TECNOLÓGICO


FACULTAD DE INGENIERÍA
PROGRAMA DE INGENIERÍA ELECTRÓNICA

INFORME DE LABORATORIO

Asignatura: Control II y Laboratorio Semestre: 9


Nombre de la práctica: Control por realimentación de estados (péndulo invertido)
Grupo Begambre, Sajhith Santiago
Hurtado, Luis Felipe
Murcia, Andrés Felipe
Yossa, Edison

Objetivos de aprendizaje (Fink):


1. Diseñar experimentos, analizar e interpretar los datos para realizar juicios de valor al analizar y
diseñar sistemas de control clásico de procesos.

Objetivos específicos de la práctica

1. Construir y Modelar un sistema mecánico en Espacio de Estados con miras a diseñar un


controlador.
2. Simular el sistema mecánico usando las herramientas de Espacio de Estados de Matlab.
3. Diseñar un controlador por realimentación de Estados para colocación de polos.
4. Comprobar en físico el desempeño y ajuste de controladores por realimentación de estados.

Metodología:

Parte I. construcción del modelo.


• Independizar funcionamiento del motor y potenciómetro del servomotor.

Docente: Versión: Fecha: Aprobado:


• Modelo terminado.

Parte II. Modelado y simulación de respuesta.


• Ecuaciones de modelo lineal péndulo invertido.

𝐽𝑟 𝜃̈ + 𝑚𝑝 𝑙𝑟𝛼̈ = 𝜏 − 𝑏𝑟 𝜃̇
𝐽𝑝 𝛼̈ + 𝑚𝑝 𝑙𝑟𝜃̈ + 𝑚𝑝 𝑔𝑙𝛼 = −𝑏𝑝 𝛼̇

A partir de las ecuaciones anteriores se obtiene:

Docente: Versión: Fecha: Aprobado:


1
θ̈ = (𝑚𝑝2 𝑙 2 𝑟𝑔𝛼 − 𝐽𝑝 𝑏𝑟 𝜃̇ + 𝑚𝑝 𝑙𝑟𝑏𝑝 𝛼̇ + 𝐽𝑝 𝜏)
𝐽𝑇

𝑚𝑝 𝑙𝑝2 𝐾𝑚 𝑘𝑚2
̇
3 𝑅𝑚 𝑚 𝑅𝑚 𝜃]
𝑚𝑝2 𝑙 2 𝑟𝑔 𝐽𝑝 𝑏𝑟 𝑚𝑝 𝑙𝑟𝑏𝑝 [ 𝑣 −
θ̈ = 𝛼 − ̇𝜃 + 𝛼̇ +
𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2

𝑚𝑝 𝑙𝑝2 𝐾 𝑚𝑝 𝑙𝑝2 𝑘 2
[ 3 𝑅𝑚 𝑣𝑚 − 3 𝑅𝑚 𝜃̇]
𝑚𝑝2 𝑙 2 𝑟𝑔 𝐽𝑝 𝑏𝑟 𝑚𝑝 𝑙𝑟𝑏𝑝 𝑚 𝑚
θ̈ = 2 2 2
𝛼− 2 2 2
𝜃̇ + 𝛼̇ +
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2

𝑚𝑝 𝑙𝑝2 𝐾𝑚 𝑚𝑝 𝑙𝑝2 𝑘𝑚
2
𝑚𝑝2 𝑙 2 𝑟𝑔 𝐽𝑝 𝑏𝑟 𝑚𝑝 𝑙𝑟𝑏𝑝 3 𝑅𝑚 3 𝑅𝑚
θ̈ = 𝛼 − 𝜃̇ + 𝛼̇ + 𝑣𝑚 − 𝜃̇
𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2

𝑚𝑝 𝑙𝑝2 𝑘𝑚2 𝑚𝑝 𝑙𝑝2 𝐾𝑚


𝑚𝑝2 𝑙 2 𝑟𝑔 𝐽𝑝 𝑏𝑟 3 𝑅𝑚 𝑚𝑝 𝑙𝑟𝑏𝑝 3 𝑅𝑚
θ̈ = 𝛼 − − 𝜃̇ + 𝛼̇ + 𝑣𝑚
𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟2 2 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2
[ ]

9𝑚𝑝 𝑔 2) 9𝑏𝑝
3(𝑏𝑟 𝑅𝑚 − 𝑘𝑚 3𝑘𝑚
θ̈ = 𝛼−[ ] 𝜃̇+ 𝛼̇ + 𝑣𝑚
𝑟(−9𝑚𝑝 + 𝑚𝑟 ) 𝑅𝑚 𝑟 2 (−9𝑚𝑝 + 𝑚𝑟 ) 𝑙𝑟(−9𝑚𝑝 + 𝑚𝑟 ) 𝑅𝑚 𝑟 2 (−9𝑚𝑝 + 𝑚𝑟 )

1
𝛼̈ = (−𝑚𝑝 𝑔𝑙𝐽𝑟 𝛼 + 𝑚𝑝 𝑙𝑟𝑏𝑟 𝜃̇ − 𝐽𝑝 𝑏𝑝 𝛼̇ − 𝑚𝑝 𝑟𝑙𝜏)
𝐽𝑡
𝑘 𝐾2
𝑚𝑝 𝑔𝑙𝐽𝑟 𝑚𝑝 𝑙𝑟𝑏𝑟 𝐽𝑝 𝑏𝑝 𝑚𝑝 𝑟𝑙 [𝑅𝑚 𝑣𝑚 − 𝑅𝑚 𝜃̇]
̇− 𝑚 𝑚
𝛼̈ = − 2 2 2
𝛼 + 2 2 2
𝜃 2 2 2
𝛼̇ − 2 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟
2
𝑚𝑝 𝑟𝑙𝑘𝑚 𝑚𝑝 𝑟𝑙𝐾𝑚
[ 𝑅 𝑣𝑚 − 𝑅 𝜃̇]
𝑚𝑝 𝑔𝑙𝐽𝑟 𝑚𝑝 𝑙𝑟𝑏𝑟 𝐽𝑝 𝑏𝑝 𝑚 𝑚
𝛼̈ = − 𝛼+ 𝜃̇ − 𝛼̇ −
𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2
2
𝑚𝑝 𝑟𝑙𝑘𝑚 𝑚𝑝 𝑟𝑙𝐾𝑚
𝑚𝑝 𝑔𝑙𝐽𝑟 𝑚𝑝 𝑙𝑟𝑏𝑟 𝐽𝑝 𝑏𝑝 𝑅𝑚 𝑅𝑚
𝛼̈ = − 2 𝛼+ 2 𝜃̇ − 2 𝛼̇ − 2 𝑣𝑚 + 𝜃̇
2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2

2
𝑚𝑝 𝑟𝑙𝐾𝑚 𝑚𝑝 𝑟𝑙𝑘𝑚
𝑚𝑝 𝑔𝑙𝐽𝑟 𝑚𝑝 𝑙𝑟𝑏𝑟 𝑅𝑚 𝐽𝑝 𝑏𝑝 𝑅𝑚
𝛼̈ = − 2 𝛼+ 2 + 2 𝜃̇ − 2 𝛼̇ − 𝑣𝑚
2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 2
𝐽𝑝 𝐽𝑟 − 𝑚𝑝 𝑙 𝑟 2 𝐽𝑝 𝐽𝑟 − 𝑚𝑝2 𝑙 2 𝑟 2
[ ]

Docente: Versión: Fecha: Aprobado:


2)
3𝑔𝑚𝑟 9(𝑏𝑟 𝑅𝑚 − 𝑘𝑚 3𝑏𝑟 9𝑘𝑚
𝛼̈ = − 𝛼+ 𝜃̇ − 𝛼̇ − 𝑣𝑚
𝑙(−9𝑚𝑝 + 𝑚𝑟 ) 𝑅𝑚 𝑙𝑟(−9𝑚𝑝 + 𝑚𝑟 ) 𝑟 2 (−9𝑚 𝑝 + 𝑚𝑟 ) 𝑅𝑚 𝑙𝑟(−9𝑚𝑝 + 𝑚𝑟 )

• Matriz de estados

𝑥1 = 𝜃
𝑥2 = 𝛼
𝑥3 = 𝜃̇
𝑥4 = 𝛼̇

𝑥̇ = 𝐴𝑋 + 𝐵𝑈
𝑦 = 𝐶𝑋 + 𝐷

• Medidas del péndulo y del servomotor:


o Largo del péndulo.

o Radio.

Docente: Versión: Fecha: Aprobado:


o Peso del péndulo.

o Resistencia del motor

Docente: Versión: Fecha: Aprobado:


Los valores de 𝑘𝑚 y 𝑏𝑟 se obtienen de otro moto reductor DC.

𝑘𝑚 = 0.0767
𝑏𝑟 = 1.5 𝑒 −3
𝑅𝑚 = 13.2 Ω
𝑚𝑝 = 7 𝑔 = 7𝑥10−3 𝐾𝑔
𝑚𝑟 = 5 𝑔 = 5 𝑥10−3 𝐾𝑔
𝑙 = 8.5 𝑐𝑚 = 0.085 𝑚
𝑟 = 13 𝑐𝑚 = 0.13 𝑚

Entonces la matriz de estados queda de la siguiente manera

𝜃̇ 0 0 1 0 𝜃 0
𝛼
[𝛼̇ ] = [0 0 0 1 ] [ ̇] + [ 0 ] 𝑈
𝜃̈ 0 −81.883 −2.33 −21.06 𝜃 −90.28
𝛼̈ 0 29.81 10.70 4.59 𝛼̇ 414.26

𝑦1 1 0 0 0 0
[𝑦 ] = [ ]+ [ ]
2 0 1 0 0 0

• Respuesta a escalón unitario.

Docente: Versión: Fecha: Aprobado:


Docente: Versión: Fecha: Aprobado:
Parte III. Diseño de controlador por realimentación de estados.
• Ubicación de los polos

El controlador parte de los siguientes requerimientos


OS<15%
Ts < 2 s

%𝑂𝑆 15
− ln ( 100 ) − ln (100)
𝜁= = = 0.51
√𝜋 2 + ln2 (%𝑂𝑆 √𝜋 2 + ln2 ( 15
100 ) 100
)
4
𝑇𝑠 =
𝜁 𝜔𝑛
4 4
𝜔𝑛 = = =4
𝜁 𝑇𝑠 (0.50)(2)

Los polos se determinan de la siguiente manera

𝑠1,2 = −𝜁𝜔𝑛 ± 𝜔𝑛 √𝜁 2 − 1
𝑠1 = −2 + 𝑗 3.46
𝑠2 = −2 − 𝑗3.46
𝑠3 = −15
𝑠4 = −10

Calcular matriz controladora desde Matlab con el comando “acker”.

Docente: Versión: Fecha: Aprobado:


Grafica obtenida para el ángulo del péndulo con un overshoot de 19% y un tiempo de estabilización
de 4 s.

Grafica obtenida para el ángulo del servomotor

Docente: Versión: Fecha: Aprobado:


• Tiempo continuo
Convertir matrices de tiempo continuo a tiempo discreto, usando la función ‘c2d’ de Matlab

Ts =0.05

Docente: Versión: Fecha: Aprobado:


• Matriz K para controlador
Los polos que se usaron fueron en tiempo continuo:
𝑠1 = −2 + 𝑗 3.46
𝑠2 = −2 − 𝑗3.46
𝑠3 = −15
𝑠4 = −10

𝑐𝑜𝑛𝑣𝑒𝑟𝑠𝑖ó𝑛 𝑎 𝑝𝑙𝑎𝑛𝑜 𝑧 = 𝑒 −2+3.46𝑗(0.05)


= 𝑒 −2(0.05) 𝑒 +𝑗3.46(0.05)
= 𝑒 −0.1 𝑒 +𝑗0.173
= 0.9048(cos(0.713) + 𝑗𝑠𝑒𝑛(0.713))
= 0.6843 + 𝑗0.5918

𝑐𝑜𝑛𝑣𝑒𝑟𝑠𝑖ó𝑛 𝑎 𝑝𝑙𝑎𝑛𝑜 𝑧 = 𝑒 −10∗0.05


= 0.6065

𝑐𝑜𝑛𝑣𝑒𝑟𝑠𝑖ó𝑛 𝑎 𝑝𝑙𝑎𝑛𝑜 𝑧 = 𝑒 −15∗0.05


= 0.4723

|𝑧𝑰 − 𝑮 + 𝑯𝑲| = (𝑧 − 0.6843 + 𝑗0.5918)(𝑧 − 0.6843 − 𝑗0.5918)(𝑧 − 0.6065)(𝑧 − 0.4723)

|𝑧𝑰 − 𝑮 + 𝑯𝑲| = (𝑧 2 − 1.7826𝑧 + 0.8186)(𝑧 2 − 1.0788𝑧 + 0.2864)

|𝑧𝑰 − 𝑮 + 𝑯𝑲| = 𝑧 4 − 2.8614𝑧 3 + 3.0280𝑧 2 − 1.3936𝑧 + 0.2344

𝑧 0 0 0 1 −0.1074 0.0424 −0.0280 −0.2946


0 𝑧 0 0 0 1.0203 0.0133 0.0516 0.5164
|𝑧𝑰 − 𝑮 + 𝑯𝑲| = |[ ]−[ ]+[ ] [𝑘 𝑘2 𝑘3 𝑘4 ]|
0 0 𝑧 0 0 −4.3050 0.6020 −1.1285 −15.4136 1
0 0 0 𝑧 0 0.4472 0.5215 0.9764 20.1895

𝑧−1 0.107 −0.042 0.028 −0.294𝑘1 −0.294𝑘2 −0.294𝑘3 −0.294𝑘4


0.516𝑘1 0.516𝑘2 0.516𝑘3 0.516𝑘4
|𝑧𝑰 − 𝑮 + 𝑯𝑲| = |[ 0 𝑧 − 1.02 −0.013 −0.051
]+[ ]|
0 4.305 𝑧 − 0.602 1.128 −15.413𝑘1 −15.413𝑘2 −15.413𝑘3 −15.413𝑘4
0 −0.447 −0.521 𝑧 − 0.976 20.189𝑘1 20.189𝑘2 20.189𝑘3 20.189𝑘4

𝑧 − 1 − 0.294𝑘1 0.107 − 0.294𝑘2 −0.042 − 0.294𝑘3 0.028 − 0.294𝑘4


0.516𝑘1 𝑧 − 1.02 + 0.516𝑘2 −0.013 + 0.516𝑘3 −0.051 + 0.516𝑘4
|𝑧𝑰 − 𝑮 + 𝑯𝑲| = |[ ]|
−15.413𝑘1 4.305 − 15.413𝑘2 𝑧 − 0.602 − 15.413𝑘3 1.128 − 15.413𝑘4
20.189𝑘1 −0.447 + 20.189𝑘2 −0.521 + 20.189𝑘3 𝑧 − 0.976 + 𝑘4

Docente: Versión: Fecha: Aprobado:


|𝑧𝑰 − 𝑮 + 𝑯𝑲| = 𝑧 4 − 0.2946𝑘1 𝑧 3 + 0.5164𝑘2 𝑧 3 − 15.4136𝑘3 𝑧 3 + 20.1895𝑘4 𝑧 3 − 3.5987𝑧 3
− 0.5087𝑘1 𝑧 2 − 0.4947𝑘2 𝑧 2 + 21.1829𝑘3 𝑧 2 − 60.7501𝑘4 𝑧 2 + 5.4196𝑧 2 + 0.5469𝑘1 𝑧
− 0.5590𝑘2 𝑧 − 0.0975𝑘3 𝑧 + 60.9287𝑘4 𝑧 − 3.9405𝑧 + 0.0577𝑘1 + 0.5373𝑘2 − 5.6718𝑘3
− 20.3681𝑘4 + 1.1196 = 𝑧 4 − 2.8614𝑧 3 + 3.0280𝑧 2 − 1.3936𝑧 + 0.2344

−0.294𝑘1 + 0.516𝑘2 − 15.413𝑘3 + 20.189𝑘4 − 3.598 = −2.585


−0.508𝑘1 − 0.497𝑘2 + 21.182𝑘3 − 60.750𝑘4 + 5.419 = +3.022
+0.546𝑘1 − 0.559𝑘2 − 0.097𝑘3 + 60.928𝑘4 − 3.940 = −1.390
+0.057𝑘1 + 0.537𝑘2 − 5.671𝑘3 − 20.368𝑘4 + 1.119 = 0.234

𝑘1 = −0.03724 𝑘2 = 0.23603 𝑘3 = 0.01885 𝑘4 = 0.04433

• Simulación

Grafica obtenida para el ángulo del servomotor.

Docente: Versión: Fecha: Aprobado:


Grafica obtenida para el ángulo del péndulo.

Parte de código.
Para poder sensar posición angular , lo que hacemos es descargar la librería
“Seeed_Arduino_AS5600-master”; ya descargada la librería , conectamos el sensor de
acuerdo a la figura2 en donde la linea de comunicación de datos va en el pin 2 de la ESP32, el
pin 3 va el SCL o el reloj, el en pin A1 va la salida de datos del AS5600.

Docente: Versión: Fecha: Aprobado:


Ya una vez conectado el sensor procedemos a verificar, en donde efectivamente tenemos
medición de posición angular por medio de la siguiente línea de código:

#include <Wire.h>

#include <AS5600.h>

AMS_5600 ams5600;

#define DIR_PIN A1

#include <Servo.h> int

angle_in = 0; Servo

servoMotor;

void setup() { pinMode(DIR_PIN,


OUTPUT);

[Link](115200);
[Link]();
[Link](18);
}
int Angle() {

digitalWrite(DIR_PIN, HIGH);

int in;

in = map([Link](),0,4095,180,0);

return in;

void loop() {
if ([Link]() == 1 ) {

if (angle_in != Angle()) {

angle_in = Angle();

}
}

[Link](angle_in);

Docente: Versión: Fecha: Aprobado:


if (angle_in == 25){ [Link](100);

}
else{ [Link](0);
}
}

En este código se mover el motor de acuerdo con la posición en que se encuentra el péndulo; en donde a
simple vista podemos afirmar que el sistema es inestable por que el ángulo oscila de 0 a 180 grados.

Ahora en el diseño del controlador observamos que los movimientos del motor no van a superar los 90°
para mantener el péndulo estable arriba; y para que el péndulo este estable arriba se tiene como
referencia 90° ya que con este ángulo de referencia nuestro motor se puede mover de 0° a 180°.

Seleccionamos el ángulo de movimiento de 90° es porque observamos que para que el sistema tenga
control tendríamos un margen de ±15° por lado.
Se logro determinar un código para el manejo de este prototipo.
#include <ESP32Servo.h>
#include <Wire.h>
#include <AS5600.h>

AMS_5600 ams5600;
#define DIR_PIN A1

int angle_in = 0;

Servo servoMotor;
int strEntero;
String cadena="";
double uk=0;
double xk=0;
double ek=0;
double ukm1=0;
double ukm2=0;
double xkm1=0;
double xkm2=0;
double ekm1=0;

Docente: Versión: Fecha: Aprobado:


double ekm2=0;

int i=1;
float Ts=50;
float kp=8.746983693423330e-05; // Ts=0.01 ti=kp/ki kd=kp*td td=kd/kp
float ti=1.539870927876576e-07;
float td=3.849677319691440e-08;
int ref=84;
double A;
double B;
double C;

unsigned long pasado=0;


unsigned long actual;

void setup() {
A=kp*(1+(0.00003/(2*ti))+(td/0.00003));
B=-kp*(1-(0.00003/(2*ti))+(2*td/0.00003));
C=kp*td/0.00003;
[Link](9600);
pinMode(DIR_PIN, OUTPUT);
// [Link](115200);
[Link]();
[Link](18);
}
int Angle() {
digitalWrite(DIR_PIN, HIGH);
int in;
in = map([Link](),0,4095,360,0);
return in;
}
void loop() {

Docente: Versión: Fecha: Aprobado:


actual=millis();
if ([Link]() == 1 ) {
if (angle_in != Angle()) {
angle_in = Angle();
}
}
unsigned long dt_1=(actual-pasado);
if(dt_1 >= Ts){

pasado = actual;
while([Link]()>0){
int inChar = [Link]();
if (isDigit(inChar)) cadena+=(char)inChar; //guarda en cadena el caracter numero
if (inChar=='\n'){
strEntero=[Link]();// guarda en strEntero el caracter de cadena convertido a numero
cadena="";// vacia variable cadena
}
}
//ref=strEntero;
xk= angle_in;
ek=ref-xk; // error
uk=ukm1+(A*ek)+(B*ekm1)+(C*ekm2);// PID discreto
//uk=2*ukm1-ukm2+0.3399*ekm1-0.3398*ekm2;
if (i>=2){
ukm2=ukm1;
xkm2=xkm1;
ekm2=ekm1;
}
xkm1=xk;
ukm1=uk;
ekm1=ek;
///////////////////////////////motor////////////////////////////////////////////

Docente: Versión: Fecha: Aprobado:


if(abs(uk)> 0){
int servoOutput = map(ek, 100, -100, 0, 270);
[Link](servoOutput);
}
//[Link](uk);
//[Link](", ");
[Link](ref);
[Link](", ");
[Link](xk);
i+=1;
}
}

Conclusiones:
1. El modelo péndulo invertido mantiene el equilibrio si lo dejamos en la posición de referencia de 0° y lo
soltamos; si queremos que esté preparado para ser controlado desde cualquier punto de inicio, quitar el
microcontrolador y hacer que el polo que hace que nuestro sistema sea inestable correrlo por diseño de
controlador de espacio de estados.
2. La diseñar, efectuar algoritmo de un controlador solo permite mantener en equilibrio el ángulo alfa.

Referencias:
- K. Ogata, Modern Control Engineering.

Docente: Versión: Fecha: Aprobado:

También podría gustarte