• No results found

El Software de bajo nivel no es más que el programa que será ejecutado por el microcontrolador y que describe que debe hacer este en presencia de señales o eventos externos o internos. En él además, se configuran e inicializan las interfaces que se van a utilizar.

Para la programación del microcontrolador se utilizará el Software MPLAB el cual es un editor IDE (entorno de desarrollo integrado) gratuito de la Microchip. Este editor utiliza el lenguaje C, además, es modular, permite seleccionar los distintos microcontroladores soportados ya que el mismo cuenta con una amplia gama de librerías (las comunes de C y la de los microcontroladores soportados). Este Software corre bajo Windows y como tal, presenta las clásicas barras de programa, de menú, de herramientas de estado, etc. El ambiente MPLAB posee editor de texto, compilador y simulación (no en tiempo real), además permite la programación directamente del microcontrolador usando el programador adecuado (Microchip Technology Inc 2013).

La arquitectura del Software del microcontrolador está compuesta por tres subrutinas: la subrutina principal; la subrutina de atención a la interrupción de recepción por puerto serie y la subrutina de procesamiento. La Figura 2.15 muestra el diagrama de flujo del Software implementado en el microcontrolador.

El proceso Bucle principal o subrutina principal arranca cuando lo hace el microcontrolador, este es el proceso principal del microcontrolador y cuenta con un bucle (lazo) infinito luego que termina la inicialización de los módulos.

El bloque Inicialización es el encargado de configurar los módulos, además de inicializar las variables y los parámetros para lograr el correcto funcionamiento del SAD. Esta tarea se ejecuta una sola vez y no lo vuelve a hacer hasta que se reinicie el sistema, quedando sus módulos configurados como muestra la Tabla 2.4.

Figura 2.15. Diagrama de Flujo del Software del Microcontrolador.

Tabla 2.4. Inicialización de los módulos del Microcontrolador. Parámetro Configuración

Oscilador Cristal – 8 MHz PLLx8

𝐹𝐶𝑌* – 16 MHz

UART Baud rate** – 57.6 kbps

Interrupción cuando se recibe 8 bits Prioridad 2

Pines Alternativos

ADC Resolución – 10 bits

Tiempo de conversión – 5 µs 2 canales de entrada (AN0 y AN1) QEI Modo x4 con reseteo del contador por

desborde

Pulsos por vueltas – 2 500 (default) Filtro activado

Lectura a 2.67 MHz

SPI Modo – 16 bits

Temporizador 1 Modo – 16 bits

Interrupción para T=1µs Temporizador 2 Modo – 16 bits

Interrupción para T=30 ms

Variables Las variables toman su valor inicial Salidas Las 2 salidas se ponen a 0 V

Interrupción de Recepción Recibir Datos y Almacenarlos en buffer Trama Completa No Si Fin Reiniciar buffer Trama Valida Si Procesar Trama No Si Bucle principal Inicialización Conexión con PC No Salidas a “0” Posición = 0 Procesar Trama Trama Inicialización Inicializar Parámetros del encoder y variables Leer encoder

Leer canales analógicos Calcular posición Calcular nivel entradas

Enviar a PC Fin Si No Actualizar Salidas Trama Mando No Si

(*) 𝐹𝐶𝑌 es la frecuencia de ciclo de instrucción y se calcula: 𝐹𝐶𝑌 = 𝐶𝑟𝑖𝑠𝑡𝑎𝑙 ∙ 𝑃𝐿𝐿/4

Cuando el sistema alcanza un período de tiempo de 30 ms sin recibir algún dato de la PC se activa la interrupción del Temporizador 2. Cuando esto ocurre se inicializa la variable posición y se ponen las salidas a un valor nulo, para evitar que la maqueta siga excitada una vez finalizado el experimento.

El proceso interrupción de recepción se ejecuta cada vez que son recibidos por puerto serie ocho bits de datos (un byte). Estos datos van siendo almacenados en un buffer hasta que se recibe la trama completa, luego se verifica si la trama es correcta según el protocolo de comunicación descrito en la sección 2.2.3. En caso de ser válida se manda a ejecutar el proceso procesar trama, si no lo es, no ocurre nada y solo se desechan los datos almacenados en el buffer.

En el proceso procesar trama primeramente se identifica de que tipo es la trama recibida (de la PC), para luego procesarla adecuadamente (ver sección 2.2.3).

Estas tramas pueden ser de tres tipos:  Trama de inicialización  Trama de mando

 Trama de solicitud de adquisición

En la Trama de inicialización (Tabla 2.6) se reciben los parámetros para el cálculo de la posición angular a partir del encoder incremental. Cuando esta trama es recibida se inicializan todas las variables internas necesarias para realizar un experimento (no se inicializan los módulos del microcontrolador).

En la Trama de mando (Tabla 2.7) se reciben los datos en unidades del conversor D/A correspondientes a las dos salidas analógicas del Hardware, las cuales son primeramente ensambladas y luego enviadas vía SPI al DAC MCP4822 con su correspondiente encabezado como fue descrito en la sección 2.1.3.2.

La Trama de solicitud de adquisición (Tabla 2.8) le indica al sistema que obtenga el valor de las entradas (lecturas de los módulos QEI y ADC), las procese para calcular la posición y los niveles de voltaje de los canales analógicos y los envíe a la PC.

2.2.1.1Cálculo de la posición

El contador de posición del módulo QEI (registro POSCNT de 16 bits) aumenta o disminuye su valor en dependencia del sentido de giro del motor. En el modo x4 se cuentan tantos los francos de subida como de bajada de las Fases A y B, por consiguiente, si se tiene un encoder de 2 500 pulsos/rev, entonces una variación de 360º (1 rev) sería una variación de 10 000 unidades en el registro POSCNT.

Este registro se actualiza (de forma automática) a una frecuencia de 2.67 MHz (𝐹𝐶𝑌/6), es decir, cada 0.38 µs, y el mismo puede almacenar un valor entre 0 y 65 535 (0xFFFFh), además, de ser de escritura y lectura, o sea, se puede inicializar cada vez que se desee en el valor que se le asigne.

Cada vez que el sistema recibe la trama de adquisición el registro POSCNT se salva en una variable antes de ser reiniciado a su valor inicial 0x8000h o 32 768 en decimal (mitad del rango del registro). De forma tal que restándole 32 768 a esta variable se puede determinar la variación de la posición ∆𝑃 , la cual puede ser llevada a unidades de ingeniería, tales como, revoluciones, radianes o grados, haciendo G=1, G = 2π o G = 360 respectivamente según la siguiente ecuación.

∆𝑃𝑜𝑠 = 𝐺

4 ∙ 𝑝𝑢𝑙𝑠𝑜𝑠/𝑟𝑒𝑣∆𝑃 [𝑟𝑒𝑣, 𝑟𝑎𝑑 𝑜 𝑔𝑟𝑎𝑑𝑜𝑠(°)]

El cálculo de la posición se realiza de forma iterativa, sumándole a la posición calculada en el instante anterior (𝜃𝐾−1) la variación actual de la posición ∆𝑃𝑜𝑠.

𝜃𝐾 = ∆𝑃𝑜𝑠 + 𝜃𝐾−1

Este valor es almacenado en una variable del tipo flotante (“float”) la cual puede contener valores entre -3.4∙1038 y 3.4∙1038 revoluciones, radianes o grados.

Los parámetros G y pulsos/rev son configurados en la trama de inicialización.

La variación mínima que es capaz de detectar el sistema (∆𝑃 = 1) con un encoder de 2 500 pulsos/rev es de 10-4rev, 6.28∙10-4 rad o 0.036º.

2.2.1.2Cálculo de los niveles de entrada

Como se explicó en la sección 2.1.4.1 la señal proveniente de los sensores tiene un rango de ±15 V y esta fue acondicionada para que a la entrada del conversor su rango fuera desde 0 a 5 V para aprovechar al máximo la escala del mismo. Con este rango se obtiene un valor digital de conversión (𝑉𝑐) de 0 a 1023.

Para el SAD en cuestión se decidió que los valores correspondientes a estas entradas fueran enviados a la PC en un tipo de dato flotante (“float”) con un valor numérico igual al voltaje real de la entrada. Para ello se realizó la siguiente operación:

𝑉𝑚𝑒𝑑𝑖𝑑𝑜 =

30

1023 𝑉𝑐 − 1023

2

La variación mínima que el sistema es capaz de detectar es de:

30 𝑉

1023= 29 𝑚𝑉

Related documents