Balancín de dos ruedas con controlador Pololu

Slides:



Advertisements
Presentaciones similares
FUNDAMENTOS DE INSTRUMENTACIÓN
Advertisements

Complejidad Computacional
Complejidad Computacional
CARACTERÍSTICAS DE ANÁLISIS EN UN SISTEMA DE CONTROL:
También conocido como Diseño Lógico Rodrigo Salvatierra Alberú.
TERMINOLOGÍA.
TESINA DE SEMINARIO DE GRADUACION:. Para el desarrollo de este proyecto utilizaremos dos transceptores infrarrojos Pololu IR Beacon, uno de ellos deberá
ENERGÍA EÓLICA TEORÍA Y CONCEPTOS
SIMULACIÓN DE SISTEMAS DE CONTROL
Resolución de Problemas
Arquitecturas de Computadoras Capítulo I. Abstracciones
Fundamentos de la Programación Estructurada
A fly… PROCESOS Y SISTEMAS DE CONTROL.
Viviana Baque Gutiérrez Lenin Gómez Romero
PROFESOR : Ing. Carlos Valdivieso
INTRODUCCIÓN A LA IDENTIFICACIÓN DE SISTEMAS
MICROCONTROLADORES AVANZADOS
DESARROLLO E IMPLEMENTACIÓN DE CONTROLADORES PARA LA PLANTA DE VELOCIDAD DC SPEED CONTROL SYSTEM MEDIANTE LA UTILIZACIÓN DE LA HERRAMIENTA RTW (REAL-TIME.
Comparador de iluminación Sensor de puerta Potencia Iluminación Generador Alarma.
Motores.
Panorama de Ventas. Panorama de Ventas A419 Control de Temperatura Electrónico con pantalla Compacto en su tamaño, las dimensiones son aproximadamente.
Controla tu entorno con un microcontrolador PIIISA
CONTROL AUTOMATICO III SEMANA INGENIERIA EN ENERGIA VI CICLO
TuneUp 2014 Nombre: Elmer Bryan Gómez Lara. Grado: 5to. Bachillerato.
Quinta Clase Patricio A. Navarrete Junio 3 de 2011.
Una breve introducción
NQC Lazos, Enunciados Condicionales, Lógica Booleana.
Programación Básica con NQC Patricio A. Castillo 03/05/2008.
Luis Brito Nelson Quizhpe. RS-232 EL objetivo general de este proyecto es obtener las coordenadas del objeto al cual esta instalado el acelerómetro,
Fast Running Experiments Involving a Humanoid Robot Robots Humanoides Centro de Automática y Robótica CSIC-UPM Universidad Politécnica de Madrid William.
VHDL.
Tema 3 Entrada y Salida.
Semana 5 Subprogramas..
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Nivel medio. Y Es un compilador. YContiene un conjunto de palabras.
Unidad III Administración de procesos
Análisis de Algoritmos
DISEÑO E IMPLEMENTACION DE UN ROBOT SEGUIDOR DE LINEA CARGUERO
Lenguaje C Ing. Sonia Alexandra Pinzón Nuñez
Ciclo de Vida del Software Paradigmas de Desarrollo
Integrantes: Christian Blanco Raúl Bejarano
UNIVERSIDAD DE COLIMA FACULTAD DE INGENIERIA MECANICA Y ELECTRICA
Integrantes: David Miguel Martínez Rodríguez Diego David Bósquez Granja.
Gerardo Villagómez G. Rodrigo Jurado E.. Objetivo del Proyecto  Comandar nuestro robot pololu 3π acompañado del KIT AVR Butterfly, de forma que se llegue.
MAQUINA EXPERIMENTAL MULTIEJES SISTEMA DE CONTROL CONTENIDO.
Introducción Electrónica Digital
Controlador PID de temperatura utilizando la tarjeta de desarrollo AVR Butterfly Andrés Lecaro José González.
EL CONTROL INDUSTRIAL:
Diseño e Implementación de Vehículo Autobalanceado sobre Dos Ruedas
Características de “C” Y Esta conformado por un Ambiente Integrado. Y Es un Lenguaje de Alto Nivel. Y Es un compilador. YContiene un conjunto de palabras.
1 Algunas ideas básicas en C++ Agustín J. González ELO-329.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
Lección 3: Estados de Espera “Espere Por” Basados en Sensores Soluciones de Programación.
Representación de Algoritmos
INTRODUCCIÓN A ARDUINO
Automatización Es la tecnología utilizada para realizar procesos o procedimientos sin la ayuda de las personas.
Programación Básica con NQC Patricio A. Castillo 10/05/2008.
Sesión 13: Python (4) – Estructura Repetición. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática.
GIRO EL ÁNGULO QUE QUIERO O LO CONVIERTO EN MOTOR
Patricio A. Castillo José M. Galarce Septiembre 13 de 2008 Cuarta Clase.
Giróscopos Ópticos en la Navegación Inercial
MÓDULO INTRODUCCIÓN AL CICLO DE VIDA DEL SOFTWARE ARTICULADORA: CLAUDIA MARIA RESTREPO P.
Arduino y la Educacion Carlos Solines. Arduino Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de.
Corporación Universitaria del Caribe CECAR Fundamentos de programación II.
MEMORIA DINÁMICA.
El diseño de la interfaz de usuario requiere el estudio de las personas y el conocimiento tecnológico adecuado.
SENSORIZACION Y CONTROL DE ROBOTS MOVILES. INTEGRANTES DEL EQUIPO. LIC. ISIDRO LOPEZ RUIZ LIC. GUILLERMO MATUS GARCIA LIC. OLIVIA SANTOS REGALADO. 19 DE.
Arquitectura de Computadoras (Taller) Semestre II de 2008.
SISTEMAS ELECTRÓNICOS 3ºGIERM1 1. Introducción 2. Tipos de datos 3. Estructuras típicas de programación 4. Manejo de bits Tema 7. Programación de microcontroladores.
Practica 1 Componentes del Robot. Sensor Ultrasónico El Sensor Ultrasónico de Distancia PING (o "PING)))" como lo denomina el fabricante) tiene una interfaz.
Ing. José David Ortiz Salas
Transcripción de la presentación:

Balancín de dos ruedas con controlador Pololu Integrantes Fernando Rodríguez José Intriago

Antecedentes . El presente proyecto es un ejemplo clásico de la aplicación de los fundamentos del Control Automático a sistemas que utilizan microcontroladores.

Antecedentes Uso de Microcontroladores implica: Eficiencia en Energía . Uso de Microcontroladores implica: Eficiencia en Energía Eficiencia en Espacio Eficiencia en Precisión

Aplicaciones Robot Bípedo Los principios por los cuales opera el balancín de dos ruedas son la base de los sistemas de locomoción de los robots bípedos.

Aplicaciones SEGWAY Uno de las aplicaciones más notables de este proyecto es el vehículo de transporte ligero giroscópico, Segway. Aunque por razones de costo su uso no se encuentre muy difundido, su bajo consumo de energía y versatilidad son características que encajan perfectamente en los requerimientos de la sociedad actual

Herramientas del software PROTEUS Plataforma de Simulación Electrónica AVR Studio Compilador

Herramientas de hardware Entrada del Sistema Acelerómetro MX2125

Herramientas de hardware Procesamiento del Sistema Orangutan SV-328

Herramientas de hardware MOSFET IRFZ44N Motores Ruedas

Diagrama de bloques

Diseño de la solución Control PID

Diseño de la solución Sensor El error será calculado a partir de los pulsos emitidos por el MX2125. Dichos pulsos representan en su duración la aceleración experimentada por este sensor. Cuando este se encuentra en la posición de equilibrio genera pulsos de 5ms; por lo cual este valor será la referencia que se utilizará para determinar el ángulo de inclinación y en función de este el error.

Diseño de la solución Controlador La tarjeta controladora, Orangutan SV- 328, dispone del microcontrolador ATmega328P. El cual receptará la lectura del sensor y generará una respuesta acorde por medio de su driver (TB6612FNG). Debido a que los motores pueden llegar a demandar hasta 5A y el Orangutan SV- 328 provee solo hasta 3A, nos valdremos de un puente H (compuesto por MOSFETS IRFZ44N) para precautelar la integridad de la tarjeta controladora.

Diagrama de Flujo del Controlador

Código //****************************************LIBRERIAS******************************** #include <pololu/orangutan.h> // recoge todas las librerías compatibles con el Orangutan #include <math.h> // librería de funciones matemáticas #define pi 3.141592 #define g 10 // gravedad #define kp 6.5 //constantes para controlador PID #define ki 0.5 #define kd 1 //******************************************************************************** const unsigned char pulseInPins[] = { IO_C5 }; //habilita PC5 como entrada de pulsos //*********************************función de inicio********************************** void arranque() // paso previo para iniciar el programa principal { while(!button_is_pressed(BUTTON_A)) // ciclado mientras no se presione el botón A clear(); // limpia el LCD print("Balancin"); // escribe en el LCD lcd_goto_xy(0,1); // coloca el cursor en la coordenada especificada print("Pulse A"); delay_ms(100); // retardo } wait_for_button_release(BUTTON_A); // espera a que se suelte el botón A clear(); . //********************************Programa principal****************************** int main() { arranque(); int recuperable= 1; //indica si el ángulo es recuperable long motor_speed_old= 1; //velocidad anterior int error= 0; // error actual int error_anterior= 0; // error anterior pulse_in_start(pulseInPins, 1); // inicia lectura de pulsos en PD0   while(recuperable==1) // lazo principal unsigned long acPulse; // duración del pulso actual (0.4 us por conteo) unsigned char estado; // estado actual de la entrada (alta 1, baja 0) get_current_pulse_state(0, &acPulse, &estado); // pasa los argumentos como punteros // Si más de 300 ms transcurrido desde el último cambio en PD0 // indicamos que los pulsos han parado if (pulse_to_microseconds(acPulse)>= 300000UL) clear(); //limpia el LCD print("Sin pulsos "); //escribe en el LCD } //*******************************Interpreta la señal****************************** else if (new_high_pulse(0) && new_low_pulse(0)) // si se detecta un nuevo pulso completo float ax, angulo; unsigned long pulso_alto_conteos= get_last_high_pulse(0); unsigned long periodo_conteos= pulso_alto_conteos + get_last_low_pulse(0); unsigned long pulso_alto_us= 0.4 * pulso_alto_conteos; unsigned long duty_cycle_percent= (100 * pulso_alto_conteos + periodo_conteos/2) / periodo_conteos;

Código . if(motor_speed > 0)   if (duty_cycle_percent== 50) // posición deseada { clear(); lcd_goto_xy(0,0); print("Angulo: "); lcd_goto_xy(0,1); print_unsigned_long(0); // muestro ángulo de inclinación old_error= error; error= 0; // actualiza los errores }   else if (duty_cycle_percent > 50) ax= (((pulso_alto_us / 10.0) - 500) * 8) / 1000; angulo= ((asin(ax)) * 360.0) / (2 * pi); //cálculo del ángulo   print("Angulo:"); lcd_goto_xy(0,1); print_unsigned_long(angulo);//muestro ángulo de inclinación error= 0 - angulo; //actualiza los errores else angulo= ((asin(ax) * -1) * 360.0)/ (2 * pi); //cálculo del ángulo print("-"); print_unsigned_long(angulo);//muestro ángulo de inclinación error= 0 + angulo;//actualiza los errores  //*************************************Ángulo irrecuperable*********************************** if (angulo>50) recuperable=0; set_motors(0,0); //apaga los motores y termina el programa //****************************************Fija Velocidad************************************** long motor_speed= kp * error + ki * (error + old_error) + kd * (error - old_error); //ajusta la velocidad de control generada por el lazo PI . if(motor_speed > 0) { motor_speed=motor_speed+30; //ajusta velocidad if(motor_speed > 255) motor_speed=255; //límite de velocidad } else if (motor_speed < 0) motor_speed=motor_speed-30; //ajusta velocidad if(motor_speed < -255) motor_speed=-255; //límite de velocidad //***************************************Habilita MOSFETS************************************* //PD0 y PD1 se utilizan para habilitar los MOSFETS de la parte "baja" del puente H //los MOSFETS de la parte alta son habilitados directamente por la señal PWM del Orangutan SV-328 if((motor_speed * motor_speed_old) > 0)//no hay cambio en el sentido de rotación if(motor_speed > 0)//continúa "avance" set_digital_output (IO_D0,LOW); set_digital_output (IO_D1,HIGH);   else//continúa "retroceso" set_digital_output (IO_D1,LOW); set_digital_output (IO_D0,HIGH);   } else //cambio en el sentido de rotación o parado if(motor_speed > 0) //cambiar a "avance" set_motors(0,0);   else if (motor_speed == 0)//frenado else //cambiar a "retroceso   set_motors(motor_speed, motor_speed); //fija la velocidad de los motores motor_speed_old= motor_speed; delay_ms(10); } }

Implementación Vista General

Implementación Puente H

Implementación Mensaje Inicial

Implementación ÁNGULO 0˚

Implementación ÁNGULO -9˚

Conclusiones . El modelo que trabajamos representa una planta de control relativamente complicada. Puesto que la mayoría de sistemas no presentan una sensibilidad tan alta como el nuestro. Es decir son sistemas capaces de mantenerse operativos aun con errores de consideración. Mientras que en el presente caso, literalmente todo el sistema se desplomaría. El uso de librerías de Pololu facilitó bastante nuestro trabajo al momento de programar, pues estas incluyen funciones que miden la duración de pulsos y controlan la velocidad de los motores. No obstante para su correcta implementación se requiere analizar minuciosamente la estructura de las mismas.

Recomendaciones . Para un mejor rendimiento del sistema de control se deberían considerar más pulsos pasados. En este caso solo se consideró el error inmediato anterior. Los motores utilizados pueden llegar a demandar hasta 5A mientras que el Orangutan SV-328 provee hasta 3A. Por lo cual, bajo ninguna circunstancia estos dos elemento deben interconectarse directamente. Al momento de determinar experimentalmente las constantes kp y ki. Es recomendable empezar por la proporcional manteniendo ki en 0. Una vez se encuentre una constante que mantenga el sistema con un cierto equilibrio, se debe proceder a variar el valor de ki para refinar la estabilidad del sistema.