implementacion_de un regulador pid en un dspic33f

Upload: jorge-palacio

Post on 05-Apr-2018

261 views

Category:

Documents


2 download

TRANSCRIPT

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    1/93

    Proyecto Final de Carrera

    Implementacion de un Regulador PID en un

    dsPIC33F

    Alumno: Francisco Salavert Torres

    Director: Pascual Perez Blasco

    Ingeniera Tecnica en Inform atica de sistemas

    15 de diciembre de 2010

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    2/93

    2

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    3/93

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    4/93

    4 INDICE GENERAL

    4.2. dsPIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    4.3. Esquema del montaje y simulacion . . . . . . . . . . . . . . . 30

    4.4. Programacion en C del algoritmo PID . . . . . . . . . . . . . 32

    4.4.1. Regulador PID de Posicion en C . . . . . . . . . . . . . 32

    4.4.2. Regulador PID de Velocidad en C . . . . . . . . . . . . 34

    4.5. Programacion usando las libreras del dsPIC . . . . . . . . . . 36

    4.5.1. Funciones PID . . . . . . . . . . . . . . . . . . . . . . 36

    4.5.2. Funciones implementadas en ensamblador . . . . . . . 39

    4.5.3. Ejemplo de uso de las funciones PID . . . . . . . . . . 43

    4.5.4. Regulador PID de Posicion con librerias . . . . . . . . 45

    4.5.5. Regulador PID de Velocidad con librerias . . . . . . . . 46

    5. Tareas, FreeRTOS 49

    5.1. Implementacion de tareas . . . . . . . . . . . . . . . . . . . . 50

    5.2. Tiempo absoluto . . . . . . . . . . . . . . . . . . . . . . . . . 52

    5.3. Ejemplo de implementacion de una tarea . . . . . . . . . . . . 53

    Apendices 55

    A. Configuracion del modulo PWM 57

    A.1. Registros de configuracion . . . . . . . . . . . . . . . . . . . . 57

    A.1.1. P1TCON . . . . . . . . . . . . . . . . . . . . . . . . . 58

    A.1.2. P1TPER . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    A.1.3. PWM1CON1 . . . . . . . . . . . . . . . . . . . . . . . 58

    A.1.4. P1DTCON1 y P1DTCON2 . . . . . . . . . . . . . . . 58

    A.1.5. P1DC1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

    A.1.6. P1OVDCON . . . . . . . . . . . . . . . . . . . . . . . 59

    A.2. Tiempo muerto . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    A.2.1. Ejemplo de inicializacion . . . . . . . . . . . . . . . . . 60

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    5/93

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    6/93

    6 INDICE GENERAL

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    7/93

    Captulo 1

    Introduccion

    Hoy en da todo es automatico, por ejemplo un calefactor o aire acondi-

    cionado, solo con elegir la temperatura, enfra o calienta una habitacion. Los

    vehculos actuales son capaces de mantener una velocidad establecida por el

    conductor sin tener que presionar el pedal del acelerador, todo ello es posible

    con la ayuda de reguladores y la teora de control.

    1.1. Vision general

    Los reguladores permiten respuestas muy rapidas ante cambios en el sis-tema, lo cual aumenta la precision de estos. Algunos sistemas no necesitan

    tal velocidad como por ejemplo el termostato de un aire acondicionado, ya

    que transcurren varios segundos hasta que la temperatura vara, una persona

    seria capaz de encender o apagar el aire acondicionado a gusto, como si se

    tratase de un simple ventilador, que se enciende si hace calor y se apaga

    cuando ya no lo hace, es mucho mas comodo que se encienda y se apague

    7

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    8/93

    8 CAPITULO 1. INTRODUCCION

    automaticamente para no tener que estar pendiente de la temperatura. Estos

    sistemas no necesitan altos tiempos de respuesta sin embargo otros muchos

    sistemas no podran ser controlados si no es mediante reguladores, la ve-

    locidad de respuesta es crtica y seran imposibles de controlar, por ejemplo

    el antibloqueo de frenos en un coche ABS, que necesita ser activado en el

    momento preciso en que las ruedas se bloquean para evitar que el coche se

    deslice sobre el asfalto.

    La teora de control permite estudiar y tratar sistemas dinamicos. Elcontrol digital es la implementacion de un regulador mediante un algoritmo

    que se ejecuta en un computador. Este regulador proporciona las senales de

    control necesarias para que el sistema o proceso tenga un comportamiento

    determinado.

    Esta clase de sistemas estan gobernados por un regulador que decide

    como actuar. Para ello deben conocer a donde quieren llegar, por ejemplo una

    temperatura o una velocidad, y donde estan, es decir, cual es la temperatura

    o la velocidad actual.

    Un sistema controlado esta en bucle cerrado, de forma que la salida del

    sistema se compara con la referencia y cuando la diferencia entre la referencia

    y la salida es cero el sistema esta en el estado deseado. El diagrama de bloques

    correspondiente a este sistema de control se muestra en la figura 1.1.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    9/93

    1.2. MOTIVACION 9

    Figura 1.1: Sistema controlado por un regulador discreto.

    La implementacion en un computador necesita que las senales sean disc-

    retas o digitales, para ello se usan convertidores analogico/digital, los cuales

    muestrean la senal y toman valores para distintos instantes de tiempo. Estos

    valores discretos son procesados por el computador uno a uno, a continuacion

    a partir de los nuevos valores crea la senal de control que le debe llegar al

    proceso y se conviertiendola en continua o analogica mediante convertidores

    digital/analogico. Esto se debe a que los computadores deben operar convalores concretos y de una precision determinada.

    Aunque este proceso sea mas complejo que el procesamiento analogico y

    tenga un rango de valores discretos, el procesamiento digital ofrece deteccion

    y correccion de errores y es menos vulnerable a ruido, lo cual es una ventaja

    en muchas, aunque no todas, las aplicaciones.

    1.2. Motivacion

    Los principales motivos que han llevado a la realizacion de este proyec-

    to consisten en el interes por conocer mejor los sistemas empotrados y sus

    aplicaciones. Durante la carrera de se ha tocado este tema principalmente de

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    10/93

    10 CAPITULO 1. INTRODUCCION

    forma teorica, ya entonces aparece cierta curiosidad acerca de como trabajar

    y programar esta clase de procesadores, que al parecer est an en toda clase

    dispositivos actuales como reproductores MP3 o telefonos moviles.

    Las primeras caractersticas conocidas acerca de estos microcontroladores

    son su reducido tamano y gran capacidad de integracion, su potencia parece

    menor con respecto a los procesadores de proposito general sin embargo lo que

    en principio parece negativo es visto desde otro modo incluso una ventaja.

    Los procesadores convencionales que se encuentra en cualquier ordenador deuso general estan destinados a realizar una gran cantidad de variadas tareas

    sin embargo los microcontroladores son usados para aplicaciones especficas

    y la eleccion entre los distintos tipos de microcontroladores es importante.

    Si con un procesador lento y barato se puede realizar cierta tarea, no es

    necesario usar otros mas potentes que consumen mas energa. Este factor es

    clave a la hora de trabajar con microcontroladores.

    Dentro de los distintos tipos de microcontroladores destacan los proce-

    sadores digitales de senal DSP, especficamente disenados para el procesado

    digital de senal, su meta es generalmente medir o filtrar senales analogicas del

    mundo real, para ello disponen de instrucciones especificas para el muestreo

    y calculo de estas. La arquitectura de los DSP les permite ejecutar instruc-

    ciones multiplicacion y acumulacion en un solo flanco de reloj, lo cual con

    menos frecuencia de trabajo son capaces de realizar muchsimas mas opera-

    ciones de este tipo que un procesador de proposito general con mucha mas

    frecuencia de trabajo, ya que, necesitan varios flancos de reloj para completar

    este tipo de operaciones.

    En una asignatura del ultimo curso de la ingeniera, aparece la posi-

    bilidad de realizar pequenos programas con estos dispositivos y es cuando

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    11/93

    1.2. MOTIVACION 11

    continuando con la materia introductoria en la programacion de estos micro-

    controladores aumenta el interes en la implementacion de aplicaciones algo

    mas grandes.

    Inicialmente la propuesta de realizar un pendulo invertido parece seduc-

    tora simplemente por el hecho de conocer y entender este sistema ya imple-

    mentado y comercializado por una empresa que fabrica un vehculo basado

    en este ejercicio de control.

    Una parte de esta aplicacion es el control y regulacion de un motor de

    corriente continua. El control incluye establecer una velocidad y desplazarse

    cierta distancia mediante un controlador PID.

    Es por eso que resulta interesante implementar el algoritmo de control en

    un microcontrolador actual, en concreto la serie dsPIC33 de microchip el cual

    aporta una gran cantidad de prestaciones destinadas al control de motores.

    El integrado posee modulos como el QEI que es capaz de leer las senalesprocedentes de los encoders conectados al motor los cuales permiten obtener

    la posicion, velocidad en incluso la aceleracion. Tambien contiene un modulo

    para generar PWM el cual con ayuda de un puente H permite controlar la

    velocidad y el sentido de giro.

    Poner en marcha todo esto implica estudiar y entender la forma de traba-

    jar de los microcontroladores ademas de aprender a manejar las herramientas

    de desarrollo de aplicaciones correspondientes. Al ser un sistema empotrado

    tambien se estudiara un kernel de tiempo real especialmente disenado para

    estos procesadores, en concreto FreeRTOS, sobre el cual se implementaran

    las tareas de control necesarias facilitando as la gestion de tiempos.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    12/93

    12 CAPITULO 1. INTRODUCCION

    1.3. Objetivos

    Se pretende implementar un algoritmo de control PID en un microcon-

    trolador con el fin de gobernar un motor de corriente continua, el trabajo

    se desarrollara en MPLAB IDE para programar en C el algoritmo de con-

    trol PID, lo cual implica configurar y poner en marcha el modulo PWM

    y el modulo QEI. Implantar los algoritmos de control en tareas del kernel

    FreeRTOS y poner en marcha el sistema.

    Figura 1.2: Sistema de control de un motor de continua.

    Para implementar el control del sistema que se pretende realizar, se us-

    ara como computador un microcontrolador, en concreto un DSP y como

    sistema o proceso, un motor de corriente continua con un encoder. La refer-

    encia es una posicion a la cual se quiere llegar o la velocidad que se quiere

    alcanzar. La salida y es la posicion la velocidad obtenida y calculada medi-

    ante el modulo QEI que posee el DSP usando de las senales proporcionadaspor el encoder del motor. La accion de control u proporcionada por el regu-

    lador al proceso es el ciclo de trabajo de la senal PWM y el sentido, mediante

    el puente H, en que debe de accionarse el motor. El error e se obtiene de la

    resta de la referencia ref con la salida y, este error es proporcionado al reg-

    ulador el cual calculara la accion de control correspondiente. El diagrama de

    bloques resultante se observa en la figura 1.2.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    13/93

    1.4. ORGANIZACION DE LOS CONTENIDOS 13

    1.4. Organizacion de los contenidos

    En el captulo 1, se realiza una introduccion a las tareas desarrolladas

    en el proyecto fin de carrera. En el captulo 2, se explica que es y como

    funciona un regulador PID para poder ser implementado en un computa-

    dor. En el captulo 3, se explica brevemente que es un motor de corriente

    continua y como controlar su funcionamiento. En el captulo 4, se explican

    algunos detalles de la implementacion en microcontroladores, ademas de la

    implementacion del regulador PID de dos formas distintas: en C y usando

    libreras especficas para un dsPIC.

    En los apendices se explica mas concretamente la implementacion del

    regulador PID usando el kernel freeRTOS, tambien se explica como inicializar

    los modulos del dsPIC usados para mover y obtener los valores de posicion

    y velocidad del motor de corriente continua.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    14/93

    14 CAPITULO 1. INTRODUCCION

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    15/93

    Captulo 2

    Regulador PID

    Un regulador o controlador PID (proporcional, integral, derivativo) es un

    mecanismo de control retroalimentado en bucle cerrado ampliamente usado

    en sistemas de control industrial. Un PID calcula un error como la diferencia

    entre el valor actual del sistema y el valor al que se desea llegar. Ademas

    intenta minimizar el error mediante el ajuste de las entradas del proceso.

    En el calculo del regulador PID intervienen tres parametros distintos.

    Estos valores se pueden interpretar en funcion del tiempo. El proporcional P

    depende del error actual, el integral Idepende de la suma de todos los errores

    pasados, y el derivativo D es la prediccion de errores futuros, basandose en

    la tasa de cambio actual. La suma ponderada de los tres terminos permiten

    ajustar un proceso mediante un elemento de control como por ejemplo la

    velocidad que debe alcanzar un motor de corriente continua.

    U = P+ I+ D (2.1)

    15

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    16/93

    16 CAPITULO 2. REGULADOR PID

    Mediante el a juste de estas tres constantes en el algoritmo de control PID,

    el regulador es capaz de proporcionar acciones de control especficas a los

    requerimientos de un sistema. La respuesta del regulador se puede describir

    como la capacidad de respuesta ante un error, el grado en que el regulador

    llega mas alla del punto de ajuste, y la oscilacion del sistema.

    El ajuste de las constantes se logra mediante el analisis del sistema se

    puede llegar a ajustar el tiempo de respuesta, que es cuanto tiempo tarda

    el regulador en llevar al sistema a cierto estado. Tambien se puede a justarque el sistema llegue sin errores de posicion y minimizar las sobreoscilaciones

    alrededor de la referencia o estado deseado.

    Sin embargo esto no siempre se puede ajustar perfectamente ya que si

    se quiere una respuesta muy rapida las oscilaciones son inevitables ya que el

    sistema no puede responder correctamente en tan poco tiempo, un ejemplo de

    esto es querer que un motor alcanze una determinada posicion y que debido a

    la inercia se pase de la referencia y oscile por arriba y por debajo hasta llegar

    a la posicion determinada por la referencia. Es claramente un efecto negativo

    ya que por intentar aumentar el tiempo de respuesta se ha provocado una

    sobreoscilacion y como consecuencia se ha relentizado la respuesta.

    Es importante mencionar que el uso de un regulador PID no garantiza

    un control optimo ni estabilidad al sistema. Hay sistemas que son inestables.

    Un sistema es inestable si el valor regulado oscila indefinidamente, o s dicho

    valor diverge sin limite del estado estable.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    17/93

    2.1. TERMINO PROPORCIONAL 17

    Figura 2.1: Diagrama de bloques de un Regulador PID.

    Algunas aplicaciones solo requieren el uso de uno o dos parametros para

    proporcionar un control apropiado al sistema, para no usar un parametro

    simplemente hay que poner la ganancia del parametro a cero. Dependiendo

    de los parametros activos, los reguladores se pueden llamar PI, PD, P o I.

    Los reguladores PI son muy comunes ya que la accion derivativa D es sensible

    al ruido. Por otro lado la ausencia de la acci on integral puede evitar que el

    sistema llegue al valor deseado.

    2.1. Termino Proporcional

    El termino proporcional modifica la salida proporcionalmente con el error

    actual. La respuesta proporcional se puede ajustar multiplicando el error por

    una constante Kp, conocida como ganancia proporcional.

    P = Kpe(t) (2.2)

    Donde u es la salida y e el error en un instante de tiempo, de este modo

    cuanto mas grande sea el error mas rapida sera la respuesta, y conforme el

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    18/93

    18 CAPITULO 2. REGULADOR PID

    error se reduzca, la respuesta sera mas pequena, hasta que finalmente el error

    sea cero y la respuesta nula ya que el valor deseado es el mismo que el valor

    actual.

    Un controlador proporcional no siempre alcanzara su valor objetivo, con-

    servando un error de estado estacionario. Para eliminar este error hay que

    usar el termino integral.

    2.2. Termino Integral

    El termino integral es proporcional a la magnitud del error y a la duracion

    del error. Es decir, la suma de todos los errores en cada instante de tiempo

    o como su nombre indica la integracion de los errores. Esta suma compensa

    la diferencia que debera haber sido corregida anteriormente. El error acu-

    mulado se multiplica por la ganancia integral Ki que indicara la cantidad de

    accion integral respecto de toda la accion de control.

    I= Ki

    t0

    e()d (2.3)

    Al usar el integral junto al proporcional se acelera el movimiento delsistema llegando antes al valor deseado, es decir, menor tiempo de respuesta.

    Ademas elimina el error estacionario que se produce al usar un regulador

    proporcional. Sin embargo el termino integral tiene en cuenta los errores

    acumulados en el pasado y puede hacer que el valor actual sobrepase el

    valor deseado lo cual creara un error en el otro sentido, creando oscilaciones

    alrededor del valor deseado.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    19/93

    2.3. TERMINO DERIVATIVO 19

    2.3. Termino Derivativo

    El termino derivativo calcula la variacion del error mediante la pendiente

    del error en cada instante de tiempo, es decir, la primera derivada con respec-

    to al tiempo, y multiplica esa variacion del error con la ganancia derivativa

    Kd, la cual indica la cantidad de accion derivativa respecto de toda la accion

    de control.

    D = Kdd

    dte(t) (2.4)

    El derivativo ralentiza la tasa de cambio de la salida del regulador y

    cuanto mas cerca esta del valor deseado, se hace aun mas lento. Por tanto

    el uso del derivativo sirve para disminuir las oscilaciones producidas por el

    control integral y as mejorar la estabilidad del proceso de regulacion. Uno

    de los inconvenientes es que al hacer la derivada, el ruido es amplificado, y

    hace al regulador mas sensible a las interferencias llevando al sistema a lainestabilidad en el peor de lo casos.

    2.4. Ecuacion del regulador

    Los terminos proporcional, integral y derivativo son sumandos para hallar

    la salida del regulador PID, sabiendo que u(t) es tal salida, la ecuacion quedefine al algoritmo es la siguiente:

    u(t) = Kpe(t) + Ki

    t0

    e()d+ Kdd

    dte(t) (2.5)

    Donde hay que tener en cuenta las siguientes consecuencias: La ganan-

    cia proporcional Kp. Cuanto mayor es, mas rapida es la respuesta ya que

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    20/93

    20 CAPITULO 2. REGULADOR PID

    cuanto mas grande es el error, mas grande es la accion proporcional. Val-

    ores muy grandes pueden ocasionar oscilaciones o incluso la inestabilidad. La

    ganancia integral Ki. Valores grandes eliminan mas rapidamente los errores

    estacionarios. Sin embargo puede provocar mayor sobreoscilacion. La ganan-

    cia derivativa Kd. Cuanto mas grande es, mas se reduce la sobreoscilacion,

    pero ralentizan el tiempo de respuesta, y pueden llevar al sistema a la in-

    estabilidad debido a la amplificacion del ruido en el calculo diferencial del

    error.

    2.5. Ecuacion del regulador discreta

    Un computador solo es capaz de procesar valores discretos y finitos,

    as que para poder implementar el algoritmo de control de un regulador PID,

    es necesario discretizar la ecuacion del regulador PID, una vez discretizada

    se calcula para cada uno de los instantes de tiempo muestreados el valor de

    la accion de control. Para cada instante de tiempo se vuelve a calcular una

    nueva accion de control utilizando la nueva salida del sistema, esto permi-

    tira al sistema avanzar hacia el estado deseado marcado por la referencia

    con cada nuevo calculo. La ecuacion discreta del regulador para poder ser

    implementada en un computador se puede expresar mediante la siguiente

    ecuacion.

    u(t) = Kpe(t) + KiTs

    tk=0

    ek + Kd e(t)

    e(t1)Ts

    (2.6)

    Donde e(t) es el error de la respuesta del sistema en el instante t, T es

    periodo de muestreo de la senal y Kp , Ki, y Kd son la ganancia proporcional,

    integral y derivativa del regulador, respectivamente.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    21/93

    Captulo 3

    Motor de corriente continua

    El uso de motores de CC (corriente continua) esta muy extendido, hoy en

    da se pueden encontrar en cualquier dispositivo electromecanico. Controlar

    la posicion y la velocidad de estos motores es muy sencillo convirtiendose en

    una buena opcion a la hora de crear aplicaciones de automatizacion y control.

    Los motores de corriente continua simplemente necesitan ser conectados

    a una fuente de corriente continua o una batera compatible para que se

    pongan en marcha. Es posible modificar la velocidad bajando o subiendo la

    alimentacion, girando mas lento o mas rapido segun el voltaje. Al cambiar la

    polaridad el motor gira en sentido contrario y si lo desconectas, por inercia

    sigue girando hasta que se para.

    21

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    22/93

    22 CAPITULO 3. MOTOR DE CORRIENTE CONTINUA

    3.1. Modificar la velocidad de giro, PWM

    Para regular la velocidad de un motor de continua se usa la modulacion

    por ancho de pulsos (pulse-width modulation PWM). El PWM consiste en

    modificar la cantidad de energa que recibe un motor. Si se conecta un motor a

    una fuente directamente el motor comienza a acelerar hasta que alcanza cierta

    velocidad, si en ese momento se desconecta, el motor decelera hasta que se

    para. As pues al conectar y desconectar repetidamente el motor de la fuente

    en intervalos pequenos el motor no llega a pararse y gira mas despacio. De este

    modo dependiendo del tiempo que se mantenga conectado y desconectado se

    pueden obtener distintas velocidades, esto se conoce como ciclo de trabajo

    D.

    D =

    T(3.1)

    Donde representa el tiempo que esta conectado y T el periodo. Por

    ejemplo, con un periodo de un segundo, se deja conectado 0.7 segundos, se

    dice que el ciclo de trabajo es del 70 %. Si el ciclo es 0 % se considera apagado

    y si es 100 % se considera siempre conectado.

    Figura 3.1: Ciclo de trabajo.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    23/93

    3.2. POSICION Y VELOCIDAD, ENCODERS 23

    Ya que el sistema que se pretende controlar es un motor de continua, se

    puede realizar tanto un control de posicion como un control de velocidad. El

    control de posicion mueve el motor una distancia determinada para despues

    detenerse mientras que el control de velocidad establece una velocidad a la

    cual debe moverse. Con esta tecnica generando una senal con forma de pulso

    periodico, se puede regular la velocidad y la posicion de un motor de corriente

    continua.

    3.2. Posicion y velocidad, encoders

    Para medir la velocidad, posicion o aceleracion de estos motores se suele

    usar un encoder digital, un encoder digital consta de un disco codificado

    con ranuras y enganchado al eje de tal manera que el disco gira con el eje.

    Un sensor detecta el paso de las ranuras y de esta forma sabiendo cuantas

    ranuras tiene el disco se puede deducir cuantas ranuras son una vuelta, por

    tanto conociendo el numero de vueltas por unidad de tiempo se puede deducir

    la velocidad o simplemente cuanto se ha movido.

    Figura 3.2: Disco encoder incremental.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    24/93

    24 CAPITULO 3. MOTOR DE CORRIENTE CONTINUA

    Normalmente el eje del motor no esta conectado directamente al sistema,

    por ejemplo una rueda, suele utilizar una reductora. Una reductora es un

    mecanismo compuesto por un conjunto de engranajes que modifica la veloci-

    dad del motor, ademas el eje del motor no debe soportar el peso del sistema

    y es la reductora junto con un sistema de transmision el que soporta toda la

    carga. De este modo conociendo la relacion de la reductora y contando las

    ranuras que se detectan por unidad de tiempo se puede deducir la posici on

    o la velocidad.

    3.2.1. Control de velocidad

    El control de velocidad implica obtener el numero de pulsos detectados

    por el paso de las ranuras en cada instante de tiempo. Es decir, pulsos por

    unidad de tiempo, el valor obtenido sera la salida del sistema, en concreto

    la velocidad actual del motor, que se restara a la referencia para obtener lasiguiente accion de control. As que es importante conocer el tiempo entre

    acciones de control ya que este periodo servira para conocer la velocidad del

    motor entre instantes de tiempo.

    3.2.2. Control de posicion

    El control de posicion mira los pulsos detectados desde que el sistema se

    puso en funcionamiento, y los resta con la referencia a medida que avance el

    tiempo y se ejecuten acciones de control, el error se ira reduciendo pues la

    cuenta total de pulsos se ira acercando al valor de posicion establecido por

    la referencia conforme gire el motor, y cuando la resta sea cero, el motor se

    parara indicando que ha llegado a la posicion deseada.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    25/93

    3.3. SENTIDO DE GIRO, PUENTE H 25

    3.3. Sentido de giro, puente H

    El sentido de giro de un motor de corriente continua est a relacionado con

    la polaridad de la corriente que se aplica en los bornes. Un puente H consiste

    de cuatro transistores y un motor en medio, este diseno se asimila a la letra

    H y de ah su nombre.

    Figura 3.3: Esquema de un puente H.

    Al aplicar un cero logico en la entrada 1 y un uno logico en la entrada 2,

    la corriente ira desde el transistor T1 hacia el T4, lo cual polarizara el motor

    haciendolo girar en un sentido, si cambiamos las entradas, un uno logico en

    la entrada 1 y un cero logico en la entrada 2, la corriente circulara desde

    el transistor T2 hacia el T3 polarizando el motor tal que girara en sentido

    contrario.

    Si se aplica cero logico en ambas entradas el motor no estara polarizado

    quedando liberado, esto quiere decir que se puede hacer girar con la mano

    en ambos sentidos. Del mismo modo al poner uno logico en las dos entradas

    se quedara fijo y no se podra girar manualmente en ningun sentido.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    26/93

    26 CAPITULO 3. MOTOR DE CORRIENTE CONTINUA

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    27/93

    Captulo 4

    Implementacion

    Se pretende implementar un Regulador PID en un microcontrolador dsPIC,

    para ello se explicaran algunas caractersticas de la programacion de micro-

    controladores y como interactuar con el y sus modulos. La aplicacion se ha

    desarrollado en el entorno de trabajo MPLAB IDE, proporcionado por la

    empresa fabricante de los dsPIC, el compilador utilizado es el C30 que posee

    distintas libreras especializadas en tareas de procesamiento digital de senales.

    Se explicara como implementar el algoritmo de control de forma m as

    general en C y, como implementarlo usando las libreras especializadas en

    calculo PID. La implementacion en C realiza un control e posicion y el otro

    un control de velocidad.

    Para probar el funcionamiento se usara un simulador de circuitos llamado

    Proteus que permite anadir los distintos componentes que forman parte del

    sistema, el dsPIC y el motor con encoder, y conectarlos entre s para que

    interactuen.

    27

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    28/93

    28 CAPITULO 4. IMPLEMENTACION

    4.1. Microcontroladores

    Para programar el algoritmo hay que entender la forma de trabajar con

    estos procesadores, normalmente un microcontrolador, DSP o dsPIC tiene

    distintos modos de funcionamiento y distintos modulos que pueden ser ac-

    tivados o no a eleccion del usuario, a su vez los modulos que incorpora se

    configuran segun las necesidades de cada aplicacion.

    Tal configuracion se realiza mediante registros. En los registros se escriben

    unos y ceros, dependiendo de lo que se escriba y en que registro se escriba el

    dispositivo activara o no los modulos que trabajaran segun la configuracion

    elegida.

    Para saber que valores poner en los registros, los fabricantes ponen a

    disposicion el DataSheet, que explica con detalle los modulos del controlador

    y los registros de configuracion de cada modulo. Leer este documento es

    crtico ya que se explican con detalle las caractersticas del dispositivo, lo

    cual permite ver si sirve para la aplicacion a desarrollar. As pues a la hora

    de realizar un programa lo primero que se debe hacer es una inicializacion

    de registros con el fin de configurar el procesador.

    La comunicacion con el procesador se realiza mediante las patillas de este,

    de hecho la tpica aplicacion basica que consiste en imprimir por pantallaHello World!, en microcontroladores lo primero y mas basico es encender un

    LED conocido como Bliking LED. Cada patilla se puede configurar como

    entrada o salida, si se configura como salida, activara fsicamente esa patilla

    con un nivel alto o uno bajo. Al configurarlo como entrada, se realizara una

    conversion analogica/digital del valor de tension en la patilla y se guardara en

    un registro el cual podra ser ledo por un programa.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    29/93

    4.2. DSPIC 29

    4.2. dsPIC

    Basicamente un dsPIC es un potente microcontrolador de 16 bit al que se

    le han anadido las principales caractersticas de los DSP. Poseen todos los re-

    cursos de los mejores microcontroladores embebidos junto con las principales

    caractersticas de los DSP.

    Ofrecen todo lo que se puede esperar de los microcontroladores: velocidad,

    potencia, manejo flexible de interrupciones, un amplio campo de funciones

    perifericas analogicas y digitales, opciones de reloj, simulacion en tiempo

    real, etc. La filosofa de Microchip con los modelos de la serie dsPIC ha sido

    aprovechar que los PIC de 16 bit ya estan en el mercado.

    As los disenadores que han estado utilizando y conocen estos microcon-

    troladores se pueden introducir en el mundo de procesamiento digital de senal

    con mas facilidad. Ademas, su precio es similar al de los microcontroladores.

    Son capaces de procesar senales digitales rapidamente, por ejemplo trabajar

    con audio y vdeo en tiempo real, siendo muy utiles en aplicaciones en las

    que no se permitan retrasos.

    Los dsPIC, al igual que otros DSP usan la arquitectura Harvard que se

    caracteriza por la separacion entre zonas de memoria y datos.

    Figura 4.1: Arquitectura Harvard.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    30/93

    30 CAPITULO 4. IMPLEMENTACION

    Hay distintos modelos de dsPICs, algunos son de proposito general y

    otros estan pensados para controlar motores. Por ejemplo, si se desea usar un

    solo motor quizas con uno de proposito general sera suficiente sin embargo,

    para controlar varios motores sera interesante utilizar aquellos especializados

    en ello. Es importante saber elegir el dispositivo que mejor se adapta a las

    necesidades de la aplicacion, ademas del precio si se pretende llegar a fabricar

    en masa.

    La empresa que fabrica estos dispositivos pone al alcance de forma gra-tuita el entorno de desarrollo MPLAB IDE, esta herramienta proporciona un

    entorno sencillo y potente. Gestiona todas las partes en las que se descom-

    pone un proyecto, proporciona un completo editor y un potente depurador a

    nivel del lenguaje fuente ASM, C y otros.

    El integrado posee distintos modulo que permiten el control de motores,

    uno de ellos el modulo QEI que se encarga de interactuar con el encoder del

    motor de continua. Otro modulo usado es el generador de senales PWM que

    se encargara de alimentar a motor con un ciclo de trabajo determinado por

    el regulador PID.

    4.3. Esquema del montaje y simulacion

    Antes de usar componentes reales es interesante realizar las primeras prue-

    bas de programacion mediante simulacion, el Proteus permite anadir micro-

    controladores como componentes, entre ellos el dsPIC, de este modo, teniendo

    un codigo ejecutable generado por el MPLAB IDE, se puede especificar en

    el Proteus donde esta ese fichero y que lo use a la hora de la simulaci on, eje-

    cutando cualquier programa que queramos y ver el funcionamiento. Esto es

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    31/93

    4.3. ESQUEMA DEL MONTAJE Y SIMULACION 31

    muy util a la hora de realizar pruebas. Este tipo de herramientas ayuda, pero

    no tiene en cuenta todos los problemas reales a los que te puedes enfrentar

    con un montaje fsico.

    Figura 4.2: Esquema del montaje.

    El esquema de montaje de la figura 4.2 pretende reflejar la conexion de

    los componentes. Teniendo un motor de corriente continua con encoder yun dsPIC, se conecta el encoder del motor al dsPIC con las patillas donde

    este configurado el QEI, por otro lado se conectan las patillas donde este con-

    figurado el PWM al puente H, y de ah al motor. Con el dsPIC programado y

    conectado al motor, se obtienen los valores de posicion o velocidad y el PID

    calculara la accion de control que generara la senal PWM necesaria para

    hacer girar el motor.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    32/93

    32 CAPITULO 4. IMPLEMENTACION

    4.4. Programacion en C del algoritmo PID

    Como se ha explicado en el captulo 2 para implementar el algoritmo de

    control hay que programar la siguiente ecuacion:

    u(t) = Kpe(t) + KiTs

    tk=0

    ek + Kde(t) e(t1)

    Ts(4.1)

    4.4.1. Regulador PID de Posicion en C

    Para programar el PID, se usara un sencillo ejemplo en lenguage C. El

    ejemplo consiste en controlar la posicion de un motor de corriente continua

    mediante un regulador PID.

    La salida del sistema sera la posicion del motor, el dsPIC calcula la posi-

    cion a partir de los valores almacenados en un registro del modulo QEI, el

    modulo QEI lee los pulsos proporcionados por el encoder del motor e incre-

    menta este registro con cada pulso, los pulsos indican cuanto a avanzado el

    motor. As, en cada iteracion se sabe cuanto ha avanzado, esto causara que

    el error disminuya conforme avance el motor. La salida del regulador se es-

    cribira en un registro del modulo PWM, este registro indica el ciclo de trabajo

    de la senal PWM generada. Al disminuir el error la accion de control tambien

    lo hara y por lo tanto en cada iteracion la senal PWM disminuira hasta que

    la salida del regulador sea cero y por tanto, el registro contendr a un cero, locual significara que el ciclo de trabajo es del 0 % y el motor se parara.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    33/93

    4.4. PROGRAMACION EN C DEL ALGORITMO PID 33

    f l oa t r ef ; / / r e f e r e n c i a

    f lo at y ; / / s a li d a d el s i st e ma

    f lo at e ; //error

    f l oa t e k = 0; / / su ma d e t od os l os e rr or es

    f l oa t e _1 = 0 ; / / er ro r d el i ns ta n te d e t ie mp o a nt e ri or

    f l oa t T s = 0 .1 ; / / p er io do d e m ue st r eo d e l a s en ya l

    f lo at u ; / / s a li d a d el c o n tr o l ad o r

    f l oa t K p = 3; / / g a n a n c i a p r o p o r c i o na l

    f l oa t K i = 0 .1 ; / / g a n a n c i a i n t e g r al

    f l oa t K d = 1; / / g a n a n c i a d e r i v a t iv a

    while(1)

    {

    / / p o s ic i on a c tu a l

    y = P OS 1C NT ; / * R e gi st ro d on de s e e nc u en tr a l a s al id a

    d el s is te ma , e s d ec ir e l a va nc e t ot al d el m ot or * /

    / / r e g ul a d or P ID

    e = ref - y ;/ / e r ro r a c tu a l

    e k + = e ; / / a cu mu lo t od os l os e rr or es p ar a e l i nt e gr al

    u = K p * e + K i * T s * e k + k d * ( e - e _ 1 ) / T s ; / / a c ci o n d e c o nt r ol

    P 1 D C 1 = u ;/ / R eg is t ro d on de s e e sc ri be e l c ic lo d e

    trabajo

    e _ 1 = e ; / / e rr or p ar a e l i ns ta n te a nt er io r e (t - 1)

    }

    En el ejemplo se ha usado un bucle while, calculando la accion de control

    tan rapido como puede la maquina, sin embargo la accion de control debe

    ejecutarse cada cierto periodo segun el sistema que se este regulando, por

    ello cada accion de control ha de ejecutarse activando alguna interrupci on,

    utilizando tareas, o simplemente colocando una espera en el bucle, el tiempo

    entre cada ejecucion de las acciones de control marcara el periodo.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    34/93

    34 CAPITULO 4. IMPLEMENTACION

    4.4.2. Regulador PID de Velocidad en C

    Con el mismo montaje que el ejemplo anterior se pretende controlar la

    velocidad de un motor de corriente continua mediante un regulador PID. La

    principal diferencia frente al control de posicion es que se debe calcular el

    numero de pulsos detectados en cada ciclo del bucle, esta cantidad de pulsos

    dividida por el tiempo que tarda en ejecutarse un ciclo, permite obtener la

    velocidad del motor que es la salida del sistema. En el momento que alcancela velocidad deseada, el error sera cero, esto provocara que la senal PWM

    sea cero y el motor se pare durante en esa acci on de control provocando

    nuevamente un error que intentara regular la accion de control del instante

    de tiempo siguiente. As pues el motor alcanzara y mantendra la velocidad

    establecida por la referencia.

    f l oa t r ef ; / / r e f e r e n c i a

    f lo at y ; / / s a li d a d el s i st e ma

    f lo at e ; //error

    f l oa t e k = 0; / / su ma d e t od os l os e rr or es

    f l oa t e _1 = 0 ; / / er ro r d el i ns ta n te d e t ie mp o a nt e ri or

    f l oa t T s = 0 .1 ; / / p er io do d e m ue st r eo d e l a s en ya l

    f lo at u ; / / s a li d a d el c o n tr o l ad o r

    f l oa t K p = 3; / / g a n a n c i a p r o p o r c i o na l

    f l oa t K i = 0 .1 ; / / g a n a n c i a i n t e g r al

    f l oa t K d = 1; / / g a n a n c i a d e r i v a t iv a

    f l oa t u l t im o Q EI t i ck ;

    f l oa t c i c lo Q E It i c ks ;

    f l oa t a c t ua l Q EI t i ck ;

    u l t im o Q EI t i ck = P O S1 C NT ; / / se a lm a ce na e l u lt im o t ic k

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    35/93

    4.4. PROGRAMACION EN C DEL ALGORITMO PID 35

    while(1)

    {

    / * v el oc i da d = c i cl o QE I ti c ks / t ie mp o d e c ic lo * /

    a c t ua l Q EI t i ck = P O S1 C NT ; /* G ua rd ar la c ue nt a de

    p ul so s Q EI * /

    c i c lo Q E It i c ks = a c t ua l Q EI t i ck - u l t im o Q EI t i ck ; /*

    R es ta r c on e l i ns t an te a nt er i or * /

    u l t im o Q EI t i ck = a c t ua l Q EI t i ck ; / * A ct u al i za r l a c ue nt a

    d e p ul so s a nt e ri or * /

    / / V e l oc i d ad a c tu a l

    y = c i cl o QE I ti c ks ; / * R eg is tr o d on de s e e n cu en t ra l a

    s al id a d el s is te ma , e s d ec ir l a v el oc i da d d el m ot or

    e n e st e i ns ta nt e de t ie mp o * /

    / / r e g ul a d or P ID

    e = ref - y ;/ / e r ro r a c tu a l

    e k + = e ; / / a cu mu lo t od os l os e rr or es p ar a e l i nt e gr al

    u = K p * e + K i * T s * e k + k d * ( e - e _ 1 ) / T s ; / / a c ci o n d e c o nt r ol

    P 1 D C 1 = u ;/ / R eg is t ro d on de s e e sc ri be e l c ic lo d etrabajo

    e _ 1 = e ; / / e rr or p ar a e l i ns ta n te a nt er io r e (t - 1)

    }

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    36/93

    36 CAPITULO 4. IMPLEMENTACION

    4.5. Programacion usando las libreras del dsPIC

    En el compilador C30 de microchip se incluyen distintas libreras las

    cuales incluyen: librera C estandar, librera DSP y librera de funciones

    matematicas, tanto en como fija como coma flotante.

    La librera para DSP proporciona un conjunto de funciones rapidas y op-

    timizadas para aplicaciones de procesamiento digital de senales, incrementa

    significativamente el rendimiento frente a las equivalentes en C. Se puede uti-lizar con cualquier dispositivo dsPIC. Esta escrita principalmente en lenguaje

    ensamblador y hace un uso extensivo del juego de instrucciones y recursos

    hardware del dsPIC.

    Proporciona funciones para operar con vectores, matrices, filtros, trans-

    formadas y manejo de ventanas. En concreto se usaran las funciones que

    permiten calcular la accion de control de un regulador PID en vez de imple-

    mentarlo en C directamente como se ha hecho en el apartado anterior.

    4.5.1. Funciones PID

    Para el calculo del PID lo primero es declarar una estructura tPID. La

    estructura contiene distintas variables que almacenaran los datos usados por

    las funciones de calculo PID encargadas recibir la referencia y obtener laaccion de control.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    37/93

    4.5. PROGRAMACION USANDO LAS LIBRERIAS DEL DSPIC 37

    t yp ed ef s tr uc t {

    f r a c t i on a l * a b c C o e f f i c ie n t s ;

    / * P un te ro a l os c oe fi ci en te s q ue se e nc ue nt ra n en el

    e sp ac io d e m em or ia X , e st os c oe f ic ie n te s s e d er iv a

    de los v al or es de las g an an ci as PID : Kp , Ki y Kd */

    f r a c t i on a l * c o n t r o l H i s to r y ;

    / * P un te ro a l as 3 u lt im as m ue st ra s a la mc en ad as en el

    e sp ac io de m em or ia Y , la p ri me ra es la m as r ec ie nt e

    */

    f r a c t i on a l c o n t r o l O u t pu t ;

    /* S al ida del r eg ul ad or PID */

    f r a c t i on a l m e a s u r e d O ut p u t ;

    / * V al or m ed id o de la r es pu es ta d el s is te ma * /

    f r a c t i on a l c o n t r o l R e f e re n c e ;

    / * R ef e re n ci a d el s is te ma * /

    } t PI D ;

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    38/93

    38 CAPITULO 4. IMPLEMENTACION

    A los espacios de memoria se acceden mediante diferentes unidades de

    direccionamiento y distintas rutas de datos. Las instrucciones DSP con dos

    operandos como las instrucciones MAC, acceden a los espacios de memoria

    X e Y de forma separada para poder hacer lecturas simult aneas de ambos

    operandos y as poder completarse en un ciclo de reloj.

    Las funciones encargadas del calculo de la accion de control estan im-

    plementadas en ensamblador lo cual agiliza el tiempo de c alculo y permite

    controlar sistemas que requieren una respuesta muy rapida. En el ficheropid.s se encuentra la implementacion de dichas funciones. Este fichero se

    proporciona con el compilador C30.

    e x te r n v o id P I D Co e f fC a l c ( f r a ct i o na l * k Co ef f s , t PI D *

    c o n tr o l le r ) ;

    / * D er iv a l os c oe f ic ie n te s A BC u sa nd o l as g an a ci as d el

    P ID : Kp , Ki y K d. N ec es it a un a rr ay q ue c on te ng a

    los v al or es Kp , Ki y Kd en s ec ue nc ia y el p un te ro al a e st r uc t ur a d e d at os t PI D * /

    e xt er n v oi d P ID In it ( t PI D * c o nt r ol l er ) ;

    / * L im pi a l as v ar ia bl es de e st ad o de l P ID y l a s al id a

    d e l as m ue st ra s . N ec es it a el p un te ro a la

    e s tr u ct u ra d e d at os t PI D * /

    e xt er n f ra c ti o na l * P ID ( t PI D * c on t ro l le r ) ;

    / * C al cu la l a a cc io n d e c on tr ol P ID . N ec es i ta e l

    p un te ro a la e st ru ct ur a de d at os t PI D */

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    39/93

    4.5. PROGRAMACION USANDO LAS LIBRERIAS DEL DSPIC 39

    4.5.2. Funciones implementadas en ensamblador

    Las siguientes funciones se encuentran implementadas en ensamblador, y

    son proporcionadas por el compilador C30 en concreto en el fichero pid.s,

    dichas funciones son llamadas desde el programa en C. En los siguientes

    apartados hay ejemplos de su uso.

    .nolist

    . i n c l u de " d s p c o m mo n . i n c " ; f r a c ts e t u p

    .list

    . e qu o ff se ta bc Co ef fi ci en ts , 0

    . e qu o ff se tc on tr ol Hi st or y , 2

    . e qu o ff se tc on tr ol Ou tp ut , 4

    . e qu o ff se tm ea su re dO ut pu t , 6

    . e qu o ff se tc on tr ol Re fe re nc e , 8

    . s e c t i on . l i b ds p , c o de

    4.5.2.1. PID

    ; _ PI D :

    ; t PI D P ID ( t PI D * f oo PI DS tr uc t )

    . g l ob a l _ P ID ; p r o v id e g l o b al s c op e t o r o u t in e

    _PID:

    ; S av e w o rk i ng r e gi s te r s .

    push w8

    push w10

    p us h C OR CO N ; P re pa re C O RC ON f o r f ra ct io na l c o mp ut at io n .

    fractsetup w8

    mo v [ w0 + # of f se ta bc Co e ff ic ie nt s ], w8

    ; w 8 = B as e A d dr e ss o f _ a bc C o ef f ic i en t s a rr a y [ ( Kp + K i + Kd ) , - ( Kp + 2 Kd ) , K d ]

    mo v [ w0 + # of f se tc o nt ro l Hi st or y ] , w1 0

    ; w 10 = A d dr e ss o f _ C on t r ol H is t or y a r ra y ( s t at e / d el a y l i ne )

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    40/93

    40 CAPITULO 4. IMPLEMENTACION

    mo v [ w0 + # of f se tc on tr ol Ou tp ut ], w1

    mo v [ w0 + # of f se tm e as ur e dO ut p ut ] , w2

    mo v [ w0 + # of f se tc on tr o lR ef er en c e ] , w3

    ; C a lc u la t e m os t r e ce n t e r ro r w it h s a tu r at i on , n o l i mi t c h ec k in g r e qu i re d

    lac w3 , a ; A = tPID .contr olReferen ce

    lac w2 , b ; B = tPID .MeasuredOu tput

    sub a ; A = tPID .contro lReferen ce - tPID .measuredOut put

    s ac . r a , [ w 1 0 ] ; t PI D . C o nt r ol H is t o ry [ n ] = S at ( R nd ( A ) )

    ; C a lc u la t e P ID C o nt r ol O u tp u tc lr a , [ w 8 ] += 2 , w 4 , [ w 10 ] + =2 , w 5 ; w 4 = ( K p + Ki + K d ) ,w 5 = _ Co n tr o l Hi s to r y [ n]

    lac w1 , a ; A = Control Output [n -1]

    ma c w4 *w 5 ,a ,[ w8 ]+ =2 , w4 ,[ w1 0 ]+ =2 , w5 ; A += ( Kp + Ki + Kd ) * _C o nt ro lH is to ry [n ]

    ; w 4 = - ( Kp + 2 K d ) , w 5 = _ C o n t ro l H i s to r y [ n - 1 ]

    ma c w4 *w 5 , a , [ w8 ] , w4 ,[ w1 0 ] -= 2 , w5 ; A += -( Kp +2 Kd ) * _C on tr ol Hi st or y [n -1 ]

    ; w 4 = K d , w 5 = _ C o nt r ol H is t o ry [ n - 2]

    ma c w4 *w 5 , a , [ w1 0 ]+ =2 , w5 ; A += Kd * _C o nt ro lH is to ry [n -2 ]

    ; w 5 = _ C on t ro l H is t or y [ n - 1]

    ; w 10 = & _ C o nt r ol H i st o ry [ n - 2]

    sac . r a , w1 ; Contr olOutput [n ] = Sat ( Rnd ( A) )

    mo v w1 , [ w0 + # of f se tc on tr ol Ou tp ut ]

    ; U p da t e t he e r ro r h i st o ry o n t he d e la y l in e

    mo v w5 , [ w1 0 ] ; _C on tr ol Hi st or y [n -2 ] = _C on tr ol Hi st or y [n -1 ]

    mo v [ w1 0 + # -4 ] , w5 ; _C on tr ol Hi st or y [n -1 ] = Co nt ro lH is t or y [n ]

    mo v w5 , [- - w1 0 ]

    pop CORCON ; restore CORCON .

    pop w10 ; Restore working registers .

    pop w8

    return

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    41/93

    4.5. PROGRAMACION USANDO LAS LIBRERIAS DEL DSPIC 41

    4.5.2.2. PIDInit

    ; _ P ID I ni t :

    ; v oi d P I DI n it ( t PI D * f o o PI D St r uc t )

    . global _PIDInit ; provide global scope to routine

    _PIDInit:

    push w0

    a dd # o ff se tc on tr ol Ou tp ut , w 0 ; S et u p p o in te r f or c on tr ol Ou tp ut

    clr [ w0 ] ; Clear controlOutput

    pop w0

    p u sh w 0

    ; Se t u p p oi nt er t o t he b as e o f

    ; c o n t r o l Hi s t o r y v a r i ab l e s w i t hi n

    tPID

    mo v [ w0 + # of f se tc o nt ro lH is to r y ], w0

    ; C l e ar c o n t r o lH i s t o ry v a r i a bl e s

    ; w i th i n t PI D

    clr [ w0 ++] ; Cont rolHistory [ n ]=0

    clr [ w0 ++] ; Cont rolHistory [n -1] = 0

    clr [ w0 ] ; Cont rolHistory [n -2] = 0

    pop w0 ; Restore pointer to base of tPID

    return

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    42/93

    42 CAPITULO 4. IMPLEMENTACION

    4.5.2.3. PID

    ; _ P I D C o ef f C a l c :

    ; v o id P I D C o ef f C a l c ( f r a c t io n a l * f o o P I DG a i n Co e f f , t P I D * f o o P I DS t r u c t )

    . g l o b al _ P I D C o ef f C a l c

    _PIDCoeffCalc:

    push CORCON ; Prepare CORCON for fractional

    computation.

    fractsetup w2

    ; C a lc u la t e C o ef f ic i en t s f r om K p , K i

    a nd K d

    mo v [ w1 ] , w1

    lac [ w0 ++] , a ; ACCA = Kp

    lac [ w0 ++] , b ; ACCB = Ki

    add a ; ACCA = Kp + Ki

    lac [w0 - -] , b ; ACCB = Kd

    add a ; ACCA = Kp + Ki + Kd

    sac . r a , [ w1 ++] ; _a bcCoeffi cients [0] = Sat ( Rnd ( Kp

    + Ki + Kd ))

    lac [- - w0 ] , a ; ACCA = Kp

    add a ; ACCA = Kp + Kd

    add a ; ACCA = Kp + 2 Kd

    neg a ; ACCA = -( Kp + 2 Kd )

    sac . r a , [ w1 ++] ; _a bcCoeffi cients [1] = Sat ( Rnd ( - Kp

    - 2 Kd ) )

    sac b , [ w1 ] ; _a bcCoeffi cients [2] = Kd

    pop CORCON

    return

    .end

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    43/93

    4.5. PROGRAMACION USANDO LAS LIBRERIAS DEL DSPIC 43

    4.5.3. Ejemplo de uso de las funciones PID

    El siguiente ejemplo no pretende implementar ninguna aplicacion, sim-

    plemente muestra la forma de trabajar con las funciones proporcionadas por

    las libreras.

    / * S e d ec la ra u na u na e st r uc t ur a d e d at os PI D , l la ma da

    f o oP I D * /

    t P ID f o oP I D ;

    / * L a e st r uc t ur a f oo PI D c on ti en e u n p un te ro a l os

    c oe fi ci en te s en e l e sp ac io de m em or ia X y un p un te ro

    a l as m ue st ra s d el e st ad o d el c on t ro l ad o r ( h i st or i al )

    en e l e sp ac io de m em or ia Y . P or t an to h ay q ue

    d ec l ar ar l as v a ri ab l es p ar a l os c oe f ic ie n te s y l as

    mues tras de l hi stori al de l re gulad or . */

    f r a c t i o n al a b c C o e f f i c i en t [ 3 ] _ _ a t t r i b u t e _ _

    ( ( s e ct i on ( " . xb ss , b ss , x m em o ry " ) ) ) ;

    f r a c t i o n al c o n t r o l H i s t or y [ 3 ] _ _ a t t r i b u t e _ _

    ( ( s e ct i on ( " . yb ss , b ss , y m em o ry " ) ) ) ;

    / * L os c o ef i ci e nt es A BC q ue s e r ef e re n ci a n e n l a

    e s tr u ct u ra f oo PI D s e d er iv an d e l os c o ef i ci e nt es d e

    g an an ci a Kp , Ki y Kd , q ue d eb en e st ar en un a rr ay */

    f r a ct i on a l k C oe f fs [ ] = { 0 , 0 , 0} ;

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    44/93

    44 CAPITULO 4. IMPLEMENTACION

    / * L a f un ci on m ai n l la ma a l as f un ci o ne s P ID ( ) , P ID In it

    ( ) a nd P I DC o ef f Ca lc ( ) * /

    i nt m ai n ( v oi d )

    {

    / * P ri me r p as o , i ni c ia l iz a r l a e st r uc t ur a d e d at os P ID ,

    f o oP I D * /

    / * A pu nt ar a l os c o ef i ci e nt e s * /

    f o oP I D . a b c Co e f fi c i e nt s = & a b c C o ef f i ci e n t [ 0 ];

    / * A pu nt ar a l h i st or i al d e m ue s tr as d el r e gu la d or * /

    f o oP I D . c o n tr o l Hi s t or y = & c o n t r ol H i st o r y [ 0 ];

    / * L im pi ar e l h i st or i al y l a s al id a d el c o nt r ol a do r * /

    P I D I n i t ( & f o o P I D ) ;

    k C oe f fs [ 0 ] = Q 15 ( 0 . 7 ) ; //Kp

    k C oe f fs [ 1 ] = Q 15 ( 0 . 2 ) ; //Ki

    k C oe f fs [ 2 ] = Q 15 ( 0 . 0 7) ; //Kd

    /* D er iv ar l os c oe fi ci en te s a ,b , & c a p ar ti r d e K p , Ki

    & Kd */

    P I D C o e f f Ca l c ( & k C o e f fs [ 0 ] , & f o o P I D ) ;

    /* S eg un do p as o : U sa r el r eg ua ld or P ID */

    while(1)

    / * Se us a un b uc le s in e mb ar go se d eb e e je cu ta r

    me diante una ta rea , la ac tiva cio n de un timer o la

    i n t er r u pc i o n d e u na c o n ve r s io n A / D * /{

    /* La r ef en ci a d el s is te ma . No t ie ne p or q ue s er

    f ij a a un qu e e n e st e e je mp lo l o es */

    f o oP I D . c o n t ro l R ef e r e nc e = Q 15 ( 0 . 7 4) ;

    / * N o rm a lm e nt e , l a v a ri a bl e m e a su r e dO u t pu t e s l a

    s al id a d el s is te ma m ed id a a p ar ti r d e u na e nt ra da

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    45/93

    4.5. PROGRAMACION USANDO LAS LIBRERIAS DEL DSPIC 45

    A /D o un s en so r . En e st e e je mp lo se e st ab le ce

    man ual men te un valor de demostracion , pero se

    d eb e t en er en c ue nt a q ue e st e v al or va a s eg ui r

    c am bi a nd o e n u na a pl i ca c io n r ea l * /

    f o oP I D . m e a su r e dO u t pu t = Q 15 ( 0 . 4 53 ) ;

    /* Se l la ma a l r eg ul ad or P ID c on la n ue va m ed id a de

    l a s al id a * /

    P I D ( & f o o P I D ) ;

    f o o P I D . c o n t r o l O u t p u t /* La s al id a d el r eg ul ad or o

    a c ci o n d e c o nt r ol * /

    }

    }

    4.5.4. Regulador PID de Posicion con librerias

    El siguiente ejemplo usa las libreras DSP y las funciones PID para im-

    plementar un regulador PID.

    f l oa t r e fp o s ;/ * R e fe r en c ia * /

    f l oa t p os ; / * a l ma ce n ar l a p os ci on a ct ua l * /

    f o oP I D . a b c C oe f f ic i e nt s = & a b c C o ef f i ci e n t [ 0 ];

    f o oP I D . c o n t ro l H is t o ry = & c o n t r ol H i st o r y [ 0 ];

    P I D I n i t ( & f o o P I D ) ;

    k C oe f fs [ 0 ] = Q 15 ( 0 . 9 9 9 99 9 9 9) ;

    k C oe f fs [ 1 ] = Q 15 ( 0 . 0) ;

    k C oe f fs [ 2 ] = Q 15 ( 0 . 0) ;

    P I D C o e f f C al c ( & k C o e f fs [ 0 ] , & f o o P ID ) ;

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    46/93

    46 CAPITULO 4. IMPLEMENTACION

    while(1)

    {

    / * v el oc i da d = c i cl o QE I ti c ks / t ie mp o d e c ic lo * /

    p os = P OS 1C NT ; / * L ee r la c ue nt a de p ul so s * /

    f o oP I D . c o n t ro l R ef e r e nc e = Q 15 ( r e f po s ) ; /* la

    r e fe r en c ia d e p o si ci on * /

    f o oP I D . m e a su r e dO u t pu t = Q 15 ( p o s ) ; /* */

    P I D ( & f o o P I D ) ;

    / / 15 - 0 P xD C1 < 15 :0 > : P WM D ut y C yc le 1 V al ue b it s

    P 1 DC 1 = f o oP I D . c o n t ro l O ut p u t & 0 x 3F F ;

    }

    4.5.5. Regulador PID de Velocidad con librerias

    El siguiente ejemplo calcula un regulador de velocidad PID usando las

    funciones de librera.

    f l oa t r e fv e l ;

    f l oa t u l t im o Q EI t i ck ;

    f l oa t c i c lo Q E It i c ks ;

    f l oa t a c t ua l Q EI t i ck ;

    u l t im o Q EI t i ck = P O S1 C NT ;

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    47/93

    4.5. PROGRAMACION USANDO LAS LIBRERIAS DEL DSPIC 47

    f o oP I D . a b c C oe f f ic i e nt s = & a b c C o ef f i ci e n t [ 0 ];

    f o oP I D . c o n t ro l H is t o ry = & c o n t r ol H i st o r y [ 0 ];

    P I D I n i t ( & f o o P I D ) ;

    k C oe f fs [ 0 ] = Q 15 ( 0 . 9 9 9 99 9 9 9) ;

    k C oe f fs [ 1 ] = Q 15 ( 0 . 0) ;

    k C oe f fs [ 2 ] = Q 15 ( 0 . 0) ;

    P I D C o e f f C al c ( & k C o e f fs [ 0 ] , & f o o P ID ) ;

    while(1)

    {

    / * v el oc i da d = c i cl o QE I ti c ks / t ie mp o d e c ic lo * /

    a c t ua l Q EI t i ck = P O S1 C NT ; /* G ua rd ar la c ue nt a de

    p ul so s Q EI * /

    c i c lo Q E It i c ks = a c t ua l Q EI t i ck - u l t im o Q EI t i ck ; /*

    R es ta r c on e l i ns t an te a nt er i or * /

    u l t im o Q EI t i ck = a c t ua l Q EI t i ck ; / * A ct u al i za r l a c ue nt a

    d e p ul so s a nt e ri or * /

    f o oP I D . c o n t ro l R ef e r e nc e = Q 15 ( r e f ve l ) ; /* la

    r e fe r en c ia d e v e lo ci d ad * /

    f o oP I D . m e a su r e dO u t pu t = Q 15 ( c i c l o Q EI t i ck s ) ;

    P I D ( & f o o P I D ) ;

    / / 15 - 0 P xD C1 < 15 :0 > : P WM D ut y C yc le 1 V al ue b it s

    P 1 DC 1 = f o oP I D . c o n t ro l O ut p u t & 0 x 3F F ;

    }

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    48/93

    48 CAPITULO 4. IMPLEMENTACION

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    49/93

    Captulo 5

    Tareas, FreeRTOS

    Un sistema empotrado, normalmente necesita implementar distintas tar-

    eas para que se ejecuten paralelamente, es por eso que usando un mini Kernel

    de tiempo real ayuda en la creacion y gestion de estas. FreeRTOS ofrece todas

    estas soluciones ademas de incluir codigo de ejemplo para distintos modelos

    y marcas de microcontroladores.

    Esta distribuido bajo la licencia GPL, aunque se pueden adquirir otras

    versiones como OpenRTOS que incluye mejoras profesionales y SafeRTOS

    que esta certificado. Estas otras versiones no son gratuitas.

    Es simple y pequeno, muy util para principiantes y aficionados. El plan-

    ificador se puede configurar para que las tareas se ejecuten conjuntamente o

    para que se ejecute solo una dependiendo de la prioridad.

    49

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    50/93

    50 CAPITULO 5. TAREAS, FREERTOS

    5.1. Implementacion de tareas

    Para implementar una tarea en FreeRTOS lo primero es establecer una

    priorirad, esto se hace mediante un #define

    / * P ri o ri d ad e s d e l as t ar ea s . * /

    # d ef in e ma in BL OC K_ Q_ PR IO RI TY ( t sk ID LE _P RI OR IT Y + 2 )

    # d e fi ne m a in C HE C K_ T AS K _P R IO R IT Y ( t s kI D LE _ PR I OR I TY + 3 )

    # de fin e m ai nC OM _T ES T_ PR IO RI TY ( 2 )

    A continuacion hay que establecer el periodo:

    /* P er io do s de l as t ar ea s . */

    # define m ain CHE CK_ TAS K_P ER IO D ( ( p ort Ti ckT yp e )

    3 00 0 / p o rt T IC K _R A TE _ MS )

    # d e f in e m a i n RE F E R EN C I A _T A S K _P E R I OD ( ( p o r tT i c kT y p e )

    3 00 / p o rt T IC K _R A TE _ MS )

    # d ef in e ma in CO NT RO L_ TA SK _P ER IO D ( ( p or tT ic kT yp e ) 50

    / p o r tT I C K_ R A T E_ M S )

    Las cabeceras de las funciones:

    s t at i c v o id v R e f er e n ci a T as k ( v o i d * p v P a r am e t er ) ;

    s t at i c v o id v C o n tr o l Ve l T as k ( v o i d * p v P a r am e t er ) ;

    v o i d i n i c i a l i z a r Q E I ( v o i d ) ;

    v o i d i n i c i a l i z a r P W M ( v o i d ) ;

    i nt r e fp o s = 2 56 ;

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    51/93

    5.1. IMPLEMENTACION DE TAREAS 51

    Y las variables globales, que usaran distintas tareas para comunicarse. En

    la funcion main se llamara a las funciones de inicializacion, y se crearan las

    tareas, por ultimo solo hay que llamar al planificador.

    i nt m ai n ( v oi d )

    {

    / * D es de a qu i s e l la ma a l as f un ci on es de

    i n c ia l i za c i on . * /

    p r v S e t u p H a r d w a r e ( ) ;

    x T a sk C r ea t e ( v R e fe r en c i aT a sk , ( s i gn e d c h ar * ) "

    R e f e r e n c ia " , c o n f i g M I N I MA L _ S T A C K _ SI Z E , N UL L ,

    mai nCH EC K_T ASK _P RIO RIT Y , NULL ) ;

    x T a sk C r ea t e ( v C o nt r ol V e lT a sk , ( s i gn e d c h ar * ) "

    C o n t r o l V el " , c o n f i g M I N I MA L _ S T A C K _ SI Z E , N UL L ,

    m ai n CH E C K_ T AS K _P R I OR I TY + 1 , NULL ) ;

    / * F in al ly s ta rt t he s ch e du le r . * /

    v T a s k S t a r t S c h e d u l e r ( ) ;

    / * W il l o nl y r ea ch h er e i f t he re i s i n su f fi ci e nt h ea p

    a v a il a b le t o s t ar t

    t he s ch e du le r . * /

    r e tu r n 0 ;

    }

    s t at i c v o id p r v S et u p Ha r d w ar e ( v oi d )

    { / * I ni c ia l iz a ci o n d e l os m od ul os d el d sP IC * /

    i n i c i a l i z a r Q E I ( ) ;

    i n i c i a l i z a r P W M ( ) ;

    }

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    52/93

    52 CAPITULO 5. TAREAS, FREERTOS

    5.2. Tiempo absoluto

    Para que las tareas se ejecuten en tiempos absolutos, hay que usar las

    siguientes instrucciones dentro del cuerpo de la funcion que implementa la

    tarea, de este modo la tarea se ejecutara segun el periodo establecido.

    s t at i c v o id v M i Ta r e aT a s k ( v oi d * p v P a ra m e te r ) {

    /* S e u sa p ar a d es pe rt ar la t ar ea a un a f re cu en ci a

    d e t er m i na d a * /p o r t T i c k Ty p e x L a s t E x e c u t i o nT i m e ;

    / * I ni c ia l iz a r x L as t Ex e cu t io n Ti m e l a p ri me ra v ez q ue s e

    l l am a a v T a sk D e la y U nt i l ( ) . * /

    x L a st E x e cu t i o nT i m e = x T a sk G e t Ti c k C ou n t ( ) ;

    while(1)

    {

    /* E sp er ar a q ue l le gu e la h or a de l s ig ui en te c ic lo .

    */

    v T a s k D e l a y U nt i l ( & x L a s t E x e c u t io n T i m e ,

    m ai n C ON T RO L _ TA S K_ P E RI O D ) ;

    .

    .

    .

    }

    }

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    53/93

    5.3. EJEMPLO DE IMPLEMENTACION DE UNA TAREA 53

    5.3. Ejemplo de implementacion de una tarea

    La siguiente tarea implementa el control de velocidad de un motor de

    corriente continua, usando para ello las funciones de librera de un regulador

    PID.

    s t at i c v o id v C o n tr o l Ve l T as k ( v o i d * p v P a r am e t er ) {

    /* U se d to w ak e t he t as k at t he c or re ct f re qu en cy . */

    p o r t T i c k T yp e x L a s t E x e c u t i o nT i m e ;

    i nt u l t im o Q EI t i ck ;

    i nt c i c lo Q E It i c ks ;

    i nt a c t ua l Q EI t i ck ;

    / * I ni t ia l is e x L as t Ex e cu t io n Ti m e s o t he f ir st c al l t o

    v T a s k D e l a y U n t i l ( )

    w o rk s c o r re c tl y . * /

    x L a st E x e cu t i o nT i m e = x T a sk G e t Ti c k C ou n t ( ) ;

    u l t im o Q EI t i ck = P O S1 C NT ;

    /* P OS 1C NT - R eg is tr o d on de e st a la c ue nt a d e p u ls os

    d el e n co d er .

    C ui da do p or qu e c am bi a a 0 a l l le ga r al M AX 1C NT . */

    f o oP I D . a b c C oe f f ic i e nt s = & a b c C o ef f i ci e n t [ 0 ];

    f o oP I D . c o n t ro l H is t o ry = & c o n t r ol H i st o r y [ 0 ];

    P I D I n i t ( & f o o P I D ) ;

    k C oe f fs [ 0 ] = Q 15 ( 0 . 9 9 9 99 9 9 9) ;

    k C oe f fs [ 1 ] = Q 15 ( 0 . 0) ;

    k C oe f fs [ 2 ] = Q 15 ( 0 . 0) ;

    P I D C o e f f C al c ( & k C o e f fs [ 0 ] , & f o o P ID ) ;

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    54/93

    54 CAPITULO 5. TAREAS, FREERTOS

    while(1)

    {

    / * W ai t u nt il i t is t im e f or t he n ex t c yc le . */

    v T a s k D e l a y U nt i l ( & x L a s t E x e c u t io n T i m e ,

    m ai n CO N T RO L _T A S K_ P ER I O D ) ;

    / / v el oc i da d = c y cl e QE I ti c ks / c ic lo

    a c t u a l Q E I t i c k = P O S 1 C N T ;

    c i c lo Q E It i c ks = u l t im o Q EI t i ck - a c t ua l Q EI t i ck ; //cuenta

    h a ci a a b aj o

    u l t im o Q EI t i ck = a c t ua l Q EI t i ck ;

    / / m ot or 2 56 r an ur as e n u na v ue lt a

    f o oP I D . c o n t ro l R ef e r e nc e = Q 15 ( r e f ve l ) ;

    f o oP I D . m e a su r e dO u t pu t = Q 15 ( c i c l o Q EI t i ck s / 0 x 3 E ) ;

    P I D ( & f o o P I D ) ;

    / / 15 - 0 P xD C1 < 15 :0 > : P WM D ut y C yc le 1 V al ue b it s

    / / p u t c ( f o o P I D . c o n t r o l O u t p u t ) ;

    /* S e e sc ri be la a cc io n de c on tr ol en el r eg is tr o qu e

    e st ab le ce el P WM d on de 0 x 3f f es el 100 % d el c ic lo de

    t r ab a jo * /P 1 DC 1 = f o oP I D . c o n t ro l O ut p u t & 0 x 3F F ;

    / / s e n t i d o = ( f o o P I D . c o n t r o l O u t p u t & 0 x 2 0 0 ) = = 0 x 2 0 0 ; / / p a r a

    e l p ue nt e h

    }

    }

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    55/93

    Apendices

    55

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    56/93

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    57/93

    Apendice A

    Configuracion del modulo

    PWM

    El MCPWM (Motor Control PWM) se encarga de generar una senal con

    forma de pulso periodico. El periodo y el ciclo de trabajo de los pulsos son

    programables. Dependiendo del microcontrolador puede tener varios modulos

    MCPWM, en cualquier caso la configuracion que se explica solo usara uno

    ya que solo se va a controlar un motor.

    A.1. Registros de configuracion

    El microcontrolador posee distintos registros con distintos bits para con-

    trolar el modo de operacion del MCPWM. La informacion de todos los reg-

    istros se encuentra en el datasheet del microcontrolador. Se explicaran los

    utilizados, el resto al no modificarse quedaran en su valor por defecto (cero)

    y por tanto en el modo de funcionamiento correspontiente al cero.

    57

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    58/93

    58 APENDICE A. CONFIGURACION DEL MODULO PWM

    A.1.1. P1TCON

    En el registro P1TCON se selecciona el modo de funcionamiento y se

    controla el reloj del PWM.

    A.1.2. P1TPER

    En el registro P1TPER se escribe el valor del tiempo base, el cual deter-mina la frecuencia de funcionamiento del PWM.

    A.1.3. PWM1CON1

    En el registro PWM1CON1 se seleccionan los pines por los cuales sal-

    dra el PWM, se pueden elegir dos pines y hacer que funcionen en modo

    independiente o complementario.

    A.1.4. P1DTCON1 y P1DTCON2

    En el registro P1DTCON1 se configura el periodo de reloj del tiempo

    muerto y en el registro P1DTCON2 se eligen los pines en los cuales la senal

    de tiempo muerto esta activa.

    A.1.5. P1DC1

    En el registro P1DC1 se escribe el valor, en 16 bits, del ciclo de trabajo

    de la salida PWM para el par de pines 1.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    59/93

    A.2. TIEMPO MUERTO 59

    A.1.6. P1OVDCON

    En el registro P1OVDCON se seleccionan los pines que seran controlados

    por el generador PWM .

    A.2. Tiempo muerto

    Debido a que los dispositivos de alimentacion no pueden cambiar in-

    stantaneamente de valor, se requiere cierto tiempo entre el evento de de-

    sconexion y el evento de conexion de una salida PWM en un par complemen-

    tario. La generacion del tiempo muerto es activada automaticamente cuando

    un par de pines esta funcionando en modo complementario.

    Cada par de salidas complementaria del PWM tiene un contador descen-

    dente de 6 bits que se usa para producir la inscercion del tiempo muerto.

    El tiempo muerto se carga en el contador al detectar el evento de flanco

    del PWM. Dependiendo del flanco, si es de subida o de bajada, una de las

    transiciones de la salida complementaria es retrasada hasta que el contador

    llegue a cero.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    60/93

    60 APENDICE A. CONFIGURACION DEL MODULO PWM

    Figura A.1: Tiempo muerto en un par complementario.

    A.2.1. Ejemplo de inicializacion

    P 1T CO N = 0;

    P 1T MR = 0;

    P 1T PE R = 0 x 1F E ; / / p ag in a 3 4 S ec ti on 1 4 P WM

    P 1S EC MP = 0 ;

    P WM 1 CO N1 = 0 x 0E 11 ; / / E na bl e P WM o ut pu t p in s a nd

    c o n fi g u re t h em a s c o m pl e m en t a ry m od e

    P WM 1 CO N2 = 0 x 00 00 ;

    P 1D T CO N1 = 0 x 00 00 ;

    P 1D T CO N2 = 0 x 00 00 ;

    P 1 FL TA C ON = 0 x 00 00 ; / / P x FL T A CO N : F a ul t A C o nt r ol R e gi s te r

    / / bi t 1 5 -0 P xD C1 < 15 :0 > : P WM D ut y C yc le 1 V al ue b it s

    P 1D C1 = 0 x0 ;

    P 1 O V D C O N = 0 X f f 0 0 ;

    P 1 T CO N bi t s . P T EN = 1 ;

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    61/93

    Apendice B

    Configuracion de modulo QEI

    El modulo QEI proporciona una interfaz para encoders incrementales que

    permite obtener datos de posicion mecanicos. Los encoders incrementales o

    de cuadratura detectan la posicion y la velocidad de sistemas de movimiento

    de rotacion.

    Un tpco encoder de cuadratura incluye una rueda ranurada unida al eje

    del motor y un modulo que detecta las ranuras de la rueda. La informaci on

    se emite normalmente por tres canales de salida, Fase A (QEAx), Fase B

    (QEBx) y Indice (INDXx), obteniendo el movimiento del eje del motor, la

    distancia y la direccion. Las senales proporcionados son digitales.

    Los canales Fase A y Fase B tienen una relaci on unica. Si la Fase A va

    por delante de la Fase B, la direccion del motor se considera positiva o hacia

    delante. Si la Fase B va por delante de la Fase A, se considera negativa o

    hacia atras. El pulso que incrementa el Indice ocurre una vez por revolucion

    y es usado como referencia para indicar la posici on absoluta. Se observa un

    diagrama de tiempos relativo a estas tres senales en la figura B.1.

    61

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    62/93

    62 APENDICE B. CONFIGURACION DE MODULO QEI

    El QEI consta de un decodificador logico que interpreta las senales de la

    Fase A (QEAx) y la Fase B (QEBx), ademas tiene un contador up/down

    para acumular la cuenta. Las senales de entrada son filtradas mediante un

    filtro de ruido digital.

    Figura B.1: Senales de la interfaz del encoder de cuadratura.

    B.1. Registros de configuracion

    El modulo QEI tiene cuatro registros accesibles para el usuario. Para pon-

    er en marcha este modulo, se deberan configurar estos registros adecuada-

    mente segun las necesidades. Ademas se deben establezer que pines recibiran

    las senales procedientes del encoder.

    B.1.1. QEI1CON

    El QEI Control Register, controla las operaciones QEI y proporciona flags

    de estado del modulo.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    63/93

    B.1. REGISTROS DE CONFIGURACION 63

    B.1.2. DFLT1CON

    El Digital Filter Control Register, controla las operaciones del filtro digital

    de entrada.

    B.1.3. POS1CNT

    El Position Count Register, permite la lectura y escritura del contadorde posicion de 16 bits. Cuando este registro llega a su valor maximo, vuelve

    a valer cero y sigue incrementandose, esto puede provocar problemas a la

    hora de calcular el valor de pulsos transcurrido en un intervalo de tiempo, al

    hacer la resta entre el valor del inicio y del final del intervalo el registro puede

    reiniciarse provocando un resta erronea desde el punto de vista del algoritmo

    de control, para solucionarlo se puede usar una variable de programa adicional

    para detectar el valor maximo del registro e incrementar en uno la variable, de

    este modo la cuenta esta almacenada en el registro(parte baja) y la variable

    (parte alta) lo cual proporciona una mayor capacidad de cuenta.

    B.1.4. MAX1CNT

    El Maximum Count Register, Mantiene un valor que es comparado con

    el contador POS1CNT en algunas operaciones.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    64/93

    64 APENDICE B. CONFIGURACION DE MODULO QEI

    B.1.5. Ejemplo de inicializacion

    / / P OS 1C NT = 0 x FF FF ;

    / / Se i nc r em e nt a c on l a c ue nt a d e p ul so s d el e nc od er

    Q E I 1C O N bi t s . Q E IM = 0 b 1 01 ;

    / / r es o lu c io n 2 x , R es et a l c o in ci d ir c on M AX CN T

    Q E I 1C O N bi t s . Q E I SI D L = 0 ;

    / / c on ti n ua r e n m od o i dl e ( 0)

    Q E I 1C O N bi t s . S W PA B = 0 ;

    / / P ha se - A y P ha se - B n o i n te r ca m bi a do s

    Q E I 1C O N bi t s . P C D OU T = 1 ;

    / / a c ti va do e l P os i ti on C ou nt er D ir ec t io n S ta tu s

    Q E I 1C O N bi t s . T Q G AT E = 0 ;

    / / T im er g at e a pa ga do

    Q E I 1C O N bi t s . T Q C KP S = 0 ;

    / / P re sc a le r 1 :1Q E I 1C O N bi t s . P O S RE S = 1 ;

    // U n p ul so en I ND EX h ac e un r es et

    Q E I 1 C O N b i ts . T Q C S = 0 ;

    / / U sa mo s c lo ck i nt er no p ar a e l t im er

    Q E I 1 C O N b i t s . U P D N _ S R C = 1 ;

    / / P ha se - B i n di c a d i re c c io n

    M A X 1 C N T = 2 3 ;

    // P OS 1C NT se p on e a 0 c ua nd o P OS 1C NT es i gu al q ue

    MAX1CNT

    D FL T 1C ON = 0 x 00 F0 ;

    / / f i lt r o d e r u id o h a bi l i ta d o

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    65/93

    Apendice C

    Configuracion de modulo ADC

    C.1. Funcionamiento

    La conversion analogica-digital (ADC) consiste en transformar senales

    analogicas en senales digitales, para poder procesarlas de forma mas sencilla.

    Las senales digitales se pueden procesar en computadores, lo cual implica la

    posibilida de aplicar filtros para mejorar la senal o eliminar el ruido.

    Convertir una senal analogica en digital consiste en obtener un valor de

    la senal para cada instante de tiempo, a esto sele llama muestreo, y al tiempo

    entre la toma de muestras, periodo de muestreo.

    65

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    66/93

    66 APENDICE C. CONFIGURACION DE MODULO ADC

    C.2. Registros de configuracion

    A continuacion se describen los distintos registros que se han de configurar

    para poner en funcionamiento y ejemplo sencillo de conversi on. El modulo

    ADC tiene dos modos de funcionamiento, 4 canales de 10 bits o un canal de

    12 bits.

    C.2.1. AD1CON1

    En el modo de 10 bits se puede seleccionar usar un canal, dos canales

    o cuatro canales y no todos lo pines del microcontrolador pueden usarse

    para cualquier canal. Tambien se puede seleccionar el modo de autoconver-

    sion. Ademas este registro inicia o para la conversion modificando el bit

    AD1CON1bits.ADON.

    C.2.2. AD1CON2

    En este registro se pueden seleccionar los voltages de referencia VREFH

    y VREFL para las conversiones A/D ya sea mediante valores externos conec-

    tados a los pines o usando los valores internos del microcontrolador AVDD

    y AVSS.

    C.2.3. AD1CON3

    En este registro se configura el reloj de conversion analogica para que

    conincida la velocidad de muestreo de los datos con el reloj del procesador.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    67/93

    C.2. REGISTROS DE CONFIGURACION 67

    C.2.4. AD1PCFGL

    En este registro se seleccionan los pines de un puerto como entradas

    analogicas. Cuando se configura un pin como entrada analogica, tambien

    hay que configuralo como entrada usando TRIS.

    C.2.5. AD1CHS0 y AD1CHS123

    El modulo puede escanear distintos canales o no, esto se configura en

    AD1CON2bits.CSCNA, si se usa el modo de no escanear se usara el canal

    cero y la entrada sera el pin seleccionado en AD1CHS0bits.CH0SA, a su

    vez el canal puede muestrear dos entradas, primero una y luego la otra,

    A y B seleccionando el pin en AD1CHS0bits.CH0SB . Para muestrear dos

    entradas hay que activar el bit ALTS en el registro AD1CON2, si no siempre

    muestreara la A. En este caso para simplificar se seleccionara un canal, el

    cero, y solo una entrada.

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    68/93

    68 APENDICE C. CONFIGURACION DE MODULO ADC

    C.3. Ejemplo de inicializacion

    A D 1 CO N 1 bi t s . A D 12 B = 0 ; / / 10 - b i t A DC o p er a t io n

    A D 1 CO N 1 bi t s . F O RM = 0 ;

    // 0 0 = I nt eg er ( D OU T = 0 00 0 00 d d d dd d d dd d )

    A D 1 CO N 1 bi t s . S S RC = 7 ;

    / / 1 11 = I nt er na l c ou nt er e nd s s a mp li ng a nd s ta rt s

    c o n v e r s i on ( a u to - c o n v e r t )

    A D 1 CO N 1 bi t s . A S AM = 1 ;

    / / 1 = S am pl in g b eg in s i m me d ia t el y a ft er l as t c on v er s io n

    A D 1 CO N 1 bi t s . S I M SA M = 0 ;

    / / 0 = S am pl es m ul t ip le c ha nn el s i n di v id u al l y i n

    sequence

    A D 1 CO N 2 bi t s . C H PS = 0 ; / / C o nv e r ts c h an n el C H0

    A D 1 CO N 2 bi t s . S M PI = 0 ;

    / / 0 00 0 = A DC i n te rr u pt i s g e ne ra t ed a t t he c om p le ti o n

    / / o f e v er y s a mp l e / c o n ve r s io n o p e ra t i on

    A D 1 CO N 3 bi t s . A D RC = 0 ;

    / / A DC C lo ck i s d er iv ed f ro m S ys te ms C lo ck

    A D 1 CO N 3 bi t s . S A MC = 0 ; // A ut o S am pl e T im e = 0 * T AD

    A D 1 CO N 3 bi t s . A D CS = 2 ;

    / / A DC C on v er s io n C lo ck

    // TAD = TCY * ( ADCS + 1) = (1/40 M) * 3 =

    A D 1 CH S 0 bi t s . C H 0S A = 0 ;

    / / MU XA + v e i np ut s el ec t io n ( A IN 0 ) f or C H0

    A D 1 CH S 0 bi t s . C H 0N A = 0 ;

    / / MU XA - ve i np ut s el ec t io n ( VR EF - ) f or C H0

    A D 1 CH S 1 23 b i ts . C H 1 2 3 SA = 0 ;

    / / MU XA + v e i np ut s el ec t io n ( A IN 0 ) f or C H1

    A D 1 CH S 1 23 b i ts . C H 1 2 3 NA = 0 ;

    / / MU XA - ve i np ut s el ec t io n ( VR EF - ) f or C H1

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    69/93

    C.3. EJEMPLO DE INICIALIZACION 69

    A D1 P CF GL = 0 x FF FF ;

    / / A D 1 PC F GH / A D 1 P C FG L : P o rt C o n fi g u ra t i on R e gi s t er

    A D 1 PC F G Lb i t s . P C FG 0 = 0 ; / / AN 0 a s A na lo g I np ut

    I F S 0b i ts . A D 1 I F = 0 ; / / Cl ea r t he A / D i nt e rr up t f la g b it

    I E C 0b i ts . A D 1 I E = 0 ; / / Do N ot E na bl e A / D i nt e rr u pt

    A D 1 CO N 1 bi t s . A D ON = 1 ; / / Tu rn o n t he A / D c on v er t er

    T R I S A b i ts . T R I S A0 = 1 ; / / p in c o n fi g u re d a s i n pu t

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    70/93

    70 APENDICE C. CONFIGURACION DE MODULO ADC

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    71/93

    Anexo i

    main.c

    / * S t an da rd i nc lu d es . * /

    # i n c lu d e < s t di o . h >

    # i n c lu d e < d sp . h >

    / * S ch ed u le r i nc l ud es . * /

    # i n c lu d e " F r e e RT O S . h "

    # i n c lu d e " t a sk . h "

    # i n c lu d e " q u e ue . h "

    # i n c lu d e " c r o u ti n e . h "

    / * D em o a p pl i ca t io n i nc lu de s . * /

    # i n c lu d e " B l o ck Q . h "

    # i n c lu d e " c r f l as h . h "

    # i n c lu d e " b l o c kt i m . h "

    # i n c lu d e " i n t e ge r . h "

    # i n c lu d e " c o m t es t 2 . h "

    # i n c lu d e " p a r t es t . h "

    71

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    72/93

    72 ANEXO I. MAIN.C

    # i n c lu d e " l c d . h "

    # i n c lu d e " t i m e rt e s t . h "

    / * D em o t as k p r io r it i es . * /

    # define m ain BLO CK_ Q_P RIO RIT Y ( t sk IDL E_ PR IOR IT Y +

    2 )

    # de fin e m ai nC HE CK _T AS K_ PR IO RI TY ( t sk ID LE _P RI OR IT Y

    + 3 )

    # define m a in C OM _ TE S T_ P RI O R IT Y ( 2 )

    /* T he c he ck t as k m ay r eq ui re a b it m or e s ta ck as it

    c a ll s s p ri n tf ( ) . * /

    # de fin e m ai nC HE CK _T AK S_ ST AC K_ SI ZE (

    c o n f ig M I N IM A L _ ST A C K _S I Z E * 2 )

    /* T he e xe cu ti on p er io d of t he c he ck t as k . */

    # define m ain CHE CK_ TAS K_P ER IO D ( ( p ort Ti ck Typ e )

    3 00 0 / p o rt T IC K _R A TE _ MS )

    # de fin e m ai nR EF ER EN CI A_ TA SK _P ER IO D ( ( p or tT ic kT yp e

    ) 3 00 / p o rt T IC K _R A TE _ MS )

    # define m ain CO NT ROL _T AS K_P ER IO D ( ( p or tTi ck Typ e )

    5 0 / p o rt T IC K _R A TE _ MS )

    /* T he n um be r of f la sh co - r ou ti ne s to c re at e . * /# define m a i nN U M_ F L AS H _ CO R OU T I NE S ( 5 )

    /* B au d r at e u se d by t he c om te st t as ks . */

    # define m a in C O M_ T ES T _B A UD _ RA T E ( 19200 )

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    73/93

    73

    /* T he L ED u se d b y t he c om te st t as ks . m ai nC OM _T ES T_ LE D

    + 1 is als o u sed .

    S ee t he c om te st . c f il e f or m or e i nf o rm a ti o n . * /

    # define m ai nC O M_ TE ST _L E D ( 6 )

    / * T he f re q ue nc y a t w hi ch t he " f as t i nt e rr up t t es t "

    i n te rr u pt w il l o cc ur . * /

    # d ef in e m ai nT ES T_ IN TE RR UP T_ FR EQ UE NC Y ( 2 00 00 )

    / * T he n um be r o f p ro ce s so r c lo ck s w e e xp ec t t o o cc ur

    b e tw e en e a ch " f a st

    i n t er r u pt t e st " i n t er r u pt . * /

    # d e f in e m a i n EX P E C TE D _ C LO C K S _B E T W E EN _ I N TE R R U PT S (

    c o n fi g C P U_ C L O CK _ H Z / m a i n TE S T _ IN T E R RU P T _ FR E Q U EN C Y )

    / * T he n um be r o f n an o s ec on ds b et we en e ac h p r oc es s or

    c l oc k . * /

    # d ef in e m ai nN S_ PE R_ CL OC K ( ( u ns ig ne d s ho rt ) ( ( 1 .0 /

    ( d ou bl e ) c on fi gC PU _C LO CK _H Z ) * 1 00 00 00 00 0. 0 ) )

    /* D im en si on t he b uf fe r u se d to h ol d t he v al ue of th e

    maximum jitter time when

    it i s c on ve rt ed t o a s tr in g . */

    # define m a in M AX _ ST R IN G _L E NG T H ( 20 )

    //paco

    # d e f in e m a i nL E D _D E L AY ( ( p o r tT i c kT y p e ) 1 0 00 /

    p o r t T I C K _ R A T E _ M S )

    / / s t at i c v o id v U s er L E D1 T a sk ( v o i d * p v P a r am e t er ) ;

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    74/93

    74 ANEXO I. MAIN.C

    / / s t at i c v o id v U s er L E D2 T a sk ( v o i d * p v P a r am e t er ) ;

    s t at i c v o id v R e f er e n ci a T as k ( v o i d * p v P a r am e t er ) ;

    s t at i c v o id v C o n tr o l Ve l T as k ( v o i d * p v P a r am e t er ) ;

    s t at i c v o id v C o nt r o lP o s T as k _ P ( v o id * p v P a r am e t er ) ;

    s t at i c v o id v C o nt r o lP o s T as k _ PI ( v o i d * p v P a r am e t er ) ;

    /* e n r ef m et o el v al or de 15 b it s c or re sp on ti en te al

    c i cl o d e t r ab a jo P 1D C1 < 15 :0 > * /

    f l o at r e f v e l = 0 . 3 ;

    i nt r e fp o s = 2 56 ;

    // E l m ot or c on 2 56 r an ur as en e l e nc od er me d e 32 t ic ks

    p or c ic lo . Al 1 00 m e da 0 x 2D ~ ~~ 0 x2 E

    t P ID f o oP I D ;

    f r a ct i on a l a b c Co e f fi c i en t [ 3 ] _ _ a tt r i bu t e __ ( ( s e ct i on ( " .

    x bs s , b ss , x m em o ry " ) ) ) ;

    f r a ct i on a l c o n tr o l Hi s t or y [ 3 ] _ _ a tt r i bu t e __ ( ( s e ct i on ( " .

    y bs s , b ss , y m em o ry " ) ) ) ;

    f r a ct i on a l k C oe f fs [ ] = { 0 , 0 , 0} ;

    v o i d i n i c i a l i z a r Q E I ( v o i d ) ;

    v o i d i n i c i a l i z a r P W M ( v o i d ) ;

    //paco

    /*

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  • 7/31/2019 Implementacion_de Un Regulador PID en Un Dspic33F

    75/93

    75

    */

    /*

    * T he c he ck t as k as d es cr ib ed a t t he t op of t hi s f il e .

    */

    / / s ta ti c v oi d v C he c kT a sk ( v oi d *