{"id":2581,"date":"2011-04-05T17:21:29","date_gmt":"2011-04-05T21:51:29","guid":{"rendered":"http:\/\/blog-j.marcano.net.ve\/?p=2581"},"modified":"2017-03-27T16:35:33","modified_gmt":"2017-03-27T20:35:33","slug":"utilizando-la-libreria-pid-de-microchip-para-dspics","status":"publish","type":"post","link":"https:\/\/blog-j.marcano.net.ve\/index.php\/2011\/04\/05\/utilizando-la-libreria-pid-de-microchip-para-dspics\/","title":{"rendered":"Utilizando la libreria de Microchip para dsPICs: controlador PID"},"content":{"rendered":"<p>Los dsPIC son <a href=\"http:\/\/en.wikipedia.org\/wiki\/Digital_Signal_Controller\" target=\"_blank\">DSC<\/a>, ello significa que combinan las caracter\u00edsticas de un <a href=\"http:\/\/es.wikipedia.org\/wiki\/Microcontrolador\" target=\"_blank\">MCU<\/a> junto a las bondades de un <a href=\"http:\/\/es.wikipedia.org\/wiki\/Procesamiento_digital_de_se%C3%B1ales\">DSP<\/a>,\u00a0 se caracterizan fundamentalmente por la prescencia de A\/D r\u00e1pidos (incluso con <a href=\"http:\/\/es.wikipedia.org\/wiki\/Acceso_directo_a_memoria\" target=\"_blank\">DMA<\/a> en la familia 33f), presencia\u00a0 de m\u00f3dulos especializados de PWM, y enfocados principalmente a la necesidad de operaciones matem\u00e1ticas c\u00edclicas a alta velocidad sobre todo en aplicaciones com\u00fanmente denominadas\u00a0 de \u00a8<a href=\"http:\/\/es.wikipedia.org\/wiki\/Tiempo_real\" target=\"_blank\">tiempo real<\/a>\u00a8, en fin: los DSC son muy vers\u00e1tiles, aunque la limitante a su uso y tal ves por ello su poca popularidad es:<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Como todo micro nuevo <strong>requiere cierto tiempo de aprendizaje<\/strong>, y tal vez su uso no se justifique en la mayor\u00eda de aplicaciones, siendo tal vez m\u00e1s conveniente el uso de la familia de PICs 24 (muy vers\u00e1til y funcional) o incluso uC m\u00e1s econ\u00f3micos si es que ya se ha acostumbrado, sin embargo la familia de PIC24 utiliza el mismo compilador C30 de MICROCHIP y la mayor\u00eda de m\u00f3dulos del los dsPICs guardan muchas similitudes con los uC de la familia de PICs 24 por lo que el salto de PICs 24 a dsPICs no resulta para nada complicado.<\/p>\n<p>&#8211;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>El costo es obviamente mayor para el dsPIC<\/strong>.aunque a veces resulta contradictorio que uC de la familia 18 con un rendimiento mucho menor, m\u00f3dulos menos vers\u00e1tiles y a su vez complicados de configurar, con mayores limitantes y de solo 8 bits tengan costos iguales e incluso mayores que los de familias de microcontroladores m\u00e1s vers\u00e1tiles e incluso m\u00e1s sencillos de programar como la familia 24, al menos en el super-limitado mercado nacional.<\/p>\n<p>La familia de PIC24 comparte junto a los dsPIC el mismo compilador C30 ofrecido por microchip que en su versi\u00f3n acad\u00e9mica puede dar resultados m\u00e1s que satisfactorios, con la t\u00edpica posibilidad de incluir c\u00f3digo en assembler si se considerase necesario. En f\u00edn cuesti\u00f3n de opiniones, de probar y comparar.<\/p>\n<p style=\"text-align: center;\"><a title=\"Algunos algoritmos disponibles en la libreria para dsPIC.\" href=\"http:\/\/www.microchip.com\/stellent\/idcplg?IdcService=SS_GET_PAGE&amp;nodeId=1406&amp;dDocName=en023598\"><img loading=\"lazy\" class=\"aligncenter\" src=\"https:\/\/www.dropbox.com\/s\/gd0od1w3a2uuw5p\/CropperCapture%5B1%5D.jpg?dl=1\" alt=\"\" width=\"458\" height=\"453\" \/><\/a><\/p>\n<p><strong>Dejando ya de lado esta peque\u00f1a introducci\u00f3n vayamos al grano y al verdadero motivo de este art\u00edculo:<\/strong><\/p>\n<p>Como utilizar un dsPIC para implementar un controlador PID?<\/p>\n<p>La respuesta es simple: microchip nos brinda una librer\u00eda de algoritmos que permite hacerlo haciendo uso del motor DSP y brinda el c\u00f3digo fuente por lo que la podemos modificar si se nos antoja.<\/p>\n<p>Es solo una de las muchas librer\u00edas que se incluyen junto al compilador C30, que como dijimos tiene un \u00fanico prop\u00f3sito: aumentar la velocidad de las operaciones matem\u00e1ticas. Entonces si deseamos implementar un PID con un dsPIC no es lo mas eficiente el uso del c\u00e1lculo del controlador utilizando las instrucciones MCU (aunque no por ello inv\u00e1lido),pero un programa m\u00e1s eficiente debe hacer uso del motor DSP que lo disminuir\u00e1 el tiempo ocioso de nuestro microcontrolador dej\u00e1ndolo libre para ejecutar otras tareas, despues de todo debemos sacarle el jugo al DSC y ello no resulta tan dif\u00edcil:<\/p>\n<p>La verdad es que aqu\u00ed no hay ning\u00fan misterio, aparece documentaci\u00f3n acerca del uso de la librer\u00eda\u00a0 en varios trabajos publicados en la red, en varios foros y en los documentos de microchip que suelen tener muchas versiones y la intenci\u00f3n de este post es condensar un poco esa informaci\u00f3n.<\/p>\n<p>Es necesario acotar que todos los archivos necesarios est\u00e1n en la carpeta del compilador C30 que ya deberia haber instalado, explore en la carpeta de instalaci\u00f3n: los siguientes archivos y a\u00f1\u00e1delos a tu proyecto en el MPLAB, o utilice el \u00a8Linker script\u00a8 que viene con el ejemplo <a href=\"https:\/\/www.dropbox.com\/s\/9wy7resi2upahed\/CE019_PID.zip?dl=1\" target=\"_blank\">CE019_PID<\/a> que a fin de cuentas es el que explica claramente con un ejemplo como se emplea la librer\u00eda y que archivo debe a\u00f1adir y en general todas las instrucciones a seguir.<\/p>\n<p>El documento <a href=\"https:\/\/www.dropbox.com\/s\/0xh295tw2o8ooyf\/16Bit_Language_Tool_Libraries.pdf?dl=1\" target=\"_blank\">16Bit_Language_Tool_Libraries<\/a> Chapter 2&#8211;&gt; control functions , brinda una introducci\u00f3n muy did\u00e1ctica y condensada acerca de los PID, y explica con m\u00e1s detalle las 4 funciones en lenguaje C para implementar el PID, indicando inclusive el numero de ciclos que toma la ejecuci\u00f3n de cada funci\u00f3n.<\/p>\n<p>Con estos 2 documentos deber\u00eda ya poder empezar!<\/p>\n<p><strong>Como comentario adicional:<\/strong><\/p>\n<p>No olvide incluir la cabecera &lt;<a href=\"https:\/\/www.dropbox.com\/s\/f27azwfwuqqxb79\/dsp.h?dl=1\" target=\"_blank\">dsp.h<\/a>&gt;\u00a0 (echele un ojo al final del c\u00f3digo) aunque personalmente prefiero en cualquier proyecto incluir todos los archivos de c\u00f3digo fuente y cabeceras dentro de la carpeta del proyecto en el MPLAB.<\/p>\n<p>Para mayor informaci\u00f3n a\u00fan nada mejor que revisar y estudiar un poco el c\u00f3digo fuente de la funciones para PID que est\u00e1 escrito en assembler y est\u00e1 contenido en el archivo <a href=\"https:\/\/www.dropbox.com\/s\/wkpmcbpy01tudek\/pid.s?dl=1\" target=\"_blank\">PID.s<\/a>, n\u00f3tese el uso de las instrucci\u00f3n MAC (multiplica y acumula) propia de los DSP. Las instrucciones en assembler para el dsPIC est\u00e1n <a href=\"https:\/\/www.dropbox.com\/s\/1v1ndzir5dthxgr\/assembler.pdf?dl=1\" target=\"_blank\">aqu\u00ed<\/a>.<\/p>\n<p>Tambi\u00e9n es necesario el archivo dspcommon.INC<\/p>\n<p>Para el uso de las instrucciones DSP es necesario estar claro con el uso de n\u00fameros fraccionales de 16 bits, tambi\u00e9n conocido como formato Q15, no es m\u00e1s que numeraci\u00f3n de \u00a8punto fijo\u00a8 (en analog\u00eda a punto flotante) pues la librer\u00eda y el motor DSP emplea este formato. Para documentarse mejor acerca del formato Q15 revise en este este documento, es otra versi\u00f3n del documento \u00a8<a href=\"http:\/\/ww1.microchip.com\/downloads\/en\/DeviceDoc\/51456G.pdf\" target=\"_blank\">16 bit lenguaje tools<\/a>\u00a8, tambi\u00e9n tocan bien el tema en este <a href=\"http:\/\/www.taringa.net\/posts\/ebooks-tutoriales\/3871324\/DsPIC-Diseno-practico-de-aplicaciones.html\" target=\"_blank\">libro<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los dsPIC son DSC, ello significa que combinan las caracter\u00edsticas de un MCU junto a las bondades de un DSP,\u00a0 se caracterizan fundamentalmente por la prescencia de A\/D r\u00e1pidos (incluso con DMA en la familia 33f), presencia\u00a0 de m\u00f3dulos especializados de PWM, y enfocados principalmente a la necesidad de operaciones matem\u00e1ticas c\u00edclicas a alta velocidad [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[9,5],"tags":[95],"_links":{"self":[{"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/posts\/2581"}],"collection":[{"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/comments?post=2581"}],"version-history":[{"count":27,"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/posts\/2581\/revisions"}],"predecessor-version":[{"id":3958,"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/posts\/2581\/revisions\/3958"}],"wp:attachment":[{"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/media?parent=2581"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/categories?post=2581"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog-j.marcano.net.ve\/index.php\/wp-json\/wp\/v2\/tags?post=2581"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}