Generador de valores para las funciones trigonométricas seno y coseno con precisión de decimales seleccionables - GenesisDCarmen/Seno_Coseno_Decimales GitHub Wiki

Introducción La trigonometría es básicamente el cálculo de triángulos, específicamente las relaciones entre los lados y los ángulos de un triángulo. El triángulo es la figura más básica que se puede construir: un cuadrado, un pentágono o incluso un polígono se pueden dividir en triángulos. El cálculo del coseno se originó con el teorema de Pitágoras, dicho teorema determina la relación existente entre los lados de un triángulo rectángulo. Por tal motivo el cálculo del coseno también es llamado teorema de Pitágoras generalizado. En este proyecto se plantea solucionar el problema de precisión al calcular el seno y coseno. Ya que tiene varias aplicaciones en aeronáutica. Se emplean las funciones trigonométricas de seno y coseno para calcular el acenso y descenso vertical de un avión, así como la triangulación de distancias en el GPS. Los topógrafos dividen la tierra en triángulos marcando cada ángulo como un punto de referencia. Gracias al cálculo trigonométrico se descubrió en 1852 que el monte Himalaya era la montaña más grande del mundo. Desarrollo La propuesta de este proyecto es crear un programa en lenguaje C adaptado a un MSP430F5529 para generar los resultados de las funciones trigonométricas de seno y coseno aplicando los conocimientos adquiridos en la clase de lenguaje ensamblador para el programa de posgrado de sistemas inteligentes y multimedia. Para esto se realizará una investigación sobre el cálculo necesario para obtener el resultado más preciso de las funciones trigonométricas de seno y coseno. También se investigará como generar la posición seleccionable de posición de decimales. El objetivo general es aplicar los conocimientos adquiridos en la clase de lenguaje ensamblador para el programa de posgrado de sistemas inteligentes y multimedia, en el que se genere un programa en lenguaje C para generar el cálculo de seno y coseno usando un microcontrolador MSP430. Los objetivos específicos son: Realizar un estado del arte en el cálculo del seno y coseno. Realizar la comunicación del microcontrolador mediante una terminal UART. Realizar una función en la que se puedan ajustar el número de decimales proporcionados mediante la terminal UART.

Figura 1 Para este proyecto se emplearon los siguientes programas: Code Compose Studio, Real Term y MATLAB. El lenguaje empleado en el programa es el lenguaje C. En dicho programa se realiza la configuración para realizar la comunicación con la consola UART. Se configura la interrupción por el módulo USCI para detectar las variables que se esperan de la consola UART. Las variables son “A” y “D”. Cuando el programa detecta la letra A, se manda a llamar la función donde se encuentra el valor del ángulo. Cuando el programa detecta la letra D, se manda a llamar la función donde se encuentran los valores de los decimales (Figura 1). Para realizar la configuración UART es importante conocer el puerto COM al que se encuentra enlazado el microcontrolador y la tasa de baudios correcta. Esto se puede verificar mediante el administrador de dispositivos. En este proyecto se utilizó el puerto COM 6 y una tasa de 115,200 baudios.

Figura 2 Para la realización de pruebas se empleó RealTerm en donde se ingresó la configuración del puerto. Es importante abrir el puerto antes de realizar las pruebas y cerrar el puerto al finalizar, ya que esto puede crear conflictos al momento de ver los resultados en MATLAB. Al enviar los caracteres A y D se comprobó con RealTerm que se estaban recibiendo los datos esperados.

Figura 3 Lo siguiente es procesar los datos realizando las funciones de seno y coseno. Para poder realizar este cálculo se empleó la serie de Taylor y la serie de Laurent para crear esta precisión en los datos. La serie de Taylor es una fórmula para la precisión de funciones a través de una serie de potencias y suma. Cuando la serie se centra en el punto cero se le llama serie de McLaurin. y=Sen(0)+Cos(0)/1! x+(-Sen(0))/2! x^2+Cos(0)/3! x^3+Sen(0)/4! x^4+⋯ Figura 4. Serie de Taylor. y=Cos(0)+(-Sen(0))/1! x+(-Cos(0))/2! x^2+(Sen(0))/3! x^3+⋯ Figura 5. Serie de McLaurin. y=1/1! x+(-1)/3! x^3+1/5! x^5+(-1)/7! x^7+1/9! x^9+⋯ Figura 6. Serie de Taylor adaptada al cálculo de seno. y=1+(-1)/2! x^2+1/4! x^4+(-1)/6! x^6+⋯ Figura 7. Serie de McLaurin adaptada al cálculo de coseno. Para el cálculo de seno se empleó la serie de Taylor en donde se descartan todos los cálculos que contienen un número factorial par. Para el cálculo de coseno se empleó la serie de McLaurin donde se descartan todos los cálculos que contienen un número factorial non. Por lo que al convertir las ecuaciones a código se obtienen resultados de precisión dinámica que cambian y se adoptan a lo que el usuario ingresa. El programa ingresa la letra A, captura el valor del ángulo. Después el programa ingresa la letra D y captura el valor de los decimales. El valor de los decimales se multiplica por dos en el cálculo de seno y coseno, pero se suma uno cuando es seno para garantizar que siempre se obtendrán números nones. El valor del ángulo se convierte a radianes multiplicando el ángulo por π (Pi) entre 180. En el cálculo de seno se inicializa el valor de coseno en uno para garantizar que el primer número sea menos uno, cuando se multiplica por menos uno. Y en el caso de coseno se inicializa el valor en menos uno para que al ser multiplicado el valor sea positivo. De acuerdo con el número de decimales, el cálculo será más preciso o menos preciso. A continuación, se muestran dos ejemplos, en donde realiza una precisión de 5 decimales y el siguiente una precisión de 40 decimales.

Figura 8. Precisión de decimales de cinco contra una precisión de 40 decimales.  Conclusiones Realizar esta última práctica muy mucho más difícil de lo que se planteaba en un inicio. Ya que hubo muchas complicaciones para realizar el cálculo con números tan grandes en el microprocesador. Aunque se trató de implementar el método arbitrario en el MSP430 no se encontró una forma adecuada de obtener resultados con decimales. Por lo que finalmente se optó por usar MATLAB como alternativa para el cálculo de decimales. El problema más frecuente al usar el puerto COM fue que cuando el programa fallaba el puerto permanecía abierto, por lo que una solución que se encontró fue cerrar MATLAB para después abrir el programa de nuevo. De esta forma se ahorra tiempo tratando de configurar otro puerto COM para el microcontrolador. En lo personal disfrute mucho de esta práctica por lo que mucho que me aprendí de las series Taylor y McLaurin, así como el proceso de convertirlas en código. Comprobar que realizar un proyecto complejo no es imposible, sólo se necesita dedicación y voluntad. A pesar de no haber cumplido con las expectativas iniciales considero que con los conocimientos que adquirí en la clase podría implementar en un futuro el método arbitrario en el microcontrolador. Sólo necesito investigar más sobre este método y seguir codificando hasta llegar al resultado deseado a través de prueba y error. Por lo que esta experiencia y el tiempo invertido no fueron vano, al contrario me acerca más a mi resultado deseado. Para la demostración de la práctica se puede consultar el siguiente vídeo en YouTube. Referencias consultadas [1] J. Liske, «A hypothetical cosmological test: Trigonometry on large scales,» Astronomy & Astrophysics, vol. 398, pp. 429-433, 2003. [2] D. D. P. Stern, «Goddard Space Flight Center,» NASA, 13 Diciembre 2001. [En línea]. Available: https://pwg.gsfc.nasa.gov/stargaze/Mtrig4.htm. [3] D. D. P. Stern, «Goddard Space Flight Center,» NASA, 13 Diciembre 2001. [En línea]. Available: https://pwg.gsfc.nasa.gov/stargaze/Mtrig1.htm. [4] K. H. Lee, J. W. Lee, . K. S. Kim y D. J. Ki, «Tooth brushing Pattern Classification using Three-Axis Accelerometer and Magnetic Sensor for Smart Toothbrush,» de 2007 29th Annual International Conference of the IEEE Engineering in Medicine and Biology Society, 2007. [5] M. Vorobyov y I. Galkin, «Optimizing of sampling in a low-cost single-phase instantaneous AC-grid synchronization unit with discrete calculation of derivative function,» de Industrial Electronics Society, IECON 2015-41st Annual Conference of the IEEE, 2015. [6] P. Yun Hao, M. Peng Fei y G. Run Zhou a, «Design and Implementation of a Rotary Inverted Pendulum Using Model-Based Design,» de Advanced Materials Research, 2014. [7] R. Cantoral, «Pensamiento y lenguaje variacional en la introducción y análisis,» Epsilon, vol. 42, nº 14, p. 3, 1998. [8] A. Morales, Resignificación de la Serie de Taylor en una situación de modelación del movimiento: de la predicción del movimiento a la analiticidad de las funciones, 2013.