Sistemas Embebidos

Sistemas Embebidos

Electrónica analógica y digital: El corazón de los sistemas autónomos.

Códigos Fuente

Códigos Fuente

C, C++, Java, Verilog, VHDL, Object Pascal, PHP, etc... Lenguajes que describen Hardware y Software inteligente.

Mecatrónica

Mecatrónica

Mecánica, Electrónica y Diseño de Software conjugados para crear nuevos dispositivos.

Artículos de la categoría Memoria

Mejoras: Software DSP – Administración de Tareas

El software implementado se ejecuta directamente en la CPU del DSP, sin la intervención de un sistema operativo, por lo que se desarrolló una estrategia que permitiera la ejecución de todos los módulos en forma concurrente, administrando el tiempo que la CPU dedica a cada uno.

Dicha estrategia se basa en el uso de un ciclo principal que itera de forma indefinida cuando el sistema está en régimen permanente, realizando secuencialmente la ejecución de cada módulo para luego actualizar una máquina de estados general en cada iteración.

Figura 4.15: Diagrama de flujo general del programa.

En la Figura 4.15 se muestra el diagrama de flujo general del software implementado. Al iniciarse el sistema, comienza la inicialización de cada uno de los módulos a través del llamado a una función de inicialización presente en ellos. Allí se establecen los valores iniciales de las variables y las configuraciones de los periféricos que se utilizarán. Una vez inicializados los módulos, se inicializan las variables del módulo principal, que ejecuta una máquina de estados encargada de administrar los sistemas en su conjunto. Posteriormente se ingresa al ciclo principal que actualiza los módulos llamando la función de ejecución implementada en ellos, la cual realiza sus propios procesos.

Este enfoque posee la ventaja de ser sencillo de comprender e implementar, además de evitar los problemas de sincronización propios de la concurrencia en sistemas operativos ya que, si bien se ejecutan varias tareas de forma concurrente, cada una se realiza mediante actualizaciones secuenciales en las que cada módulo hace uso exclusivo de la CPU sin interrupciones.

Sin embargo, para el éxito de esta estrategia es fundamental cuidar la fluidez de las funciones de ejecución de cada módulo, ya que cualquier ciclo que espere algún evento o pueda caer en ejecución indefinida, detendrá el sistema completo sin posibilidad de recuperación.

Es por este motivo que se prestó especial atención en anular cualquier posibilidad de bloqueo del sistema, debiendo elaborar algoritmos más sofisticados en tareas que involucran la espera de alguna señal, desde algún periférico, como los puertos de comunicación.

El software implementado cuenta con 11 módulos en total, los cuales son:

Sus funciones específicas y el detalle de su implementación se describen en las siguientes secciones.

Mejoras: Software DSP – HAL Timer

Este módulo tiene por objetivo administrar el temporizador del sistema. Permite controlar además el momento de ejecución de los demás módulos.

Para ello maneja la única interrupción de todo el sistema, cuya función es incrementar un contador de 32 bits. Durante su proceso de inicialización configura uno de los temporizadores del sistema para generar una interrupción cada 100µS.

En este módulo, se mantiene un registro interno con el valor del temporizador al momento de la última ejecución de cada uno de los demás módulos. De esta manera, cuando llega el momento de ejecutar nuevamente un módulo, se activa una señal que es leída externamente para concretar su ejecución. Posteriormente, se notifica esta acción para registrar el nuevo valor del temporizador y repetir el proceso. No todos los módulos requieren la misma resolución temporal. Por ejemplo, el módulo que realiza el control de corriente se ejecuta cada 500µS, mientras que el módulo de comando, menos crítico para el sistema, se ejecuta cada 10mS.

La interfaz de este módulo permite leer el valor del temporizador y acceder a la función que realiza diferencias entre dos marcas de tiempo, la cual maneja adecuadamente el caso de un desbordamiento en el contador de 32 bits. Con esto es posible medir intervalos de tiempo fuera de este módulo de manera sencilla.

Mejoras: Software DSP – HAL Main

La función de este módulo es agrupar dentro de sí los módulos de abstracción de hardware, organizando su ejecución y simplificando el código del flujo principal del programa.

En su proceso de inicialización se configuran los aspectos esenciales del hardware del DSP y se llama a las funciones de inicialización de todos los módulos de abstracción de hardware.

En régimen permanente, se ejecuta una función que ordena la actualización de los módulos de abstracción de hardware, verificando (en los casos que corresponda) si ha llegado el momento de su ejecución consultando al módulo HAL Timer y notificándolo de la manera descrita anteriormente.

Mejoras: Software DSP – HAL Instrumentos

El objetivo de este módulo es leer la información desde los instrumentos de la IMU a través de una de las interfaces SPI del DSP, aplicar los procesos de filtrado adecuados y poner a disposición del módulo de control, el ángulo de inclinación y su derivada en unidades adecuadas.

Para cumplir con estos requerimientos, es necesario ejecutar una rutina de manejo de la interfaz SPI en conjunto con los algoritmos de filtrado y la máquina de estados que lee secuencialmente cada instrumento, ya que se requiere acceder a cuatro dispositivos diferentes a través de un mismo bus, mediante un sistema de direccionamiento incorporado en el diseño electrónico.

Esto se logró aplicando el mismo enfoque de administración de tareas del sistema completo, de manera anidada en este módulo. En consecuencia, se creó un sub módulo encargado de manejar la interfaz SPI; otro sub módulo encargado de recibir las lecturas de los instrumentos y aplicar los filtrados correspondientes; y finalmente un sub-módulo encargado de ejecutar la máquina de estados, solicitando la lectura de un instrumento diferente de manera secuencial, cada cierto intervalo de tiempo determinado por la configuración del módulo HAL Timer.

En el cálculo de los valores que son puestos a disposición del módulo de control se aplican dos clases de filtrado:

  • Promedio móvil: Para minimizar el efecto que puedan tener eventuales datos incorrectos, producto del ruido electromagnético en el bus de comunicación u otro motivo. Se realiza un promedio de las últimas lecturas obtenidas en una ventana de tiempo determinada. Este tipo de filtrado suaviza la señal de salida pero genera retardos en la respuesta del sistema, por lo que se escogieron tamaños de ventana relativamente pequeños.
  • Limitación de derivada: Puesto que las lecturas provienen de un sistema dinámico que posee una cierta inercia, se toma como hipótesis que las variables físicas no pueden variar arbitrariamente entre una muestra y otra. De esta manera, si se aplica un limitador adecuado a la diferencia entre la lectura que se recibe y la anterior, se pueden filtrar valores inválidos sin sacrificar mayormente el tiempo de respuesta del controlador.

Además de los procesos de filtrado, el módulo de lectura de instrumentos implementa una alarma que detiene el vehículo si la lectura del giróscopo es excesivamente alta. Esto sucede habitualmente con movimientos violentos propios de un controlador inestable o producto de un choque del vehículo.

Mejoras: Software DSP – HAL PWM

Este módulo tiene por objetivo manejar las salidas PWM que controlan los convertidores de potencia del vehículo.

Debido a que la generación de los pulsos se realiza completamente por hardware, la implementación de este módulo es sencilla. Únicamente contiene las funciones de inicialización, tres funciones de comando y una de consulta de estado. No requiere de una tarea que se ejecute continuamente, pues basta con actualizar la configuración del periférico del DSP, cada vez que sea necesario.

La función de accionamiento de los motores recibe como parámetros el motor que se desea accionar (izquierda o derecha), la dirección de movimiento (adelante o atrás) y el ciclo de trabajo multiplicado por 10 para mayor resolución, de modo que se pueda ajustar en pasos de 0,1%. En su ejecución, esta función verifica que el ciclo de trabajo esté dentro de los rangos aceptables y aplica un escalamiento para reducir la zona muerta en torno al cero, pues los motores no responden a ciclos de trabajo muy pequeños.

Posee además dos funciones de comando que encienden o detienen completamente los pulsos. Éstas son usadas para iniciar el funcionamiento del vehículo y para detenerlo en caso de operación normal. En caso de falla, la función de detención actúa de forma inmediata.

Una última función entrega el estado del módulo para verificar si se encuentra operando o detenido.

Mejoras: Software DSP – HAL Corriente

La función de hardware de este módulo es recoger las lecturas de corriente desde los puentes H, sin embargo, también implementa un lazo de control de corriente que pone a disposición del módulo de control para accionar el vehículo por medio de referencias de torque en los motores.

Desde el punto de vista de hardware, este módulo configura y utiliza los periféricos de captura del DSP, los cuales registran internamente los instantes en que la señal de entrada experimenta flancos de bajada o de subida. De esta manera, se puede obtener directamente el período de la señal de entrada (un tren de pulsos generado en la tarjeta de los puentes H, cuya frecuencia es proporcional a la corriente en cada motor), con un alto nivel de precisión, facilitando el cálculo de la corriente en los motores.

Gracias a la linealidad del VCO que genera el tren de pulsos (ver Sección 4.2.1), únicamente fue necesario un proceso de calibración para determinar la pendiente de la recta que relaciona la frecuencia en Hertz con la corriente en Ampères. Para obtener la constante de desplazamiento y así caracterizar completamente esta función, el módulo toma muestras de corriente durante un segundo en la inicialización con los motores apagados, utilizando ese valor como los 0A, consiguiendo así lecturas sin corrimientos.

Al igual que en el módulo HAL Instrumentos, se realizan dos tipos de filtrado de la señal de corriente, uno por el promedio de un número determinado de muestras y otro limitando la velocidad con que la lectura de corriente puede cambiar, suponiendo que la dinámica del sistema es lo suficientemente lenta. Esto último no es necesariamente cierto puesto que no se trata de una variable mecánica sino eléctrica. Sin embargo, se comprobó empíricamente que este filtrado mejora el desempeño del control de corriente al omitir transientes eléctricos que no dicen relación con el comportamiento mecánico del sistema, haciéndolo más suave y estable.

Figura 4.16: Esquema de control de corriente.

Puesto que la corriente en los motores no sólo depende del ciclo de trabajo, se implementó un controlador de corriente proporcional, cuya salida es la variación del ciclo de trabajo respecto al anterior, tal como se observa en la Figura 4.16.

Inicialmente se planteó la posibilidad de utilizar un control proporcional integrativo, sin embargo, esto generó algunos problemas de inestabilidad ya que la referencia entregada a este controlador por el módulo de control de inclinación varía rápidamente, dificultando que el error acumulado se mantenga acotado.

Adicionalmente se observó, durante el proceso de puesta en marcha, que cuando el vehículo desarrollaba una velocidad tal que llevara la corriente a su límite de 25A en los motores (dado por el rango de medición de los sensores de corriente), el controlador era incapaz de compensar, haciendo que el usuario se inclinara hacia adelante, forzando su bajada y la detención del vehículo.

Por esta razón, se aplicó una modificación a la respuesta del controlador de corriente, de manera que la compensación sea más vigorosa antes que se alcance el límite de 25A, forzando la reducción de la inclinación del usuario antes de que se requieran torques mayores a los límites para mantener la estabilidad. En la Figura 4.17 se muestra la relación entre la corriente solicitada por el controlador de inclinación y la referencia efectiva que utiliza el controlador de corriente. Dicha referencia es castigada al pasar de ±20A, con una pendiente de 2 en la recta. Para los valores de corriente inferiores, no se aplica escalamiento alguno a la referencia (pendiente 1).

Figura 4.17: Referencia efectiva del controlador de corriente.

La medida resultó ser efectiva, permitiendo la operación del vehículo a velocidades constantes por tramos largos, sin sobrepasar los límites sobre los cuales no es capaz de compensar.

Producto de la incorporación interna del lazo de control de corriente en este módulo, su interfaz resulta de estructura similar a la del módulo HAL PWM, es decir, posee una función cuya entrada es la corriente positiva deseada en Amperes, el motor que se desea accionar y la dirección de giro esperada del motor.

Mejoras: Software DSP – HAL ADC

Este módulo de abstracción de hardware, maneja las entradas analógicas del sistema, obtiene las lecturas del mando de dirección, el estado de las baterías y la presión del sensor ubicado en la plataforma para los pies.

En la función de ejecución de este módulo, se leen los valores desde los conversores análogo digital y se aplican filtrados de promedio. Se accede a estos valores a través de funciones específicas para tal fin, aplicando las conversiones necesarias. La tensión de las baterías es ponderada para generar la medición en décimas de Volt y la lectura del sistema de dirección es limitada para evitar que el vehículo se descontrole ante una eventual falla.

Mejoras: Software DSP – HAL GPIO

El módulo HAL GPIO es el encargado de administrar las entradas y salidas de propósito general GPIO del DSP.

Para este trabajo, únicamente se utilizó la salida de propósito general encargada de excitar el altavoz integrado en la tarjeta de control. Los tonos emitidos son de una frecuencia de 5kHz, determinada por la configuración fijada en el módulo HAL Timer que ejecuta este módulo cada 100µS, permitiendo que en cada paso se cambie de estado un pin específico (de alto a bajo y viceversa) completando un ciclo completo en dos pasos.

El módulo cuenta con una función que ordena la emisión de un tono, recibe la duración del tono en décimas de mili segundo y si se debe repetir indefinidamente. Esta última opción genera tonos intermitentes como el usado para la alarma de batería baja.

Mejoras: Software DSP – HAL Serial

En este módulo se sustenta la comunicación del controlador del vehículo con la pantalla LCD y con el software de supervisión en un computador. Su función básica es manejar el periférico de comunicación serial del DSP.

El protocolo de comunicación desarrollado para el vehículo se basa en comandos contenidos en un paquete de datos de 7 bytes, los cuales son interpretados y respondidos por el DSP. En la Tabla 4.2 se muestra una descripción de la estructura de cada comando.

Byte N° Descripción
1 Código de operación
2 Identificador del paquete
3 Byte de información 1
4 Byte de información 2
5 Byte de información 3
6 Byte de información 4
7 Fin de paquete (255)

Tabla 4.2: Estructura del paquete de datos que conforma cada comando

Cada comando posee un código de operación que determina su función, un identificador único para detectar una eventual pérdida de paquetes y 4 bytes destinados al envío y recepción de datos.

Para la administración del puerto serie del DSP se utiliza un enfoque similar al del módulo HAL Instrumentos, con rutinas que evitan cualquier posibilidad de bloqueo utilizando variables marcadores para indicar la ocurrencia de algún evento en vez de esperar por ellos con el sistema detenido.

La recepción de los comandos desde el exterior se hace leyendo byte a byte la información recibida desde el puerto serie hasta completar un comando completo, el cual es almacenado en una cola que puede guardar hasta 4 comandos a la espera de su procesamiento. La interfaz del módulo provee una función que consulta si existe un comando a la espera de ser procesado y otra que lee el primer comando de la cola. Así mismo, implementa también una función que envía las respuestas de los comandos atendidos, eliminándolos de la cola. Este mecanismo conduce a que sólo un comando pueda ser atendido a la vez, evitando ambigüedades en los demás módulos. Si se reciben comandos con la cola llena, serán ignorados.

Cada comando posee un código de operación que determina su función, un identificador único para detectar una eventual pérdida de paquetes y 4 bytes destinados al envío y recepción de datos.

Para la administración del puerto serie del DSP se utiliza un enfoque similar al del módulo HAL Instrumentos, con rutinas que evitan cualquier posibilidad de bloqueo utilizando variables marcadores para indicar la ocurrencia de algún evento en vez de esperar por ellos con el sistema detenido.

La recepción de los comandos desde el exterior se hace leyendo byte a byte la información recibida desde el puerto serie hasta completar un comando completo, el cual es almacenado en una cola que puede guardar hasta 4 comandos a la espera de su procesamiento. La interfaz del módulo provee una función que consulta si existe un comando a la espera de ser procesado y otra que lee el primer comando de la cola. Así mismo, implementa también una función que envía las respuestas de los comandos atendidos, eliminándolos de la cola. Este mecanismo conduce a que sólo un comando pueda ser atendido a la vez, evitando ambigüedades en los demás módulos. Si se reciben comandos con la cola llena, serán ignorados.

Mejoras: Software DSP – Módulo de Comandos

Este módulo de alto nivel tiene por objetivo interpretar y ejecutar los comandos recibidos desde el módulo HAL Serial. Para ello implementa una serie de máquinas de estado que, ayudadas por la estructura de los comandos, distribuyen su decodificación y procesamiento en varios ciclos de ejecución. De esta manera, un único comando tardará varios ciclos de ejecución del programa principal en ser completamente contestado, distribuyendo temporalmente la carga de esta tarea de menor prioridad en la CPU del DSP.

El Módulo de Comandos puede realizar 3 tipos de tareas determinadas por el código de operación del comando recibido: las tareas de lectura de un parámetro desde el vehículo, su escritura o la ejecución de una orden. Se discriminan interpretando los primeros dos bits del código de operación tal como se muestra en la Tabla 4.3.

Código de Operación Tipo de Acción
00XXXXXX No especificada
01XXXXXX Escribir Parámetro
10XXXXXX Leer Parámetro
11XXXXXX Ejecutar Orden

Tabla 4.3: Decodificación básica del código de operación.

Además del procesamiento de comandos individuales, el módulo posee un modo de flujo para ciertos comandos de lectura, en el cual un cliente solicita al DSP el envío de uno o más parámetros de forma continua, permitiendo monitorear en tiempo real variables como las lecturas de los instrumentos, corriente en los motores, etc. En este modo, el Módulo de Comandos enviará en cada ejecución un valor por el puerto serie hasta recibir un nuevo comando, el cual automáticamente detendrá el flujo, cualquiera que este sea.

Figura 4.18: Diagrama de estados del Módulo de Comandos.

En la Figura 4.18 se muestra el diagrama de estados del Módulo de Comandos de forma simplificada. El estado inicial es el de recepción que consulta al módulo HAL Serial por la llegada de algún comando. Luego de la recepción se realiza la decodificación y se deriva a la función correspondiente que terminará de decodificar el comando, realizando la acción específica y devolviendo siempre una respuesta por el puerto serie con el mismo código de operación e identificador para indicar al cliente que su solicitud ha sido atendida. En cada proceso de interpretación es posible pasar al estado de envío de mensaje de error si no se reconoce el código de operación.

Páginas:«12345»

Categorías

Enlaces

Estadísticas


eXTReMe Tracker