 Bonjour et bienvenue à cette présentation de CORDIC en pratique. Dans cette vidéo, je vais vous montrer un exemple simple sur comment utiliser l'actangent, aussi appelé inverse tangent matfonction, avec le STM32 CORDIC PERIFERO. Dans cette présentation, je vais vous donner quelques pré-réquisites nécessaires pour aller dans cette vidéo pour reproduire l'exemple et démontrer comment utiliser la CORDIC actangent fonction en 0V red mode, ainsi que dma mode. Avant de continuer dans plus de détails, c'est recommandé de voir la première partie de cette série de vidéo appelée CORDIC Overview. Pour reproduire l'exemple la même fois présenté dans cette vidéo, vous devez installer le STM32 Cube MX, STM32 Cube ID et STM32 Cube Monitor. Finalement, cette vidéo a été faite en utilisant un Nucléo G474I. La CORDIC actangent fonctionne en utilisant un argument et en générer un résultat. Le premier argument est un value tangent theta multiplié par un facteur de calcul 2-n appliqué dans des softwares comme l'ex multiplié par 2-n entre 1 et 1. Le deuxième argument n'est pas applicable. Le paramètre scale N doit être programmé avec un valeur entre 0 et 7. La précision de la CORDIC Peripheral est définie par le nombre d'attentions configurées pour générer l'exemple résultat. Dans le cas de la CORDIC actangent fonctionne, la meilleure précision que la CORDIC peut bénéficier est quand elle est configurée avec 24 attentions ou 6 cycles pour 2 à la puissance de minus 19, maximum résiduelle erreur. Pour l'exemple, nous allons utiliser la CORDIC actangent fonctionne dans la mode 0. Pour générer un template projet, nous allons utiliser STM32Cube MX. Lorsque le NUCLEO-G474 RE a été sélecté comme target, dans la CORDIC PINOT et la TAB CONFIGURATION, puis les catégories, expandez la catégorie de la compétition et sélectionnez la CORDIC. Ensuite, vérifiez l'activité de la CORDIC checkbox. Pour sélectionner le NUCLEO-G474 RE, cliquez sur le SELECTOR BORD de l'accès, puis sélectionnez NUCLEO-64, STM32-G4 et sélectionnez NUCLEO-G474 RE. Cliquez NOUS sur le pop-up pour initialiser tous les périphéroles avec leur mode défaut. Nous n'avons pas besoin de ça. Puis cliquez sur PINOT, CLEAR PINOT et puis, comme l'on l'a parlé, dans la TAB CONFIGURATION PINOT, CATEGORY TABS, allez à la compétition, sélectionnez CORDIC et cliquez sur le SELECTOR BORD de l'accès. Pour garantir que nous ne serons pas disconnectés du debugger, cliquez sur le SELECTOR BORD de l'accès, sélectionnez SELECTOR BORD dans le debug, sélectionnez SELECTOR BORD pour maintenir les signes activés. Nous sommes maintenant en train de générer notre procédé. Donc, nous allons générer ça dans, par exemple, VIDEOS CORDIC et nous allons coller ce procédé, CORDIC ARK TENGENT ZO, pour 0 au-delà. Nous allons sélectionner TOUCHAN IDEA, STM32 CUBE IDEA et puis dans CODE GENERATOR, nous allons cliquer sur AD NECESSARY LABOUIR FILE comme référence dans le TOUCHAN PROJECT CONFIGURATION FILE et nous allons sélectionner SETTES ALL THREE PINS AS ANALOGUE afin d'optimiser la consommation de pouvoir. Nous pouvons maintenant générer le code. Lorsque le procédé est généré, nous pouvons cliquer sur OPEN PROJECT. STM32 CUBE IDEA est fermée et apporté dans le procédé généré et le procédé est maintenant suffisamment apporté. Ce procédé est en train d'implémentation de l'équivalent 8 et F du standard MATLABOUIR en utilisant le code Peripheral en mode 0 au-delà. X PARAMETTEUR est tendant à la valeur theta convertie pour remplir le code Peripheral de minus 1 à plus 1 en format Q131 dans input Q131 en utilisant un facteur de scaling de 2 à la valeur de minus n si nécessaire. Dans cet exemple, nous avons choisi de prendre le bénéfice de la meilleure précision offert par le code pour cette fonction par taking six cycles pour compléter les résultats. Nous avons aussi installé le parameter scale pour remplir l'input Q131 dans le range de minus 1 à plus 1. Note que le code provoie de courir par l'HCL code calculer et 0 au-delà de l'HCL calculer ZO Nous avons choisi de utiliser l'HCL code calculer ZO pour des raisons de performance Pour utiliser ces fonctionnalités nous allons ajouter le code code code, code sign et le code ATAN variables dans la section de code 0 ainsi que le variable double variant dans la section de code 1 Finalement, dans la section de code 3 nous allons remplir un loop à environ 360 degrés de la circole et mettre pour chaque code Q131 code F et code Q131 C9 les résultats de code Q131 ATAN F dans le code C code sign et code ATAN variables chaque 10 ms Note que chaque jeune fille est convertie de degrés à degrés Nous sommes maintenant retournés à STM32C Nous allons aller au projet de code Actangent ZO dans la direction de code Open main.c puis dans la section de code 0 nous allons définir les variables de flow code code, code sign et code ATAN dans la section de code 1 nous allons définir le variable double variant et puis nous allons définir deux loops à environ 360 degrés sur lesquels nous allons mettre pour chaque code C et code sign le code ATAN value en utilisant code Q131 ATAN F chaque 10 ms Nous allons définir la fonction code Q131 C9 et code Q131 C9 qui nous discute une autre vidéo de code Actangent ZO code sign part 2 donc si vous voulez avoir plus de détails sur ces fonctions allez voir cette vidéo Nous allons définir code Q131 C9 et code code C9 et code C9 puis nous allons définir la fonction conversion code Q131 à code F32 et code F32 à code Q131 pour convertir les flows de code Q131 et de code Q131 nous allons définir aussi la fonction de code Q131 ATAN F et puis nous allons ajouter l'adder pour la conversion de code MAT.h nous devons maintenant construire le projet nous pouvons maintenant charger notre projet dans notre bord du nucléaire et puis nous pouvons cliquer sur OK le code est launchable sur le bord et cliquer sur switch et nous pouvons freeran Nous allons maintenant installer un projet STM32 Q monitor permettant de graphiquement visualiser l'output de code 8AN variable Nous allons maintenant utiliser le projet STM32 Q monitor afin d'explicer les valeurs de code 8AN variable durant le temps de la ferme Nous allons premièrement définir deux boutons, start et stop l'acquisition 1 bouton le 1er bouton va être appelé start acquisition et ça va sonner le 2e bouton va être appelé stop acquisition va être sonner keyword stop puis nous allons définir un groupe de variable sur lequel nous voulons capturer les valeurs Nous allons donc apporter les valeurs de code et nous allons regarder les videos de code code artangent ZO debug et sélectionner les valeurs de code le file ELE nous allons trouver nos valeurs de code 8AN code cosine et code sign nous sommes intéressés à déployer le code 8AN continuement, donc nous allons sélectionner code 8AN et donner un nom code valeurs Nous allons ajouter et confirmer et puis nous allons capturer ces valeurs en utilisant un probe donc basiquement nous allons utiliser un acquisition out et nous allons définir le probe ma probe nous allons sélectionner le probe qui va faire la capture et ce probe est basiquement le ST-Link le interface SWD pour le microcontroller donc ici nous ne sommes pas en train de trouver l'interface c'est parce que le STM32CubeID projet est currently monitoring la connexion ST-Link la connexion Debugger donc nous allons déconnecter de la connexion Debugger afin de relier la connexion pour le STM32Cube monitor si nous allons au STM32Cube monitor maintenant nous avons la connexion nous sélectionnons le ST-Link communiquant avec le STM32G474 et maintenant nous pouvons confirmer cette partie, nous pouvons maintenant lier tous les blocs c'est juste pour la ligne et puis nous allons remplir le display donc maintenant nous avons besoin d'acquisition IN afin de obtenir ce que nous avons acheté dans le graphe donc nous allons coller ceci IN et encore sélection le STM32 G474 ST-Link puis nous pouvons ajouter et confirmer puis nous allons ajouter un bloc de procédure qui va procéder après l'acquisition les variables qui ont été acquires précédemment dans le bloc variable donc ce bloc est lié directement à ce bloc variable calledCordicValues nous confirmerons puis nous allons ajouter une charte qui va assurer le display nous allons appeler Trigonometric charte nous allons ajouter un bouton élevé ce bouton élevé nous allons coller un graphe élevé et il envoie le keyword élevé et puis nous confirmerons et puis nous allons lier tous nos blocs ensemble nous allons déployer et nous verrons que le gris square montre que le proble est disponible tout est potentiellement procédé donc maintenant nous pouvons lancer le dashboard et nous pouvons commencer l'acquisition et nous verrons que le graphe est assurant 8 à 10 valeurs continuement nous pouvons arrêter l'acquisition et ouvrir donc ce que nous avons vu est que l'amplitude de le signal n'était pas vraiment grand donc nous allons augmenter l'amplitude en utilisant les valeurs cordes procédées de blocs et la charte trigonomique donc dans les valeurs cordes nous allons ajouter une variable post procédée qui va être appelée pour exemple cordes 8 à 10 donc 10 fois cordes 8 et nous allons utiliser la formule cordes 8 donc en utilisant la valeur précédente et nous allons multiplier l'amplitude par 10 donc nous allons l'assurer et confirmer et puis sur le switch donc le switch joue le rôle d'un filtre et nous allons utiliser le procédé message, payload variable name et nous allons focuster seulement sur 10x cordes 8 à 10 et nous allons confirmer donc maintenant nous allons lier le bloc de procédé pour le bloc de switch et le bloc de switch pour la charte trigonomique par le link 10x cordes 8 à 10 de la filtre et nous allons retirer le lien direct et maintenant nous devrions déployer la solution pour modifier ce que nous avons fait nous allons lancer le dashboard nous allons commencer l'acquisition et nous verrons une grande amplitude sur le signal de la charte trigonique position de chaque bouton n'est pas exactement ce que nous voulons donc il y a quelque chose que nous pouvons faire nous pouvons aller dans le dashboard puis Home Layout et puis nous pouvons changer la position de chaque bouton, pour exemple j'ai voulu premièrement l'acquisition du start puis l'acquisition du stop la charte trigonomique puis je peux valider déployer et puis lancer le dashboard position de mes boutons c'est différent je peux commencer l'acquisition j'ai les mêmes résultats mais une meilleure présentation nous allons maintenant démonstrer la charte trigonique et la charte trigonique comme pour la charte trigonique nous devrions être activés par vérifier la charte trigonique dans le tab de la configuration PINART PC et Cordic la configuration additionnelle pour la configuration DMA va s'occuper dans le tab DMA puis dans le tab DMA clique sur le bouton et clique sur la charte trigonique et puis clique sur le bouton et clique sur la charte trigonique nous allons maintenant générer un template de projet en utilisant STM32 Cubamex pour faire ça, nous allons commencer mon projet de STM et clique sur l'accès à la charte trigonique puis sélectionnez Nucléo64 STM32G4 et sélectionnez NucléoG474RI quand la Charte Trigonique NucléoG474RI est montée initialisez tout le périphère avec leur mode défaut nous allons sélectionner parce que nous n'avons pas besoin de la configuration puis sélectionnez CLEAR PINOUT parce que personne de ces GPIO doit être configuré et nous ferons tout puis dans PINOUT & CONFIGURATION TAB CATEGORISTE TAB et COMPUTING clique sur le code CORDIC et clique sur l'activité checkbox puis dans DMA SETTINGS clique sur le bouton AD et sélectionnez CORDIC HITE puis clique sur le bouton AD et sélectionnez CORDIC RAID puis pour garder la connexion DEBUG nous allons aller au système CORE SYSTEM et DEBUG sélectionnez SERIAL WIRE et PROJECT MANAGER nous allons générer notre projet dans C CORDIC puis nous allons coller CORDIC ARK TANJANT DMA nous allons générer ce projet pour le TOOL CHANE STM32 CUBE ID puis dans CORE GENERATOR nous allons sélectionner les références dans le TOOL CHANE PROJECT configuration file et nous allons vérifier tous les 3 pins en analog afin d'optimiser la consommation de pouvoir nous pouvons maintenant générer le projet nous pouvons maintenant ouvrir le projet dans STM32 CUBE ID donc nous allons cliquer sur OPEN PROJECT le projet est maintenant successfully importé dans le workspace STM32 CUBE ID cette slide montre l'exemple de la fonction ARK TANJANT dans la mode DMA le paramètre TANJANT représente un table pour établir une séquence de TANJANT convertie Q131 prénormalisé avec un facteur de scaling et pour assurer le range de minus 1 à plus 1 comme avant, nous avons choisi de prendre le bénéfice de la meilleure précision pour cette fonction par taking 6 cycles pour conclure chaque résultat nous avons installé le paramètre scale en utilisant la valeur précomputée note que dans cet exemple nous avons utilisé le temps fait par le périphère cordique pour conclure le data set courant pour procéder le résultat prévu cette slide montre un C fonction utilisé pour normaliser le data set pour remplir le range cordique de minus 1 à plus 1 le but est de trouver le maximum facteur de scaling et appuyer pour tout le value Q131 TANJANT de le data set defini dans F32 TANJANT pour utiliser cette fonction en code user section 0 nous allons ajouter table Q31 Angle table Q131 TANJANT et table Q131 TANJANT ainsi que la variable TANJANT on va également définir une fonction de callback procédérant la valeur prévu la valeur de callback consiste à installer chaque valeur à chaque valeur prévu avec le code Q31 TANJANT en code user section 1 nous allons ajouter une variable TANJANT et une structure TANJANT en code user 2 nous allons générer table Q31 TANJANT la valeur 360 TANJANT convertie en format Q131 et ensuite appuyer la fonction code Q31 TANJANT que nous avons discuté dans une vidéo prévue appelée CORDIC OVERVIEW COSINE part 2 enfin, en code user section 3 nous allons ajouter la valeur 360 à un moment normaliser la valeur et convertir en code Q131 fixe point représentation nous allons ensuite appuyer la valeur CORDIC Q131 ATAN array pour compter la valeur TANJANT cette slide montre quelques opérations dans l'exemple prévu l'intégration consiste d'abord à compter la part COSINE dans la mode DMA puis à compter la part TANJANT de chaque combinaison de cette animation l'approche est pour diviser chaque valeur COSINE ou à compter la valeur TANJANT de chaque perte bloc de 361 data puis à compter la part TANJANT sur chaque valeur normalisée la idée de normaliser la valeur TANJANT est de montrer chaque valeur 261 avec un facteur command afin d'améliorer la valeur TANJANT de minus 1 à plus 1 nous allons impliquer l'exemple CORDIC ATANJANT en utilisant STM32 CUBE IDEA dans CORDIC ATANJANT GO TO CORE SRC et OPEN dans CORDIC ATANJANT section 0 défendre la table CU31 ANGLE STAB CU31 TATA TAB CU31 ATAN TAB F32 ANGLE STAB et la variable CORDIC ATANJANT puis défendre la structure de la data utilisée pour la procédure dans le code de l'accès appelée ATAN DATA ainsi que la procédure ATAN la procédure ATAN DATA est un callback qui va procédure la data en attendant pour la CORDIC TO COMPUTATION de la prochaine data set puis dans CORDIC ATANJANT section 1 utilisée dans CORDIC ATANJANT CORDIC ATANJANT et la data utilisée par la structure ATAN DATA puis dans CORDIC ATANJANT section 2 on va générer 360 ANGLE STAB et en utilisant la CORDIC CU31 COST SCENARAY on va compter la CORDIC SCENARAY pour chaque ANGLE STAB la CORDIC CU31 COST SCENARAY a été discutée dans une autre vidéo appelée CORDIC OVERVIEW COSINE SIGN PART 2 puis dans CORDIC ATANJANT on va compter pour chaque ANGLE la CORDIC CU31 ATANJANT utilisée dans la CORDIC CU31 ATANJANT dans la mode DMA la CORDIC ATANJANT va être compétue pour 360 ANGLE en temps on va définir la CORDIC CU31 COST SCENARAY la CORDIC F32 à la CORDIC CU31 normalise la CORDIC CU31 et la CORDIC CU31 ATANJANT afin de faire ça on va premièrement définir dans la CORDIC PFT section la fonction pour convertir un point fixé en CORDIC CU31 format pour un float et un float pour un point fixé en CORDIC CU31 format puis on va définir la fonction CORDIC CU31 COST SCENARAY puis on va définir la fonction CORDIC F32 à la CORDIC CU31 normalise la idée de CORDIC F32 à la CORDIC CU31 normalise est de trouver la fonction reçue produite par la CORDIC CU31 en tant que des preuves dans la CORDIC l'arrange de la CORDIC CU31 3D et puis on va définir la CORDIC CU31 ATANJANT que l'on a précédemment discuté. Nous avons mis le type de callback de Cordic Processing et nous allons maintenant ajouter un file d'inclusion qui est l'application Mite utilisé, par exemple, pour la fonction F. Nous allons ajouter un table d'inclusion appelé CST ScaleTab utilisé dans Cordic Q31 Art & Jump Terrain et nous devons pouvoir construire notre projet donc construire le projet Notre projet est réussi à générer Nous sommes maintenant capables de loader notre code dans notre bâtiment nucléaire débarguer et sélectionner OK puis cliquer sur Switch et nous pouvons freer notre code Nous allons réutiliser le même STM32Q moniteur project permettant de graphiquement visualiser l'output de la variable Cordic A10 continuement Nous allons maintenant continuer à regarder après la variable Cordic A10 en utilisant le STM32Q moniteur Pour faire ça, nous allons aller dans le bloc de la variable Cordic et sélectionner le file Cordic Art & Jump DMA Nous avons changé la direction pour la variable Cordic Art & Jump DMA et nous avons changé la file Cordic pour la variable Cordic Art & Jump DMA Nous avons sélectionné la variable Cordic A10 et nous avons validé Nous verrons que le problème est en train de montrer un red square qui signifie que le STLink n'est pas disponible pour le STM32Q moniteur C'est parce qu'on n'a pas éliminé le debugger dans le STM32Q ID Nous allons dans le STM32Q ID Nous déconnectons le STM32Q ID de le debugger Nous allons retourner dans le STM32Q moniteur et nous avons le green square qui signifie que le Probe est disponible pour le STM32Q moniteur Nous déployons la solution et nous lançons le dashboard Nous cliquons et commençons l'acquisition pour commencer l'acquisition et nous verrons que nous avons les mêmes résultats Merci