Reporte Proyecto Final
-
Upload
luissandoval7747 -
Category
Documents
-
view
948 -
download
0
Transcript of Reporte Proyecto Final
CENTRO UNIVERSITARIO DE LA COSTA SUR
DEPARTAMENTO DE INGENIERIAS
INGENIERIA MECATRONICA
Servoactuadores
“DISEÑO E IMPLEMENTACION DE UN SISTEMA DE CONTROL
DIGITAL PARA UN MOTOR DE DC CON CONTROLADOR PID”
PROFESOR: Dr. Alfredo Chávez Plascencia
Luis Felipe Sandoval Castillo
Luis Jorge Pelayo Torres
Julio Cesar Arechiga Guerrero
Damian Ramírez Navarro
Edmundo Daniel Guzmán Meza
Néstor Corona Velasco
AUTLAN DE NAVARRO, 14 DE DICIEMBRE DEL 2009
Universidad de Guadalajara Ingeniería Mecatrónica
2
TABLA DE CONTENIDOS
Prefacio ----------------------------------------------------------------- 3
Introducción ------------------------------------------------------------ 5
Marco Teórico --------------------------------------------------------- 6
Modelo Matemático -------------------------------------------------- 8
Simulación en Simulink --------------------------------------------- 11
Implementacion -------------------------------------------------------17
Apéndice A: Controlador PID-------------------------------------- 38
Apéndice B: Modulación por Ancho de Pulsos PWM ------- 41
Apéndice C: Transformada de Laplace------------------------- 42
Apéndice D: Función de Transferencia ------------------------ 44
Apéndice E: PIC 16F877A ---------------------------------------- 46
Apéndice F: Puente H ---------------------------------------------- 47
Conclusión ----------------- ------------------------------------------- 49
Bibliografía ------------------------------------------------------------- 50
Universidad de Guadalajara Ingeniería Mecatrónica
3
PREFACIO
Este proyecto tratamos de hacer autómata este pequeño robot pro medio de un
micro-controlador y entre otros dispositivos que son necesarios para su movilidad
y su etapa de potencia o de alimentación. Esto no se trata solo de una física y
eléctrica si no también necesitamos saber acerca de todas las variables que
intervienen, así como son el momento de torque del motor, de inercia, las
ganancias del PID, así como la reducción de error en este dispositivo. Es
necesario saber también acerca de la programación y del software para ello lo cual
son MPLAB y el lenguaje C ya que es necesario hacerlo en un lenguaje de alto
nivel para hacer las funciones necesarias las cuales son: derivativas e integrativas
de las señales que necesitan controlarse. También es necesario saber las
funciones de transferencia de este circuito para poder realizar su modelo
matemático del mismo.
Es necesario que el lector tenga por lo menos conocimientos básicos sobre
integrales, diferenciales y funciones de transferencia así como conocimientos
sobre lenguaje c.
Las complicaciones más frecuentes acerca de este proyecto recaen en la
obtención de los dispositivo y así como es la configuración del micro-controlador
(PIC). Es necesario recalcar que se necesita el grabador para poder insertar el
programa.
Universidad de Guadalajara Ingeniería Mecatrónica
4
OBJETIVO GENERAL
Diseñar e implementar un sistema de control digital de velocidad para un motor
DC, utilizando el microcontrolador PIC16F877A y un control.
OBJETIVOS ESPECIFICOS
Reconocimiento y Análisis del sistema
Establecer el modelo matemático del sistema
Simular el sistema modelado diseñando el controlador PID para una
respuesta especifica
Implementación del sistema a un robot
Universidad de Guadalajara Ingeniería Mecatrónica
5
INTRODUCCION
Uno de los objetivos para el proyecto que se quiere realizar el lograr mantener la
velocidad del motor DC, para que así, el error de estado estacionario de la
velocidad del motor sea cero; además se desea que el error de estado
estacionario debido a una perturbación también sea nulo.
Otro requerimiento es que el motor mantenga la velocidad. En este caso, se desea
disminuir el tiempo de establecimiento para que sea mínimo y tenga un sobrepaso
considerable. Para lograr esto, dispondremos de un microcontrolador PIC que
incorpora todas las funciones necesarias para realizar el diseño y control.
La eficiencia del sistema va ligada a los parámetros de la planta, debido a que
nuestro sistema es retroalimentado, es necesario diseñar un controlador digital de
tal forma que el sistema se estabilice y se llegue a tener la velocidad deseada y en
el menor tiempo posible.
La retroalimentación se hará por medio de un encoder incremental acoplado al eje
de los motores, el cual enviara constantemente códigos digitales al
microcontrolador indicándole la velocidad. Ante estos códigos el microcontrolador
tomara una decisión relacionando la velocidad actual con el Set Point o valor de
referencia, enviando pulso digitales a un integrado (SN754410NE) para hacer girar
el motor a la velocidad deseada y en el sentido indicado.
Requerimientos
Algebra
Calculo
Conocimientos básicos en electrónica digital
Programación en lenguaje C
Limitaciones
Para la realización de este proyecto existe una limitación muy grande puesto que
los conocimientos que tenemos en electrónica digital son muy pobres y nos cuesta
mucho comprender la parte electrónica.
Universidad de Guadalajara Ingeniería Mecatrónica
6
MARCO TEORICO
Motores de Corriente Directa (DC)
Se utilizan en casos en los que es de importancia el poder regular continuamente la velocidad del eje y en aquellos casos en los que se necesita de un toque de arranque elevado.
Además, utilizan en aquellos casos en los que es imprescindible utilizar corriente continua, como es el caso de trenes y automóviles eléctricos, motores para utilizar en el arranque y en los controles de automóviles, motores accionados a pilas o baterías, etc.
Para funcionar, el motor de corriente continúa o directa precisa de dos circuitos eléctricos distintos: el circuito de campo magnético y el circuito de la armadura.
El campo (básicamente un imán o un electroimán) permite la transformación de energía eléctrica recibida por la armadura en energía mecánica entregada a través del eje. La energía eléctrica que recibe el campo se consume totalmente en la resistencia externa con la cual se regula la corriente del campo magnético. Es decir ninguna parte de la energía eléctrica recibida por el circuito del campo, es transformada en energía mecánica. El campo magnético actúa como una especie de catalizador que permite la transformación de energía en la armadura.
La armadura consiste en un grupo de bobinados alojados en el rotor y en un ingenioso dispositivo denominado colector mediante el cual se recibe corriente continua desde una fuente exterior y se convierte la correspondiente energía eléctrica en energía mecánica que se entrega a través del eje del motor. En la transformación se pierde un pequeño porcentaje de energía en los carbones del colector, en el cobre de los bobinados, en el hierro (por corrientes parásitas e histéresis), en los rodamientos del eje y la fricción del rotor por el aire.
Universidad de Guadalajara Ingeniería Mecatrónica
7
Conceptos Relacionados Con El Control
Señal de salida: es la variable que se desea controlar (posición, velocidad, presión, temperatura, etc.). También se denomina variable controlada. Señal de referencia: es el valor que se desea que alcance la señal de salida. Error: es la diferencia entre la señal de referencia y la señal de salida real. Señal de control: es la señal que produce el controlador para modificar la variable controlada de tal forma que se disminuya, o elimine, el error. Señal análoga: es una señal continua en el tiempo. Señal digital: es una señal que solo toma valores de 1 y 0. El PC solo envía y/o recibe señales digitales. Conversor análogo/digital: es un dispositivo que convierte una señal analógica en una señal digital (1 y 0). Conversor digital/análogo: es un dispositivo que convierte una señal digital en una señal analógica (corriente o voltaje). Planta: es el elemento físico que se desea controlar. Planta puede ser: un motor, un horno, un sistema de disparo, un sistema de navegación, un tanque de combustible, etc. Perturbación: es una señal que tiende a afectar la salida del sistema, desviándola del valor deseado.
Sensor: es un dispositivo que convierte el valor de una magnitud física (presión, flujo, temperatura, etc.) en una señal eléctrica codificada ya sea en forma analógica o digital. También es llamado transductor. Los sensores, o transductores, analógicos envían, por lo regular, señales normalizadas de 0 a 5 voltios, 0 a 10 voltios o 4 a 20 mA.
Sistema de control en lazo cerrado: es aquel en el cual continuamente se está monitoreando la señal de salida para compararla con la señal de referencia y calcular la señal de error, la cual a su vez es aplicada al controlador para generar la señal de control y tratar de llevar la señal de salida al valor deseado. También es llamado control realimentado.
Sistema de control en lazo abierto: en estos sistemas de control la señal de salida no es monitoreada para generar una señal de control.
Universidad de Guadalajara Ingeniería Mecatrónica
8
Modelo Matemático De La Planta
Diagrama esquemático de un motor DC
Considerando que nuestro motor tiene un eje rígido, por medio de sus ecuaciones
eléctricas y matemáticas, al relacionarlas, podemos obtener el modelo del motor
en el cual la entrada es el voltaje aplicado y la salida es la velocidad rotacional del
eje, para esto es necesario conocer los diferentes parámetros de los que se
encuentra compuesto:
𝐽 = momento de inercia del rotor
𝑏 = coeficiente de amortiguamiento del sistema mecánico
𝐾 = 𝐾𝑒 = 𝐾𝑡 = constante de fuerza electromotriz
𝑅 = resistencia eléctrica
𝐿 = inductancia eléctrica
𝑉 = fuente de tensión (entrada)
𝑊 = velocidad rotacional del eje (salida)
Sistema de Ecuaciones
El par de torsión del motor está relacionado con la corriente 𝑖, de la armadura, por
𝐾 de par constante:
𝑇 = 𝐾𝑖 (1)
La tensión generada, 𝑒𝑎 , es relativa a la velocidad angular:
𝑒𝑎 = 𝐾𝑊𝑚 = 𝐾𝑑𝜃
𝑑𝑡 (2)
Del diagrama del sistema podemos escribir las siguientes ecuaciones basadas en
las leyes de Kirchoff.
Universidad de Guadalajara Ingeniería Mecatrónica
9
𝐽 𝑑2𝜃
𝑑𝑡2 + 𝑏𝑑𝜃
𝑑𝑡= 𝐾𝑖 (3)
𝐿 𝑑𝑖
𝑑𝑡 + 𝑅𝑖 = 𝑉 − 𝐾
𝑑𝜃
𝑑𝑡 (4)
Función de Transferencia
Usando la transformada de Laplace, las ecuaciones (3) y (4) se pueden escribir de
la siguiente manera:
𝐽𝑠2𝜃 𝑠 + 𝑏𝑠 𝜃 𝑠 = 𝐾𝐼(𝑠) (5)
𝐿𝑠𝐼 𝑠 + 𝑅𝐼 𝑠 = 𝑉 𝑠 − 𝐾𝑠𝜃(𝑠) (6)
Donde 𝑠 denota el operador de Laplace. De (6) podemos expresar que
𝐼 𝑠 = 𝑉 𝑠 − 𝐾𝑠𝜃 (𝑠)
𝑅+𝐿𝑠 (7)
Y sustituir en (5) para obtener
𝐽𝑠2 𝜃 𝑠 + 𝑏𝑠𝜃 𝑠 = 𝐾(𝑉 𝑠 − 𝑘𝑠𝜃 (𝑠))
𝑅+𝐿𝑠 (8)
Esta es la ecuación para el motor de corriente directa del diagrama de bloques
que se muestra a continuación
Universidad de Guadalajara Ingeniería Mecatrónica
10
Figura.1 Sistema de circuito cerrado que representa el modelo matemático
de un motor de Corriente Continua.
De la ecuación (8) la función de transferencia de la tensión de entrada, V(s), al
ángulo es la siguiente:
𝐺𝑎 𝑠 = 𝜃(𝑠)
𝑉(𝑠)=
𝐾
𝑠[ 𝑅+𝐿𝑠 𝐽𝑠+𝑏 +𝐾2] (9)
Y de la figura anterior podemos obtener la función de transferencia de nuestra
planta.
𝐺𝑣 𝑠 = 𝜔(𝑠)
𝑉(𝑠)=
𝐾
[ 𝑅+𝐿𝑠 𝐽𝑠+𝑏 +𝐾2] (10)
ϴ(s)
1/(Js+b) 1/s
K
1/(Ls+R) K
V(s)
𝜔(𝑠) T(s) I(s)
Universidad de Guadalajara Ingeniería Mecatrónica
11
EXPERIMENTOS
Simulación En Simulink (Matlab)
Una vez obtenido el modelo matemático pasaremos a ver la simulación echa en
Simulink.
Puesto que Simulink es un entorno gráfico de Matlab decidimos realizar la
simulación del proyecto en este entorno, ya que todas las partes que componen el
sistema de control lo podemos dividir en bloques y esto facilitara su estudio y
observación.
En la siguiente imagen se muestra como se estructura todo nuestro sistema
de control del motor dc utilizado en este proyecto el cual consta de una función de
transferencia y un controlador PID.
La función de transferencia está representada mediante un bloque el cual
recibe la señal modelada de salida de nuestro controlador PID. A la salida de esta
tenemos una señal de entrada o excitación la cual sirve para retro alimentar
nuestro circuito. En la siguiente gráfica se muestra nuestra la gráfica resultante de
Universidad de Guadalajara Ingeniería Mecatrónica
12
todo nuestro proceso de control en la cual podemos visual dos señales la primera
(color rosa) es nuestra señal de referencia que en este caso es de 6 Volts y la
segunda (color amarillo) viene siendo la señal de error que emite nuestra función
de transferencia.
En a las siguiente dos gráficas a preciaremos por separado como se
visualizan estas dos señales, en la primera se observa la señal de referencia y en
la segunda la de error.
Universidad de Guadalajara Ingeniería Mecatrónica
13
Volviendo a nuestro diagrama de control encontramos que nuestra función
de transferencia es alimentada por el controlador el cual recibe la señal de
referencia sumada a su vez por la emitida por la función de transferencia. El
controlador está compuesto por un subsistema el cual está compuesto por una
serie de ganancias de las cuales la ganancia proporcional ( kp ) es la parte
proporcional y consiste en el producto entre la señal de error y la constante
proporcional como para que hagan que el error en estado estacionario sea casi
Universidad de Guadalajara Ingeniería Mecatrónica
14
nulo, la ganancia derivativa ( kd ) se manifiesta cuando hay un cambio en el valor
absoluto del error; (si el error es constante, solamente actúan los modos
proporcional e integral), y por último la ganancia intregrativa ( ki ) esta tiene como
propósito disminuir y eliminar el error en estado estacionario, provocado por el
modo proporcional; por ultimo estas tres señal resultantes de nuestras ganancias
son sumadas y generan una sola señal modelada la cual viene siendo la salida de
nuestro controlador.
Para calcular los valores de nuestras ganancias existen dos maneras
utilizando el método de Nichols Bode el cual consiste en un sistema realimentado
compuesto principalmente por seis elementos, cada elemento está representado
por una ecuación, combinando estas ecuaciones se obtiene la relación de mando
o función del sistema. Pero debido a la complejidad del método decidimos utilizar
uno más sencillo de utilizar se aplica manual mente, ya que consiste un poner
todos nuestras ganancias en un valor inicial (en nuestro caso 0), e ir las variando
hasta que nuestra señal de error sea lo más semejante posible a la de referencia.
En nuestro caso nuestras ganancias nos quedaron con los siguientes valores; kp =
10000, kd = 2500 y ki = 5000.
La estructura de nuestro subsistema la podemos apreciar en la imagen que
se visualiza a continuación. Como podemos observar aquí se muestran nuestras
tres ganancias, nuestra propiedad derivativa, la integradora y como se suman
nuestras tres señales resultantes para formar y sola.
Universidad de Guadalajara Ingeniería Mecatrónica
15
Por último en la gráfica que se muestra a continuación se puede observar la
señal modulada resultante de sumar nuestra ganancia proporcional, la derivativa y
la integradora.
Si recordamos todos los sistemas de control mencionamos que consta
básicamente de seis parámetros, para determinar los valores de estos parámetros
realizamos los siguientes procedimientos. Como primera instancia tenemos el
motor gira a una velocidad N = 320 rpm, una corriente i = 0.008 A, produce una
resistencia R = 0.750, una inductancia L = 0.375; todos estos valores fueron
obtenidos de las especificaciones del motor, y a este le suministrados una fuente
de voltaje Vt = 6 Volts. Ahora ya teniendo estos datos ya solo nos queda
determinas los parámetro K que es una constante de torque y el amortiguamiento
b.
Ahora bien para determinar K tenemos:
𝑊𝑀 =𝑉𝑡
𝐾=
2 ∗ 𝜋 ∗ 𝑁
60
Entonces
𝑤𝑚 =2 ∗ 𝜋 ∗ 320
60
Sustituyendo los valores
Universidad de Guadalajara Ingeniería Mecatrónica
16
𝑤𝑚 =2010.624
60
Haciendo los cálculos correspondientes
𝑤𝑚 = 33.5104
Teniendo la velocidad angular ahora si podemos determinar k
𝐾 = 𝑉𝑡
𝑤𝑚
Sustituyendo los valores
𝐾 = 6
33.5104
𝐾 = 0.1790
Determinado el valor de k lo que procede es obtener el de b
0 = 𝐾𝑖 − 𝑏𝑤𝑚
𝑏 = 𝐾𝑖
𝑤𝑚
Sustituyendo los valores
𝑏 = 0.1790 ∗ 0.008
33.51
Haciendo los cálculos correspondiente
𝑏 = 0.00004273
Bien ahora ya tenemos todos nuestros parámetros definidos de la siguiente
manera:
Vt = 6 Volts
R = 0.750 Ω
L = 0.375 henrio
J = 0.01
K = 0.1790
b = 0.00004273
Universidad de Guadalajara Ingeniería Mecatrónica
17
Implementacion
El proyecto se fundamenta en el diseño de un controlador de velocidad de un
motor DC basado en un PIC 16F877A, en el cual se programaran, las siguientes
aplicaciones:
MP-Lab
MPLAB es una herramienta para escribir y desarrollar código en lenguaje
ensamblador para los microcontroladores PIC. MPLAB incorpora todas las
herramientas necesarias para la realización de cualquier proyecto, ya que además
de un editor de textos cuenta con un simulador en el que se puede ejecutar el
código paso a paso para ver así su evolución y el estado en el que se encuentran
sus registros en cada momento.
A continuación un pequeña introducción.
Hacemos click en Siguiente, luego se mostrará una ventana donde debemos
escoger el PIC que se vaya a usar, en la lista que aparece seleccionamos
PIC16F877 y damos click en Siguiente.
Universidad de Guadalajara Ingeniería Mecatrónica
18
El siguiente paso es definir el programa de lenguaje que será usado. En nuestro
caso el lenguaje es C así que seleccionamos la
opción mostrada en la siguiente imagen y de nuevo hacemos click en Siguiente.
Universidad de Guadalajara Ingeniería Mecatrónica
19
En la siguiente ventana tenemos que darle un nombre al proyecto y escoger el
directorio en el que se guardará. Es recomendable que la ruta de la carpeta
donde se guarda el proyecto no sea muy
larga ya que al compilarlo MPLAB marca un error, es por eso que en
el ejemplo la ruta escogida
se encuentra cerca de la raíz del disco duro, así que recomiendo
crear una carpeta directamente en el disco
“C:\” o en cualquiera que se use, pero que sea en la raíz del disco. Para este caso
la ruta escogida fue C:\Users\Luis-Felipe\Desktop\MyProject\Contorlador pero
sientan la libertad de escoger cualquier otro nombre para la carpeta.
Una vez dado el nombre al proyecto al hacer click en Siguiente se abrirá una
nueva ventana que nos pedirá agregar archivos existentes al proyecto, como aún
no hemos escrito ningún archivo simplemente damos click en Siguiente y para
terminar en la última ventana hacemos click en Finalizar.
Universidad de Guadalajara Ingeniería Mecatrónica
20
Ya que creamos el proyecto y habiendo dado click a Finalizar en la ventana
anterior debemos ver la ventana del MPLAB más o menos con este aspecto.
Y ahora si empieza lo bueno, una vez creado el proyecto es hora de crear un
archivo y empezar a escribir el código. Lo que hacemos es crear un nuevo archivo
Universidad de Guadalajara Ingeniería Mecatrónica
21
y guardarlo con extensión .c en la carpeta donde tenemos nuestro proyecto, para
crear un archivo damos click en File -> New, después y antes de escribir en el
archivo hacemos click en File -> Save As. En la ventana que se abra le damos un
nombre a nuestro archivo y nos aseguramos de que el tipo de archivo
seleccionado sea en C.
Ahora el archivo creado tiene extensión .c pero para el proyecto eso no nos sirve,
tenemos que agregar el archivo al proyecto y después comenzar a trabajar en el
así que en la ventana del proyecto hacemos click derecho en Source Files y
después seleccionamos Add File.
Universidad de Guadalajara Ingeniería Mecatrónica
22
Posteriormente se abrirá una ventana donde debemos seleccionar el archivo que
queremos agregar al proyecto. Por defecto se abrirá la carpeta del proyecto que
acabamos de crear así que seleccionamos el archivo (en este caso controlador.c)
y hacemos click en Abrir. Hecho eso la ventana del proyecto debe verse así:
Universidad de Guadalajara Ingeniería Mecatrónica
23
Editando el código
Una vez agregado el archivo .c al proyecto pasamos a la etapa de editar el código
en lenguaje de Alto Nivel C y salvamos el archivo.
Universidad de Guadalajara Ingeniería Mecatrónica
24
Compilando el Código
Una vez escrito el programa pasamos a compilarlo para esto usaremos el
compilador CCS C Compiler; la razón por la que se opto por este compilador fue
que los demás compiladores no se pudo hacer que interactúan de forma eficiente
por la situación de que varios de esos compiladores son solo de versión de prueba
y no incluyen todas las librerías necesarias para una compilación satisfactoria.
A continuación se explicara paso a paso como se hace la compilación del
archivo.c
Del menú Project elegimos la opción Select Languaje Toolsuite y elegimos el
compilador CCS C Compiler for pic 10/12/14/16/18/24 dsPIC30/ dsPIC33
Seguidamente seleccionamos el archivo.c con click derecho y seleccionamos la
opción Compile
Y en el Output nos apareceré el mensaje de error o de satisfacción
Universidad de Guadalajara Ingeniería Mecatrónica
25
Error
Buena Compilación
Y listo el código queda compilado y listo para ser cargado en el PIC.
Universidad de Guadalajara Ingeniería Mecatrónica
26
Cargar el programa al PIC
Para esto necesitamos de un grabador, en este caso vamos a utilizar el Picstart
Plus, lo habilitamos en MPLAB
Este software también necesita un hardware
Posteriormente activamos el programador en el menú Programmer>Enable, y
cargamos el programa al PIC Programmer>Program.
Universidad de Guadalajara Ingeniería Mecatrónica
27
Controlador PID:
/******************************************** * robot_pid.c * * * * v. 1.0 * * * * Este programa controla la * * velocidad de dos motores * * usando un control PID * * * * * *********************************************/ // Definiciones PIC #include <16f877.h> #device ADC=8 #include <stdlib.h> #fuses HS,NOPROTECT #use delay(clock=12000000) #use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7) #org 0x1FFF, 0x1FFF void loader16F877(void) // Definicion de Constantes #define CNT_T2 3 #define NUM_TIMES_T2 64*CNT_T2 #define NUM_SECOND 80/CNT_T2 #define SIZE_DATA 50 #define ADELANTE 0x0a // Constantes de acondicionamiento motor izquierdo #define Kci 0.2 #define Kci1 Kci*2.7 #define Kci2 Kci*2.2 #define Kci3 Kci*2.0 #define Kci4 Kci*1.6 #define Kci5 Kci*1.2 // Constantes de acondicionamiento motor derecho #define Kcd 0.18 #define Kcd1 Kcd*2.7 #define Kcd2 Kcd*2.2 #define Kcd3 Kcd*2.0 #define Kcd4 Kcd*1.6 #define Kcd5 Kcd*1.2 // Constantes del control PID #define Kp 0.7 //1.7 #define Ki 0.0 //0.35 #define Kd 0.000 //0.005 //Variables Globales long CntRight=0,CntLeft=0;
Universidad de Guadalajara Ingeniería Mecatrónica
28
int flag=0; long wi=0,wd=0; float fCntRight,fCntLeft; // Control PID mv_pid() long rni=0,rnd=0; float frni=0.0,frnd=0.0; float ewi=0,ewd=0; static float prev_rni=0,prev_rnd=0,prev_ewi=0,prev_ewd=0; static float prev2_ewi=0,prev2_ewd=0; float cntder,cntizq; //Acondiciona los valores de las entradas (encoders) if(wd<=62)cntder=wd*Kcd1; else if(wd<125)cntder=wd*Kcd2; else if(wd<250)cntder=wd*Kcd3; else if(wd<350)cntder=wd*Kcd4; else cntder=wd*Kcd5; if(wi<=62)cntizq=wi*Kci1; else if(wi<125)cntizq=wi*Kci2; else if(wi<250)cntizq=wi*Kci3; else if(wi<350)cntizq=wi*Kci4; else cntizq=wi*Kci5; cntizq=cntizq/1024.0; cntder=cntder/1024.0; // Calcula el error ewd=cntder-fCntRight; ewi=cntizq-fCntLeft; // Calcula el control para cada motor frni= prev_rni + Kp*(ewi-prev_ewi)+ Ki*(ewi-prev_ewi)+ Kd*(ewi-2*prev_ewi+prev2_ewi); frnd= prev_rnd + Kp*(ewd-prev_ewd)+ Ki*(ewd-prev_ewd)+ Kd*(ewd-2*prev_ewd+prev2_ewd); // Guarda valores para la siguiente iteracion prev_rni=frni; prev_rnd=frnd; prev_ewi=ewi; prev_ewd=ewd; //Acondiciona los valores de las salidas if(frni<0)frni=0; else if(frni>1.0)frni=1.0; if(frnd<0)frnd=0; else if(frnd>1.0)rnd=1.0; rni=2048.0*frni; rnd=2048.0*frnd; // Coloca los valores para generar los PWM set_pwm1_duty(rni); set_pwm2_duty(rnd);
Universidad de Guadalajara Ingeniería Mecatrónica
29
// Rutina para la interrupcion del TIMER2. #INT_TIMER2 void wave_timer2() static long k=0; static int i=0; k++; if(k>NUM_TIMES_T2) k=0; CntLeft=get_timer0(); CntRight=get_timer1(); fCntRight=CntRight/1024.0; fCntLeft=CntLeft/1024.0; // Muestra los datos if(flag==1) i++; if(i > SIZE_DATA)flag=0; printf("%f %f\n\r",fCntLeft,fCntRight); else i=0; // Ejecuta el algoritmo de control PID mv_pid(); // Inicializan los contadores de los temporizadores de nuevo set_timer0(0); set_timer1(0); /* Inicializa puertos */ inicializa_puertos() // Se inicializan los pines para generar los pwms setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); // Se indica la dirrecion de los motores output_d(ADELANTE); // Inicializa interrupciones y temporizadores inicializa_interrupciones() // Se inicializan los temporizadores 0 y 1 como encoders set_timer1(0); setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); set_timer0(0); setup_timer_0(RTCC_DIV_1|RTCC_EXT_L_TO_H); // Se inicializa el temporizador 2 para generar el PWM setup_timer_2(T2_DIV_BY_1, 127, 10); // Se habilitan las salidas enable_interrupts(INT_TIMER2); enable_interrupts(GLOBAL);
Universidad de Guadalajara Ingeniería Mecatrónica
30
/* Programa principal */ void main() char linea[5]; inicializa_interrupciones(); inicializa_puertos(); while(TRUE) // lee las velocidades de los motores gets(linea); wi=atol(linea); flag=1; gets(linea); wd=atol(linea); flag=1;
Universidad de Guadalajara Ingeniería Mecatrónica
31
Generación de Modulación por Ancho de Pulso “PWM”:
#include <16f877.h> #device ADC=8 #include <stdlib.h> #fuses HS,NOPROTECT #use delay(clock=12000000) #use rs232(baud=19200,xmit=PIN_C6, rcv=PIN_C7) #org 0x1F00, 0x1FFF void loader16F877(void) // Inicializa puertos inicializa_puertos() setup_ccp1(CCP_PWM); setup_ccp2(CCP_PWM); // Inicializa interrupciones inicializa_temporizadores() // The cycle time will be (1/clock)*4*t2div*(period+1) // In this program clock=10000000 and period=127 (below) setup_timer_2(T2_DIV_BY_1, 127, 10); // Se indica el ancho del periodo positivo del PWM mv(long duty) // Se indica la direccion de movimiento de las llantas output_d(0x0a); // Se indican los tiempos del pwm set_pwm1_duty(duty); set_pwm2_duty(duty); // Programa principal void main() char linea[20]; long duty; // Se inicializan las interrupciones inicializa_temporizadores(); // Se inicializan los puertos inicializa_puertos(); // Loop infinito while(TRUE) // Se lee el valor del periodo positivo printf("\n\r-> "); gets(linea); duty=atol(linea); // Actualiza el ciclo de trabajo mv(duty);
Universidad de Guadalajara Ingeniería Mecatrónica
32
Conversor analógico digital ADC Converter
#include<16f877.h> #include<reg.h> #fuses HS, NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP #use delay(clock=12000000) void inicia_AD(void); void selecciona_AD(unsigned num); void arranca_AD(void); void leer_AD(void); main() unsigned canal; unsigned long resultado; inicia_AD(); //llamamos a la función inicia_AD while(1) canal=0b00000001; //indicamos el canal de entrada selecciona_AD(canal); //llamamos a la función selecciona_AD dandole como parametro el canal arranca_AD(); //llamamos a dicha función resultado=leer_AD(); //leer_AD nos devuelve el valor de la conversión y lo guarda en resultado //Conversor Analógico Digital del PIC16F877 void inicia_AD(void) ADCON0=0b10000001; //Fosc/32 ; channel 0 ADCON1=0b10000101; // 4 ultimos bits dependiendo de la tabla 1 void selecciona_AD(unsigned num) char aux; aux=ADCON0 & 0b11000111; //pongo a 0 el canal de conversion ADCON0=aux | (num<<3); //activamos el canal que se pasa void arranca_AD(void) ADGO=1; //ponemos en marcha el conversor void leer_AD(void) char alto,bajo; long total; while (ADGO); //aquí esperamos a que acabe de convertir
Universidad de Guadalajara Ingeniería Mecatrónica
33
bajo= ADRESL; alto = ADRESH; total= (long)alto<<8 | bajo; //Hacemos una or de bajo y de alto convertido a long y desplazado 8 bits. return(total);
Universidad de Guadalajara Ingeniería Mecatrónica
34
RUTINA PARA ROBOT SEGUIDOR DE LINEA
Código propuesto para que el robot siga una línea.
#include "16f877.h"
#include<reg.h>
#fuses HS, NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP #use delay(clock=20000000)
void timer0(char j);
void PWM(unsigned char,unsigned char);
static void interrupt isr(void);
unsigned char siga=1,cont=0;;
void main()
unsigned char i,BAND=0;
unsigned char conta;
TRISA=0x1F;
TRISB=0x00;
OPTION=0x02;
GIE=1;
T0IE=1;
DIR1=ADELANTE; DIR2=ADELANTE; /* CONTINUA*/
PWM1=PWM2=TRUE;
FRENO1=FRENO2=FALSE;/*SIN FRENO*/
while(1)
if (SENSOR1==TRUE & SENSOR2==TRUE) /* 2 SENSORES EN LA LINEA */
PWM(90,90);
if (SENSOR1==FALSE & SENSOR2==TRUE) /* SENSORES EN LA ORILLA*/
PWM(90,45);
BAND=0;
Universidad de Guadalajara Ingeniería Mecatrónica
35
if (SENSOR1==TRUE & SENSOR2==FALSE) /* SENSORES AFUERA*/
PWM(45,90);
BAND=1;
if (SENSOR1==FALSE & SENSOR2==FALSE)/* SENSORES AFUERA*/
if(BAND==1)
PWM(20,70);
else if(BAND==0)
PWM(70,20);
void timer0(char x)
TMR0=x;
while(siga);
siga=1;
static void interrupt isr(void)
if(T0IF==1)
siga=0;
T0IF=0;
void PWM(unsigned char x, unsigned char y)
unsigned char i;
PWM1=PWM2=TRUE;
if(x<y)
for(i=0;i<x;i++)
timer0(0XFF);
PWM1=FALSE;
for(i=0;i<y-x;i++)
Universidad de Guadalajara Ingeniería Mecatrónica
36
timer0(0XFF);
PWM2=FALSE;
for(i=0;i<100-y;i++)
timer0(0XFF);
if(y<x)
for(i=0;i<y;i++)
timer0(0XFF);
PWM2=FALSE;
for(i=0;i<x-y;i++)
timer0(0XFF);
PWM1=FALSE;
for(i=0;i<100-x;i++)
timer0(0XFF);
if(x==y)
for(i=0;i<x;i++)
timer0(0XFF);
PWM1=PWM2=FALSE;
for(i=0;i<100-y;i++)
timer0(0XFF);
Universidad de Guadalajara Ingeniería Mecatrónica
37
Implementacion Física
Para la implementación física se requiere obtener los siguientes componentes:
2 Motores de Dc de metal con caja reductora
1 LS293 o su equivalente SN754410NE (Puente H)
2 Sensores ópticos reflectivos (CNY70)
1 PIC16F877A
1 Grabador de PICS (Picstart Plus)
1 Display doble 7 segmentos
1 Cristal de 12 MHz
Otros componentes
1 Protoboard
1 Pila de 9v
Para esta parte se pretendía analizar la forma en cómo tendrían que ir
acomodados todos los componentes para el correcto funcionamiento del robot. Al
iniciar con esta parte del proyecto nos encontramos con un sinfín de dudas que
nos fue difícil resolverlas. Es por esta razón que esta sección del reporte queda
pendiente.
Universidad de Guadalajara Ingeniería Mecatrónica
38
Apéndice A
Controlador PID En este sección veremos la familia de controladores PID, que mostraron ser robustos en muchas aplicaciones y son los que más se utilizan en la industria. La estructura de un controlador PID es simple, aunque su simpleza es también su debilidad, dado que limita el rango de plantas donde pueden controlar en forma satisfactoria (existe un grupo de plantas inestables que no pueden estabilizadas con ningún miembro de la familia PID). En esta sección estudiaremos los enfoques tradicionales al diseño de controladores PID. Estructura del PID Consideremos un lazo de control de una entrada y una salida (SISO) de un grado de libertad:
Los miembros de la familia de controladores PID, incluyen tres acciones: proporcional (P), integral (I) y derivativa (D). Estos controladores son los denominados P, I, PI, PD y PID.
P: acción de control proporcional, da una salida del controlador que es
proporcional al error, es decir: u(t) = KP*e(t),que descrita desde su función transferencia queda:
𝐶𝑝 𝑠 = 𝐾𝑝 donde Kp es una ganancia proporcional ajustable. Un controlador proporcional puede controlar cualquier planta estable, pero posee desempeño limitado y error en régimen permanente.
I: acción de control integral: da una salida del controlador que es
proporcional al error acumulado, lo que implica que es un modo de controlar lento.
𝑢 𝑡 = 𝐾𝑡 𝑒 𝑡 𝑡
0𝑑𝑡 𝐶𝑡 𝑠 =
𝐾𝑡
𝑠
Universidad de Guadalajara Ingeniería Mecatrónica
39
La señal de control u(t) tiene un valor diferente de cero cuando la señal de error e(t) es cero. Por lo que se concluye que dada una referencia constante, o perturbaciones, el error en régimen permanente es cero.
PI: acción de control proporcional-integral, se define mediante:
𝑢 𝑡 = 𝐾𝑝𝑒 𝑡 + 𝐾𝑝
𝑇𝑖 𝑒 𝑡
𝑡
0
𝑑𝑡
donde Ti se denomina tiempo integral y es quien ajusta la acción integral. La función de transferencia resulta:
𝐶𝑃𝐼 𝑠 = 𝐾𝑝 1 +1
𝑇𝑖𝑠
Con un control proporcional, es necesario que exista error para tener una acción de control distinta de cero. Con acción integral, un error pequeño positivo siempre nos dará una acción de control creciente, y si fuera negativa la señal de control será decreciente. Este razonamiento sencillo nos muestra que el error en régimen permanente será siempre cero. Muchos controladores industriales tienen solo acción PI. Se puede demostrar que un control PI es adecuado para todos los procesos donde la dinámica es esencialmente de primer orden. Lo que puede demostrarse en forma sencilla, por ejemplo, mediante un ensayo al escalón.
PD: acción de control proporcional-derivativa, se define mediante:
𝑢 𝑡 = 𝐾𝑝𝑒 𝑡 + 𝐾𝑝𝑇𝑑 𝑑𝑒(𝑡)
𝑑𝑡
donde Td es una constante de denominada tiempo derivativo. Esta acción tiene carácter de previsión, lo que hace mas rápida la acción de control, aunque tiene la desventaja importante que amplifica las señales de ruido y puede provocar saturación en el actuador. La acción de control derivativa nunca se utiliza por sí sola, debido a que solo es eficaz durante períodos transitorios. La función transferencia de un controlador PD resulta:
𝐶𝑃𝐷 𝑠 = 𝐾𝑝 + 𝑠𝐾𝑝𝑇𝑑 Cuando una acción de control derivativa se agrega a un controlador proporcional, permite obtener un controlador de alta sensibilidad, es decir que responde a la
Universidad de Guadalajara Ingeniería Mecatrónica
40
velocidad del cambio del error y produce una corrección significativa antes de que la magnitud del error se vuelva demasiado grande. Aunque el control derivativo no afecta en forma directa al error ea estado estacionario, añade amortiguamiento al sistema y, por tanto, permite un valor más grande que la ganancia K, lo cual provoca una mejora en la precisión en estado estable.
PID: acción de control proporcional-integral-derivativa, esta acción
combinada reúne las ventajas de cada una de las tres acciones de control individuales. La ecuación de un controlador con esta acción combinada se obtiene mediante:
𝑢 𝑡 = 𝐾𝑝𝑒 𝑡 + 𝐾𝑝
𝑇𝑖 𝑒 𝑡
𝑡
0
𝑑𝑡 + 𝐾𝑝𝑇𝑑 𝑑𝑒(𝑡)
𝑑𝑡
Y su función de transferencia resulta:
𝐶𝑃𝐼𝐷 = 𝐾𝑝 (1 + 1
𝑇𝑖𝑠 + 𝑇𝑑𝑠)
Universidad de Guadalajara Ingeniería Mecatrónica
41
Apéndice B
Modulación por ancho de pulsos PWM
Fig.: una señal de onda cuadrada de amplitud acotada (ymin,ymax) mostrando el ciclo de trabajo D.
La modulación por ancho de pulsos (MAP o PWM, siglas del inglés Pulse-Width Modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una sinusoidal o una cuadrada, por ejemplo), ya sea para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga.
El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en relación con el período. Expresado matemáticamente:
D es el ciclo de trabajo τ es el tiempo en que la función es positiva (ancho del pulso) T es el período de la función
La construcción típica de un circuito PWM se lleva a cabo mediante un comparador con dos entradas y una salida. Una de las entradas se conecta a un oscilador de onda dientes de sierra, mientras que la otra queda disponible para la señal moduladora. En la salida la frecuencia es generalmente igual a la de la señal dientes de sierra, y el ciclo de trabajo está en función de la portadora.
La principal desventaja que presentan los circuitos PWM es la posibilidad de que haya interferencias generadas por radiofrecuencia. Éstas pueden minimizarse ubicando el controlador cerca de la carga y realizando un filtrado de la fuente de alimentación.
Universidad de Guadalajara Ingeniería Mecatrónica
42
Apéndice C Transformada de Laplace
La Transformada de Laplace es una técnica Matemática que forma parte de ciertas transformadas integrales como la transformada de Fourier, la transformada de Hilbert, y la transformada de Mellin entre otras. Estas transformadas están definidas por medio de una integral impropia y cambian una función en una variable de entrada en otra función en otra variable. La transformada de Laplace puede ser usada para resolver Ecuaciones Diferenciales Lineales y Ecuaciones Integrales. Aunque se pueden resolver algún tipo de ED con coeficientes variables, en general se aplica a problemas con coeficientes constantes. Un requisito adicional es el conocimiento de las condiciones iniciales a la misma ED. Su mayor ventaja sale a relucir cuando la función en la variable independiente que aparece en la ED es una función seccionada.
Cuando se resuelven ED usando la técnica de la transformada, se cambia una ecuación diferencial en un problema algebraico. La metodología consiste en aplicar la transformada a la ED y posteriormente usar las propiedades de la transformada. El problema de ahora consiste en encontrar una función en la variable independiente tenga una cierta expresión como transformada.
Definición de la Transformada Sea f una función definida para , la transformada de Laplace de f(t) se define como:
cuando tal integral converge Notas
1. La letra s representa una nueva variable, que para el proceso de integracion se considera constante
2. La transformada de Laplace convierte una funcion en t en una funcion en la variable s
3. Condiciones para la existencia de la transformada de una función: 1. De orden exponencial 2. Continua a trozos
Universidad de Guadalajara Ingeniería Mecatrónica
43
Definición de la Transformada Inversa La Transformada inversa de una función en s, digamos F(s) es una función de t cuya transformada es precisamente F(s), es decir
si es que acaso
Esta definición obliga a que se cumpla:
y
Universidad de Guadalajara Ingeniería Mecatrónica
44
Apéndice D
Función de Transferencia
Una función de transferencia es un modelo matemático que a través de un cociente relaciona la respuesta de un sistema (modelada) a una señal de entrada o excitación (también modelada).
El cociente formado por los modelos de la señal de salida respecto de la señal de entrada, permite encontrar los ceros y los polos, respectivamente. Y que representan las raíces en las que cada uno de los modelos del cociente se iguala a cero. Es decir, representa la región frontera a la que no debe llegar ya sea la respuesta del sistema o la excitación al mismo; ya que de lo contrario llegará ya sea a la región nula o se irá al infinito, respectivamente.
Considerando la temporalidad; es decir, que la excitación al sistema tarda un tiempo en generar sus efectos en el sistema en cuestión y que éste tarda otro tiempo en dar respuesta. Esta condición es vista a través de un proceso de convolución, formado por la excitación de entrada convolucionada con el sistema considerado, dando como resultado, la respuesta dentro de un intervalo de tiempo. Ahora, en ese sentido (el de la convolución), se tiene que observar que la función de transferencia está formada por la deconvolución entre la señal de entrada con el sistema. Dando como resultado la descripción externa de la operación del sistema considerado. De forma que el proceso de contar con la función de transferencia del sistema a través de la deconvolución, se logra de forma matrcial o vectorial, considerando la pseudoinversa de la matriz o vector de entrada multiplicado por el vector de salida, para describir el comportamiento del sistema dentro de un intervalo dado. Pareciera un proceso complicado, aunque solo baste ver que la convolución discreta es representada por un producto de una vector o matriz fija respecto de una matriz o vector móvil, o que en forma tradicional se observa como una sumatoria.
Uno de los primeros matemáticos en describir estos modelos fue Laplace, a través de su transformación matemática.
Por definición una función de transferencia se puede determinar según la expresión:
donde H (s) es la función de transferencia (también notada como G (s) ); Y (s) es la transformada de Laplace de la respuesta y U (s) es la transformada de Laplace de la señal de entrada.
Universidad de Guadalajara Ingeniería Mecatrónica
45
La función de transferencia también puede considerarse como la respuesta de un sistema inicialmente inerte a un impulso como señal de entrada:
La salida o respuesta en frecuencia del sistema se halla entonces de
y la respuesta como función del tiempo se halla con la transformada de Laplace inversa de Y(s):
Cualquier sistema físico (mecánico, eléctrico, etc.) se puede traducir a una serie de valores matemáticos a través de los cuales se conoce el comportamiento de estos sistemas frente a valores concretos.
Por ejemplo, en análisis de circuitos eléctricos, la función de transferencia se representa como:
Universidad de Guadalajara Ingeniería Mecatrónica
46
Apéndice E PIC 16F877A El microcontrolador PIC16F877A de Microchip pertenece a una gran familia de microcontroladores de 8 bits (bus de datos) que tienen las siguientes características generales que los distinguen de otras familias: - Arquitectura Harvard - Tecnología RISC - Tecnología CMOS Estas características se conjugan para lograr un dispositivo altamente eficiente en el uso de la memoria de datos y programa y por lo tanto en la velocidad de ejecución. Microchip ha dividido sus microcontroladores en tres grandes subfamilias de acuerdo al número de bits de su bus de instrucciones:
Variantes principales Los microcontroladores que produce Microchip cubren una amplio rango de dispositivos cuyas características pueden variar como sigue: - Empaquetado (desde 8 patitas hasta 68 patitas) - Tecnología de la memoria incluída (EPROM, ROM, Flash) - Voltajes de operación (desde 2.5 v. Hasta 6v) - Frecuencia de operación (Hasta 20 Mhz)
Universidad de Guadalajara Ingeniería Mecatrónica
47
Apéndice F
Puente H
Un Puente H o Puente en H es un circuito electrónico que permite a un motor eléctrico DC girar en ambos sentidos, avance y retroceso. Son ampliamente usados en robótica y como convertidores de potencia. Los puentes H están disponibles como circuitos integrados, pero también pueden construirse a partir de componentes discretos.
Estructura de un puente H (marcado en rojo)
Los 2 estados básicos del circuito.
El término "puente H" proviene de la típica representación gráfica del circuito. Un puente H se construye con 4 interruptores (mecánicos o mediante transistores). Cuando los interruptores S1 y S4 (ver primera figura) están cerrados (y S2 y S3 abiertos) se aplica una tensión positiva en el motor, haciéndolo girar en un sentido. Abriendo los interruptores S1 y S4 (y cerrando S2 y S3), el voltaje se invierte, permitiendo el giro en sentido inverso del motor.
Con la nomenclatura que estamos usando, los interruptores S1 y S2 nunca podrán estar cerrados al mismo tiempo, porque esto cortocircuitaría la fuente de tensión. Lo mismo sucede con S3 y S4.
Universidad de Guadalajara Ingeniería Mecatrónica
48
Aplicaciones
Como hemos dicho el puente H se usa para invertir el giro de un motor, pero también puede usarse para frenarlo (de manera brusca), al hacer un corto entre las bornbas del motor, o incluso puede usarse para permitir que el motor frene bajo su propia inercia, cuando desconectamos el motor de la fuente que lo alimenta. En el siguiente cuadro se resumen las diferentes acciones.
S1 S2 S3 S4 Resultado
1 0 0 1 El motor gira en avance
0 1 1 0 El motor gira en retroceso
0 0 0 0 El motor se detiene bajo su inercia
0 1 0 1 El motor frena (fast-stop)
Universidad de Guadalajara Ingeniería Mecatrónica
49
CONCLUSION
En este proyecto pudimos aprender los verdadero fundamentos matemáticos que
son necesarios para poder entender un como es controlado un robot autómata y
cual son las variables que necesitan ser controladas tanto mecánicamente como
lógica y eléctricamente uno de los mayores problemas acerca de este proyecto fue
el poder grabarlo y llevar a cabo todas sus operaciones pertinentes, así como fue
la obtención de los dispositivos los cuales son bastante escasos y generalmente
son manejados por empresas no muy comerciales.
Una de las cosas que pudimos observar es que realmente se necesita un lenguaje
de alto nivel para poder hacer las operaciones necesarias ya que en lenguajes
más bajos como ensamblador se tornarían bastante difíciles.
Nos dimos cuenta también acerca de los errores que podían tener nuestro circuito
y de que muchas cosas podrían salir mal, como por ejemplo; desde el grabador
hasta las señales de referencia y de erros hasta el programa en sí. Se necesita ser
bastante cuidadoso en el manejo y la conexión de estos dispositivos ya que son
afectados por simple estática.
En general es un buen proyecto pero es lo bastante pesado como para pensar en
que se necesita tiempo y dedicación.
Universidad de Guadalajara Ingeniería Mecatrónica
50
BIBLIOGRAFIA
Ingeniería de control moderno OGATA tercera edición
Control Automático de procesos Teoría y Práctica Carlos A. Smith University of South Florida Armando B. Corripio Louisiana State University
Wikipedia.com
www.fi.uba.ar/laboratorios/lscm/hidraulica3.pdf
http://www.monografias.com/trabajos11/valvus/valvus.shtml
F. Franklin. Feedback Control of Dynamic Systems. Addison Wesley, 1994. W. P. Aung.
Analysis on Modeling and Simulink of DC Motor and its Driving System Used for Wheeled Mobile Robot. World Academy of Science, 2007
http://www.societyofrobots.com/actuators_dcmotors.shtml
http://www.societyofrobots.com/programming_differentialdrive.shtml