Estos meses he estado muy ocupado en el desarollo de la placa de control para motor de corriente continua, en su versión renovada:
http://foro.metalaficion.com/index.php?topic=30963.new;topicseen#newSin embargo, también he llevado a cabo algunas mejoras en este proyecto que, espero, me permitan darlo por cerrado. Han sido las siguientes:
1- Acceso al puerto serie, usando el DMA (acceso directo a memoria (DMA, del inglés direct memory access ).
2- Sustitución del reloj del sistema operativo que se usa por defecto (systick), por un temporizador.
3- Control exacto de tiempos entre dos envíos de comandos a través del bus SPI.Como todo esto suena demasiado técnico
, vamos a explicarlo un poco:
1- Acceso al puerto serie, usando el DMA (acceso directo a memoria (DMA, del inglés direct memory access ).Normalmente, la CPU del micro-controlador es quien gestiona los envíos a través del puerto serie. Este trabajo conlleva una importante sobrecarga para la CPU, que tiene que cargar registros y controlar "flags" durante el envío de cada uno de los byte. Y mientras hace esto, no puede hacer otras cosas...!
La solución es utilizar un periférico que libera de trabajo a la CPU. De esta forma, la CPU entregará el dato a enviar al DMA, y se olvidará del asunto. Así se libera tiempo para atender a otras tareas, y la gestión del sistema será más eficiente.
2- Sustitución del reloj del sistema operativo que se usa por defecto (systick), por un temporizador.Estos micro-controladores tan potentes, se utilizan con un sistema operativo específico, para sistemas embebidos, llamados RTOS (Real Time Operating Systems) de forma general.
El sistema operativo necesita un reloj para funcionar, y se suele usar el temporizador systick que viene incluido en todos los ARM. Sin embargo, se puede ir más allá, y emplear un temporizaor de uso dedicado exclusivamente a esta tarea, para obtener tiempos más precisos. Esta es la mejora que he incluido, y que el fabricante del chip recomienda hacer.
3- Control exacto de tiempos entre dos envíos de comandos a través del bus SPI.En este proyecto, un micro-controlador ARM Cortex M4 se comunica a través de un bus SPI con otros cuatro micro-controladores especializados en controlar motores paso a paso.
Y aquí surge un posible problema, ya que el ARM Corex M4 es mucho más rápido que los otros micrro-procesadores. Por ello, puede ocurrir que les envíe los comandos demasiado seguidos, sin un cierto tiempo de decalaje, que permita a los micro-controladores más lentos, procesar los comandos que le van llegando.
El fabricante de estos micro-controladores nos dice en su hoja de datos, que es necesario un decalaje de 625 nano-segundos para poder procesar los comandos entrantes.
Con esta modificación en mi código, he asegurado que siempre se va a cumplir un decalaje suficiente, que yo he fijado en 1 mili-segundo.
Pruebas de validación:Es necesario validar cualquier cambio, antes de considerar la nueva versión del software, como una versión estable.
Para ello, he ejecutado varios bucles de comunicaciones Móvil Android--Placa PCB de control CNC.
En estos bucles, que llegan a ser de muchas horas, se intercambian hasta un millón 1.000.000 de mensajes entre ambos dispositivos, sin pausas. Una forma habitual de llevarlos a cabo es dejar el sistema trabajando toda la noche, o incluso todo el día.
Documentación del proyecto:He revisado el formato de las cabeceras de archivos de programa y de las funciones, para que el paquete software especializado:
www.doxygen.orgpueda generar una documentación completa en formato HTML que nos permita navegar de un enlace a otro, por toda la documentación del proyecto.