• No se han encontrado resultados

CAPITULO III: DESARROLLO DE LA PLATAFORMA 3

III. 2.1.3 Generación de la señal de control por

La segunda función del programa cargado en el dsPIC es IniPWM4012(). Con la cual configuramos la salida PWM, le deshabilitamos interrupciones, fijamos el periodo de ésta, seleccionamos el modo de operación, habilitamos el canal, y enviamos un comando de prueba para que se mueva el servomotor un tiempo pequeño en un sentido y en otro.

Figura 22.- Función IniPWM4012()para inicializar y configurar el módulo PWM. La configuración del módulo PWM se realiza utilizando los programas o funciones de biblioteca de 16 bits, para el lenguaje “C”, los cuales nos permiten asignar a los registros internos los valores necesarios, sin tener que hacerlo directamente; de tal manera que dichas funciones simplifican la tarea de configuración, la que sería más complicada si se realizara sin ellas, o aún más si se realizara en ensamblador.

Capítulo III: Desarrollo de la plataforma

función se utiliza para configurar las interrupciones del modulo PWM, el parámetro config puede tomar el valor de una serie de etiquetas correspondientes a bits; con los cuales, en nuestro caso, deshabilitamos las interrupciones del módulo PWM ya que no serán utilizadas, ni la normal ni la de bit de falla, también les asignamos una prioridad de 0, la cual es la menos importante. Esto último es necesario realizarlo ya que el espacio no puede quedar vacío en la función.

Posteriormente se usa la función de biblioteca OpenMCPWM(), la cual inicializa el módulo y es la encargada de escribir los valores a los registros de configuración PTPER , SEVTCMP, PTCON, PWMCON1 y PWMCON2.

Para el caso en que trabajemos en el modo de corrida libre, el primer valor nos permite definir la base de tiempo de la señal PWM, la cual, en términos del periodo del PWM se calcula con la siguiente fórmula.

Despejando y calculando el valor a cargar en el registro , para una frecuencia deseada del de 20 Khz., y para un valor del preescalador de 1. Tenemos:

El segundo dato es el disparo por algún valor o evento especial, este dato no lo utilizamos, por lo que se coloca en cero.

El siguiente parámetro de esta función es Config1, este contiene los datos que serán cargados en el registro PTCON; los que realizan varias funciones, habilitan la base de tiempo del PWM, definen que siga funcionando el PWM cuando el dsPIC entre en modo de espera. El preescalador y el postescalador se colocan en 1:1, con lo cual quedan prácticamente deshabilitados. Al final definimos que el modulo PWM esté trabajando en el modo de corrida libre.

El siguiente parámetro es config2, este contiene los datos que serán cargados en el registro PWMCON, con este configuramos el modulo 3 PWM bajo para que trabaje de manera independiente, deshabilitamos los módulos 1 y 2, altos y bajos, y el modulo 3 alto. Es decir solamente habilitamos el modulo 3 bajo, para obtener

Capítulo III: Desarrollo de la plataforma

la señal PWM a través de esta terminal.

El parámetro config3 Contiene los datos que serán cargados en el registro PWMCON2, con ellos colocamos el postescalador de eventos especiales en 1, ya que no lo utilizaremos, sincronizamos la salida PWM con el Tcy, y seleccionamos que la actualización del flanco de salida de la señal PWM se realice en sincronía con la base de tiempo del módulo.

Posteriormente utilizamos la función SetDCMCPWM(); con ella configuramos los registros para el ciclo útil del PWM. En el parámetro dutycyclereg se coloca el valor del apuntador al registro a configurar, en nuestro caso el modulo 3. El dato siguiente es el llamado iref, este es el valor del ciclo útil a cargar, y el dato final es updatedisable, este valor se coloca en cero para deshabilitar la actualización inmediata de valores, ya que ésta se realiza de otra manera; sincronizada con la base de tiempo del modulo PWM.

Posteriormente con iref se hace una pequeña rutina para probar que está función esté trabajando, consiste en mover el servomotor por corto tiempo hacia un lado y hacia el otro. Estos valores de ciclo útil son solo de prueba, ya que la variable iref se irá modificando de acuerdo a las necesidades de la señal de control en el lazo.

III.2.1.4.- Medición de la posición angular:

El modulo QEI del dsPIC es la interface entre el codificador de posición óptico incremental en cuadratura y el lazo de control, este módulo realiza la tarea de decodificar las señales enviadas por el sensor. Estas señales son llamadas fase A, fase B, e Index. Las fases A y B se utilizan para determinar la posición del rotor incluyendo su sentido de giro, mientras que el Index se utiliza para medir cantidad de revoluciones. En la siguiente figura se muestra el principio de funcionamiento de un sensor de posición óptico.

Capítulo III: Desarrollo de la plataforma

Figura 23.- Funcionamiento de un sensor de posición óptico incremental. El contador del modulo QEI deja el dato de la posición en un registro de 16 bits llamado POSCNT.

Si el servomotor está girando en dirección positiva y el valor en el registro POSCNT coincide con el valor en el registro MAXCNT, entonces este registro se reiniciará a cero en el siguiente flanco de bajada y una interrupción será generada. A este evento se le llama sobreflujo.

Si el servomotor está girando en dirección negativa y el valor en el registro POSCNT llega a cero, entonces este registro será cargado con el valor en el MAXCNT y en el siguiente flanco que decremente al registro POSCNT, también será generada una interrupción.

Cuando alguna de estas interrupciones ocurre, la bandera QEIIF correspondiente se pone en 1 indicando el evento, y se salta a la rutina de servicio de interrupción. En esta rutina podremos observar el valor que tenía el contador de posición al ocurrir el evento, si el valor es el máximo, entonces incrementaremos una variable entera que cuente los sobreflujos. Por el contrario si el valor es cero entonces se decrementará esta variable. Con esto obtendremos un valor de 32 bits para el contador de posición, y nos permitirá un mayor rango de sensado de la posición para nuestro control, es decir el motor podrá dar más vueltas sin problemas en el conteo.

El modulo QEI permite una frecuencia de las señales de entrada A y B hasta de , en nuestro caso la frecuencia de estas señales debe de ser máximo de:

Capítulo III: Desarrollo de la plataforma

La inicialización y configuración del modulo QEI se realiza con la rutina IniQEI4012() de la siguiente manera:

Figura 24.- Función IniQEI4012() para inicializar y configurar el módulo QEI para el sensado de la posición angular.

Primero se inicializan las líneas QEA y QEB como entradas, como cualquier líneas digital de I/O, posteriormente llamamos ordenadamente a las siguientes funciones preprogramadas.

La función WriteQEI(), la cual establece el valor máximo para el contador de posición, en nuestro caso 0xFFFF; este valor es guardado en el registro MAXCNT.

En seguida la función ConfigIntQEI(), la que configura la interrupción para este módulo, después habilitaremos la interrupción y le asignaremos una prioridad de 3, es decir una intermedia.

Posteriormente la función OpenQEI(), esta función abre el módulo seleccionando la fase con la cual se incrementa el contador; para este caso

Capítulo III: Desarrollo de la plataforma

utilizamos la fase B. También se configura que las entradas no sean intercambiables y la resolución de del modulo sea X4, se coloca el modulo en modo de trabajo match, esto para que se genere una interrupción por sobreflujo y bajoflujo del contador.

Finalmente se inicializa con cero el registro POSCNT, que es donde se guardará el conteo de la posición.

Documento similar