Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

PENDULO INVERTIDO

No description
by

gabriel banda

on 18 July 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of PENDULO INVERTIDO

INGENIERIA ELECTRONICA
PROYECTO DE INGENIERIA

PENDULO INVERTIDO
AtMega 2560
Arduino
DESCRIPCION COMPONENTES
FUNCIONAMIENTO
Nuestro pendulo invertido el cual construimos y programamos en base a un microprocesador AtMega sobre una placa arduino, logramos obtener muy buenos resultados y poco a poco configuramos los parametros de sobrepaso, estabilización y agresividad de funcionamiento tal y como podemos ver en la presentacion de nuestros avances.
ALGUNOS DE LOS CALCULOS MATEMATICOS
QUÉ ES UN PENDULO INVERTIDO?
objetivamente un pendulo invertido es un sistema autosuficiente de lazo cerrado, el cual se adapta ante perturbaciones con la programacion y configuracion de un sistema PID.
Mediante calculos, podemos obtener los parametros admisibles para integrar el sistema PID y obtener un resultado bastante cercano al real.
PARA ENTENDERLO DE UNA FORMA MAS CLARA LES PRESENTAMOS EL SIGUIENTE DIAGRAMA
PENDULO INVERTIDO
PROFESOR GUIA: JORGE BAHAMONDE

ALUMNOS: GABRIEL BANDA M.
CRISTOBAL CASTRO R.
VICTOR SEPULVEDA P.

1. PUERTO MINI USB
2. SALIDA PWM
3. AT MEGA 2560
4. E/S DIGITALES
5. ENTRADAS ANALOGAS
6. PUERTOS DE ALIMENTACION
PROCESADOR AtMEGA
En este microcontrolador esta contenida la programacion que pone en funcionamiento nuestro pendulo invertido. en donde se encuentran unas cuantas ecuaciones matematicas y la configuracion especificamente diseñada para nuestro pendulo segun sus caracteristicas.
MCP3202
Este es un circuito integrado que hace la funcion de conversor analogo digital de 12bits, el cual utilizamos para aumentar la resolucion de nuestro sistema
POTENCIOMETRO
Este componente es el que utilizamos para sensar la posicion en la que está nuestro pendulo.
Es un potenciometro de 10 vueltas, usado para trabajos de precisión.
L298
Puente H, encargado de poder recibir señales de
baja corriente y al ser alimentado externamente suministra energia a nuestro motor ademas de darle la inversion de giro.
Motor DC
Este elemento es escencial dentro de nuestro sistema ya que es quien mueve el tren que transporta el pendulo.
Debe tener una respuesta rapida y precisa.
Para la puesta en marcha de nuestro sistema de pendulo invertido, previamente tuvimos que considerar ciertos parametros para poder seleccionar lo mas acertivamente posible los elementos para su correcto funcionamiento. y a partir de alli seleccionar los valores que definen nuestro sistema que son:
Kp : Producto entre la señal de error y la constante proporcional
Ki : Busca disminuir y eliminar el error en estado estacionario
Kd : Se manifiesta cuando hay un cambio en el valor absoluto del error

PID
Kp
Ki
Kd
ELABORACION
Elementos del sistema
1. Riel por donde se desplaza el carro
2. Correa para transportar el carro por todo el recorrido
3. Pendulo
4. Carro, el cual se desplaza por el riel.
Puesta en marcha
Testeo de elementos a utilizar

Al comenzar la elaboracion de nuestra maqueta fue fundamental considerar las variables que nos afectaban en el sistema, tales como: friccion, masa, largo y peso del pendulo, fuerza y resolucion del motor, aislación electromagnetica para transmision de datos analogica y potencia.
Una vez analizados todos esos puntos pudimos probar el programa PID y sobre la marcha ir modificando el kp, ki y kd. Ya que los valores teoricos solo nos dan una idea de cual puede ser la respuesta del sistema, lo que es dista bastante de la realidad.
Declaracion de pines

#define INA 3
#define INB 2
#define PWM2 10
#define POT 0

#define SELPIN 7 //MCP3202 CS
#define DATAOUT 6 //MCP3202 MOSI
#define DATAIN 5 //MCP3202 MISO
#define SPICLOCK 4//MCP3202 Clock

Declaracion de variables

int errorcw = 0,correccion = 0,
PID = 0, error = 0, ultimo_error = 0,
x = 0, grados = 0;

int limiteinf = 945, limitesup = 3430,
outmax = 0, outmin = 0;

double kp = 17, ki = 20, kd = 15, offset = 0;

long angulo = 0, sp = 0, angulo1 = 0;

float temp=0;
pinMode(INA, OUTPUT);
pinMode(INB, OUTPUT);
pinMode(PWM2, OUTPUT);
pinMode(SELPIN, OUTPUT); //MCP3202
pinMode(DATAOUT, OUTPUT); //MCP3202
pinMode(DATAIN, INPUT); //MCP3202
pinMode(SPICLOCK, OUTPUT); //MCP3202
sp=1777;
Seleccion entradas y salidas
do {
angulo=read_avg(POT,25);

temp=(((angulo-1777.0)/410.0)-(1.0));
grados=temp;
temp =(temp - grados)*360;
grados=(temp);

Analogread();
Errorcalc();
if (-35<grados<35) break;
}
while (-35<grados<35);
Rutina de levantamiento
kp=map(analogRead(0),0,1024,0,100);
ki=map(analogRead(1),0,1024,0,100);
kd=map(analogRead(2),0,1024,0,100);
offset=map(analogRead(3),0,1024,10,10);
Ajuste de parametros PID
Calculo del PID
int calcPid(int error,int outmin,int outmax) {
PID = (kp*(error)) + (ki*(error + ultimo_error))
+ kd*(error - ultimo_error);
ultimo_error = error;
return constrain(PID, outmin, outmax);
Lectura de muestra
int read_adc(int channel){
char buffer[5];
digitalWrite(SELPIN,HIGH); //MCP3202
digitalWrite(DATAOUT,LOW); //MCP3202
digitalWrite(SPICLOCK,LOW);//MCP3202

int adcvalue = 0;
byte commandbits = B11000000;
//BITS DE CONFIGURACION - PARTIDA

commandbits|=((channel-1)<<1);

digitalWrite(SELPIN,LOW);
//ACTIVA ADC

for (int i=7; i>=4; i--){
digitalWrite(DATAOUT,commandbits&1<<i);
digitalWrite(SPICLOCK,HIGH);
digitalWrite(SPICLOCK,LOW); }

digitalWrite(SPICLOCK,HIGH);
// ENVÍA CLOCK IGNORADO
digitalWrite(SPICLOCK,LOW);

for (int i=11; i>=0; i--){
//LEE BITS DESDE ADC
adcvalue+=digitalRead(DATAIN)<<i;
digitalWrite(SPICLOCK,HIGH);
digitalWrite(SPICLOCK,LOW);
}
digitalWrite(SELPIN, HIGH);
//DESACTIVA DISPOSITIVO
return adcvalue;}
Promedio de muestras
int read_avg(int channel,int
samples) {
long carry=0;
int input=0;

for (int x=0; x<samples; x++){
input=read_adc(channel);
carry=(input+carry);
}
input=(carry/samples);
return input;

Problemas que se nos presentaron
V/S
V/S
V/S ?

Aplicaciones comunes
MUCHAS GRACIAS POR SU ATENCIÓN


Conclusión
Esta placa contiene un acelerometro, el cual puede verificar poscicion en el eje X, Y y Z.
se comunica con el Arduino en los puertos de comunicacion SCL y SDA
Full transcript