tutorial_fr.txt
1 :lang: fr 2 :toc: 3 4 = Le tutoriel de HAL 5 6 [[cha:Tutoriel-HAL]] (((Tutoriel de HAL))) 7 8 [[sec:Intro-tutoriel]] 9 == Introduction 10 (((Introduction))) 11 12 Halrun peut être utilisé pour créer un système complet et fonctionnel. 13 Il s'agit d'un outil de configuration et de mise au point très puissant, en 14 ligne de commande ou en fichier texte. Les exemples suivants illustrent son 15 installation et son fonctionnement. 16 17 [[sec:Tutoriel-Halcmd]] 18 == Halcmd 19 (((Tutoriel Halcmd))) 20 21 Halcmd est un outil en ligne de commande pour manipuler HAL. Il existe 22 une man page plus complète pour halcmd, elle sera installée en même 23 temps qu' LinuxCNC depuis ses sources ou depuis un paquet. Si LinuxCNC a été 24 compilé en _run-in-place_, la man page n'est pas installée, mais elle 25 est accessible, dans le répertoire principal de LinuxCNC, taper: 26 ---- 27 $ man -M docs/man halcmd 28 ---- 29 30 === Tab-complétion 31 32 Votre version de halcmd peut inclure la complétion avec la touche tab. 33 Au lieu de compléter les noms de fichiers comme le fait un shell, il 34 complète les commandes avec les identifiants HAL. Essayez de presser la 35 touche tab après le début d'une commande HAL: 36 ---- 37 halcmd: loa<TAB> 38 39 halcmd: load 40 41 halcmd: loadrt 42 43 halcmd: loadrt deb<TAB> 44 45 halcmd: loadrt debounce 46 ---- 47 48 === L'environnement RTAPI 49 50 RTAPI est le sigle de Real Time Application Programming Interface. De 51 nombreux composants HAL travaillent en temps réel et tous les 52 composants de HAL stockent leurs données dans la mémoire partagée, de 53 sorte que les composants temps réel puissent y accéder. Normalement, 54 Linux ne prend pas en charge les programmes temps réel ni le type de 55 mémoire partagée dont HAL a besoin. Heureusement, il existe des 56 systèmes d'exploitation temps réel RTOS qui fournissent les extensions 57 nécessaires à Linux. Malheureusement, chaque RTOS fait les choses 58 différemment des autres. 59 60 Pour remédier à ces différences, l'équipe de LinuxCNC a proposé RTAPI, qui 61 fournit une manière cohérente aux programmes de parler au RTOS. Si vous 62 êtes un programmeur qui veut travailler à l'intérieur de LinuxCNC, vous 63 pouvez étudier _linuxcnc/src/rtapi/rtapi.h_ pour comprendre l'API. Mais si 64 vous êtes une personne normale, tout 65 ce que vous avez besoin de savoir à propos de RTAPI est qu'il doit être 66 (avec le RTOS) chargé dans la mémoire de votre ordinateur avant de 67 pouvoir faire n'importe quoi avec HAL. 68 69 [[sec:Tutoriel-Exemple-Simple]] 70 == Tutoriel simple 71 (((Tutoriel simple))) 72 73 === Charger un composant temps réel 74 75 Pour ce tutoriel, nous allons supposer que vous avez installé avec 76 succès le CD-Live ou que vous avez compilé correctement l'arborescence 77 linuxcnc/src. Si nécessaire, invoquez le script _rip-environment_ pour 78 préparer votre shell. Dans ce cas, tout ce que vous avez à faire 79 est de charger le RTOS requis et les modules RTAPI dans la mémoire. 80 Tapez juste les commandes suivantes dans une console: 81 ---- 82 $cd linuxcnc 83 84 $linuxcnc halrun 85 86 $halcmd: 87 ---- 88 89 Avec l'OS temps réel et RTAPI chargés, vous pouvez passer au premier 90 exemple. Notez que le prompt a changé, il est passé de _+$+_ à _halcmd:_. 91 La raison en est que les commandes ultérieures seront interprétées 92 comme des commandes HAL et non plus comme des commandes shell. 93 94 Pour le premier exemple, nous allons utiliser un composant HAL appelé 95 _siggen_, qui est un simple générateur de signaux. Une description 96 complète de ce composant est disponible à la <<sec:Siggen, section siggen>> 97 de ce document. 98 Il s'agit d'un composant temps réel, mis en œuvre comme un module du 99 noyau Linux. Pour charger siggen utiliser la commande de HAL, _loadrt_: 100 ---- 101 halcmd: loadrt siggen 102 ---- 103 104 === Examiner HAL 105 106 Maintenant que le module est chargé, il faut introduire _halcmd_, 107 l'outil en ligne de commande utilisé pour configurer HAL. Pour une description 108 plus complète essayez: _man halcmd_, ou consultez la 109 section <<sec:Tutoriel-Halcmd, halcmd au début de ce document>>. La 110 première commande de halcmd et _show_, qui affichera les informations 111 concernant l'état actuel de HAL. Pour afficher tout ce qui est 112 installé tapez: 113 ---- 114 halcmd: show comp 115 116 Loaded HAL Components: 117 ID Type Name PID State 118 3 RT siggen ready 119 2 User halcmd2177 2177 ready 120 ---- 121 122 Puisque halcmd lui même est un composant HAL, il sera toujours 123 présent dans la liste. 124 Le nombre après halcmd dans la liste des composants est le 125 Process ID. Il est toujours possible de lancer plus d'une instance de 126 halcmd en même temps (dans différentes fenêtres par exemple), le numéro 127 PID est ajouté à la fin du nom pour rendre celui-ci unique. La liste 128 montre aussi le composant _siggen_ que nous avions installé à l'étape 129 précédente. Le _RT_ sous _Type_ indique que siggen est un composant temps réel. 130 131 Ensuite, voyons quelles pins siggen rend disponibles: 132 ---- 133 halcmd: show pin 134 135 Component Pins: 136 Owner Type Dir Value Name 137 3 float IN 1 siggen.0.amplitude 138 3 float OUT 0 siggen.0.cosine 139 3 float IN 1 siggen.0.frequency 140 3 float IN 0 siggen.0.offset 141 3 float OUT 0 siggen.0.sawtooth 142 3 float OUT 0 siggen.0.sine 143 3 float OUT 0 siggen.0.square 144 3 float OUT 0 siggen.0.triangle 145 ---- 146 147 Cette commande affiche toutes les pins présentes dans HAL. Un 148 système complexe peut avoir plusieurs dizaines ou centaines de pins. 149 Mais pour le moment il y a seulement huit pins. Toutes ces huit pins 150 sont des flottants, elles transportent toutes des données en provenance 151 du composant siggen. Puisque nous n'avons pas encore exécuté le code 152 contenu dans le composant, certaines pins ont une valeur de zéro. 153 154 L'étape suivante consiste à examiner les paramètres: 155 ---- 156 halcmd: show param 157 158 Parameters: 159 Owner Type Dir Value Name 160 3 s32 RO 0 siggen.0.update.time 161 3 s32 RW 0 siggen.0.update.tmax 162 ---- 163 164 La commande _show param_ affiche tous les paramètres de HAL. Pour le 165 moment chaque paramètre à la valeur par défaut attribuée quand le 166 composant a été chargé. Notez dans la colonne _Dir_, les paramètres 167 marqués _-W_ sont en écriture possible, pour ceux qui ne sont jamais 168 modifiés par 169 le composant lui-même, mais qui sont modifiables par l'utilisateur pour 170 contrôler le composant. Nous verrons comment plus tard. Les paramètres 171 marqués _R-_ sont en lecture seule. Il ne peuvent être modifiés que 172 par le composant. Finalement, les paramètres marqués _RW_ sont en 173 lecture/écriture. Ils peuvent être modifiés par le composant 174 et aussi par l'utilisateur. Nota: les paramètres 175 _siggen.0.update.time_ et _siggen.0.update.tmax_ existent dans un but 176 de débogage, ils ne sont pas couverts par cette documentation. 177 Les paramètres thread.time et thread.tmax sont associés avec le thread 178 créé quand le composant a été chargé. Quand la réécriture de HAL sera 179 terminée, le thread ne sera plus créé à ce stade, de sorte que ces 180 paramètres ne seront plus visibles. 181 182 Il n'y a pas de thread créé ici, mais il y a quand même les paramètres 183 _siggen.0.update.time_ et _siggen.0.update.tmax_. 184 185 Les paramètres de thread sont ceux du composant 02, le module siggen. 186 C'est incorrect, ils devraient être ceux du module hal_lib, parce que 187 le thread lui même n'est plus la propriété de siggen, et si 188 siggen est retiré, les paramètres devraient rester. 189 190 Et bien finalement, _fixer_ les paramètres de thread aura pris plus de 191 temps que je ne pensais. Donc, je les ai éliminés pour l'instant. Quand 192 la réécriture de HAL sera terminée, je les remettrai. 193 194 La plupart des composants temps réel exportent une ou plusieurs 195 fonctions pour que le code qu'elles contiennent soit exécuté en temps 196 réel. Voyons ce que la fonction siggen exporte: 197 ---- 198 halcmd: show funct 199 200 Exported Functions: 201 Owner CodeAddr Arg FP Users Name 202 00003 f801b000 fae820b8 YES 0 siggen.0.update 203 ---- 204 205 Le composant siggen exporte une seule fonction. Il nécessite un 206 flottant (Floating Point). Il n'est lié à aucun thread, puisque _users_ 207 est à zéro. footnote:[Les champs CodeAddr et Arg ont été utilisés 208 pendant le développement et devraient probablement disparaître.] 209 210 === Exécuter le code temps réel 211 212 Pour faire tourner le code actuellement contenu dans la fonction 213 _siggen.0.update_, nous avons besoin d'un thread temps réel. C'est le 214 composant appelé _threads_ qui est utilisé pour créer le nouveau 215 thread. Créons un thread appelé _test-thread_ avec une période de 1 ms 216 (1000 µs ou 1000000 ns): 217 ---- 218 halcmd: loadrt threads name1=test-thread period1=1000000 219 ---- 220 221 Voyons si il fonctionne: 222 ---- 223 halcmd: show thread 224 225 Realtime Threads: 226 Period FP Name ( Time, Max-Time ) 227 999855 YES test-thread ( 0, 0 ) 228 ---- 229 230 Il fonctionne. La période n'est pas exactement de 1000000 ns à cause 231 des limitations dues au matériel, mais nous avons bien un thread qui 232 tourne à une période approximativement correcte et qui peut manipuler 233 des fonctions en virgule flottante. La prochaine étape sera de 234 connecter la fonction au thread: 235 ---- 236 halcmd: addf siggen.0.update test-thread 237 ---- 238 239 Pour le moment nous avions utilisé halcmd seulement pour regarder 240 HAL. Mais cette fois-ci, nous avons 241 utilisé la commande _addf_ (add function) pour changer quelque chose 242 dans HAL. Nous avons dit 243 à halcmd d'ajouter la fonction _siggen.0.update_ au thread 244 _test-thread_ et la commande suivante indique qu'il a réussi: 245 ---- 246 halcmd: show thread 247 248 Realtime Threads: 249 Period FP Name ( Time, Max-Time ) 250 999855 YES test-thread ( 0, 0 ) 251 1 siggen.0.update 252 ---- 253 254 Il y a une étape de plus avant que le composant siggen ne commence 255 à générer des signaux. Quand HAL est démarré pour la 256 première fois, les threads ne sont pas en marche. C'est pour vous 257 permettre de compléter la configuration du système avant que le code 258 temps réel ne démarre. Une fois que vous êtes satisfait de la 259 configuration, vous pouvez lancer le code temps réel comme ceci: 260 ---- 261 halcmd: start 262 ---- 263 264 Maintenant le générateur de signal est en marche. Regardons ses pins 265 de sortie: 266 ---- 267 halcmd: show pin 268 269 Component Pins: 270 Owner Type Dir Value Name 271 3 float IN 1 siggen.0.amplitude 272 3 float OUT -0.1640929 siggen.0.cosine 273 3 float IN 1 siggen.0.frequency 274 3 float IN 0 siggen.0.offset 275 3 float OUT -0.4475303 siggen.0.sawtooth 276 3 float OUT 0.9864449 siggen.0.sine 277 3 float OUT -1 siggen.0.square 278 3 float OUT -0.1049393 siggen.0.triangle 279 ---- 280 281 Regardons encore une fois: 282 ---- 283 halcmd: show pin 284 285 Component Pins: 286 Owner Type Dir Value Name 287 3 float IN 1 siggen.0.amplitude 288 3 float OUT 0.0507619 siggen.0.cosine 289 3 float IN 1 siggen.0.frequency 290 3 float IN 0 siggen.0.offset 291 3 float OUT -0.516165 siggen.0.sawtooth 292 3 float OUT 0.9987108 siggen.0.sine 293 3 float OUT -1 siggen.0.square 294 3 float OUT 0.03232994 siggen.0.triangle 295 ---- 296 297 Nous avons fait, très rapidement, deux commandes _show pin_ et vous 298 pouvez voir que les sorties ne sont plus à zéro. Les sorties 299 sinus, cosinus, dents de scie et triangle changent constamment. La 300 sortie carrée fonctionne également, mais elle passe simplement de +1.0 301 à -1.0 à chaque cycle. 302 303 === Modifier des paramètres 304 305 La réelle puissance de HAL est de permettre de modifier les choses. 306 Par exemple, on peut utiliser la commande _setp_ pour ajuster la 307 valeur d'un paramètre. Modifions l'amplitude du 308 signal de sortie du générateur de 1.0 à 5.0: 309 ---- 310 halcmd: setp siggen.0.amplitude 5 311 ---- 312 313 Voyons encore une fois les paramètres et les pins: 314 ---- 315 halcmd: show param 316 317 Parameters: 318 Owner Type Dir Value Name 319 3 s32 RO 1754 siggen.0.update.time 320 3 s32 RW 16997 siggen.0.update.tmax 321 322 halcmd: show pin 323 324 Component Pins: 325 Owner Type Dir Value Name 326 3 float IN 5 siggen.0.amplitude 327 3 float OUT 0.8515425 siggen.0.cosine 328 3 float IN 1 siggen.0.frequency 329 3 float IN 0 siggen.0.offset 330 3 float OUT 2.772382 siggen.0.sawtooth 331 3 float OUT -4.926954 siggen.0.sine 332 3 float OUT 5 siggen.0.square 333 3 float OUT 0.544764 siggen.0.triangle 334 335 ---- 336 337 Notez que la valeur du paramètre _siggen.0.amplitude_ est bien passée 338 à 5.000 et que les pins ont maintenant des valeurs 339 plus grandes. 340 341 === Enregistrer la configuration de HAL 342 343 La plupart de ce que nous avons fait jusqu'ici avec halcmd a été de 344 simplement regarder les choses avec la commande show . Toutefois, 345 deux commandes ont réellement modifié des valeurs. Au fur 346 et à mesure que nous concevons des systèmes plus complexes avec HAL, 347 nous allons utiliser de nombreuses commandes pour le configurer comme 348 nous le souhaitons. HAL a une mémoire d'éléphant et peut retenir sa 349 configuration jusqu'à ce qu'il s'arrête. Mais qu'en est-il de la 350 prochaine fois ? Nous ne voulons pas entrer une série de commande à 351 chaque fois que l'on veut utiliser le système. Nous pouvons enregistrer 352 la configuration de l'ensemble de HAL en une seule commande: 353 ---- 354 halcmd: save 355 356 # components 357 loadrt threads name1=test-thread period1=1000000 358 loadrt siggen 359 # pin aliases 360 # signals 361 # nets 362 # parameter values 363 setp siggen.0.update.tmax 14687 364 # realtime thread/function links 365 addf siggen.0.update test-thread 366 ---- 367 368 La sortie de la commande _save_ est une séquence de commandes HAL. Si 369 vous commencez par un HAL _vide_ et que vous tapez toute la séquence de 370 commandes HAL, vous aurez la configuration qui existait lors de l'exécution de 371 la commande save. Pour sauver ces commandes pour une utilisation ultérieure, 372 nous allons simplement rediriger la sortie vers un fichier: 373 ---- 374 halcmd: save all saved.hal 375 ---- 376 377 === Quitter halrun 378 379 Pour quitter halrun, ne pas fermez simplement la fenêtre de terminal sans avoir 380 arrêté la session de HAL, pour l'arrêter correctement tapez: 381 ---- 382 halcmd: exit 383 384 ~/linuxcnc$ 385 ---- 386 387 === Restaurer la configuration de HAL 388 389 Pour restaurer la configuration de HAL enregistrée dans _saved.hal_, nous 390 avons besoin d'exécuter toutes les commandes enregistrées. Pour ce 391 faire, nous utiliserons la commande _-f <filename>_ qui lit les 392 commandes à partir d'un fichier, le _-I_ affichera le prompt halcmd 393 après l'exécution des commandes: 394 ---- 395 ~/linuxcnc$ halrun -I -f saved.hal 396 ---- 397 398 Noter qu'il n'y a pas de commande _start_ dans le fichier saved.hal. 399 Il est nécessaire de la retaper (ou d'éditer saved.hal pour l'ajouter): 400 ---- 401 halcmd: start 402 403 halcmd: exit 404 405 ~/linuxcnc$ 406 ---- 407 408 === Suppression de la mémoire de HAL 409 410 Si un arrêt inattendu d'une session de HAL survient, il sera peut être 411 nécessaire de décharger HAL de la mémoire avant de pouvoir lancer une autre 412 session. Pour cela, taper la commande suivante dans une fenêtre de terminal: 413 ---- 414 ~/linuxcnc$ halrun -U 415 ---- 416 417 [[sec:Tutoriel-halmeter]] 418 == Visualiser HAL avec halmeter 419 (((Tutoriel halmeter))) 420 421 Il est possible de construire des systèmes HAL vraiment complexes sans 422 utiliser d'interface graphique. Mais il y a quelque chose de rassurant 423 à visualiser le résultat du travail. Le premier et le plus simple des 424 outils graphiques pour HAL, est _halmeter_. C'est un programme très 425 simple qui s'utilise comme un multimètre. Il permet d'observer les pins, 426 signaux ou paramètres en affichant la valeur courante de ces items. Il 427 est très simple à utiliser. Dans une console taper _halmeter_. 428 halmeter est une application pour environnement graphique. Deux 429 fenêtres vont apparaître, la fenêtre de sélection est la plus grande. 430 Elle comprend trois onglets. Un onglet liste toutes les pins 431 actuellement définies dans HAL. Le suivant, liste tous les signaux et 432 le dernier onglet, liste tous les paramètres. Cliquer sur un onglet, 433 puis cliquer sur un des items pour le sélectionner. La petite fenêtre affichera 434 le nom et la valeur de l'item sélectionné. 435 L'affichage est mis à jour environ 10 fois par seconde. Pour libérer de 436 la place sur l'écran, la fenêtre de sélection peut être fermée avec le 437 bouton _Fermer_. Sur la petite fenêtre, cachée sous la grande à 438 l'ouverture, le bouton _Sélectionner_, ré-ouvre la fenêtre de sélection et le 439 bouton _Quitter_ arrête le programme et ferme les fenêtres. 440 441 Il est possible d'ouvrir et de faire fonctionner simultanément 442 plusieurs halmeter, ce qui permet de visualiser plusieurs items en 443 même temps. Pour ouvrir un halmeter en libérant la console, taper 444 _halmeter &_ pour le lancer en tâche de fond. Il est possible de 445 lancer halmeter en lui faisant afficher immédiatement un item, pour cela, 446 ajouter les arguments sur la ligne de commande _pin|sig|par[am] nom_. Il 447 affichera le signal, la pin, ou le paramètre _nom_ dès qu'il 448 démarrera. Si l'item indiqué n'existe pas, il démarrera normalement. 449 Finalement, si un item est spécifié pour l'affichage, il est possible 450 d'ajouter _-s_ devant pin|sig|param pour indiquer à halmeter d'utiliser 451 une fenêtre encore plus réduite. Le nom de l'item sera affiché dans la 452 barre de titre au lieu de sous la valeur et il n'y aura pas de bouton. 453 Utile pour afficher beaucoup de halmeter dans un petit espace de 454 l'écran. 455 456 Nous allons utiliser de nouveaux éléments du composant siggen pour 457 vérifier halmeter. Si vous avez fini l'exemple précédent, alors siggen 458 est déjà chargé. Sinon, on peut charger tout comme nous l'avons fait 459 précédemment: 460 ---- 461 ~/linuxcnc$ halrun 462 463 halcmd: loadrt siggen 464 465 halcmd: loadrt threads name1=test-thread period1=1000000 466 467 halcmd: addf siggen.0.update test-thread 468 469 halcmd: start 470 471 halcmd: setp siggen.0.amplitude 5 472 ---- 473 474 === Lancement de halmeter 475 476 À ce stade, nous avons chargé le composant siggen, il est en cours 477 d'exécution. Nous pouvons lancer halmeter. Puisque halmeter est une 478 application graphique, X doit être actif. 479 ---- 480 halcmd: loadusr halmeter 481 ---- 482 483 Dans le même temps, une fenêtre s'ouvre sur votre écran, demandant de 484 sélectionner l'item à observer. 485 486 [[cap:halmeter-Fenetre-selection]] 487 .Fenêtre de sélection de halmeter 488 (((Fenêtre de sélection))) 489 490 image::images/halmeter-select_fr.png[alt="Fenêtre de sélection de halmeter"] 491 492 Ce dialogue contient trois onglets. Le premier onglet affiche toutes 493 les HAL pins du système. La seconde affiche tous les signaux et le 494 troisième affiche tous les paramètres. Si nous voulons analyser la pin 495 _siggen.0.cosine_ en premier, il suffit de cliquer sur elle puis sur 496 le bouton _Fermer_. Le dialogue de sélection se ferme et la mesure s'affiche 497 dans une fenêtre semblable à la figure ci-dessous. 498 499 [[sec:halmeter-valeur]] 500 .Affichage de la valeur 501 (((Affichage de la valeur))) 502 503 image::images/halmeter-1_fr.png[alt="Affichage de la valeur"] 504 505 Pour modifier ce qui est affiché sur halmeter pressez le bouton 506 _Sélectionner_ qui vous ramènera à la fenêtre de sélection précédente. 507 508 Vous devriez voir la valeur évoluer puisque siggen génère une onde 509 cosinusoïdale. halmeter rafraîchi son affichage environ 5 fois par 510 seconde. 511 512 Pour éteindre halmeter, cliquer sur le bouton _Quitter_. 513 514 Pour visualiser plusieurs pins, signaux ou paramètres en même temps, 515 il est possible d'ouvrir plusieurs halmeter. La fenêtre de halmeter 516 est intentionnellement petite justement pour permettre d'en ouvrir un 517 grand nombre sur le même écran.[[sec:Tutoriel-Plus-Complexe]] 518 519 == Tutoriel plus complexe avec stepgen 520 521 Jusqu'à maintenant, nous avons chargé un composant HAL. Mais l'idée 522 générale de HAL est de vous permettre de charger et de relier un grand 523 nombre de composants pour en faire un système complexe. L'exemple suivant 524 va utiliser deux composants. 525 526 Avant de mettre en place ce nouvel exemple, nous allons commencer par 527 un petit nettoyage. Si vous avez fini l'un des exemples précédents, il 528 faut supprimer tous les composants et ensuite recharger la RTAPI et les 529 librairies de HAL en faisant: 530 ---- 531 halcmd: exit 532 533 ~/linuxcnc$ halrun 534 ---- 535 536 === Installation des composants 537 538 Maintenant, nous allons charger le composant générateur d'impulsions. 539 Pour l'instant, nous pouvons nous passer des détails et exécuter les 540 commandes suivantes:footnote:[Le signe _\_ à la fin d'une longue ligne 541 indique que la ligne est tronquée (c'est nécessaire pour formater ce document). 542 Quand vous entrez la commande en ligne dans la console, sautez simplement le _\_ 543 (ne pressez pas Entrée) et continuez à taper la ligne suivante.] 544 545 Dans cet exemple nous utiliserons le type de contrôle _velocity_ du 546 composant stepgen. 547 ---- 548 halrun: loadrt stepgen step_type=0,0 ctrl_type=v,v 549 550 halcmd: loadrt siggen 551 552 halcmd: loadrt threads name1=fast fp1=0 period1=50000 name2=slow period2=1000000 553 ---- 554 555 La première commande charge deux générateurs d'impulsions, configurés 556 pour générer des impulsions de type 0. La seconde commande charge notre 557 vieil ami siggen et la troisième crée deux threads, un rapide (fast) 558 avec une période de 50 µs et un lent avec une période de 1ms. Le thread 559 rapide ne prend pas en charge les fonctions à virgule flottante 560 (fp1=0). 561 562 Comme précédemment, on peut utiliser _halcmd show_ pour jeter un coup 563 d'oeil à HAL. Cette fois, nous aurons beaucoup 564 plus de pins et de paramètres que précédemment: 565 ---- 566 halcmd: show pin 567 568 Component Pins: 569 Owner Type Dir Value Name 570 4 float IN 1 siggen.0.amplitude 571 4 float OUT 0 siggen.0.cosine 572 4 float IN 1 siggen.0.frequency 573 4 float IN 0 siggen.0.offset 574 4 float OUT 0 siggen.0.sawtooth 575 4 float OUT 0 siggen.0.sine 576 4 float OUT 0 siggen.0.square 577 4 float OUT 0 siggen.0.triangle 578 3 s32 OUT 0 stepgen.0.counts 579 3 bit OUT FALSE stepgen.0.dir 580 3 bit IN FALSE stepgen.0.enable 581 3 float OUT 0 stepgen.0.position-fb 582 3 bit OUT FALSE stepgen.0.step 583 3 float IN 0 stepgen.0.velocity-cmd 584 3 s32 OUT 0 stepgen.1.counts 585 3 bit OUT FALSE stepgen.1.dir 586 3 bit IN FALSE stepgen.1.enable 587 3 float OUT 0 stepgen.1.position-fb 588 3 bit OUT FALSE stepgen.1.step 589 3 float IN 0 stepgen.1.velocity-cmd 590 591 592 halcmd: show param 593 594 Parameters: 595 Owner Type Dir Value Name 596 4 s32 RO 0 siggen.0.update.time 597 4 s32 RW 0 siggen.0.update.tmax 598 3 u32 RW 0x00000001 stepgen.0.dirhold 599 3 u32 RW 0x00000001 stepgen.0.dirsetup 600 3 float RO 0 stepgen.0.frequency 601 3 float RW 0 stepgen.0.maxaccel 602 3 float RW 0 stepgen.0.maxvel 603 3 float RW 1 stepgen.0.position-scale 604 3 s32 RO 0 stepgen.0.rawcounts 605 3 u32 RW 0x00000001 stepgen.0.steplen 606 3 u32 RW 0x00000001 stepgen.0.stepspace 607 3 u32 RW 0x00000001 stepgen.1.dirhold 608 3 u32 RW 0x00000001 stepgen.1.dirsetup 609 3 float RO 0 stepgen.1.frequency 610 3 float RW 0 stepgen.1.maxaccel 611 3 float RW 0 stepgen.1.maxvel 612 3 float RW 1 stepgen.1.position-scale 613 3 s32 RO 0 stepgen.1.rawcounts 614 3 u32 RW 0x00000001 stepgen.1.steplen 615 3 u32 RW 0x00000001 stepgen.1.stepspace 616 3 s32 RO 0 stepgen.capture-position.time 617 3 s32 RW 0 stepgen.capture-position.tmax 618 3 s32 RO 0 stepgen.make-pulses.time 619 3 s32 RW 0 stepgen.make-pulses.tmax 620 3 s32 RO 0 stepgen.update-freq.time 621 3 s32 RW 0 stepgen.update-freq.tmax 622 ---- 623 624 === Connexion des pins avec les signaux 625 626 Nous avons donc deux générateurs d'impulsions de pas et un générateur 627 de signaux. Maintenant, nous allons créer des signaux HAL pour 628 connecter ces trois composants. Nous allons faire comme si nous 629 pilotions les axes X et Y d'une machine avec nos générateurs 630 d'impulsions de pas. Nous voulons déplacer la table en ronds. Pour ce 631 faire, nous allons envoyer un signal cosinusoïdal à l'axe des X et un 632 signal sinusoïdal à l'axe des Y. Le module siggen créera le sinus et le 633 cosinus, mais nous aurons besoin de _fils_ pour connecter les modules 634 ensemble. Dans HAL, les _fils_ sont appelés signaux. Nous devons en 635 créer deux. Nous pouvons les appeler comme on veut, dans cet exemple il 636 y aura _X-vel_ et _Y-vel_. Le signal _X-vel_ partira de la sortie 637 cosinus du générateur de signaux et arrivera sur 638 l'entrée _velocity_ du premier générateur d'impulsions de pas. La 639 première étape consiste à connecter le signal à la sortie du générateur 640 de signaux. Pour connecter un signal à une pin, nous utilisons la 641 commande _net_: 642 ---- 643 halcmd: net X-vel <= siggen.0.cosine 644 ---- 645 646 Pour voir l'effet de la commande _net_, regardons les signaux: 647 ---- 648 halcmd: show sig 649 650 Signals: 651 Type Value Name (linked to) 652 float 0 X-vel <== siggen.0.cosine 653 ---- 654 655 Quand un signal est connecté à une ou plusieurs pins, la commande 656 _show_ liste les pins immédiatement suivies par le nom du signal. 657 Les flèches donnent la direction du flux de données, dans ce cas, le flux 658 va de la pin _siggen.0.cosine_ vers le signal _X-vel_. Maintenant, 659 connectons _X-vel_ à l'entrée _velocity_ du générateur d'impulsions de 660 pas: 661 ---- 662 halcmd: net X-vel => stepgen.0.velocity-cmd 663 ---- 664 665 Nous pouvons aussi connecter l'axe Y au signal _Y-vel_. Il doit partir de 666 la sortie sinus du générateur de signaux pour arriver sur l'entrée du second 667 générateur d'impulsions de pas. La commande suivante fait, en une ligne, la 668 même chose que les deux commandes _net_ précédentes ont fait pour _X-vel_: 669 ---- 670 halcmd: net Y-vel siggen.0.sine => stepgen.1.velocity-cmd 671 ---- 672 673 Pour voir l'effet de la commande net, regardons encore les signaux et 674 les pins: 675 ---- 676 halcmd: show sig 677 678 Signals: 679 Type Value Name (linked to) 680 float 0 X-vel <== siggen.0.cosine 681 ==> stepgen.0.velocity-cmd 682 float 0 Y-vel <== siggen.0.sine 683 ==> stepgen.1.velocity-cmd 684 ---- 685 686 La commande _show sig_ montre clairement comment les flux de 687 données circulent dans HAL. Par exemple, le signal _X-vel_ 688 provient de la pin _siggen.0.cosine_ et va vers la pin 689 _stepgen.0.velocity-cmd_. 690 691 === Exécuter les réglages du temps réel - threads et functions 692 693 Penser à ce qui circule dans les _fils_ rend les pins et les signaux 694 assez faciles à comprendre. Les threads et les fonctions sont un peu 695 plus délicates à appréhender. Les fonctions contiennent des instructions pour 696 l'ordinateur. Les threads sont les méthodes utilisées pour faire 697 exécuter ces instructions quand c'est nécessaire. Premièrement, 698 regardons les fonctions dont nous disposons: 699 ---- 700 halcmd: show funct 701 702 Exported Functions: 703 Owner CodeAddr Arg FP Users Name 704 00004 f9992000 fc731278 YES 0 siggen.0.update 705 00003 f998b20f fc7310b8 YES 0 stepgen.capture-position 706 00003 f998b000 fc7310b8 NO 0 stepgen.make-pulses 707 00003 f998b307 fc7310b8 YES 0 stepgen.update-freq 708 ---- 709 710 En règle générale, vous devez vous référer à la documentation de 711 chaque composant pour voir ce que font ses fonctions. Dans notre 712 exemple, la fonction _siggen.0.update_ est utilisée pour mettre à jour 713 les sorties du générateur de signaux. 714 Chaque fois qu'elle est exécutée, le générateur recalcule les valeurs 715 de ses sorties sinus, cosinus, dent de scie, triangle, carrée. Pour générer 716 un signal régulier, il doit fonctionner à des intervalles très précis. 717 718 Les trois autres fonctions sont relatives au générateur d'impulsions de pas: 719 720 La première, _stepgen.capture-position_, est utilisée pour un retour 721 de position. Elle capture la valeur d'un 722 compteur interne comptant les impulsions qui sont générées. S'il n'y 723 a pas de perte de pas, ce compteur indique la position du moteur. 724 725 La fonction principale du générateur d'impulsions est 726 _stepgen.make-pulses_. Chaque fois que _make-pulses_ démarre, elle 727 décide qu'il est temps de faire un pas, si oui elle fixe 728 les sorties en conséquence. Pour des pas plus doux, elle doit fonctionner 729 le plus souvent possible. Parce qu'elle a besoin de fonctionner de 730 manière rapide, _make-pulses_ est hautement optimisée et n'effectue 731 que quelques calculs. 732 Contrairement aux autres, elle n'a pas besoin de virgule flottante pour 733 ses calculs. 734 735 La dernière fonction, _stepgen.update-freq_, est responsable de 736 l'échelle et de quelques autres calculs qui ne doivent être effectués 737 que lors d'une commande de changement de fréquence. 738 739 Pour notre exemple nous allons faire tourner _siggen.0.update_ à une 740 vitesse modérée pour le calcul des valeurs sinus et cosinus. 741 Immédiatement après avoir lancé siggen.0.update, nous lançons 742 _stepgen.0.update_freq_ pour charger les nouvelles valeurs dans le générateur 743 d'impulsions. Finalement nous lancerons _stepgen.make_pulses_ aussi vite que 744 possible pour des pas plus doux. 745 Comme nous n'utilisons pas de retour de position, nous n'avons pas besoin de 746 lancer _stepgen.capture_position_. 747 748 Nous lançons les fonctions en les ajoutant aux threads. Chaque thread 749 va à une vitesse précise. Regardons de quels threads nous disposons: 750 ---- 751 halcmd: show thread 752 753 Realtime Threads: 754 Period FP Name ( Time, Max-Time ) 755 996980 YES slow ( 0, 0 ) 756 49849 NO fast ( 0, 0 ) 757 ---- 758 759 Les deux _threads_ ont été créés lorsque nous les avons chargés. Le 760 premier, _slow_ , tourne toutes les millisecondes, il est capable 761 d'exécuter des fonctions en virgule flottante (FP). Nous l'utilisons pour 762 _siggen.0.update_ et _stepgen.update_freq_. Le deuxième thread est 763 _fast_, il tourne toutes les 50 microsecondes, il ne prend pas en 764 charge les calculs en virgule flottante. Nous l'utilisons pour 765 _stepgen.make_pulses_. Pour connecter des fonctions au bon thread, 766 nous utilisons la commande _addf_. Nous spécifions la fonction en 767 premier, suivie par le thread: 768 ---- 769 halcmd: addf siggen.0.update slow 770 771 halcmd: addf stepgen.update-freq slow 772 773 halcmd: addf stepgen.make-pulses fast 774 ---- 775 776 Après avoir lancé ces commandes, nous pouvons exécuter la commande _show 777 thread_ une nouvelle fois pour voir ce qui ce passe: 778 ---- 779 halcmd: show thread 780 781 Realtime Threads: 782 Period FP Name ( Time, Max-Time ) 783 996980 YES slow ( 0, 0 ) 784 1 siggen.0.update 785 2 stepgen.update-freq 786 49849 NO fast ( 0, 0 ) 787 1 stepgen.make-pulses 788 ---- 789 790 Maintenant, chaque thread est suivi par les noms des fonctions, dans 791 l'ordre dans lequel les fonctions seront exécutées. 792 793 === Réglage des paramètres 794 795 Nous sommes presque prêts à démarrer notre système HAL. Mais il faut 796 auparavant régler quelques paramètres. Par défaut le composant siggen 797 génère des signaux qui varient entre +1 et -1. Pour notre exemple, 798 c'est très bien, nous voulons que la vitesse de la table varie de +1 à 799 -1 pouce par seconde. Toutefois, l'échelle du générateur d'impulsions 800 de pas n'est pas bonne. Par défaut, il génère une fréquence de sortie 801 de 1 pas par seconde avec une capacité de 1000. Il est fort improbable 802 qu'un pas par seconde nous donne une vitesse de déplacement de la table 803 d'un pouce par seconde. Supposons que notre vis fasse 5 tours par 804 pouce, couplée à un moteur pas à pas de 200 pas par tour et une 805 interface qui fournit 10 micropas par pas. Il faut donc 2000 pas pour 806 faire un tour de vis et 5 tours pour faire un pouce. Ce qui signifie 807 que notre montage utilisera 10000 pas par pouce. Nous avons besoin de 808 multiplier la vitesse d'entrée à l'étape générateur d'impulsions par 809 10000 pour obtenir la bonne valeur. C'est exactement pour cela 810 qu'existe le paramètre _stepgen.n.velocity-scale_ . Dans notre cas, les 811 axes X et Y ont la même échelle et nous pouvons 812 passer les deux paramètres à 10000: 813 ---- 814 halcmd: setp stepgen.0.position-scale 10000 815 816 halcmd: setp stepgen.1.position-scale 10000 817 818 halcmd: setp stepgen.0.enable 1 819 820 halcmd: setp stepgen.1.enable 1 821 ---- 822 823 Cela signifie que, avec la pin _stepgen.0.velocity-cmd_ à 1.000 et le 824 générateur réglé pour 10000 impulsions par seconde 825 (10kHz), avec le moteur et la vis décrits précédemment, nos axes auront 826 une vitesse de déplacement de exactement 1.000 pouce par seconde. Cela 827 illustre une notion clé du concept de HAL, des éléments comme les 828 échelles étant au plus bas niveau possible, dans notre exemple le 829 générateur d'impulsions de pas, le signal interne _X-vel_ est celui 830 de la vitesse de déplacement de la table en pouces par 831 seconde. Les autres composants comme _siggen_ ne savent rien du tout 832 à propos de l'échelle des autres. Si on change 833 de vis, ou de moteur, il n'y a qu'un seul paramètre à changer, 834 l'échelle du générateur d'impulsions de pas. 835 836 === Lançons le! 837 838 Nous avons maintenant tout configuré et sommes prêts à démarrer. Tout 839 comme dans le premier exemple, nous utilisons la commande _start_: 840 ---- 841 halcmd: start 842 ---- 843 844 Bien que rien ne semble se produire, à l'intérieur de l'ordinateur les 845 impulsions de pas sont présentes sur la sortie du générateur, variant 846 entre 10kHz dans un sens et 10kHz dans l'autre à chaque seconde. Dans 847 la suite de ce tutoriel, nous allons voir comment convertir ces signaux 848 internes des moteurs dans le monde réel, mais nous allons d'abord les 849 examiner pour voir ce qui se passe. 850 851 [[sec:Tutoriel-halscope]] 852 == Voyons-y de plus près avec halscope 853 (((Tutoriel halscope))) 854 855 L'exemple précédent génère certains signaux très intéressants. Mais 856 beaucoup de ce qui se passe est beaucoup trop rapide pour être vu avec 857 halmeter. Pour examiner de plus près ce qui se passe à l'intérieur de 858 HAL, il faudrait un oscilloscope. Heureusement HAL en offre un, appelé 859 _halscope_. Il permet de capturer la valeur des pins, des signaux et des 860 paramètres en fonction du temps. 861 862 === Démarrer halscope 863 864 halscope comporte deux parties, une partie en temps réel qui est 865 chargée comme un module de noyau et une partie utilisateur qui fournit 866 l'interface graphique et l'affichage. Cependant, vous n'avez pas à vous 867 inquiéter à ce sujet car l'interface demandera automatiquement que la 868 partie temps réel soit chargée: 869 ---- 870 halcmd: loadusr halscope 871 ---- 872 873 La fenêtre graphique du scope s'ouvre, immédiatement suivie par un 874 dialogue _Fonction temps réel non liée_ visible sur la figure ci-dessous: 875 876 [[fig:fonction-non-liee]] 877 .Dialogue _Fonction temps réel non liée_ 878 (((Fonction non liée))) 879 880 image::images/halscope-01_fr.png[alt="Dialogue Fonction temps réel non liée"] 881 882 C'est dans ce dialogue que vous définissez le taux d'échantillonnage 883 de l'oscilloscope. Pour le moment nous voulons un échantillon par 884 milliseconde, alors cliquez sur le thread _slow_ et laissez le 885 multiplicateur à 1. Nous allons aussi passer la longueur 886 d'enregistrement à 4000 échantillons, de sorte que nous 887 puissions utiliser jusqu'à 4 canaux simultanément. Quand vous 888 sélectionnez un thread puis que vous cliquez sur le bouton _OK_, le 889 dialogue disparaît et la fenêtre initiale du scope s'ouvre, comme ci-dessous. 890 891 [[fig:Fenetre-initiale-halscope]] 892 .Fenêtre initiale du scope 893 (((Fenêtre initiale))) 894 895 image::images/halscope-02_fr.png[alt="Fenêtre initiale du scope"] 896 897 === Branchement des sondes du scope 898 899 À ce stade, halscope est prêt à l'emploi. Nous avons déjà choisi le 900 taux d'échantillonnage et la longueur d'enregistrement, de sorte que la 901 prochaine étape consiste à décider de ce qu'il faut mesurer. C'est 902 équivalent à brancher les _sondes virtuelles du scope_ à HAL. halscope 903 dispose de 16 canaux, mais le nombre de canaux utilisables à un moment 904 donné dépend de la longueur d'enregistrement, plus il y a de canaux, 905 plus les enregistrements seront courts, car la mémoire disponible 906 pour l'enregistrement est fixée à environ 16000 échantillons. 907 908 Les boutons des canaux se situent en dessous de l'écran du scope. 909 Cliquez le bouton _1_ et vous verrez apparaître le dialogue de 910 sélection des sources dans lequel vous devrez choisir _la source qui 911 devra s'afficher sur le canal 1, comme sur la figure ci-dessous. 912 Ce dialogue est très similaire à celui utilisé par halmeter. 913 914 [[fig:Selection-sources-halscope]] 915 .Dialogue de sélection des sources 916 (((Sélection de la source))) 917 918 image::images/halscope-03_fr.png[alt="Dialogue de sélection des sources"] 919 920 Nous aimerions bien regarder les signaux que nous avons défini 921 précédemment, pour cela, cliquons sur l'onglet _Signaux_ et le dialogue 922 affichera tous les signaux existants dans HAL, dans notre exemple nous 923 avons seulement les deux signaux X-vel et Y-vel, comme ci-dessous. 924 925 Pour choisir un signal, il suffit de cliquer dessus. Dans notre cas, 926 nous voulons utiliser le canal 1 pour afficher le signal _X-vel_. 927 Lorsque l'on clique sur _X-vel_, la fenêtre se ferme et le canal a 928 été sélectionné. 929 930 [[cap:Select-Signal]] 931 .Sélection du signal 932 (((Sélection du signal))) 933 934 image::images/halscope-04_fr.png[alt="Sélection du signal"] 935 936 Le bouton du canal _1_ est pressé, le numéro du canal 1 et le nom 937 _X-vel_ apparaissent sous la rangée de boutons. L'affichage indique 938 toujours le canal sélectionné, vous pouvez avoir beaucoup de canaux sur 939 l'écran, mais celui qui est actif sera en surbrillance. 940 941 [[cap:halscope]] 942 .halscope 943 (((halscope))) 944 945 image::images/halscope-05_fr.png[alt="halscope"] 946 947 Les différents contrôles comme la position verticale et l'amplitude 948 sont toujours relatifs au canal 1. Pour ajouter un signal sur le canal 949 2, cliquer sur le bouton _2_. Dans la fenêtre de dialogue, cliquer sur 950 l'onglet _Signaux_, puis cliquer sur _Y-vel_. 951 952 Nous voulons aussi voir les signaux carrés et triangles produits. Il 953 n'existe pas de signaux connectés à ces pins, nous utilisons donc 954 l'onglet _Pins_. Pour le canal _3_, sélectionnez _siggen.0.triangle_ 955 et pour le canal _4_, choisissez _siggen.0.square_. 956 957 === Capturer notre première forme d'onde 958 959 Maintenant que nous avons plusieurs sondes branchées sur HAL, nous 960 pouvons capturer quelques formes d'ondes. Pour démarrer le scope, 961 cochez la case _Normal_ du groupe _Mode "Run"_ (en haut à droite). 962 Puisque nous avons une longueur d'enregistrement de 4000 échantillons 963 et une acquisition de 1000 échantillons par seconde, il faudra à 964 halscope environ 2 secondes pour remplir la moitié de son tampon. 965 Pendant ce temps, une barre de progression juste au-dessus de l'écran 966 principal affichera le remplissage du tampon. Une fois que le tampon 967 est à moitié plein, scope attend un déclencheur (Trigger). Puisque nous n'en 968 avons pas encore configuré, il attendra toujours. Pour déclencher 969 manuellement, cliquez sur le bouton _Forcer_ du groupe _Trigger_ en 970 haut à droite. Vous devriez voir le reste de la zone tampon se remplir, 971 puis l'écran afficher les ondes capturées. Le résultat ressemble à la 972 figure ci-dessous. 973 974 [[fig:Capture-onde-halscope]] 975 .Capture d'ondes 976 (((Capture d'onde))) 977 978 image::images/halscope-06_fr.png[alt="Capture d'ondes"] 979 980 === Ajustement vertical 981 982 Les traces sont assez difficiles à distinguer car toutes les quatre 983 sont les unes sur les autres. Pour résoudre ce problème, nous utilisons 984 les curseurs du groupe _Vertical_ situé à droite de l'écran. 985 Ces deux curseurs agissent sur le canal actuellement sélectionné. En ajustant 986 le _Gain_, notez qu'il couvre une large échelle (contrairement aux 987 oscilloscopes réels), celle-ci permet d'afficher des signaux très petits 988 (pico unités) à très grands (Tera - unités). Le curseur _Pos_ déplace la 989 trace affichée de haut en bas sur toute la hauteur de l'écran. Pour de plus 990 grands ajustements le bouton _Offset_ peut être utilisé. 991 992 [[cap:Ajustement-vertical-halscope]] 993 .Ajustement vertical 994 (((Ajustement vertical))) 995 996 image::images/halscope-07_fr.png[alt="Ajustement vertical"] 997 998 Le grand bouton _Canal sélectionné_ en bas, indique que le canal 1 est 999 actuellement le canal sélectionné et qu'il correspond au signal 1000 _X-vel_. Essayez de cliquer sur les autres canaux pour mettre 1001 leurs traces en évidence et pouvoir les déplacer avec le curseur _Pos_. 1002 1003 === Déclenchement (Triggering) 1004 1005 L'utilisation du bouton _Forcer_ n'est parfois pas satisfaisante pour 1006 déclencher le scope. Pour régler un déclenchement réel, 1007 cliquer sur le bouton _Source_ situé en bas à droite. Il ouvre alors le 1008 dialogue _Trigger Source_, qui est simplement la liste de toutes les 1009 sondes actuellement branchées, voir la figure ci-dessous. 1010 Sélectionner la sonde à utiliser pour déclencher en cliquant dessus. 1011 Pour notre exemple nous utilisons 3 canaux, essayons l'onde triangle. 1012 Quand le dialogue ce referme, après le choix, le bouton affiche _Source Canal n_ 1013 où n est le numéro du canal venant d'être choisi comme déclencheur. 1014 1015 [[fig:halscope-demo-5]] 1016 .Dialogue des sources de déclenchement 1017 (((Dialogue des sources de déclenchement))) 1018 1019 image::images/halscope-08_fr.png[alt="Dialogue des sources de déclenchement"] 1020 1021 Après avoir défini la source de déclenchement, il est possible 1022 d'ajuster le niveau de déclenchement avec les curseurs du groupe 1023 _Trigger_ le long du bord droit. Le niveau peut être modifié à partir 1024 du haut vers le bas de l'écran, il est affiché sous les curseurs. La 1025 position est l'emplacement du point de déclenchement dans 1026 l'enregistrement complet. Avec le curseur tout en bas, le point de 1027 déclenchement est à la fin de l'enregistrement et halscope affiche ce 1028 qui s'est passé avant le déclenchement. Lorsque le curseur est 1029 tout en haut, le point de déclenchement est au début de 1030 l'enregistrement, l'affichage représente ce qui s'est passé après le 1031 déclenchement. Le point de déclenchement est visible comme une petite 1032 ligne verticale dans la barre de progression située juste au dessus de 1033 l'écran. La polarité du signal de déclenchement peut être inversée en 1034 cliquant sur le bouton _Montant_ situé juste sous l'affichage du niveau de 1035 déclenchement, il deviendra alors _descendant_. Notez que la modification 1036 de la position de déclenchement arrête le scope une fois la position ajustée, 1037 vous relancez le scope en cliquant sur le bouton _Normal_ du groupe 1038 _Mode "Run"_. 1039 1040 Maintenant que nous avons réglé la position verticale et le 1041 déclenchement, l'écran doit ressembler à la figure ci-dessous. 1042 1043 [[fig:halscope-demo-6]] 1044 .Formes d'ondes avec déclenchement 1045 (((Formes d'onde))) 1046 1047 image::images/halscope-09_fr.png[alt="Formes d'ondes avec déclenchement"] 1048 1049 === Ajustement horizontal 1050 1051 Pour examiner de près une partie d'une forme d'onde, vous pouvez 1052 utiliser le _zoom_ au dessus de l'écran pour étendre la trace 1053 horizontalement et le curseur de position horizontale, _Pos_ du 1054 groupe _Horizontal_, pour déterminer quelle partie de l'onde zoomée est visible. 1055 Parfois simplement élargir l'onde n'est pas suffisant et il faut augmenter 1056 la fréquence d'échantillonnage. Par exemple, nous aimerions voir les impulsions 1057 de pas qui sont générés dans notre exemple. Mais les impulsions de pas font 1058 seulement 50 us de long, l'échantillonnage à 1kHz n'est pas assez rapide. 1059 Pour changer le taux d'échantillonnage, cliquer sur le bouton qui affiche le 1060 nombre d'échantillons pour avoir le dialogue _Sélectionner un taux 1061 d'échantillonnage_, figure ci-dessous. 1062 Pour notre exemple, nous cliquerons sur le thread _fast_, qui fournira un 1063 échantillonnage à environ 20kHz. Maintenant au lieu d'afficher environ 4 1064 secondes de données, un enregistrement sera de 4000 échantillons à 20kHz, soit 1065 environ 0.20 seconde. 1066 1067 [[fig:halscope-demo-7]] 1068 .Dialogue de choix d'échantillonnage 1069 (((Choix d'échantillonnage))) 1070 1071 image::images/halscope-10_fr.png[alt="Dialogue de choix d'échantillonnage"] 1072 1073 === Plus de canaux 1074 1075 Maintenant regardons les impulsions de pas. halscope dispose de 16 1076 canaux, mais pour cet exemple, nous en utilisons seulement 4 à la fois. 1077 Avant de sélectionner tout autre canal, nous avons besoin d'en éteindre 1078 certains. Cliquer sur le canal _2_, puis sur le bouton _Canal Off_ sous le 1079 groupe _vertical_. Ensuite, cliquez sur le canal 3, le mettre Off et 1080 faire de même pour le canal 4. Même si les circuits sont éteints, ils 1081 sont encore en mémoire et restent connectés, en fait, nous 1082 continuerons a utiliser le canal 3 comme source de déclenchement. Pour 1083 ajouter de nouveaux canaux, sélectionner le canal _5_, choisir la pin 1084 _stepgen.0.dir_, puis le canal _6_ et sélectionner _stepgen.0.step_. 1085 Ensuite, cliquer sur _mode Normal_ pour lancer le scope, ajustez le 1086 zoom horizontal à 10 ms par division. Vous devriez voir les impulsions de 1087 pas ralentir à la vitesse commandée approcher de zéro, puis la 1088 pin de direction changer d'état et les impulsions de pas se resserrer de 1089 nouveau en même temps que la vitesse augmente. Vous aurez peut être besoin 1090 d'ajuster le gain sur le canal 1 afin de mieux voir l'action de la vitesse sur 1091 l'évolution des impulsions de pas. Le résultat devrait être proche de celui de 1092 la figure ci-dessous. Ce type de mesure est délicate car il y a un énorme écart 1093 d'échelle entre la fréquence des pas et l'action sur la vitesse, d'ou la courbe 1094 X-vel assez plate et les impulsions de pas très resserrées. 1095 1096 [[fig:halscope-demo-8]] 1097 .Observer les impulsions de pas 1098 (((Observer les impulsions))) 1099 1100 image::images/halscope-11_fr.png[alt="Observer les impulsions de pas"] 1101 1102 === Plus d'échantillons 1103 1104 Si vous souhaitez enregistrer plus d'échantillons à la fois, 1105 redémarrez le temps réel et chargez halscope avec un argument numérique 1106 qui indique le nombre d'échantillons que vous voulez capturer, comme: 1107 ---- 1108 halcmd: loadusr halscope 80000 1109 ---- 1110 1111 Si le composant _scope_rt_ n'est pas déjà chargé, halscope va le 1112 charger et lui demander un total de 80000 échantillons, de sorte 1113 que lorsque l'échantillonnage se fera sur 4 canaux à la fois, 1114 il y aura 20000 échantillons par canal. (Si _scope_rt_ est déjà 1115 chargé, l'argument numérique passé à halscope sera sans effet) 1116 1117