Essays.club - Ensayos gratis, notas de cursos, notas de libros, tareas, monografías y trabajos de investigación
Buscar

CONSTRUCCIÓN Y CONTROL DE UN PÉNDULO INVERTIDO UTILIZANDO LA PLATAFORMA LEGO MINDSTORMS EV3

Enviado por   •  15 de Enero de 2019  •  1.326 Palabras (6 Páginas)  •  372 Visitas

Página 1 de 6

...

Observando la función de trasferencia a simple vista se denota que es inestable y se lo comprueba simulando nuestra función en MATLAB.

[pic 17]

FIG. 3 POLOS Y CEROS DE LA FUNCION

La grafica de polos y ceros de la función describe un sistema inestable ya que tiene un polo en el lado derecho del eje.

- pid

Utilizando Matlab y usando el commando SISOTOOL FIG. 4 realizamos una compensación de la función de transferencia para que el sistema pase a ser estable:

[pic 18]

FIG. 4 COMPENSACION DE FUNCION DE TRASFERENCIA

Luego de realizar la compensación la función de traferencia nos queda de la siguiente manera:

[pic 19]

Y las gráficas FIG. 5 corregidas con la funcion:

[pic 20]

FIG. 5 POLOS CEROS Y RESPUESTA CON FUNCION COMPENSADA

Observamos que los polos se han convertido a críticamente estables y que tenemos una función de trasferencia que se estabiliza en el tiempo, con esta función de transferencia ya podemos encontrar las constantes proporcional, integrativa y derivativa teniendo en cuenta que:

[pic 21]

TABLA 2

[pic 22]

Si bien es cierto se han encontrado el PID de mi sistema, puedo yo aun regularlo para que este lo mas estable posible por lo cual usamos el comando PIDTUNER, y regulamos nuestro pid lo mas estable posible en nuestro caso en particular logramos obtener un sistema casi ideal con los valores de la FIG.6

[pic 23]

FIG. 6 PARAMETROS DE CONTROL PIDTUNER

La grafica con los cambios de kp ki y kd es la que se muestra en la FIG 7.

[pic 24]

FIG. 7 PID SINTONIZADO

- PROGRAMACION ROBOTC

La programación se la realizo en Robotc, en el cual se ingresan los valores PID obtenidos.

#pragma config(Sensor, S4, boton, sensorEV3_Touch)

#pragma config(Motor, motorA, derecha, tmotorEV3_Large, PIDControl, driveRight, encoder)

#pragma config(Motor, motorD, izquierda, tmotorEV3_Large, PIDControl, driveLeft, encoder)

//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//

//+++++++++++++++++++++++++++++

//Programa base para un PID

//Fecha:06/19/2017

//Realizado:Carlos Flores

//+++++++++++++++++++++++++++++

//Rutina de Inicializacion=====

float ang_sen = 0.000; //dato de lectura del sensor

float ang_sen_anterior=0; //dato de lectura del sensor anterior

float error_pid = 0;//error del sistema de control

float ang_referencia = 0.000;//angulo de referencia

int valor_pid=0;//Valor calculado en la rutina de pid

float kp=142.276;//Constante proporcional

float ki=1482.898;//Constante de Integracion

float kd=3.4127;//Constante Derivativa

float error_presente=0; //Declaramos una variable llamada "error_presente" con inicializacion 0

float error_pasado=0; //Declaramos una variable llamada "error_pasado" con inicializacion 0

//Rutina de Inicializacion=====

//1. Subrutina Sensor Giroscopo=============

void giro()

{

//ang_sen =getGyroRate(S1);

ang_sen = getGyroHeading(S1);

//ang_sen = getGyroDegrees(S1);

displayBigTextLine(10,"%f",ang_sen);

ang_sen = ang_sen - ang_sen_anterior;

if (ang_sen

{

ang_sen=0.000;

}

displayBigTextLine(12,"%d",ang_sen);

ang_sen_anterior= ang_sen; //EL VALOR DEL ANGULO DEL SENSOR SE LE ASIGNA AL VALOR DEL ANGULO ANTERIOR

}

//1. Subrutina Sensor Giroscopo=============

//2. Subrutina Calculo del Error============

void error()

{

error_pid= ang_referencia;

error_pid= ang_sen-error_pid;

error_presente= error_pid;

displayBigTextLine(14,"%d",error_pid);

}

//2. Subrutina Calculo del Error============

//3. Subrutina PID==========================

void pid()

{

float proporcional=0;

float integral=0;

float derivativa=0;

proporcional= kp*error_presente;

integral

...

Descargar como  txt (10.6 Kb)   pdf (63.9 Kb)   docx (19.9 Kb)  
Leer 5 páginas más »
Disponible sólo en Essays.club