<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DsPIC | Prototypage rapide de commande</title><link>https://lubin.kerhuel.eu/fr/tag/dspic/</link><atom:link href="https://lubin.kerhuel.eu/fr/tag/dspic/index.xml" rel="self" type="application/rss+xml"/><description>DsPIC</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Fri, 01 Jan 2021 00:00:00 +0000</lastBuildDate><image><url>https://lubin.kerhuel.eu/media/icon_hu_854b44b36e8700d6.png</url><title>DsPIC</title><link>https://lubin.kerhuel.eu/fr/tag/dspic/</link></image><item><title>On Chip Rapid Control Prototyping for DC motor</title><link>https://lubin.kerhuel.eu/fr/publication/2021-j3ea-rcp-dc-motor/</link><pubDate>Fri, 01 Jan 2021 00:00:00 +0000</pubDate><guid>https://lubin.kerhuel.eu/fr/publication/2021-j3ea-rcp-dc-motor/</guid><description/></item><item><title>On Chip Rapid Control Prototyping for Education</title><link>https://lubin.kerhuel.eu/fr/publication/2020-ifac-rcp-education/</link><pubDate>Wed, 01 Jul 2020 00:00:00 +0000</pubDate><guid>https://lubin.kerhuel.eu/fr/publication/2020-ifac-rcp-education/</guid><description/></item><item><title>Pilote automatique d'avion à voilure fixe basé sur un modèle Simulink</title><link>https://lubin.kerhuel.eu/fr/project/autopilot-plane/</link><pubDate>Sun, 19 May 2019 00:00:00 +0000</pubDate><guid>https://lubin.kerhuel.eu/fr/project/autopilot-plane/</guid><description>&lt;!-- Enable Photo Swipe + gallery features --&gt;
&lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.3/photoswipe.min.css" integrity="sha384-yX+tSqQp3yF8BiTuLLOwNyaqtmZ9yFQT7IYg7U9YU9Dz/JDlh6JJQmNClCmvYl+b" crossorigin="anonymous"&gt;
&lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.3/default-skin/default-skin.min.css" integrity="sha384-R6P/wJIrxjHcm//YCjb0S6rRgebsNn3u6U4NxVI8R03iSPAR5CwPqoq1n6U/tjFE" crossorigin="anonymous"&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.3/photoswipe.min.js" integrity="sha384-jkeJ/ETDRD/P4Y3I3CQi1QIwrEJjR9GdAZV2/aqDwwgA5ldCNiExYJeBwKyQC/+q" crossorigin="anonymous"&gt;&lt;/script&gt;
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/photoswipe/4.1.3/photoswipe-ui-default.min.js" integrity="sha384-HotcxRWS6/oszHPwknjGnd066fV8+ycnO5TXDcOscFWvTtaiCtEEv+9s5Qrn1iJD" crossorigin="anonymous"&gt;&lt;/script&gt;
&lt;div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"&gt;
&lt;div class="pswp__bg"&gt;&lt;/div&gt;
&lt;div class="pswp__scroll-wrap"&gt;
&lt;div class="pswp__container"&gt;
&lt;div class="pswp__item"&gt;&lt;/div&gt;
&lt;div class="pswp__item"&gt;&lt;/div&gt;
&lt;div class="pswp__item"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="pswp__ui pswp__ui--hidden"&gt;
&lt;div class="pswp__top-bar"&gt;
&lt;div class="pswp__counter"&gt;&lt;/div&gt;
&lt;button class="pswp__button pswp__button--close" title="Close (Esc)"&gt;&lt;/button&gt;
&lt;button class="pswp__button pswp__button--share" title="Share"&gt;&lt;/button&gt;
&lt;button class="pswp__button pswp__button--fs" title="Toggle fullscreen"&gt;&lt;/button&gt;
&lt;button class="pswp__button pswp__button--zoom" title="Zoom in/out"&gt;&lt;/button&gt;
&lt;div class="pswp__preloader"&gt;
&lt;div class="pswp__preloader__icn"&gt;
&lt;div class="pswp__preloader__cut"&gt;
&lt;div class="pswp__preloader__donut"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap"&gt;
&lt;div class="pswp__share-tooltip"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)"&gt;
&lt;/button&gt;
&lt;button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)"&gt;
&lt;/button&gt;
&lt;div class="pswp__caption"&gt;
&lt;div class="pswp__caption__center"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="un-pilote-automatique-16-bits-conçu-avec-simulink-et-des-outils-de-prototypage-rapide-de-commande"&gt;Un pilote automatique 16 bits conçu avec Simulink et des outils de prototypage rapide de commande&lt;/h2&gt;
&lt;h3 id="motivation"&gt;Motivation&lt;/h3&gt;
&lt;p&gt;Il est désormais aisé de construire une plateforme destinée à évaluer différentes boucles de commande de pilote automatique, grâce aux nombreux composants à faible coût disponibles. En voici quelques-uns :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Centrale inertielle (IMU) 10 DoF&lt;/strong&gt; : (~$5\ $$),&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carte GPS&lt;/strong&gt; : (~$10\ $$),&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tube de Pitot&lt;/strong&gt; (&lt;a href="https://lubin.kerhuel.eu/post/pitot-build/"&gt;sur mesure&lt;/a&gt;) : (~$20\ $$),&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Carte microcontrôleur&lt;/strong&gt; : dépend de la carte ; repose sur un microcontrôleur à $\approx 5\ $$,&lt;/li&gt;
&lt;li&gt;Plateforme &lt;strong&gt;avion&lt;/strong&gt; : de $60$ à $120\ $$ servos et moteurs inclus.&lt;/li&gt;
&lt;li&gt;Quelques éléments de radiocommande sont également nécessaires :
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;récepteur&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;télécommande&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;batterie&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;quelques éléments optionnels pour l&amp;rsquo;&lt;strong&gt;enregistrement de données&lt;/strong&gt;, la &lt;strong&gt;télémétrie&lt;/strong&gt;, la &lt;strong&gt;caméra&lt;/strong&gt;&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="différences-avec-les-pilotes-automatiques-existants"&gt;Différences avec les pilotes automatiques existants&lt;/h3&gt;
&lt;p&gt;De nombreux pilotes automatiques prêts à l&amp;rsquo;emploi existent et donnent de bons résultats. En voici quelques-uns :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ardupilot.org/" target="_blank" rel="noopener"&gt;Ardupilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://px4.io/" target="_blank" rel="noopener"&gt;PX4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://inavflight.com/" target="_blank" rel="noopener"&gt;iNav&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.librepilot.org/site/index.html" target="_blank" rel="noopener"&gt;LibrePilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.paparazziuav.org/wiki/Main_Page" target="_blank" rel="noopener"&gt;Paparazzi&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;D&amp;rsquo;autres sont listés dans le &lt;a href="https://blog.dronetrest.com/flight-controller-firmware/" target="_blank" rel="noopener"&gt;comparatif de DroneTrest&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;De manière générale, leurs paramètres internes peuvent être réglés. Cependant, l&amp;rsquo;insertion d&amp;rsquo;une boucle de commande personnalisée dans un tel pilote automatique suppose de comprendre la structure du code sous-jacent. Même bien documenté, celui-ci comporte des centaines de fonctions C à examiner avant de pouvoir entreprendre la moindre modification.
Une boucle de commande personnalisée peut ne pas s&amp;rsquo;intégrer dans la structure existante. Il peut être souhaitable de mettre en œuvre un correcteur plus avancé que les PID existants, utiliser une autre fréquence d&amp;rsquo;échantillonnage, etc.&lt;/p&gt;
&lt;p&gt;Il est parfois plus rapide de démarrer un nouveau projet que de réutiliser un projet avancé préexistant.
Le pilote automatique présenté utilise une approche de conception basée sur modèle (Model Based Design, MBD) : le code du pilote automatique est généré à partir d&amp;rsquo;un unique modèle Simulink. Tout se trouve dans le diagramme, de la gestion bas niveau des capteurs jusqu&amp;rsquo;à la synthèse du correcteur. Cette approche MBD est également appelée prototypage rapide de commande (Rapid Control Prototyping, RCP).&lt;/p&gt;
&lt;p&gt;La boucle de commande du pilote automatique utilise des blocs mathématiques standard. La couche bas niveau est assurée par le blockset Microchip, qui gère les périphériques du microcontrôleur. Le blockset UxV donne un accès simple au GPS, à la radiocommande (S.BUS), aux protocoles F.Port et Smart Port, ainsi qu&amp;rsquo;à la messagerie MAVLink, y compris les protocoles de points de passage (Way Point) et de paramètres.
Un tel modèle Simulink permet d&amp;rsquo;« entrer » dans le projet de manière graphique. Il permet de simuler des parties du système à partir d&amp;rsquo;un avion simulé ou à partir de valeurs préalablement enregistrées lors d&amp;rsquo;un vol réel, ce qui est utile pour concevoir des algorithmes de fusion de capteurs avec anticipation (feed-forward).&lt;/p&gt;
&lt;p&gt;Une autre différence essentielle est l&amp;rsquo;utilisation d&amp;rsquo;un microcontrôleur 16 bits, alors que les autres pilotes automatiques utilisent des microcontrôleurs 32 bits. Les dsPIC 16 bits disposent de toutes les ressources nécessaires grâce à leur architecture efficace, qui gère aisément les nombreux périphériques utilisés (UART, I2C, Output Compare, Input Capture&amp;hellip;).&lt;/p&gt;
&lt;p&gt;Signalons toutefois qu&amp;rsquo;une démarche de conception basée sur modèle similaire, utilisant un microcontrôleur dsPIC, a été développée à l&amp;rsquo;UCSC par le Pr G.H. Elkaim dans un projet nommé SLUG. Leur conception est indépendante de celle présentée ici. Le projet original mené par M.I. Lizarraga [SLUG] (&lt;a href="https://slugsuav.soe.ucsc.edu/" target="_blank" rel="noopener"&gt;https://slugsuav.soe.ucsc.edu/&lt;/a&gt;) est disponible en ligne. La version &lt;a href="https://doi.org/10.1155/2018/6892153" target="_blank" rel="noopener"&gt;SLUG II&lt;/a&gt; s&amp;rsquo;appuie sur le même outil que celui utilisé ici pour cibler le dsPIC : le blockset pour microcontrôleurs Microchip (gratuit).&lt;/p&gt;
&lt;h3 id="liste-du-matériel"&gt;Liste du matériel&lt;/h3&gt;
&lt;p&gt;Plusieurs configurations matérielles ont été évaluées. Voici une sélection de composants ayant donné des résultats satisfaisants.&lt;/p&gt;
&lt;link rel="stylesheet" href="https://lubin.kerhuel.eu/css/hugo-easy-gallery.css" /&gt;
&lt;div class="box" style="max-width:80%"&gt;
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"&gt;
&lt;div class="img"&gt;
&lt;img itemprop="thumbnail" src="https://lubin.kerhuel.eu/img/firstar1600-qx7.jpg" loading="lazy" alt="Volantex Firstar 1600 avec la télécommande Qx7."/&gt;
&lt;/div&gt;
&lt;a href="https://lubin.kerhuel.eu/img/firstar1600-qx7.jpg" itemprop="contentUrl"&gt;&lt;/a&gt;
&lt;figcaption data-pre="Figure " data-post=":" class="numbered"&gt;&lt;h4&gt;plateforme du pilote automatique&lt;/h4&gt;
&lt;p&gt;Volantex Firstar 1600 avec la télécommande Qx7.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Avion radiocommandé&lt;/strong&gt; : Volantex Firstar 1600 avec moteurs et servos d&amp;rsquo;origine (Bixler 2 et Ranger 1600 sont des plateformes alternatives)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Télécommande&lt;/strong&gt; : FrSky QX7&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Récepteur&lt;/strong&gt; : FrSky XSR-M / XSR utilisé soit avec le protocole S.Bus (sortie des voies du récepteur) et Smart Port (télémétrie), soit avec le protocole F.Port qui combine S.Bus et Smart Port et économise un périphérique UART du microcontrôleur. Chaque protocole n&amp;rsquo;utilise qu&amp;rsquo;un seul fil, par conséquent une liaison UART en half-duplex. Le module UART du dsPIC permet de regrouper Tx et Rx sur une seule broche.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microcontrôleur&lt;/strong&gt; : dsPIC 33EP sur une carte AUAV V3. Un capteur de mouvement externe est utilisé à la place des capteurs intégrés à l&amp;rsquo;AUAV3. Une petite carte capteur équipée d&amp;rsquo;un circuit récent se fixe plus facilement et rigidement près du centre de gravité (CG), ce qui réduit les vibrations. Une carte sur mesure basée sur un dsPIC pourrait remplacer la carte AUAV3, devenue difficile à se procurer. L&amp;rsquo;UDB5 mini est similaire et reste disponible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Capteur IMU&lt;/strong&gt; : Gy-91 (10 DoF avec 3 accéléromètres, 3 gyromètres, 3 magnétomètres et un baromètre). Fixé rigidement près du CG de l&amp;rsquo;avion. Un bus I2C relie les capteurs au microcontrôleur.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tube de Pitot&lt;/strong&gt; :
&lt;ul&gt;
&lt;li&gt;Un tube intérieur et un tube extérieur sur lequel quatre trous sont percés latéralement.&lt;/li&gt;
&lt;li&gt;Conditionnement du signal : le capteur de pression du tube de Pitot (MP3V 5004 DP) est lu par un convertisseur ADC MCHP qui intègre un amplificateur analogique. La pression convertie est envoyée au microcontrôleur par le bus I2C. Voir la page &lt;a href="https://lubin.kerhuel.eu/post/pitot-build/"&gt;construction et test&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPS&lt;/strong&gt; : basé sur un module $\mu$blox M8N offrant jusqu&amp;rsquo;à 10 Hz de rafraîchissement, avec des résultats satisfaisants par rapport aux autres modules du marché.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enregistreur de données&lt;/strong&gt; : carte OpenLager pour l&amp;rsquo;enregistrement sur carte SD. Elle permet d&amp;rsquo;enregistrer en continu le flux de sortie d&amp;rsquo;une UART à une vitesse allant jusqu&amp;rsquo;à 2 470 000 bauds (bien supérieure aux 115 200 bauds que l&amp;rsquo;enregistreur OpenLog ne peut pas suivre).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Liaison radio&lt;/strong&gt; : module radio de type 3DR Sik pour la télémétrie MAVLink (attitude de l&amp;rsquo;avion, position, points de passage et réglage des paramètres) avec la station sol &lt;a href="https://qgroundcontrol.com/" target="_blank" rel="noopener"&gt;qgroundcontrol&lt;/a&gt; qui fonctionne sur la plupart des plateformes (PC, Android, Windows, Linux).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caméra d&amp;rsquo;action&lt;/strong&gt; : RunCam2 pour filmer l&amp;rsquo;avion et ses gouvernes depuis le dessus ; on observe ainsi le comportement du pilote automatique en fonctionnement.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="box" style="max-width:80%"&gt;
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"&gt;
&lt;div class="img"&gt;
&lt;img itemprop="thumbnail" src="https://lubin.kerhuel.eu/img/autopilot-electronic-sensors-bundle_1.jpg" loading="lazy" /&gt;
&lt;/div&gt;
&lt;a href="https://lubin.kerhuel.eu/img/autopilot-electronic-sensors-bundle_1.jpg" itemprop="contentUrl"&gt;&lt;/a&gt;
&lt;figcaption data-pre="Figure " data-post=":" class="numbered"&gt;&lt;h4&gt;Électronique embarquée. Une des premières configurations destinées à évaluer divers capteurs. Éléments utilisés : récepteur X8R, carte de distribution PDB-XPM, enregistreur de données sur SD OpenLager, microcontrôleur dsPIC 16 bits AUAV3 avec capteurs (MPU6050), carte IMU 1, carte IMU 2, capteur de pression MP3V5004DP pour le tube de Pitot, GPS1, GPS2, batterie LiPo 3S 2200 mAh, émetteur Qx7.&lt;/h4&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h3 id="résultats"&gt;Résultats&lt;/h3&gt;
&lt;p&gt;Un correcteur par modes glissants a été évalué sur les axes de tangage et de roulis, selon deux modes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Commande de la vitesse angulaire de l&amp;rsquo;avion (consigne de vitesse angulaire donnée par la télécommande)&lt;/li&gt;
&lt;li&gt;Commande de l&amp;rsquo;angle d&amp;rsquo;attitude de l&amp;rsquo;avion (consigne d&amp;rsquo;angle donnée par la télécommande)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La charge moyenne du processeur était de 7 à 8 % sur un dsPIC 33EP cadencé à 70 MIPS. Elle inclut l&amp;rsquo;algorithme d&amp;rsquo;estimation de l&amp;rsquo;IMU, la boucle de commande du pilote automatique et toutes les tâches de bas niveau (gestion de divers protocoles (I2C, NMEA pour le GPS, F.Port, MAVLink) et enregistrement des données capteurs à 1 kHz via une UART configurée à 2 470 000)&lt;/p&gt;
&lt;p&gt;Le dispositif a été éprouvé par vent fort. Il met en évidence une robustesse satisfaisante malgré le faible nombre de paramètres réglés jusqu&amp;rsquo;ici (lien vidéo en haut de page).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;estimation de la vitesse air par le tube de Pitot a été validée en prenant la vitesse GPS comme référence (&lt;a href="https://lubin.kerhuel.eu/post/pitot-build"&gt;ici&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;estimation de la vitesse et de la direction du vent, basée sur la différence entre les mesures de vitesse GPS et du tube de Pitot en tenant compte de l&amp;rsquo;orientation de l&amp;rsquo;avion, a été validée.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;étalonnage automatique du décalage et du gain des axes du magnétomètre a été validé. Une fois en vol, les perturbations magnétiques près du sol sont négligeables. Un algorithme détermine automatiquement si l&amp;rsquo;étalonnage peut être affiné avec les données courantes (à partir de données de vol standard, sans looping ni tonneau).&lt;/p&gt;
&lt;h3 id="prochaines-étapes"&gt;Prochaines étapes&lt;/h3&gt;
&lt;p&gt;Réduire le broutement (chattering) sur les ailerons lorsque la commande par modes glissants est activée.&lt;/p&gt;
&lt;p&gt;Valider en vol le réglage des paramètres via le protocole MAVLink.&lt;/p&gt;
&lt;p&gt;Mettre en œuvre le guidage automatique de l&amp;rsquo;avion, à l&amp;rsquo;aide de points de cheminement (waypoints) MAVLink.&lt;/p&gt;
&lt;h3 id="contenu-du-site"&gt;Contenu du site&lt;/h3&gt;
&lt;p&gt;Faute de temps, il n&amp;rsquo;est pas possible de rédiger une description complète du projet comme initialement prévu. Les parties les plus pertinentes seront publiées.&lt;/p&gt;
&lt;p&gt;Idées à développer :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IMU&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lubin.kerhuel.eu/post/pitot-build/"&gt;Tube de Pitot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://lubin.kerhuel.eu/post/pitot-build/#wind-estimation"&gt;Estimation du vent&lt;/a&gt; combinant la vitesse sol GPS et la vitesse air du tube de Pitot&lt;/li&gt;
&lt;li&gt;Blocs UxV, dont les blocs et fonctionnalités GPS, radiocommande et MAVLink&lt;/li&gt;
&lt;li&gt;Étalonnage automatique des magnétomètres&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>