#LyX 1.3 created this file. For more info see http://www.lyx.org/ \lyxformat 221 \textclass book \begin_preamble \usepackage[plainpages=false,pdfpagelabels,colorlinks=true,linkcolor=blue]{hyperref} \end_preamble \language frenchb \inputencoding default \fontscheme bookman \graphics default \float_placement !tbph \paperfontsize default \spacing single \papersize letterpaper \paperpackage a4 \use_geometry 1 \use_amsmath 0 \use_natbib 0 \use_numerical_citations 0 \paperorientation portrait \leftmargin 1in \topmargin 1in \rightmargin 0.8in \bottommargin 0.8in \secnumdepth 1 \tocdepth 5 \paragraph_separation skip \defskip smallskip \quotes_language english \quotes_times 2 \papercolumns 1 \papersides 1 \paperpagestyle default \layout Chapter \begin_inset LatexCommand \label{cha:Tutoriel-HAL} \end_inset Tutoriel de HAL \layout Section \begin_inset LatexCommand \label{sec:Intro-tutoriel} \end_inset Introduction \layout Standard La configuration passe de la théorie à la pratique de HAL. Pour ceux qui ont juste un peu de pratique avec la programmation des ordinateur s, cette section est le \begin_inset Quotes eld \end_inset Hello World \begin_inset Quotes erd \end_inset de HAL. Comme indiqué précédemment halrun peut être utilisé pour créer un système qui fonctionne. Il s'agit d'un outil de configuration et de mise au point en ligne de commande ou en fichier texte. Les exemples suivants illustrent son installation et son fonctionnement. \layout Subsection Notation \layout Standard Les exemples en ligne de commande sont représentés en police \family typewriter \series bold bold typewriter \family default \series default . Les réponses de l'ordinateur sont en police \family typewriter typewriter \family default . Le texte optionnel est entre crochets \family typewriter [comme ça] \family default . Le texte \family typewriter \family default représente un champ qui peut prendre différentes valeurs, le paragraphe adjacent explique quelles sont les valeurs appropriées. Les élements textuels séparés par des barres verticales indiquent qu'une valeur ou l'autre mais pas les deux, doit être présente. Toutes les lignes de commandes considèrent que vous êtes dans le répertoire \family typewriter emc2/ \family default , les chemins sont affichés en accord avec ce principe. \layout Subsection L'environnement RTAPI \layout Standard RTAPI est le sigle de Real Time Application Programming Interface. De nombreux composants HAL travaillent en temps réel et tous les composants de HAL stockent leurs données dans la mémoire partagée, de sorte que les composants temps réel puissent y accéder. Normalement, Linux ne prend pas en charge les programmes temps réel ni le type de mémoire partagée dont HAL a besoin. Heureusement, il existe des systèmes d'exploitation temps réel RTOS qui fournissent les extensions nécessaires à Linux. Malheureusement, chaque RTOS fait les choses différemment des autres. \layout Standard Pour remédier à ces différences, l'équipe d'EMC a proposé RTAPI, qui fournit une manière cohérente aux programmes de parler au RTOS. Si vous êtes un programmeur qui veut travailler à l'intérieur d'EMC, vous pouvez étudier \family typewriter emc2/src/rtapi/rtapi.h \family default pour comprendre l'API. Mais si vous êtes une personne normale, tout ce que vous avez besoin de savoir à propos de RTAPI est qu'il doit être (avec le RTOS) chargé dans la mémoire de votre ordinateur avant de pouvoir faire n'importe quoi avec HAL. \layout Standard Pour ce tutoriel, nous allons supposer que vous avez compilé avec succès l'arborescence emc2/src et, si nécessaire, invoqué le script \family typewriter emc-environment \family default pour préparer votre shell. Dans ce cas, tout ce que vous avez à faire est de charger le RTOS requis et les modules RTAPI dans la mémoire. Tapez juste les commandes suivantes dans une console: \layout LyX-Code emc2$ \series bold halrun \newline \series default halcmd: \layout Standard Une fois l'OS temps réel et RTAPI chargés, vous pouvez aller au premier exemple. Notez que le prompt a changé, il est passé de \begin_inset Quotes eld \end_inset $ \begin_inset Quotes erd \end_inset à \begin_inset Quotes eld \end_inset halcmd \begin_inset Quotes erd \end_inset . La raison en est que les commandes ultérieures seront interprétées comme des commandes HAL et non plus comme des commandes shell. \family typewriter halrun \family default est un simple script shell, il est plus ou moins équivalent de lancer: \layout LyX-Code emc2$ \series bold realtime start \newline \series default emc2$ \series bold halcmd -kf \layout Standard Pour quitter \family typewriter halcmd \family default et que halrun arrête le système temps réel, tapez: \layout LyX-Code emc2$ \series bold realtime stop \layout Standard Vous pouvez également passer des arguments à halrun, il seront répercutés sur halcmd, ou passer le nom d'un fichier .hal. Parce que \family typewriter halrun \family default arrête le système temps réel quand il se termine, le fichier hal fonctionnera de cette façon et s'arrêtera généralement avec une commande comme: \family typewriter loadrt -w halscope \family default . \layout Section Tab-complétion \layout Standard Votre version de halcmd peut inclure la complétion avec la touche tab. Au lieu de compléter les noms de fichiers comme le fait un shell, il complète les commandes avec les identifiants HAL. Essayez de presser la touche tab après le début d'une commande HAL: \layout LyX-Code halcmd: \series bold lo \series default \newline loadrt loadusr lock \newline halcmd: \series bold loadrt d \series default \newline ddt debounce \layout Section \begin_inset LatexCommand \label{sec:Tutorial - Simple Exemple} \end_inset Un exemple simple \layout Subsection Chargement d'un composant temps réel \layout Standard Pour le premier exemple, nous allons utiliser un composant HAL appelé \family typewriter siggen \family default , qui est un simple générateur de signal. Une description complète du composant \family typewriter siggen \family default reste disponible à la section \begin_inset LatexCommand \ref{sec:Siggen} \end_inset de ce document. Il s'agit d'un composant en temps réel, mis en oeuvre comme un module du noyau Linux. Pour charger \family typewriter siggen \family default utiliser la commande \family typewriter halcmd loadrt \family default : \layout LyX-Code halcmd: \series bold loadrt siggen \layout Subsection Examiner HAL \layout Standard Maintenant que le module est chargé, il faut introduire \family typewriter halcmd \family default , l'outil en ligne de commande utilisé pour configurer le HAL. Pour une description plus complète essayez: \family typewriter man halcmd \family default , ou consultez la section \family typewriter halcmd \family default à la section \begin_inset LatexCommand \ref{sec:Halcmd} \end_inset de ce document. La première commande de halcmd et show, qui affichera les informations concernant l'état actuel du HAL. Pour afficher tout ce qui est installé tapez: \layout LyX-Code halcmd: \series bold show comp \series default \newline Loaded HAL Components: \newline ID Type Name PID State \newline 32769 RT siggen ready \newline 9775 User halcmd9775 9775 initializing \layout Standard Puisque \family typewriter halcmd \family default lui même est un composant HAL, il sera toujours présent dans la liste \begin_inset Foot collapsed false \layout Standard Le nombre après halcmd dans la liste des composants est le \begin_inset Quotes eld \end_inset process ID \begin_inset Quotes erd \end_inset . Il est toujours possible de lancer plus d'une instance de halcmd en même temps (dans différentes fenêtres par exemple), Le numéro PID est ajouté à la fin du nom pour rendre celui-ci unique. \end_inset . La liste montre aussi le composant \family typewriter siggen \family default que nous avions installé à l'étape précédente. Le \begin_inset Quotes eld \end_inset RT \begin_inset Quotes erd \end_inset sous \begin_inset Quotes eld \end_inset Type \begin_inset Quotes erd \end_inset indique que \family typewriter siggen \family default est un composant temps réel. \layout Standard Ensuite, voyons quelles pins \family typewriter siggen \family default rend disponibles: \layout LyX-Code halcmd: \series bold show pin \series default \newline Component Pins: \newline Owner Type Dir Value Name 02 float -W 0.00000e+00 siggen.0.cosine \newline 32769 float OUT 0.00000e+00 siggen.0.sawtooth \newline 32769 float OUT 0.00000e+00 siggen.0.sine \newline 32769 float OUT 0.00000e+00 siggen.0.square \newline 32769 float OUT 0.00000e+00 siggen.0.triangle \layout Standard Cette commande affiche toutes les pins dans le HAL. Un système complexe peut avoir plusieurs dizaines ou centaines de pins. Mais pour le moment il y a seulement cinq pins. Toutes ces cinq pins sont des flottants, elles transportent toutes des données en provenance du composant \family typewriter siggen \family default . Puisque nous n'avons pas encore exécuté le code contenu dans le composant, toutes les pins ont une valeur de zéro. \layout Standard L'étape suivante consiste à examiner les paramètres: \layout LyX-Code halcmd: \series bold show param \series default \newline Parameters: \newline Owner Type Dir Value Name \newline 32769 float RW 1.00000e+00 siggen.0.amplitude \newline 32769 float RW 1.00000e+00 siggen.0.frequency \newline 32769 float RW 0.00000e+00 siggen.0.offset \newline 32769 s32 RO 0 siggen.0.update.time \newline 32769 s32 RW 0 siggen.0.update.tmax \layout Standard La commande \begin_inset Quotes eld \end_inset show param \begin_inset Quotes erd \end_inset affiche tous les paramètres de HAL. Pour le moment chaque paramètre à la valeur par défaut attribuée quand le composant a été chargé. Notez dans la colonne \family typewriter Dir \family default . Les valeurs marquées \family typewriter -W \family default écriture possible, pour ceux qui ne sont jamais modifié par le composant lui-même, mais qui sont modifiable par l'utilisateur pour contrôler le composant. Nous verrons comment plus tard. Les paramètres marqués \family typewriter R- \family default sont en lecture seule. Il ne peuvent être modifiés que par le composant. Finalement, les paramètres marqués \family typewriter RW \family default sont en lecture/écriture. Ils peuvent être modifiés par le composant et aussi par l'utilisateur. Nota: les paramètres \family typewriter siggen.0.update.time \family default et \family typewriter siggen.0.update.tmax \family default existent dans un but de déboguage, ils ne sont pas couverts par cette documenta tion. \begin_inset Note collapsed false \layout Standard Les paramètres thread.time et thread.tmax sont associés avec le thread créé quand le composant a été chargé. Quand la réécriture de HAL sera terminée, le thread ne sera plus créé à ce stade, de sorte que ces paramètres ne seront plus visibles. \layout Standard Il n'y a pas de thread créé ici, mais il y a quand même les paramètres siggen.0.up date.{time,tmax}. \end_inset \begin_inset Note collapsed false \layout Standard Les paramètres de thread sont ceux du composant 02, le module siggen. C'est incorrect, ils devraient être ceux du module hal_lib, parce que le thread lui même n'est plus la propriété de siggen, et en fait, si siggen est retiré, les paramètres devraient rester. \end_inset \begin_inset Note collapsed false \layout Standard Et bien en fait, \begin_inset Quotes eld \end_inset fixer \begin_inset Quotes erd \end_inset les paramètres de thread aura pris plus de temps que je ne pensais. Donc, je les ai éliminés pour l'instant. Quand la réécriture de HAL sera terminée, je les remettrai. \end_inset \layout Standard La plupart des composants temps réel exportent une ou plusieurs fonctions pour que le code qu'elles contiennent soit exécuté en temps réel. Voyons ce que la fonction \family typewriter siggen \family default exporte: \layout LyX-Code halcmd: \series bold show funct \series default \newline Exported Functions: \newline Owner CodeAddr Arg FP Users Name \newline 32769 b7f74ac5 b7d0c0b4 YES 0 siggen.0.update \layout Standard Le composant siggen exporte une seule fonction. Il nécessite un flottant (Floating Point). Il n'est lié à aucun thread, puisque \begin_inset Quotes eld \end_inset users \begin_inset Quotes erd \end_inset est à zero \begin_inset Foot collapsed false \layout Standard Les champs codeaddr et arg ont été utilisés pendant le développement et devraient probablement disparaître. \end_inset . \layout Subsection Exécuter le code temps réel \layout Standard Pour faire tourner le code actuellement contenu dans la fonction \family typewriter siggen.0.update \family default , nous avons besoin d'un thread temps réel. C'est le composant appelé \family typewriter threads \family default qui est utilisé pour créer le nouveau thread. Créons un thread appelé \family typewriter test-thread \family default avec une période de 1ms (1000000ns): \layout LyX-Code halcmd: \series bold loadrt threads name1=test-thread period1=1000000 \layout Standard Voyons si il fonctionne: \layout LyX-Code halcmd: \series bold show thread \newline \series default Realtime Threads: \newline Period FP Name (Time, Max-Time) \newline 999849 YES test-thread ( 0, 0 ) \layout Standard Il fonctionne. La période n'est pas exactement de 1000000ns à cause des limitations dues au matériel, mais nous avons bien un thread qui tourne à une période approximat ivement correcte et qui peut manipuler des fonctions en virgule flottante. La prochaine étape sera de connecter la fonction au thread: \layout LyX-Code halcmd: \series bold addf siggen.0.update test-thread \layout Standard Pour le moment nous avions utilisé \family typewriter halcmd \family default seulement pour regarder le HAL. Mais cette fois-ci, nous avons utilisé la commande \family typewriter addf \family default (add function) pour changer quelque chose dans le HAL. Nous avons dit à \family typewriter halcmd \family default d'ajouter la fonction \family typewriter siggen.0.update \family default au thread \family typewriter test-thread \family default et la commande suivante indique qu'il a réussi: \layout LyX-Code halcmd: \series bold show thread \newline \series default Realtime Threads: \newline Period FP Name (Time, Max-Time) \newline 999849 YES test-thread ( 0, 0 ) \newline 1 siggen.0.update \layout Standard Il y a une étape de plus avant que le composant \family typewriter siggen \family default ne commence à générer des signaux. Quand le HAL est démarré pour la première fois, les threads ne sont pas en marche. C'est pour vous permettre de compléter la configuration du système avant que le code temps réel ne démarre. Une fois que vous êtes satisfait de la configuration, vous pouvez lancer le code temps réel comme ceci: \layout LyX-Code halcmd: \series bold start \layout Standard Maintenant le générateur de signal est en marche. Regardons ses pins de sortie: \layout LyX-Code halcmd: show pin \newline Component Pins: \newline Owner Type Dir Value Name \newline 32769 float OUT 2.12177e-01 siggen.0.cosine \newline 32769 float OUT -5.64055e-01 siggen.0.sawtooth \newline 32769 float OUT 9.79820e-01 siggen.0.sine \newline 32769 float OUT -1.00000e+00 siggen.0.square \newline 32769 float OUT 1.28110e-01 siggen.0.triangle \newline halcmd: show pin \newline Component Pins: \newline Owner Type Dir Value Name \newline 32769 float OUT 5.19530e-01 siggen.0.cosine \newline 32769 float OUT 6.73893e-01 siggen.0.sawtooth \newline 32769 float OUT -8.54452e-01 siggen.0.sine \newline 32769 float OUT 1.00000e+00 siggen.0.square \newline 32769 float OUT 3.47785e-01 siggen.0.triangle \layout Standard Nous avons fait, très rapidement, deux commandes \family typewriter show pin \family default et vous pouvez voir que les sorties ne sont plus à zéro. Les sorties sinus, cosinus, dents de scie et triangle changent constamment. La sortie carrée fonctionne également, mais elle passe simplement de +1.0 à -1.0 à chaque cycle. \layout Subsection Modifier des paramètres \layout Standard La réelle puissance de HAL est de permettre de modifier les choses. Par exemple, on peut utiliser la commande \family typewriter setp \family default pour ajuster la valeur d'un paramètre. Modifions l'amplitude du signal de sortie du générateur de 1.0 à 5.0: \layout LyX-Code halcmd: \series bold setp siggen.0.amplitude 5 \series default \newline emc2$ \layout Standard Voyons encore une fois les paramètres et les pins: \layout LyX-Code halcmd: setp siggen.0.amplitude 5 \newline halcmd: show param \newline Parameters: \newline Owner Type Dir Value Name \newline 32769 float RW 5.00000e+00 siggen.0.amplitude \newline 32769 float RW 1.00000e+00 siggen.0.frequency \newline 32769 float RW 0.00000e+00 siggen.0.offset \newline 32769 s32 RO 397 siggen.0.update.time \newline 32769 s32 RW 109100 siggen.0.update.tmax \newline halcmd: show pin \newline Component Pins: \newline Owner Type Dir Value Name \newline 32769 float OUT 4.78453e+00 siggen.0.cosine \newline 32769 float OUT -4.53106e+00 siggen.0.sawtooth \newline 32769 float OUT 1.45198e+00 siggen.0.sine \newline 32769 float OUT -5.00000e+00 siggen.0.square \newline 32769 float OUT 4.02213e+00 siggen.0.triangle \layout Standard Notez que la valeur du paramètre \family typewriter siggen.0.amplitude \family default est bien passée à 5.000 et que les pins ont maintenant des valeurs plus grandes. \layout Subsection Enregistrer la configuration de HAL \layout Standard La plupart de ce que nous avons fait jusqu'ici avec \family typewriter halcmd \family default a été de simplement regarder les choses avec la commande \family typewriter show \family default . Toutefois, deux commandes ont rééllement modifié des valeurs. Au fur et à mesure que nous concevons des systèmes plus complexes avec HAL, nous allons utiliser de nombreuses commandes pour le configurer comme nous le souhaitons. HAL a une mémoire d'éléphant et peut retenir sa configuration jusqu'à ce qu'il s'arrête. Mais qu'en est-il de la prochaine fois ? Nous ne voulons pas entrer une série de commande à chaque fois que l'on veut utiliser le système. Nous pouvons enregistrer la configuration de l'ensemble de HAL en une seule commande: \layout LyX-Code halcmd: \series bold save \series default \newline # components \newline loadrt threads name1=test-thread period1=1000000 \newline loadrt siggen \newline # signals \newline # links \newline # parameter values \newline setp siggen.0.amplitude 5.00000e+00 \newline setp siggen.0.frequency 1.00000e+00 \newline setp siggen.0.offset 0.00000e+00 \newline # realtime thread/function links \newline addf siggen.0.update test-thread \layout Standard La sortie de la commande \family typewriter save \family default est une séquence de commandes HAL. Si vous commencez par un HAL \begin_inset Quotes eld \end_inset vide \begin_inset Quotes erd \end_inset et que vous tapez toute la séquence de commandes HAL, vous aurez la configurati on qui existait lors de l'exécution de la commande \family typewriter save \family default . Pour sauver ces commandes pour une utilisation ultérieure, nous allons simplement rediriger la sortie vers un fichier: \layout LyX-Code halcmd: \series bold save all saved.hal \layout Subsection Restaurer la configuration de HAL \layout Standard Pour restaurer la configuration de HAL stockée dans \family typewriter saved.hal \family default , nous avons besoin d'exécuter toutes ces commandes HAL. Pour ce faire, nous utiliserons la commande \family typewriter -f \family default qui lit les commandes à partir d'un fichier, le \family typewriter -I \family default qui affichera le prompt halcmd après l'exécution des commandes: \layout LyX-Code emc2$ \series bold halrun -I -f saved.hal \layout Standard Notez qu'il n'y a pas de commande 'start' dans le fichier saved.hal. Il est nécessaire de la retaper (ou d'éditer saved.hal pour l'ajouter): \layout LyX-Code halcmd: \series bold start \layout Section \begin_inset LatexCommand \label{sec:Tutoriel - Halmeter} \end_inset Visualiser le HAL avec halmeter \layout Standard Vous pouvez construire des systèmes HAL vraiment complexes sans utiliser d'interface graphique. Mais il y a quelque chose de rassurant à visualiser le résultat du travail. Le premier, et le plus simple des outils graphiques pour le HAL, est \begin_inset Quotes eld \end_inset halmeter \begin_inset Quotes erd \end_inset . C'est un programme très simple qui s'utilise comme un multimètre. \layout Standard Nous allons utiliser de nouveaux éléments du composant siggen pour vérifier halmeter. Si vous avez fini l'exemple précédent, alors siggen est déjà chargé. Sinon, on peut charger tout comme nous l'avons fait précédemment: \layout LyX-Code emc2$ \series bold halrun \newline \series default halcmd: \series bold loadrt siggen \newline \series default halcmd: \series bold loadrt threads name1=test-thread period1=1000000 \newline \series default halcmd: \series bold addf siggen.0.update test-thread \newline \series default halcmd: \series bold start \newline \series default halcmd: \series bold setp siggen.0.amplitude 5 \layout Subsection Lancement de halmeter \layout Standard À ce stade, nous avons chargé le composant siggen qui est en cours d'exécution. Nous pouvons lancer halmeter. Puisque halmeter est une application graphique, X doit être actif. \layout LyX-Code halcmd: \series bold loadusr halmeter \layout Standard Dans le même temps, une fenêtre s'ouvre sur votre écran, ressemblant à la figure \begin_inset LatexCommand \ref{fig:Halmeter-demo-1} \end_inset . \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halmeter-demo-1.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halmeter-demo-1} \end_inset Lancement de Halmeter, rien n'est sélectionné \end_inset \layout Subsection Utilisation de halmeter \layout Standard La fenêtre de la figure \begin_inset LatexCommand \ref{fig:Halmeter-demo-1} \end_inset n'est pas d'une grande utilité, parce qu'elle n'affiche rien. Pour afficher des valeurs, cliquez sur le bouton 'Select', le dialogue de sélection des éléments à mesurer (figure \begin_inset LatexCommand \ref{fig:Halmeter-demo-2} \end_inset ). \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halmeter-demo-2.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halmeter-demo-2} \end_inset Dialogue de sélection de Halmeter \end_inset \layout Standard Ce dialogue contient trois onglets. Le premier onglet affiche toutes les HAL pins du système. La seconde affiche tous les signaux et le troisième affiche tous les paramètres. Si nous voulons analyser la pin \family typewriter siggen.0.triangle \family default , il suffit de cliquer sur elle puis sur le bouton 'OK'. Le dialogue de sélection se ferme et la mesure s'affiche, quelque chose comme sur la figure \begin_inset LatexCommand \ref{fig:Halmeter-demo-3} \end_inset . \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halmeter-demo-3.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halmeter-demo-3} \end_inset Affichage dans Halmeter de la valeur d'une pin \end_inset \layout Standard Vous devriez voir la valeur évoluer à mesure que siggen génère son signal triangulaire. Halmeter est raffraîchi environ 5 fois par seconde. \layout Standard Si vous voulez visualiser rapidement des pins successives, vous pouvez cliquer le bouton 'Accept' du dialogue de sélection. Cliquez 'Select' pour ouvrir le dialoque une nouvelle fois. Mais cette fois, cliquez une autre pin, comme siggen.0.cosine, puis cliquez 'Accept'. La nouvelle valeur s'affiche alors immédiatement, mais le dialogue de sélection reste ouvert. Essayez d'afficher un paramètre au lieu d'une pin. Cliquez sur l'onglet 'Parameters', puis sélectionnez un paramètre et cliquez encore sur 'Accept'. Vous pouvez ainsi afficher très rapidement la valeur d'un élément puis d'un autre en quelques clics. \layout Standard Pour arrêter halmeter, cliquez simplement sur le bouton \begin_inset Quotes eld \end_inset quitter \begin_inset Quotes erd \end_inset . \layout Standard Si vous voulez regarder plus d'une pin, plus d'un signal, ou plusieurs paramètre s à la fois, il vous suffit de lancer plusieurs instances de halmeters. La fenêtre de halmeter a été conçue petite, pour permettre d'en avoir beaucoup à la fois sur l'écran. \begin_inset Foot collapsed false \layout Standard Halmeter sera réécrit. Cette réécriture le rendra plus agréable à utiliser. La notation scientifique sera éliminée, elle est trop difficile à lire. Certaines formes d'échelles seront ajoutées (y compris, une échelle automatique ) pour afficher des échelles plus grandes sans notation scientifique. Un affichage par \begin_inset Quotes eld \end_inset bargraph analogique \begin_inset Quotes erd \end_inset sera également ajouté pour donner une idée des évolutions rapides. Quand cette réécriture sera terminée, ces captures d'écran et les textes les accompagnant seront révisés pour refléter la nouvelle version. \end_inset \layout Standard \begin_inset ERT status Collapsed \layout Standard \backslash clearpage \end_inset \layout Section \begin_inset LatexCommand \label{sec:Tutorial - Plus complexe} \end_inset Un exemple un peu plus complexe. \layout Standard Jusqu'à maintenant, nous avons chargé un composant HAL. Mais l'idée générale de HAL est de vous permettre de charger et de relier un grand nombre de composants pour en faire un système complexe. Le prochain exemple va utiliser deux composants. \layout Standard Avant de mettre en place ce nouvel exemple, nous allons commencer par un petit nettoyage. Si vous avez fini l'un des exemples précédents, il faut supprimer tous les composants et ensuite recharger la RTAPI et les librairies de HAL en faisant: \layout LyX-Code halcmd: \series bold exit \newline \series default emc2$ \series bold halrun \layout Subsection Installation des composants \layout Standard Maintenant, nous allons charger le composant générateur d'impulsions. Pour l'instant, nous pouvons nous passer des détails et exécuter les commandes suivantes: \begin_inset Foot collapsed false \layout Standard Le signe \begin_inset Quotes eld \end_inset \backslash \begin_inset Quotes erd \end_inset à la fin d'une longue ligne indique que la ligne est tronquée (c'est nécessaire pour formater ce document). Quand vous entrez la commande en ligne dans la console, sautez simplement le \begin_inset Quotes eld \end_inset \backslash \begin_inset Quotes erd \end_inset (ne pressez pas Entrée) et continuez à taper la ligne suivante. \end_inset \layout LyX-Code halrun: \series bold loadrt freqgen step_type=0,0 \newline \series default halcmd: \series bold loadrt siggen \newline \series default halcmd: \series bold loadrt threads name1=fast fp1=0 period1=50000 name2=slow period2=1000000 \layout Standard La première commande charge deux générateurs d'impulsions, configurés pour générer des impulsions de type 0. La seconde commande charge notre vieil ami siggen et la troisième crée deux threads, un rapide (fast) avec une période de 50 \begin_inset Formula $µ$ \end_inset s et un lent avec une période de 1ms. Le thread rapide ne prend pas en charge les fonctions à virgule flottante (fp1=0). \layout Standard Comme précédemment, on peut utiliser \family typewriter halcmd show \family default pour jeter un coup d'oeil au HAL. Cette fois, nous aurons beaucoup plus de pins et de paramètres que précédemment : \layout LyX-Code halcmd: \series bold show pin \newline \series default Component Pins: \newline Owner Type Dir Value Name \newline 03 float -W 0.00000e+00 siggen.0.cosine \newline 03 float -W 0.00000e+00 siggen.0.sawtooth \newline 03 float -W 0.00000e+00 siggen.0.sine \newline 03 float -W 0.00000e+00 siggen.0.square \newline 03 float -W 0.00000e+00 siggen.0.triangle \newline 02 s32 -W 0 freqgen.0.counts \newline 02 bit -W FALSE freqgen.0.dir \newline 02 float -W 0.00000e+00 freqgen.0.position \newline 02 bit -W FALSE freqgen.0.step \newline 02 float R- 0.00000e+00 freqgen.0.velocity \newline 02 s32 -W 0 freqgen.1.counts \newline 02 bit -W FALSE freqgen.1.dir \newline 02 float -W 0.00000e+00 freqgen.1.position \newline 02 bit -W FALSE freqgen.1.step \newline 02 float R- 0.00000e+00 freqgen.1.velocity \newline halcmd: \series bold show param \newline \series default Parameters: \newline Owner Type Dir Value Name \newline 03 float -W 1.00000e+00 siggen.0.amplitude \newline 03 float -W 1.00000e+00 siggen.0.frequency \newline 03 float -W 0.00000e+00 siggen.0.offset \newline 02 u32 -W 000000001 freqgen.0.dirhold \newline 02 u32 -W 000000001 freqgen.0.dirsetup \newline 02 float R- 0.00000e+00 freqgen.0.frequency \newline 02 float -W 0.00000e+00 freqgen.0.maxaccel \newline 02 float -W 1.00000e+15 freqgen.0.maxfreq \newline 02 float -W 1.00000e+00 freqgen.0.position-scale \newline 02 s32 R- 0 freqgen.0.rawcounts \newline 02 u32 -W 000000001 freqgen.0.steplen \newline 02 u32 -W 000000001 freqgen.0.stepspace \newline 02 float -W 1.00000e+00 freqgen.0.velocity-scale \newline 02 u32 -W 000000001 freqgen.1.dirhold \newline 02 u32 -W 000000001 freqgen.1.dirsetup \newline 02 float R- 0.00000e+00 freqgen.1.frequency \newline 02 float -W 0.00000e+00 freqgen.1.maxaccel \newline 02 float -W 1.00000e+15 freqgen.1.maxfreq \newline 02 float -W 1.00000e+00 freqgen.1.position-scale \newline 02 s32 R- 0 freqgen.1.rawcounts \newline 02 u32 -W 000000001 freqgen.1.steplen \newline 02 u32 -W 000000001 freqgen.1.stepspace \newline 02 float -W 1.00000e+00 freqgen.1.velocity-scale \layout Subsection Connecter les pins avec des signaux \layout Standard Nous avons donc deux générateurs d'impulsions carrées et un générateur de signaux. Maintenant, nous allons créer des signaux HAL pour connecter ces trois composants. Nous allons faire comme si nous pilotions les axes X et Y d'une machine avec nos générateurs d'impulsions. Nous voulons déplacer la table en ronds. Pour ce faire, nous allons envoyer un signal cosinusoïdal à l'axe des X et un signal sinusoïdal à l'axe des Y. Le module siggen créera le sinus et le cosinus, mais nous aurons besoin de \begin_inset Quotes eld \end_inset fils \begin_inset Quotes erd \end_inset pour connecter les modules ensemble. Dans le HAL, les \begin_inset Quotes eld \end_inset fils \begin_inset Quotes erd \end_inset sont appelés signaux. Nous devons en créer deux. Nous pouvons les appeler comme on veut, pour cet exemple il y aura \family typewriter X_vel \family default et \family typewriter Y_vel \family default . Le signal \family typewriter X_vel \family default partira de la sortie cosinus du générateur de signal et arrivera sur l'entrée \begin_inset Quotes eld \end_inset velocity \begin_inset Quotes erd \end_inset du premier générateur d'impulsions. La première étape consiste à connecter le signal à la sortie du générateur de signaux. Pour connecter un signal à une pin, nous utilisons la commande \family typewriter net \family default : \layout LyX-Code halcmd: \series bold net X_vel <= siggen.0.cosine \layout Standard Pour voir l'effet de la commande \family typewriter net \family default , regardons les signaux: \layout LyX-Code halcmd: \series bold show sig \series default \newline ignals: \newline Type Value Name \newline float 0.00000e+00 X_vel \newline <== siggen.0.cosine \layout Standard Quand un signal est connecté à une ou plusieurs pins, la commande \family typewriter show \family default liste les pins immédiatement suivies par nom du signal. Les flèches montrent la direction du flux de données, dans ce cas, les flux vont de la pin \family typewriter siggen.0.cosine \family default pour le signal \family typewriter X_vel \family default . Maintenant, connectons \family typewriter X_vel \family default à l'entrée \begin_inset Quotes eld \end_inset velocity \begin_inset Quotes erd \end_inset du générateur d'impulsions carrées: \layout LyX-Code halcmd: \series bold net X_vel => freqgen.0.velocity \layout Standard On peut aussi connecter l'axe Y au signal \family typewriter Y_vel \family default . Il doit partir de la sortie sinus du générateur de signal pour arriver sur l'entrée du second générateur d'impulsions carrées. La commande suivante fait en une ligne, la même chose que les deux commandes \family typewriter net \family default précédentes ont fait pour \family typewriter X_vel \family default : \layout LyX-Code halcmd: \series bold net Y_vel siggen.0.sine => freqgen.1.velocity \layout Standard Regardons une dernière fois les signaux et les pins connectés ensembles: \layout LyX-Code halcmd: \series bold show sig \series default \newline Signals: \newline Type Value Name \newline float 0.00000e+00 X_vel \newline <== siggen.0.cosine \newline ==> freqgen.0.velocity \newline float 0.00000e+00 Y_vel \newline <== siggen.0.sine \newline ==> freqgen.1.velocity \layout Standard Avec la commande \family typewriter show sig \family default on voit clairement comment les flux de données traversent le HAL. Par exemple, le signal \family typewriter X_vel \family default part de la pin \family typewriter siggen.0.cosine \family default et arrive sur la pin \family typewriter freqgen.0.velocity \family default . \layout Subsection Exécuter les réglages du temps réel - threads et functions \layout Standard Penser à ce qui circule dans les \begin_inset Quotes eld \end_inset fils \begin_inset Quotes erd \end_inset rend les pins et les signaux assez faciles à comprendre. Les threads et les fonctions sont un peu plus difficiles. Les fonctions contiennent des instructions pour l'ordinateur. Les threads sont les méthodes utilisées pour faire exécuter ces instructions quand c'est nécessaire. Premièrement, regardons les fonctions dont nous disposons: \layout LyX-Code halcmd: \series bold show funct \newline \series default Exported Functions: \newline Owner CodeAddr Arg FP Users Name \newline 03 D89051C4 D88F10FC YES 0 siggen.0.update \newline 02 D8902868 D88F1054 YES 0 freqgen.capture_position \newline 02 D8902498 D88F1054 NO 0 freqgen.make_pulses \newline 02 D89026F0 D88F1054 YES 0 freqgen.update_freq \layout Standard En règle générale, vous devez vous référer à la documentation de chaque composant pour voir ce que font ses fonctions. Dans notre exemple, la fonction \family typewriter siggen.0.update \family default est utilisée pour mettre à jour les sorties du générateur de signaux. Chaque fois qu'elle est exécutée, le générateur recalcule les valeurs de ses sorties sinus, cosinus, triangle, carrée. Pour générer un signal régulier, il doit fonctionner à des intervalles bien spécifiques. \layout Standard Les trois autres fonctions sont liées au générateur d'impulsions: \layout Standard La première, \family typewriter freqgen.capture_position \family default , est utilisée pour un retour de position. Elle capture la valeur d'un compteur interne qui compte les impulsions qui sont générées. S'il n'y a pas de perte de pas, ce compteur indique la position du moteur. \layout Standard La fonction principale du générateur d'impulsions est \family typewriter freqgen.make_pulses \family default . Chaque fois que \family typewriter make_pulses \family default démarre elle décide qu'il est temps de faire un pas, si oui il fixe les sorties en conséquence. Pour des pas plus doux, il doit fonctionner le plus souvent possible. Parce qu'il a besoin de fonctionner de manière rapide, \family typewriter make_pulses \family default est hautement optimisé et n'effectue que quelques calculs. Contrairement aux autres, il n'a pas besoin de virgule flottante pour ses calculs. \layout Standard La dernière fonction, \family typewriter freqgen.update_freq \family default , est responsable de l'échelle et de quelques autres calculs qui ne doivent être effectués que lors d'une commande de changement de fréquence. \layout Standard Pour notre exemple nous voulons faire tourner \family typewriter siggen.0.update \family default avec une vitesse de calcul des valeurs sinus et cosinus modérée. Immédiatement après, nous lançons \family typewriter siggen.0.update \family default . Nous voulons lancer \family typewriter freqgen.update_freq \family default pour charger les nouvelles valeurs dans le générateur d'impulsions. Finalement nous lancerons \family typewriter freqgen.make_pulses \family default aussi vite que possible pour des pas plus doux. Comme nous n'utilisons pas de retour de position, nous n'avons pas besoin de lancer \family typewriter freqgen.capture_position \family default . \layout Standard Nous lançons les fonctions en les ajoutant aux threads. Chaque thread va à une vitesse spécifique. Regardons de quels threads nous disposons: \layout LyX-Code halcmd: \series bold show thread \series default \newline Realtime Threads: \newline Period FP Name \newline 1005720 YES slow ( 0, 0 ) \newline 50286 NO fast ( 0, 0 ) \layout Standard Les deux \family typewriter threads \family default ont été créés lorsque nous les avons chargés. Le premier, \family typewriter slow \family default , tourne toutes les millisecondes, il est capable d'exécuter des fonctions en virgule flottante (FP). Nous l'utilisons pour s \family typewriter iggen.0.update \family default et \family typewriter freqgen.update_freq \family default . Le deuxième thread est \family typewriter fast \family default , il tourne toutes les 50 microsecondes, il ne prend pas en charge les calculs en virgule flottante. Nous l'utilisons pour \family typewriter freqgen.make_pulses \family default . Pour connecter des fonctions au bon thread, nous utilisons la commande \family typewriter addf \family default . Nous spécifions la fonction en premier suivie par le thread: \layout LyX-Code halcmd: \series bold addf siggen.0.update slow \series default \newline halcmd: \series bold addf freqgen.update_freq slow \series default \newline halcmd: \series bold addf freqgen.make_pulses fast \layout Standard Après avoir lancé ces commandes, nous pouvons lancer la commande \family typewriter show thread \family default une nouvelle fois pour voir ce qui ce passe: \layout LyX-Code halcmd: \series bold show thread \newline \series default Realtime Threads: \newline Period FP Name (Time, Max-Time) \newline 1005720 YES slow ( 0, 0 ) \newline 1 siggen.0.update \newline 2 freqgen.update-freq \newline 50286 NO fast ( 0, 0 ) \newline 1 freqgen.make-pulses \layout Standard Maintenant, chaque thread est suivi par les noms des fonctions, dans l'ordre dans lequel les fonctions seront exécutées. \layout Subsection Réglage des paramètres \layout Standard Nous sommes presque prêts à démarrer notre système HAL. Mais il faut auparavant régler quelques paramètres. Par défaut le composant siggen génère des signaux qui varient entre +1 et -1. Pour notre exemple, c'est très bien, nous voulons que la vitesse de la table varie de +1 à -1 pouce par seconde. Toutefois, l'échelle du générateur d'impulsions de pas n'est pas bonne. Par défaut, il génère une fréquence de sortie de 1 pas par seconde avec une capacité de 1000. Il est fort improbable qu'un pas par seconde nous donne une vitesse de déplacement de la table d'un pouce par seconde. Supposons que notre vis fasse 5 tours par pouce, couplée à un moteur pas à pas de 200 pas par tour et une interface qui fournit 10x micropas par pas. Il faut donc 2000 pas pour faire un tour de vis et 5 tours pour faire un pouce. Ce qui signifie que notre montage utilisera 10000 pas par pouce. Nous avons besoin de multiplier la vitesse d'entrée à l'étape générateur d'impulsions par 10000 pour obtenir la bonne valeur. C'est exactement pour cela qu'existe le paramètre \family typewriter freqgen.n.velocity-scale \family default . Dans notre cas, les axes X et Y ont la même échelle et nous pouvons passer les deux paramètres à 10000: \layout LyX-Code halcmd: \series bold setp freqgen.0.velocity-scale 10000 \newline \series default halcmd: \series bold setp freqgen.1.velocity-scale 10000 \layout Standard Cela signifie que, avec la pin \family typewriter freqgen.0.velocity \family default à 1.000 et le générateur réglé pour 10000 impulsions par seconde (10kHz), avec le moteur et la vis décrits précédemment, nos axes auront une vitesse de déplacement de exactement 1.000 pouce par seconde. Cela illustre une notion clé du concept de HAL, des éléments comme les échelles étant au plus bas niveau possible, dans notre exemple le générateur d'impulsions de pas, le signal interne \family typewriter X_vel \family default est celui de la vitesse de déplacement de la table en pouces par seconde. Les autres composants comme \family typewriter siggen \family default ne savent rien du tout à propos de l'échelle des autres. Si on change de vis, ou de moteur, il n'y a qu'un seul paramètre à changer, l'échelle du générateur d'impulsions de pas. \layout Subsection Lançons le! \layout Standard Nous avons maintenant tout configuré et sommes prêts à démarrer. Tout comme dans le premier exemple, nous utilisons la commande \family typewriter start \family default : \layout LyX-Code halcmd: \series bold start \layout Standard Bien que rien ne semble se produire, à l'intérieur de l'ordinateur les impulsion s de pas sont présentes sur la sortie du générateur, variant entre 10kHz dans un sens et 10kHz dans l'autre à chaque seconde. Dans la suite de ce tutoriel, nous allons voir comment convertir ces signaux internes des moteurs dans le monde réel, mais nous allons d'abord les examiner pour voir ce qui se passe. \layout Section \begin_inset LatexCommand \label{sec:Tutoriel - Halscope} \end_inset Voyons-y de plus près avec halscope. \layout Standard L'exemple précédent génère certains signaux très intéressants. Mais beaucoup de ce qui se passe est beaucoup trop rapide pour être vu avec halmeter. Pour examiner de plus près ce qui se passe à l'intérieur de HAL, il faudrait un oscilloscope. Heureusement HAL en a un, appelé halscope. \layout Subsection Démarrer Halscope \layout Standard Halscope comporte deux parties, une partie en temps réel qui est chargée comme un module de noyau et une partie utilisateur qui fournit l'interface graphique et l'affichage. Cependant, vous n'avez pas à vous inquiéter à ce sujet car l'interface demandera automatiquement que la partie temps réel soit chargée: \layout LyX-Code halcmd: \series bold loadusr halscope \layout Standard La fenêtre graphique du scope s'ouvre, immédiatement suivie par un dialogue \begin_inset Quotes eld \end_inset Realtime function not linked \begin_inset Quotes erd \end_inset visible sur la figure \begin_inset LatexCommand \ref{fig:Halscope-demo-1} \end_inset \begin_inset Foot collapsed true \layout Standard Plusieurs de ces captures d'écran font référence à des threads nommés \begin_inset Quotes eld \end_inset siggen.thread \begin_inset Quotes erd \end_inset et \begin_inset Quotes eld \end_inset stepgen.thread \begin_inset Quotes erd \end_inset au lieu de \begin_inset Quotes eld \end_inset slow \begin_inset Quotes erd \end_inset et \begin_inset Quotes eld \end_inset fast \begin_inset Quotes erd \end_inset . Lorsque les captures d'écran ont été faites, les composants thread n'existaient pas et différentes méthodes étaient utilisées pour créer des threads en leur donnant des noms différents. Aussi, les captures d'écran montrent des , etc, comme \begin_inset Quotes eld \end_inset stepgen.xxx \begin_inset Quotes erd \end_inset au lieux de \begin_inset Quotes eld \end_inset freqgen.xxx \begin_inset Quotes erd \end_inset . Le nom original du module freqgen était stepgen et je n'ai pas eux le temps depuis pour refaire toutes les captures avec les nouveaux noms. Le nom \begin_inset Quotes eld \end_inset stepgen \begin_inset Quotes erd \end_inset actuel fait référence à un générateur d'impulsions de pas différent, un qui accepte les commandes de position au lieu de celles de vitesse. Les deux sont décrit en détail plus loin dans ce document. \end_inset . \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halscope-demo-1.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halscope-demo-1} \end_inset Dialogue \begin_inset Quotes eld \end_inset Realtime function not linked \begin_inset Quotes erd \end_inset \end_inset \layout Standard Ce dialogue est l'endroit où vous définissez le taux d'échantillonnage de l'oscilloscope. Pour le moment nous voulons un échantillon par milliseconde, alors cliquez sur le thread \begin_inset Quotes eld \end_inset slow \begin_inset Quotes erd \end_inset 1.03mSec et laissez le multiplicateur à 1. Nous allons aussi passer la longueur d'enregistrement à 4047 samples (échantill ons), de sorte que nous puissions utiliser jusqu'à 4 canaux simultanément. Quand vous sélectionnez un thread puis que vous cliquez sur le bouton \begin_inset Quotes eld \end_inset OK \begin_inset Quotes erd \end_inset , le dialogue disparaît et la fenêtre du scope affiche quelque chose comme sur la figure \begin_inset LatexCommand \ref{fig:Halscope-demo-2} \end_inset . \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halscope-demo-2.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halscope-demo-2} \end_inset Fenêtre initiale du scope \end_inset \layout Standard \begin_inset ERT status Collapsed \layout Standard \backslash clearpage \end_inset \layout Subsection Branchement des \begin_inset Quotes eld \end_inset sondes du scope \begin_inset Quotes erd \end_inset \layout Standard À ce stade, Halscope est prêt à l'emploi. Nous avons déjà choisi le taux d'échantillonnage et la longueur d'enregistremen t, de sorte que la prochaine étape consiste à décider de ce qu'il faut mesurer. C'est équivalent à brancher les \begin_inset Quotes eld \end_inset sondes virtuelles du scope \begin_inset Quotes erd \end_inset à HAL. Halscope dispose de 16 canaux, mais le nombre que vous pouvez utiliser à un moment donné dépend de la longueur d'enregistrement, plus il y a de canaux, plus les enregistrements doivent être courts, car la mémoire disponible pour l'enregistrement est fixée à environ 16000 échantillons. \layout Standard Les boutons des canaux se situent en dessous de l'écran du scope. Cliquez le boutton \begin_inset Quotes eld \end_inset 1 \begin_inset Quotes erd \end_inset et vous verrez apparaître le dialogue de sélection \begin_inset Quotes eld \end_inset Select Channel Source \begin_inset Quotes erd \end_inset , comme sur la figure \begin_inset LatexCommand \ref{fig:Halscope-demo-3} \end_inset . Ce dialogue est très similaire à celui utilisé par Halmeter. Nous aimerions bien regarder les signaux que nous avons défini précédemment, pour cela, cliquons sur l'onglet \begin_inset Quotes eld \end_inset Signaux \begin_inset Quotes erd \end_inset et le dialogue affichera tous les signaux existants dans le HAL (seulement deux dans notre exemple). \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halscope-demo-3.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halscope-demo-3} \end_inset Dialogue de sélection du scope \end_inset \layout Standard Pour choisir un signal, il suffit de cliquer dessus. Dans notre cas, nous voulons utiliser le canal 1 pour afficher le signal `` X_vel''. Lorsque l'on clique sur `` X_vel'', la fenêtre se ferme et le canal a été sélectionné. Le bouton du canal 1 est pressé et le numéro du canal 1 et le nom `` X_vel'' apparaissent sous la rangée de boutons. L'affichage indique toujours le canal sélectionné, vous pouvez avoir beaucoup de canaux sur l'écran, mais celui qui est actif sera en surbrillance. Les différents contrôles comme la position verticale et l'amplitude sont toujours relatifs au canal 1. Pour ajouter un signal au canal 2, cliquez sur le bouton "2''. Dans la fenêtre de dialogue, cliquez sur l'onglet "Signals'', puis cliquez sur `` Y_vel''. \layout Standard Nous voulons aussi voir les signaux carrés et triangles produits. Il n'existe pas de signaux connectés à ces pins, nous utilisons donc l'onglet ``Pins \begin_inset Quotes erd \end_inset . Pour le canal 3, sélectionnez `` siggen.0.triangle'' et pour le canal 4, choisissez `` siggen.0.square''. \begin_inset Note collapsed false \layout Standard Le composant siggen utilise maintenant 0 comme valeur de départ, ces captures d'écran ont beoin d'être mises à jour. \end_inset \layout Standard \begin_inset ERT status Collapsed \layout Standard \backslash clearpage \end_inset \layout Subsection Capturer notre première forme d'onde \layout Standard Maintenant que nous avons plusieurs sondes branchées sur HAL, il est temps de capturer quelques formes d'ondes. Pour démarrer le scope, cochez la case "Normal'' du groupe ``run mode'' (en haut à droite). Puisque nous avons une longueur d'enregistrement de 4000 échantillons et une acquisition de 1000 échantillons par seconde, il faudra à halscope environ 2 secondes pour remplir la moitié de son tampon. Pendant ce temps, une barre de progression juste au-dessus de l'écran principal affichera le remplissage du tampon. Une fois que le tampon est à moitié plein, scope attend un déclencheur. Puisque nous n'en avons pas encore configuré, il attendra toujours. Pour déclencher manuellement, cliquez sur le bouton "Force'' du groupe `` Trigger'' en haut à droite. Vous devriez voir le reste de la zone tampon se remplir, puis l'écran afficher les ondes capturées. Le résultat ressemble à la figure \begin_inset LatexCommand \ref{fig:Halscope-demo-4} \end_inset . \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halscope-demo-4.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halscope-demo-4} \end_inset Capture d'ondes \end_inset \layout Standard Le grand bouton \begin_inset Quotes eld \end_inset Selected Channel \begin_inset Quotes erd \end_inset en bas, indique que le canal 4 est actuellement sélectionné, donc, qu'il correspond à l'onde verte, celle de la mesurée sur la pin \begin_inset Quotes eld \end_inset siggen.1.square \begin_inset Quotes erd \end_inset . Essayez de cliquer sur les autres canaux pour mettre leurs traces en évidence. \layout Standard \begin_inset ERT status Collapsed \layout Standard \backslash clearpage \end_inset \layout Subsection Ajustement vertical \layout Standard Les traces sont assez difficiles à distinguer car toutes les quatre sont les unes sur les autres. Pour résoudre ce problème, nous utilisons le curseur \begin_inset Quotes eld \end_inset Vertical \begin_inset Quotes erd \end_inset situé à droite de l'écran. Ces contrôles agissent sur le canal actuellement sélectionné. En ajustant le gain, notez qu'il couvre une large échelle (contrairement aux scopes réels), celle-ci permet d'afficher des signaux très petits (pico unités) à très grands (Tera - unités). Le curseur \begin_inset Quotes eld \end_inset position \begin_inset Quotes erd \end_inset déplace la trace affichée de haut en bas sur toute la hauteur de l'écran. Pour de plus grands ajustements le bouton Offset doit être utilisé (voir les références halscope dans la section \begin_inset LatexCommand \ref{sec:Halscope} \end_inset pour plus de détails). \layout Subsection Triggering \layout Standard L'utilisation du bouton \begin_inset Quotes eld \end_inset Force \begin_inset Quotes erd \end_inset n'est parfois pas satisfaisante pour déclencher le scope. Pour régler un déclenchement (triggering) réel, cliquez sur le bouton \begin_inset Quotes eld \end_inset Source \begin_inset Quotes erd \end_inset situé en bas à droite. Il ouvre alors le dialogue \begin_inset Quotes eld \end_inset Trigger Source \begin_inset Quotes erd \end_inset , qui est simplement la liste de toutes les sondes actuellement branchées (Figure \begin_inset LatexCommand \ref{fig:Halscope-demo-5} \end_inset ). Sélectionnez la sonde à utiliser pour déclencher en cliquant dessus. Pour notre exemple nous utilisons 3 canaux, essayez l'onde triangle. \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halscope-demo-5.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halscope-demo-5} \end_inset Dialogue des sources de déclenchement \end_inset \layout Standard Après avoir défini les sources de déclenchement, vous pouvez ajuster le niveau de déclenchement avec les curseurs dans la boîte `` Trigger'' le long du bord droit. Le niveau peut être modifié à partir du haut vers le bas de l'écran, et est affiché sous les curseurs. La position est l'emplacement du point de déclenchement dans l'enregistrement complet. Avec le curseur tout en bas, le point de déclenchement est à la fin de l'enregistrement, et halscope affiche ce qui s'est passé avant le point de déclenchement. Lorsque le curseur est tout en haut, le point de déclenchement est au début de l'enregistrement, l'affichage représente ce qui s'est passé après le point de déclenchement. Le point de déclenchement est visible comme une ligne verticale dans la barre de progression située juste au dessus de l'écran. La polarité du signal de déclenchement peut être inversée en cliquant sur le bouton situé juste sous l'affichage du niveau de déclenchement. Notez que la modification de la position de déclenchement arrête le scope une fois la position ajustée, vous relancez le scope en cliquant sur le bouton \begin_inset Quotes eld \end_inset Normal \begin_inset Quotes erd \end_inset du groupe \begin_inset Quotes eld \end_inset Run Mode \begin_inset Quotes erd \end_inset . \layout Standard Maintenant que nous avons réglé la position verticale et le déclenchement, l'écran doit ressembler à la figure \begin_inset LatexCommand \ref{fig:Halscope-demo-6} \end_inset . \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halscope-demo-6.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halscope-demo-6} \end_inset Formes d'ondes avec déclenchement \end_inset \layout Standard \begin_inset ERT status Collapsed \layout Standard \backslash clearpage \end_inset \layout Subsection Ajustement horizontal \layout Standard Pour examiner de près une partie d'une forme d'onde, vous pouvez utiliser le zoom au dessus de l'écran pour étendre la trace horizontalement et le curseur de position pour déterminer quelle partie de l'onde zoomée est visible. Parfois simplement élargir l'onde n'est pas suffisant et il faut augmenter la fréquence d'échantillonnage. Par exemple, nous aimerions voir les impulsions de pas qui sont générés dans notre exemple. Mais les impulsions de pas font seulement 50 \begin_inset Formula $µ$ \end_inset s de long, l'échantillonnage à 1kHz n'est pas assez rapide. Pour changer le taux d'échantillonnage, cliquez sur le bouton qui affiche la longueur de l'enregistrement et l'échantillonnage pour avoir le dialogue \begin_inset Quotes eld \end_inset Select Sample Rate \begin_inset Quotes erd \end_inset , figure \begin_inset LatexCommand \ref{fig:Halscope-demo-7} \end_inset . Pour notre exemple, nous cliquerons sur le thread à 50uS, \begin_inset Quotes eld \end_inset fast \begin_inset Quotes erd \end_inset , qui fournira un échantillonnage à environ 20KHz. Maintenant au lieu d'afficher environ 4 secondes de données, un enregistrement est de 4000 échantillons à 20KHz, soit environ 0.20 seconde. \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halscope-demo-7.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halscope-demo-7} \end_inset Dialogue de choix d'échantillonnage \end_inset \layout Standard \begin_inset ERT status Collapsed \layout Standard \backslash clearpage \end_inset \layout Subsection Plus de canaux \layout Standard Maintenant regardons les impulsions de pas. Halscope dispose de 16 canaux, mais pour cet exemple, nous en utilisons seulement 4 à la fois. Avant de sélectionner tout autre canal, nous avons besoin d'en éteindre certains. Cliquez sur le canal 2, puis sur le bouton "Off'' sous le groupe `` vertical''. Ensuite, cliquez sur le canal 3, mettez le off et faites de même pour le canal 4. Même si les circuits sont éteints, ils ont encore en mémoire ce à quoi ils sont connectés et en fait, nous continuerons d'utiliser le canal 3 comme source de déclenchement. Pour ajouter de nouveaux canaux, sélectionnez le canal 5, choisissez la pin `` stepgen.1.dir'', puis canal 6 et sélectionnez "stepgen.1.step''. Ensuite, cliquez sur "mode Normal'' pour lancer le scope, ajustez le zoom horizontal à 5ms par division. Vous devriez voir les impulsions de pas ralentir à la vitesse commandée (channel 1) approcher de zéro, puis la pin de direction changer d'état et les impulsions de pas reprendre de nouveau de la vitesse. Vous aurez peut être besoin d'augmenter le gain sur le canal 1 à environ 20ms par division afin de mieux voir l'évolution de la vitesse de commande. Le résultat devrait être proche de celui de la figure \begin_inset LatexCommand \ref{fig:Halscope-demo-8} \end_inset . \layout Standard \begin_inset Float figure wide false collapsed false \layout Standard \align center \begin_inset Graphics filename halscope-demo-8.png \end_inset \layout Caption \begin_inset LatexCommand \label{fig:Halscope-demo-8} \end_inset Observer les impulsions de pas \end_inset \layout Subsection Plus d'échantillons \layout Standard Si vous souhaitez enregistrer plus d'échantillons à la fois, redémarrez le temps réel et chargez halscope avec un argument numérique qui indique le nombre d'échantillons que vous voulez capturer, comme: \layout LyX-Code halcmd: \series bold loadusr halscope 80000 \layout Standard Si le composant \family typewriter scope_rt \family default n'est pas déjà chargé, halscope va le charger et lui demander un total de 80000 échantillons, de sorte que lorsque l'échantillonnage se fera sur 4 canaux à la fois, il y aura 20000 échantillons par canal. (Si \family typewriter scope_rt \family default est déjà chargé, l'argument numérique passé à halscope sera sans effet) \the_end