<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rapid Prototyping | Prototypage rapide de commande</title><link>https://lubin.kerhuel.eu/fr/tag/rapid-prototyping/</link><atom:link href="https://lubin.kerhuel.eu/fr/tag/rapid-prototyping/index.xml" rel="self" type="application/rss+xml"/><description>Rapid Prototyping</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Mon, 01 Jul 2019 00:00:00 +0000</lastBuildDate><image><url>https://lubin.kerhuel.eu/media/icon_hu_854b44b36e8700d6.png</url><title>Rapid Prototyping</title><link>https://lubin.kerhuel.eu/fr/tag/rapid-prototyping/</link></image><item><title>Boîte à outils UxV</title><link>https://lubin.kerhuel.eu/fr/uxv/</link><pubDate>Mon, 01 Jul 2019 00:00:00 +0000</pubDate><guid>https://lubin.kerhuel.eu/fr/uxv/</guid><description>&lt;h2 id="vue-densemble"&gt;Vue d&amp;rsquo;ensemble&lt;/h2&gt;
&lt;p&gt;La boîte à outils UxV pour Matlab/Simulink fournit des scripts Matlab et des blocs Simulink pour les drones (UAV) pour traiter le protocole MAVLink, le GPS, les récepteurs RC et les protocoles de télémétrie.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scripts Matlab pour l&amp;rsquo;analyse des données après vol (MAVLink).&lt;/li&gt;
&lt;li&gt;Blocs Simulink pour concevoir un pilote automatique à partir d&amp;rsquo;un modèle (prototypage rapide des commandes avec Simulink).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces outils de conception et d&amp;rsquo;analyse fondés sur un modèle accélèrent les allers-retours entre les essais expérimentaux et la simulation.&lt;/p&gt;
&lt;h2 id="scripts-matlab-pour-mavlink"&gt;Scripts Matlab pour MAVLink&lt;/h2&gt;
&lt;p&gt;Trois scripts principaux permettent de décoder les messages MAVLink, de créer un modèle Simulink de simulation à partir des données enregistrées, et de générer la trace de la trajectoire sur une carte à partir des messages GPS.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Script&lt;/th&gt;
&lt;th&gt;Entrée&lt;/th&gt;
&lt;th&gt;Sortie&lt;/th&gt;
&lt;th&gt;Fonction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;(1) &lt;em&gt;mavlink2mat&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Journal Mavlink&lt;/td&gt;
&lt;td&gt;.mat&lt;/td&gt;
&lt;td&gt;analyse dans Matlab&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(2) &lt;em&gt;mavlink2simulink&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Journal Mavlink&lt;/td&gt;
&lt;td&gt;.mat / .mdl (.slx)&lt;/td&gt;
&lt;td&gt;simulation à partir de données réelles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(3) &lt;em&gt;mavlink2kml&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Journal Mavlink&lt;/td&gt;
&lt;td&gt;.kml&lt;/td&gt;
&lt;td&gt;tracé de la ou des traces GPS sur une carte&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;mavlink2gui&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Journal Mavlink&lt;/td&gt;
&lt;td&gt;GUI&lt;/td&gt;
&lt;td&gt;exploration graphique d&amp;rsquo;un journal MAVLink&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Le script &lt;em&gt;mavlinkgui&lt;/em&gt; ouvre une interface graphique (GUI) pour explorer les données MAVLink. Il liste les messages MAVLink présents dans un fichier journal et trace les {message - valeur} sélectionnés. Le script de tracé est personnalisable : l&amp;rsquo;utilisateur peut ainsi aller au-delà d&amp;rsquo;un simple tracé. L&amp;rsquo;interface donne accès aux trois scripts mentionnés ci-dessus.&lt;/p&gt;
&lt;h2 id="blocs-simulink"&gt;Blocs Simulink&lt;/h2&gt;
&lt;p&gt;10 blocs ajoutés apportent les fonctions essentielles d&amp;rsquo;un UAV pour mettre en œuvre un pilote automatique sur un DSC dsPIC. Ces blocs complètent les blocs MPLAB pour Simulink de Microchip, qui fournissent les blocs de périphériques pour la génération de code. Ils s&amp;rsquo;appuient sur MathWorks Embedded Coder. Les fonctions ajoutées sont les suivantes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPS
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;GPS Parser&lt;/em&gt; pour décoder les messages NMEA&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MATH
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Quaternion to Cardan FxPt&lt;/em&gt; pour convertir un quaternion en angles de Cardan en virgule fixe (similaires aux angles d&amp;rsquo;Euler)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;MAVLink :
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;SEND&lt;/em&gt; (envoyer un message)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;RECEIVE&lt;/em&gt; (recevoir un message)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;MAVLink Data&lt;/em&gt; (données de points de passage)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;MAVLink Parser&lt;/em&gt; (décode le message d&amp;rsquo;entrée et met en œuvre les protocoles WayPoint&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; et Parameter&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="block-receiver-telemetry"&gt;Récepteurs-Télémétrie&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;S.BUS&lt;/em&gt; reçoit les canaux RC&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Smart Port&lt;/em&gt; envoie les valeurs de télémétrie&lt;/li&gt;
&lt;li&gt;&lt;em&gt;F.Port&lt;/em&gt; reçoit les canaux RC + envoie la télémétrie&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sensor for Smart.Port or F.Port&lt;/em&gt; définit les valeurs à envoyer par télémétrie&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;À l&amp;rsquo;exception du bloc MATH, ces blocs se connectent généralement aux blocs UART Rx/Tx du dsPIC pour envoyer ou recevoir le flux de données d&amp;rsquo;un GPS, d&amp;rsquo;un récepteur ou d&amp;rsquo;une liaison radio.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;Ces blocs sont développés par Lubin Kerhuel et diffusés gratuitement avec les &lt;a href="https://www.mathworks.com/matlabcentral/fileexchange/71892-mplab-device-blocks-for-simulink" target="_blank" rel="noopener"&gt;MPLAB device blocks for Simulink&lt;/a&gt; de Microchip.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Installer les MPLAB Device Blocks de Microchip&lt;/li&gt;
&lt;li&gt;Saisir &lt;em&gt;pinInfo&lt;/em&gt;, puis cliquer sur &lt;em&gt;go to Third Part Tools folder&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Exécuter le script &lt;em&gt;UxV_Blockset_Installer.p&lt;/em&gt; dans le dossier UxV_blockset.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Le &lt;em&gt;protocole Way Point&lt;/em&gt; sert à définir et à lire des points de passage (WayPoint) depuis une station au sol compatible MAVLink.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:2"&gt;
&lt;p&gt;Le &lt;em&gt;protocole Parameter&lt;/em&gt; règle, depuis n&amp;rsquo;importe quelle station au sol MAVLink, les paramètres ajustables de Simulink, habituellement modifiés avec l&amp;rsquo;External Mode ou lors d&amp;rsquo;une simulation Processor In the Loop (PIL).&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="fn:3"&gt;
&lt;p&gt;Le bloc &lt;em&gt;Sensor for Smart.Port or F.Port&lt;/em&gt; s&amp;rsquo;utilise avec le bloc &lt;em&gt;Smart Port&lt;/em&gt; ou le bloc &lt;em&gt;F.Port&lt;/em&gt;. Ces protocoles renvoient des paquets de télémétrie vers l&amp;rsquo;interface de la radiocommande (RC). Il est ainsi possible d&amp;rsquo;émuler aisément des capteurs Frsky (tension et courant de batterie, variomètre, vitesse air, GPS) et d&amp;rsquo;ajouter des fonctions à la radiocommande. Il est également possible d&amp;rsquo;émuler la télémétrie BetaFlight. Utilisés avec un script LUA, ils ajoutent des fonctions telles que l&amp;rsquo;horizon artificiel, la vitesse air, la vitesse verticale, la distance au point de départ et d&amp;rsquo;autres fonctions (évalué avec les &lt;a href="https://github.com/yaapu/FrskyTelemetryScript/wiki" target="_blank" rel="noopener"&gt;scripts LUA yaapu&lt;/a&gt;).&amp;#160;&lt;a href="#fnref:3" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>bloc récepteur &amp; télémétrie : S.BUS, Smart Port, F.Port</title><link>https://lubin.kerhuel.eu/fr/uxv/block-receiver-telemetry/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lubin.kerhuel.eu/fr/uxv/block-receiver-telemetry/</guid><description>&lt;!-- Enable Photo Swipe + gallery features --&gt;
&lt;p&gt;Trois blocs ajoutent la prise en charge de trois protocoles présents sur les récepteurs. Un récepteur traditionnel à sortie PWM se traite directement avec le périphérique Input Capture ou Change Notification : il n&amp;rsquo;exige pas de bloc spécifique.&lt;/p&gt;
&lt;h2 id="sbus-smart-port-et-fport"&gt;S.BUS, Smart Port et F.Port&lt;/h2&gt;
&lt;p&gt;S.BUS, Smart Port (également appelé S.Port) et F.Port sont trois protocoles disponibles sur les récepteurs RC FrSky et compatibles. Les trois protocoles reposent sur le périphérique UART avec des réglages différents. Chacun remplit un rôle propre :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;S.BUS&lt;/strong&gt; est un protocole unidirectionnel du récepteur vers un équipement externe, qui fournit les valeurs des canaux et le RSSI&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; (c.-à-d. la qualité de la liaison radio).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smart Port (S.Port)&lt;/strong&gt; est un protocole bidirectionnel. Le récepteur interroge (ping) les différents capteurs connectés et acquiert les mesures à envoyer par télémétrie à la radiocommande.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;F.Port&lt;/strong&gt; est un protocole bidirectionnel dans lequel le récepteur communique les valeurs des canaux et le RSSI, et obtient les valeurs des capteurs connectés pour les envoyer par télémétrie à la radiocommande.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les deux protocoles bidirectionnels &lt;em&gt;Smart Port&lt;/em&gt; et &lt;em&gt;F.Port&lt;/em&gt; utilisent un seul fil pour Tx et Rx. La communication s&amp;rsquo;effectue en mode half duplex (semi-duplex).&lt;/p&gt;
&lt;p&gt;Les récepteurs FrSky existent en deux variantes (modèles livrés avec le Smart Port : x4r, rx4r, x6r, s6r, rx6r, x8r, s8r, xsr, xsr-m, r-xsr &amp;hellip;) :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;S.Bus &amp;amp; Smart Port&lt;/strong&gt; (d&amp;rsquo;origine), disponibles sur deux ports à trois broches distincts&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;F.Port&lt;/strong&gt; disponible sur un unique port à trois broches, qui remplace le Smart Port&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Un récepteur d&amp;rsquo;origine possède deux ports : S.BUS et Smart Port. Le passage à un F.Port unique s&amp;rsquo;effectue en installant un micrologiciel alternatif fourni par &lt;a href="https://www.frsky-rc.com/" target="_blank" rel="noopener"&gt;FrSky&lt;/a&gt;. Ce micrologiciel supprime le port S.BUS et convertit le Smart Port en F.Port.&lt;/p&gt;
&lt;h3 id="réglages-uart-et-mise-en-œuvre"&gt;Réglages UART et mise en œuvre&lt;/h3&gt;
&lt;p&gt;S.BUS, S.Port et F.Port ont des réglages UART différents, définis dans le tableau :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th style="text-align: center"&gt;Débit (baud)&lt;/th&gt;
&lt;th style="text-align: center"&gt;Duplex&lt;/th&gt;
&lt;th style="text-align: center"&gt;Logique&lt;/th&gt;
&lt;th style="text-align: center"&gt;Parité&lt;/th&gt;
&lt;th style="text-align: center"&gt;Bits de stop&lt;/th&gt;
&lt;th style="text-align: center"&gt;Contrôle de flux&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S.BUS&lt;/td&gt;
&lt;td style="text-align: center"&gt;100000&lt;/td&gt;
&lt;td style="text-align: center"&gt;Rx seul&lt;/td&gt;
&lt;td style="text-align: center"&gt;3,3V inversée&lt;/td&gt;
&lt;td style="text-align: center"&gt;paire&lt;/td&gt;
&lt;td style="text-align: center"&gt;2&lt;/td&gt;
&lt;td style="text-align: center"&gt;non&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smart Port&lt;/td&gt;
&lt;td style="text-align: center"&gt;57600&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;Half&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;3,3V inversée&lt;/td&gt;
&lt;td style="text-align: center"&gt;aucune&lt;/td&gt;
&lt;td style="text-align: center"&gt;1&lt;/td&gt;
&lt;td style="text-align: center"&gt;non&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F.Port&lt;/td&gt;
&lt;td style="text-align: center"&gt;115200&lt;/td&gt;
&lt;td style="text-align: center"&gt;&lt;strong&gt;Half&lt;/strong&gt;&lt;/td&gt;
&lt;td style="text-align: center"&gt;3,3V inversée&lt;/td&gt;
&lt;td style="text-align: center"&gt;aucune&lt;/td&gt;
&lt;td style="text-align: center"&gt;1&lt;/td&gt;
&lt;td style="text-align: center"&gt;non&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;La mise en œuvre sur dsPIC avec le bloc MPLAB pour Simulink a donné des résultats satisfaisants avec les réglages ci-dessous, définis dans le bloc UART Configuration :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th style="text-align: center"&gt;Mise en œuvre&lt;/th&gt;
&lt;th style="text-align: center"&gt;Taille du tampon&lt;/th&gt;
&lt;th style="text-align: center"&gt;Priorité d&amp;rsquo;interruption&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S.BUS Rx&lt;/td&gt;
&lt;td style="text-align: center"&gt;Circular Buffer&lt;/td&gt;
&lt;td style="text-align: center"&gt;64&lt;/td&gt;
&lt;td style="text-align: center"&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S.BUS Tx&lt;/td&gt;
&lt;td style="text-align: center"&gt;None&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;td style="text-align: center"&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smart Port Rx&lt;/td&gt;
&lt;td style="text-align: center"&gt;Circular Buffer&lt;/td&gt;
&lt;td style="text-align: center"&gt;32&lt;/td&gt;
&lt;td style="text-align: center"&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smart Port Tx&lt;/td&gt;
&lt;td style="text-align: center"&gt;Circular Buffer&lt;/td&gt;
&lt;td style="text-align: center"&gt;32&lt;/td&gt;
&lt;td style="text-align: center"&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F.Port Rx&lt;/td&gt;
&lt;td style="text-align: center"&gt;Circular Buffer&lt;/td&gt;
&lt;td style="text-align: center"&gt;32&lt;/td&gt;
&lt;td style="text-align: center"&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F.Port Tx&lt;/td&gt;
&lt;td style="text-align: center"&gt;Circular Buffer&lt;/td&gt;
&lt;td style="text-align: center"&gt;64&lt;/td&gt;
&lt;td style="text-align: center"&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="connexion-des-blocs-simulink-sbus-smart-port-et-fport-à-luart-rx--tx"&gt;Connexion des blocs Simulink S.BUS, Smart Port et F.Port à l&amp;rsquo;UART Rx &amp;amp; Tx&lt;/h3&gt;
&lt;p&gt;Les blocs S.Bus, F.Port et Smart Port xxx prennent le flux de sortie du récepteur pour en extraire les valeurs de commande envoyées par la radiocommande. Le flux d&amp;rsquo;entrée est un vecteur dont la longueur est définie par l&amp;rsquo;utilisateur. Toutes les valeurs du vecteur n&amp;rsquo;ont pas à être renseignées. Le bloc utilise le scalaire N, longueur d&amp;rsquo;entrée, pour savoir combien d&amp;rsquo;octets du vecteur d&amp;rsquo;entrée sont des valeurs reçues et doivent être traités. Le vecteur d&amp;rsquo;entrée du bloc peut recevoir des paquets de données partiels. Le paquet complet du récepteur peut être découpé dans le temps et envoyé au fur et à mesure que le MCU reçoit les valeurs ; ces blocs reconstituent le paquet avant de le traiter.&lt;/p&gt;
&lt;h2 id="protocole-sbus"&gt;Protocole S.BUS&lt;/h2&gt;
&lt;p&gt;Configuration de l&amp;rsquo;UART :&lt;/p&gt;
&lt;p&gt;Seul le canal Rx est utilisé, avec les paramètres suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;100 000 bauds/s&lt;/li&gt;
&lt;li&gt;Logique Rx inversée (l&amp;rsquo;état de repos est le niveau bas), 3,3V&lt;/li&gt;
&lt;li&gt;Parité paire&lt;/li&gt;
&lt;li&gt;2 bits de stop&lt;/li&gt;
&lt;li&gt;Pas de contrôle de flux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rx utilise un Circular Buffer de 64 octets, avec une priorité d&amp;rsquo;interruption de 5.&lt;/p&gt;
&lt;p&gt;Le bloc UART Rx est échantillonné à 1kHz (1ms).
La taille du vecteur de sortie, réglée sur « inherited via internal rule », prend la valeur 10 (pas plus de 10 octets ne peuvent être reçus en 1 ms à 100000 bauds/s avec deux bits de stop).&lt;/p&gt;
&lt;p&gt;Dans l&amp;rsquo;interface graphique du bloc S.BUS, on sélectionne les sorties à décoder et la mise à l&amp;rsquo;échelle de chaque canal décodé.&lt;/p&gt;
&lt;div class="box" style="max-width:40%"&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/uxv-block-sbus-gui-control-frame.png" loading="lazy" alt="Ce bloc Simulink décode le flux d&amp;rsquo;entrée S.BUS. On choisit la mise à l&amp;rsquo;échelle de chaque canal RC de sortie."/&gt;
&lt;/div&gt;
&lt;a href="https://lubin.kerhuel.eu/img/uxv-block-sbus-gui-control-frame.png" itemprop="contentUrl"&gt;&lt;/a&gt;
&lt;figcaption data-pre="Figure " data-post=":" class="numbered"&gt;&lt;h4&gt;Interface utilisateur du bloc Simulink S.BUS&lt;/h4&gt;
&lt;p&gt;Ce bloc Simulink décode le flux d&amp;rsquo;entrée S.BUS. On choisit la mise à l&amp;rsquo;échelle de chaque canal RC de sortie.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class="box" style="max-width:100%"&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/uxv-block-sbus-scheme-uart-connection.png" loading="lazy" alt="Schéma de décodage du S.BUS pour un dsPIC"/&gt;
&lt;/div&gt;
&lt;a href="https://lubin.kerhuel.eu/img/uxv-block-sbus-scheme-uart-connection.png" itemprop="contentUrl"&gt;&lt;/a&gt;
&lt;figcaption data-pre="Figure " data-post=":" class="numbered"&gt;&lt;h4&gt;Schéma du bloc UART Rx connecté au bloc S.BUS.&lt;/h4&gt;
&lt;p&gt;Schéma de décodage du S.BUS pour un dsPIC&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class="box" style="max-width:100%"&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/uxv-block-sbus-sport-channels-scaling.png" loading="lazy" alt="Les valeurs brutes du S.BUS ne sont ni centrées ni mises à l&amp;rsquo;échelle par une puissance de 2."/&gt;
&lt;/div&gt;
&lt;a href="https://lubin.kerhuel.eu/img/uxv-block-sbus-sport-channels-scaling.png" itemprop="contentUrl"&gt;&lt;/a&gt;
&lt;figcaption data-pre="Figure " data-post=":" class="numbered"&gt;&lt;h4&gt;Schéma de centrage et de mise à l&amp;rsquo;échelle des canaux S.BUS en sortie dans [-1000 1000]&lt;/h4&gt;
&lt;p&gt;Les valeurs brutes du S.BUS ne sont ni centrées ni mises à l&amp;rsquo;échelle par une puissance de 2.&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 id="protocole-smart-port"&gt;Protocole Smart Port&lt;/h2&gt;
&lt;p&gt;Le Smart Port (S.Port) utilise un UART dont les broches Rx et Tx sont affectées à la même broche, en logique inversée (1 est le niveau haut). Un seul fil est utilisé, en communication half duplex.&lt;/p&gt;
&lt;p&gt;Configuration de l&amp;rsquo;UART :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;57600 bauds/s&lt;/li&gt;
&lt;li&gt;Half duplex&lt;/li&gt;
&lt;li&gt;Logique Rx et Tx inversée (l&amp;rsquo;état de repos est le niveau bas), 3,3V&lt;/li&gt;
&lt;li&gt;Pas de parité&lt;/li&gt;
&lt;li&gt;1 bit de stop&lt;/li&gt;
&lt;li&gt;Pas de contrôle de flux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mise en œuvre :&lt;/p&gt;
&lt;p&gt;Rx utilise un Circular Buffer de 32 octets, avec une priorité d&amp;rsquo;interruption de 5.&lt;br&gt;
Tx utilise un Circular Buffer de 32 octets, avec une priorité d&amp;rsquo;interruption de 6.&lt;/p&gt;
&lt;p&gt;Le bloc Smart Port décode les entrées provenant du récepteur et des autres capteurs connectés au bus à un seul fil.&lt;/p&gt;
&lt;p&gt;Si une trame de capteur est reçue, elle est décodée et les valeurs sont disponibles en sortie du bloc.&lt;/p&gt;
&lt;p&gt;Lorsqu&amp;rsquo;une requête du récepteur pour un identifiant de capteur est reçue et que cet identifiant est défini dans l&amp;rsquo;un des blocs Sensor du modèle, le bloc Smart Port génère la trame du capteur avec les dernières valeurs définies dans le bloc Sensor.
Le message est envoyé par un bloc UART Tx.&lt;/p&gt;
&lt;h2 id="protocole-fport"&gt;Protocole F.Port&lt;/h2&gt;
&lt;div class="box" style="max-width:40%"&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/uxv-block-fport-gui-control-frame.png" loading="lazy" /&gt;
&lt;/div&gt;
&lt;a href="https://lubin.kerhuel.eu/img/uxv-block-fport-gui-control-frame.png" itemprop="contentUrl"&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&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/uxv-block-fport-scheme-uart-connection.png" loading="lazy" /&gt;
&lt;/div&gt;
&lt;a href="https://lubin.kerhuel.eu/img/uxv-block-fport-scheme-uart-connection.png" itemprop="contentUrl"&gt;&lt;/a&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class="gallery caption-position-bottom caption-effect-slide hover-effect-zoom hover-transition" itemscope itemtype="http://schema.org/ImageGallery"&gt;
&lt;div class="box" &gt;
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"&gt;
&lt;div class="img" style="background-image: url('/img/uxv-block-rc-pwm-gui.png');"&gt;
&lt;img itemprop="thumbnail" src="https://lubin.kerhuel.eu/img/uxv-block-rc-pwm-gui.png" loading="lazy" alt="caption"/&gt;
&lt;/div&gt;
&lt;a href="https://lubin.kerhuel.eu/img/uxv-block-rc-pwm-gui.png" itemprop="contentUrl"&gt;&lt;/a&gt;
&lt;figcaption data-pre="Figure " data-post=":" class="numbered"&gt;&lt;h4&gt;Title&lt;/h4&gt;
&lt;p&gt;caption&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div class="box" &gt;
&lt;figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject"&gt;
&lt;div class="img" style="background-image: url('/img/uxv-block-rc-pwm-input-scaling.png');"&gt;
&lt;img itemprop="thumbnail" src="https://lubin.kerhuel.eu/img/uxv-block-rc-pwm-input-scaling.png" loading="lazy" alt="caption"/&gt;
&lt;/div&gt;
&lt;a href="https://lubin.kerhuel.eu/img/uxv-block-rc-pwm-input-scaling.png" itemprop="contentUrl"&gt;&lt;/a&gt;
&lt;figcaption data-pre="Figure " data-post=":" class="numbered"&gt;&lt;h4&gt;title&lt;/h4&gt;
&lt;p&gt;caption&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Configuration de l&amp;rsquo;UART :
Les canaux Rx et Tx sont utilisés. Ils sont affectés à la même broche. L&amp;rsquo;UART est configuré en half duplex.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;115200 bauds/s&lt;/li&gt;
&lt;li&gt;Half duplex&lt;/li&gt;
&lt;li&gt;Logique Rx et Tx inversée (l&amp;rsquo;état de repos est le niveau bas), 3,3V&lt;/li&gt;
&lt;li&gt;Pas de parité&lt;/li&gt;
&lt;li&gt;1 bit de stop&lt;/li&gt;
&lt;li&gt;Pas de contrôle de flux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rx utilise un Circular Buffer de 32 octets, avec une priorité d&amp;rsquo;interruption de 5.&lt;/p&gt;
&lt;p&gt;Tx utilise un Circular Buffer de 64 octets, avec une priorité d&amp;rsquo;interruption de 5.&lt;/p&gt;
&lt;h3 id="ressources"&gt;Ressources&lt;/h3&gt;
&lt;p&gt;Les protocoles FrSky ne sont pas toujours documentés. Les sites web suivants ont contribué à la compréhension des différents protocoles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.robotmaker.eu/home/quadcopters-360-degree-proximity-sensing-project-overview/frsky-s-port-interface" target="_blank" rel="noopener"&gt;Smart Port sur ROBOTmaker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.google.com/archive/p/telemetry-convert/wikis/FrSkySPortProtocol.wiki" target="_blank" rel="noopener"&gt;Smart Port, projet telemetry-convert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/yaapu/FrskyTelemetryScript/wiki/FrSky-SPort-protocol-specs" target="_blank" rel="noopener"&gt;Smart Port, TelemetryScript d&amp;rsquo;Allesandro Apostoli&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/bolderflight/SBUS" target="_blank" rel="noopener"&gt;S.BUS, bibliothèque Arduino&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/athertop/MavLink_FrSkySPort/wiki" target="_blank" rel="noopener"&gt;Smart Port, projet MavLink-FrSkySPort&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/betaflight/betaflight/tree/master/src/main/telemetry" target="_blank" rel="noopener"&gt;code source de Betaflight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ardupilot.org/copter/docs/common-frsky-passthrough.html" target="_blank" rel="noopener"&gt;projet ArduCopter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://sbustelemetrysensors.blogspot.com/" target="_blank" rel="noopener"&gt;SBUS2, par Jerry Chapman&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1"&gt;
&lt;p&gt;Received Signal Strength Indicator (indicateur de puissance du signal reçu)&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink"&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description></item><item><title>bloc Sensor</title><link>https://lubin.kerhuel.eu/fr/uxv/block-sensor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://lubin.kerhuel.eu/fr/uxv/block-sensor/</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;p&gt;Le bloc ajoute un « paquet » capteur à transmettre à un récepteur par le Smart Port ou le F.Port. Le récepteur envoie le paquet de télémétrie à la radiocommande (RC). Le modèle Simulink doit par conséquent comporter soit un bloc Smart Port, soit un bloc F.Port.&lt;/p&gt;
&lt;p&gt;Chaque bloc Sensor déclare la référence du capteur, composée des deux paramètres PhysId et {Address+Offset}. La valeur du capteur est fournie par l&amp;rsquo;entrée du bloc sous la forme d&amp;rsquo;un tableau de 4 octets. Plusieurs instances du bloc Sensor peuvent être ajoutées dans un modèle. Deux instances peuvent avoir la même référence de capteur, ce qui convient à un capteur qui envoie plusieurs paquets de valeurs différentes (voir le capteur FrSky FVLSS ou GPS).&lt;/p&gt;
&lt;p&gt;Chaque instance du bloc ajoute un tampon de 4 octets qui stocke la valeur du capteur, mise à jour à l&amp;rsquo;exécution du bloc. Le temps d&amp;rsquo;échantillonnage du bloc définit la cadence de mise à jour du tampon interne.&lt;/p&gt;
&lt;p&gt;Le comportement diffère entre les protocoles Smart Port et F.Port :&lt;/p&gt;
&lt;h3 id="comportement-avec-le-smart-port"&gt;Comportement avec le Smart Port&lt;/h3&gt;
&lt;p&gt;Le récepteur interroge (ping) l&amp;rsquo;électronique connectée au Smart Port pour une référence de capteur donnée. Lorsqu&amp;rsquo;un capteur donné est interrogé, il doit répondre en fournissant ses 4 octets de valeur dans un délai de 3 ms.&lt;/p&gt;
&lt;p&gt;Si plusieurs instances du bloc Sensor utilisent la même référence de capteur (PhysId, Address+Offset), les paquets de données de chaque bloc sont envoyés les uns après les autres.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si un identifiant de capteur donné est interrogé deux fois sans que son bloc (aucun de ses blocs, s&amp;rsquo;il y en a plusieurs) n&amp;rsquo;ait été mis à jour entre-temps, le même contenu est renvoyé.&lt;/li&gt;
&lt;li&gt;Si un bloc Sensor est mis à jour alors que son contenu précédent n&amp;rsquo;a pas encore été envoyé, la mise à jour est sans effet et la nouvelle valeur est perdue.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="comportement-avec-le-fport"&gt;Comportement avec le F.Port&lt;/h3&gt;
&lt;p&gt;Le contrôleur unique connecté au F.Port envoie une valeur de capteur à chaque paquet de canaux RC reçu. Le capteur à envoyer dépend uniquement du contrôleur, qui peut envoyer un capteur quelconque.&lt;/p&gt;
&lt;p&gt;Chaque mise à jour d&amp;rsquo;un bloc Sensor ajoute le capteur dans une file FIFO de demandes d&amp;rsquo;envoi de capteurs.
Une seule demande par instance de bloc Sensor peut être présente dans cette FIFO.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si un bloc Sensor est mis à jour alors que sa valeur précédente n&amp;rsquo;a pas encore été envoyée, c&amp;rsquo;est-à-dire que sa demande d&amp;rsquo;envoi est toujours dans la FIFO, la mise à jour est sans effet et la nouvelle valeur est perdue.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contrairement au Smart Port, un capteur ne peut pas être envoyé deux fois sans avoir été mis à jour entre-temps, car le capteur est placé dans la FIFO des demandes d&amp;rsquo;envoi au moment de sa mise à jour.&lt;/p&gt;
&lt;p&gt;pour le capteur correspondant
La cadence de mise à jour du bloc est choisie par l&amp;rsquo;utilisateur final. dont la valeur sera envoyée au récepteur. Le récepteur envoie ensuite l&amp;rsquo;identifiant du capteur et les valeurs correspondantes à la radiocommande par télémétrie.&lt;/p&gt;
&lt;p&gt;La communication avec le récepteur peut utiliser soit le Smart Port, soit le F.Port.&lt;/p&gt;
&lt;p&gt;Le PhyId du capteur, l&amp;rsquo;APPID et la variante d&amp;rsquo;offset d&amp;rsquo;APPID sont définis dans le bloc.
Le champ PRIM doit être positionné à 0X10 pour un capteur. L&amp;rsquo;unité de la valeur du capteur est définie dans le bloc.
L&amp;rsquo;entrée du bloc est le codage sur 4 octets de la valeur du capteur.&lt;/p&gt;</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><item><title>TP INSA - Commande temps réel d'un moteur DC / PMSM</title><link>https://lubin.kerhuel.eu/fr/project/lab-dc-motor/</link><pubDate>Sat, 01 Dec 2018 00:00:00 +0000</pubDate><guid>https://lubin.kerhuel.eu/fr/project/lab-dc-motor/</guid><description>&lt;p&gt;Commande d&amp;rsquo;un moteur 24 V (Pravalux 24 V DC) avec la carte MCLV-V2 équipée d&amp;rsquo;un dsPIC 33EP256MC506.
Ce TP s&amp;rsquo;adresse aux étudiants de 5e année de l&amp;rsquo;INSA-Lyon.&lt;/p&gt;
&lt;p&gt;Le sujet du TP est disponible à l&amp;rsquo;adresse : &lt;a href="https://rtdc.ctrl-elec.fr/" target="_blank" rel="noopener"&gt;https://rtdc.ctrl-elec.fr/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les diapositives présentent les adaptations nécessaires pour passer d&amp;rsquo;un modèle Simulink de simulation (ou dSPACE) à un modèle Simulink ciblant un microcontrôleur. Deux sujets sont abordés :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ordonnancement temps réel / analyse de la charge du processeur&lt;/li&gt;
&lt;li&gt;Types de données en virgule fixe&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2021 : le TP sur dSPACE n&amp;rsquo;étant pas envisageable en salle à cause de la pandémie de Covid-19, il a été remplacé par un TP à domicile sur des cartes MCLV-2 envoyées aux étudiants.
Le sujet du TP est disponible à l&amp;rsquo;adresse : &lt;a href="https://rcp.ctrl-elec.fr/" target="_blank" rel="noopener"&gt;https://rcp.ctrl-elec.fr/&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>