 Bonjour et bienvenue à cette présentation de CORDIC en pratique. Dans cette vidéo, je vais vous montrer des exemples simples sur comment utiliser les fonctions de co-signes et de signes avec le STM32 CORDIC PERIFERO. Dans cette présentation, je vous donnerai quelques pré-requisites nécessaires pour aller dans cette vidéo afin de reproduire l'exemple et démontrer comment utiliser les fonctions de co-signes et de signes en mode 0 et en mode DMA. Avant de rentrer dans plus de détails, c'est recommandé de voir la première partie de cette série de vidéos qui s'appelle le CORDIC Overview. Pour reproduire les mêmes exemples démontrés durant cette vidéo, vous devez installer le STM32 Cube MX, le STM32 Cube IDE et le STM32 Cube Monitor. Finalement, cette vidéo a été faite en utilisant un Nucléo G474RE. Le CORDIC, les fonctions de co-signes et de signes ont pris deux arguments et ont généré deux résultats. Le premier argument est l'angle theta, selon l'invoyance divisé par P, ce qui donne un range de minus 1 à plus 1. Le deuxième argument est un modulaire qui est defini dans le range de 0 à plus 1. Si la fonction de co-signes est utilisée, le premier résultat sera la valeur de co-signes et de theta multipliée par modulus et le deuxième résultat sera la valeur de sine theta multipliée par modulus. En cas que la fonction de sine est utilisée, le premier résultat sera la valeur de sine theta multipliée par modulus et le deuxième résultat sera la valeur de co-signes multipliée par modulus. Notez que même si le paramétre scale n'est pas appliqué pour cette fonction, il doit être placé à 0. La précision du paramétre scale est définie par le nombre d'intérêts configurés pour générer les résultats. Dans le cas des fonctions co-signes, la meilleure précision que le paramétre scale peut bénéficier est quand il est configuré avec 24 intérêts ou 6 cycles pour 2 à la valeur de minus 19 maximum résiduel. Comme le premier exemple, nous allons commencer avec une fonction de co-signes utilisant la mode 0 à la valeur de plus en plus. Pour générer un projet, nous allons utiliser STM32 Cubamex. Lorsque le Nucleo G474RE est sélecté par le target dans le Tab de configuration PNUT, puis dans le Tab de catégorie, expandez la catégorie de computing et sélectionnez Cordic. Ensuite, checkez la box de checkbox activée. Lorsque le STM32 Cubamex est ouvert, sélectionnez l'accès à un sélecteur de bord. Sélectionnez le Nucleo 64, le G4, le Nucleo G474RE. Ne initialisez pas le périferaire avec leur mode défaut, ce n'est pas nécessaire. Ensuite, vous pouvez juste clarifier le PNUT. Allez au Tab de configuration PNUT. C'est le Tab de catégorie. Allez dans le PC, Cordic, et cliquez sur la box de checkbox activée. Lorsque vous n'avez pas utilisé la connexion de debug, allez dans le SysTem Core, SysTem, Debug et sélectionnez le Serial Wire. Maintenant, nous pouvons générer le projet. Pour cela, nous allons dans le Project Manager. Et ensuite, nous avons typé un projet de nom. Pour exemple, Cordic, Cosine, Cine, Zero, pour Zero Overhead. En location de projet, pour exemple, dans les vidéos, Cordic. Et nous allons sélectionner le Toulchain IDE, STM32 Cubamex IDE. En co-générateur, nous allons sélectionner le fil de l'abri fil nécessaire en référence dans le projet de Toulchain. Et nous allons mettre tous les 3 pins comme analogues pour la consommation et la optimisation de pouvoirs. Et ensuite, nous allons cliquer sur Générer le code. Et ensuite, cliquer sur l'opening de projet. STM32 Cubamex IDE s'ouvre et importe dans le projet. Et nous allons avoir notre source code prête pour construire notre exemple. Ce site montre une implementation de l'équivalent de la course F de l'abri mat standard en utilisant le code Peripheral en mode Zero Overhead. X paramètre est donné en région et a converti pour remplir le code Peripheral en range de minus 1 à plus 1 et de plus 1 en format Q31 dans l'input Q31. Dans cet exemple, nous choisissons de prendre le bénéfice de la meilleure précision offerte par le code pour cette fonction en prenant 6 cycles pour commuter les résultats. Nous avons également mis le paramètre scale pour ZERO que l'on a mentionné. La complémentation pour la fonction CNF est équivalente aux fonctions de course F mais utilise le fonction appel de CORDIC fonction CNE. Note que le CORDIC offre des renseignements par le code HAL-Calculation et ZERO Overhead par le code HAL-Calculation de ZERO. On choisit d'utiliser HL Cordic Calculate 0 pour le raisin de performance. Pour utiliser cette fonction, nous allons ajouter Flood Cordic Cossine et Cordic Synth Variable en Codes 0, ainsi que le variable double Radian en Codes 1, section. Finalement, en Codes 3, nous allons implémenter un loop, à partir de 360° de la circole et ajouter le Codic Q31 Coss F et le Codic Q31 Synth F dans le Codic Cossine Variable et le Codic Synth Variable, chaque 10 ms. Ce n'est pas que chaque angle est convertie, d'un degrés à un degrés. Nous sommes maintenant retournés au projet STM32 Cube ID, qui a été créé avec STM32 Cube MX, le Codic Cossine C0. Nous allons regarder le file main.c. Dans le directory Codic, dans le directory SRC, nous allons ouvrir main.c. Nous allons procéder, comme mentionné, nous allons définir le Codic Cossine et le Codic Synth Flood Variable. Puis, dans la section 1 du code user, nous allons définir le variable radian, dans le format double. Puis, nous allons définir un loop, qui va s'occuper du angle 360°, en utilisant le Codic Q31 Coss F et le Codic Q31 Synth F que nous avons discuté sur le précédent slide. Puis, nous allons définir les fonctions mises, Codic Q31 Coss F et Codic Q31 Synth F que nous avons discuté sur le slide. Donc, nous allons définir la fonction, permettant de convertir un float à un Codic Q31 et l'opposite, un Codic Q31 à un float. Puis, nous allons définir les fonctions Codic Q31 Coss F et le Codic Q31 Synth F. Certaines de ces fonctions ont besoin d'un extrait de file. Donc, pour l'instant, nous allons ajouter le mat.h. Nous devons maintenant pouvoir compiler notre code. Ici, nous avons notre code, ready to run on our nuclear board. Nous allons maintenant installer un project STM32 Cube Monitor permettant de graphiquement visualiser l'output de Codic Coss Synth et de Codic Synth variables continuement. Nous allons utiliser le STM32 Cube Monitor afin de déployer les valeurs de la Codic Synth et de la Codic Coss Synth durant le temps du code. Tout d'abord, nous allons ajouter deux boutons, un bouton pour commencer l'acquisition et un bouton pour arrêter l'acquisition. Le premier bouton sera appelé Start Acquisition. Le message Synth sera start et le deuxième bouton sera Stop Acquisition et le message Synth sera stop. Ensuite, nous allons trouver un moyen d'enlever les valeurs de la Codic Coss Synth et de la Codic Synth toujours la même. Nous allons définir un groupe de valeurs et les enlever des valeurs de la Codic Synth et nous allons enlever les valeurs de la file générée précédemment par le STM32 Cube ID. Pour cela, nous allons regarder par exemple la direction de débat de ce projet. Nous allons sélectionner la file de Codic Coss Synth 0 par le STM32 Cube ID. Nous allons sélectionner la file de Codic Coss Synth et les enlever des valeurs de la Codic Synth de la file générée précédemment par le STM32 Cube ID. Nous allons sélectionner les valeurs de la Codic Coss Synth et les valeurs de la Codic Synth de les valeurs de la Codic Synth toujours les valeurs de la Codic Synth et nous sommes terminés. Nous allons enlever une file de la Codic Synth donc nous allons l'enlever ma file de la Codic Synth de la Codic Synth et nous allons sélectionner la file de la Codic Synth par le STM32 Cube ID de la Codic Synth de la Codic Synth et nous allons l'enlever tous les blocs pour cette partie. Nous allons l'enlever les valeurs et l'enlever sur le chart. Donc pour faire ça nous avons d'abord besoin d'aider une file de la Codic Synth donc nous allons l'enlever ma file de la Codic Synth et nous allons sélectionner la file de la Codic Synth pour la file de la Codic Synth qui est la file de la Codic Synth connectée à la file de la G4C74 de la Codic Synth. Nous allons ensuite ajouter un bloc de la processation qui va permettre de procéder les valeurs prévument acquires par le STM32 Cube Monitor. Donc, ce bloc va être lié directement à un bloc de la variable qui s'appelle la Codic Synth. Il va voir la Codic Synth et la Codic Synth que nous avons prévu sélectionné dans le bloc de la variable et nous allons remplir cette étape. Ensuite, nous allons utiliser un chart et ce chart va être dans le même endroit ici. Nous allons l'enlever Trigonométrique chart. Et ensuite, nous allons lier nos différents blocs 1 à 1. Nous allons retourner au STM32 Cube IDE et nous allons ajouter la Codic Synth dans la G4C74 OK Et vous voyez la Codic Synth dans la Codic Synth. Donc, maintenant la Codic Synth va continuer et définitivement afin d'exprimer sur l'autre côté la Codic Synth et la Codic Synth Donc, afin de faire ça la Codic Synth 32 Cube Monitor est également accélérée dans le bloc de la variable qui est connecté sur le link ST. Donc, nous allons déconnecter la Codic Synth 32 Cube IDE de le bloc de la variable. Maintenant, nous allons retourner à la Codic Synth 32 Cube Monitor et nous allons premièrement déployer cette solution et ouvrir le bloc. Et ensuite, nous allons commencer l'acquisition. Donc, ce que nous voyons est la Codic Synth et la variable de la Codic Synth de 1 à 1 continuement. Notez que avant de déconnecter la Codic Synth vous devez faire sure que la Codic Synth est en train de présenter l'actangle gris sur la Codic Synth et la Codic Synth. Si c'est en train de présenter c'est probablement parce que dans la Codic Synth 32 Cube IDE vous ne devez pas déconnecter le bloc de la variable. Nous allons maintenant premièrement, nous allons ajouter un bouton clair donc afin de le faire, nous allons ajouter un nouveau bouton et envoyer un message clair afin d'éclairer la charte et nous allons l'appliquer à un graphe clair. Ensuite, nous allons connecter le bouton clair à la Codic Synth parce que ce que nous voulons c'est d'éclairer la charte c'est la première étape. Dans l'acquisition précédente la data, nous allons de minus 1 à 1 et la amplité est un peu plus petite. Si nous voulons augmenter la amplité, nous pouvons ajouter des variables post-processing dans le bloc de procédure et ajouter la Codic Synth et la Codic Synth. Ensuite, nous pouvons ajouter un switch qui va filtrer ces variables et seulement considérer les valeurs d'amélioration de l'amplité. Donc, pour exemple, avec le switch, nous devons ajouter un nom. Donc, pour exemple, filtrer, parce que c'est en jouant le rôle d'un filtrer. Focuse sur la propriété appelée message.pelo.variable nom et regarde après les variables que nous avons justifiées. La Codic Synth et la 10x Codic Synth. Ensuite, nous pouvons valider. Et ensuite, nous pouvons linker les valeurs de Codic dans le filtre et linker la Codic Synth à la Codic Synth. Ensuite, nous pouvons déployer la solution. Ensuite, nous pouvons déployer la solution. Nous pouvons ouvrir le dashboard et regarder après le display. On commence l'acquisition. Nous verrons les valeurs maintenant de minus 10 à 10. Donc, c'est assez plus visible. Dans le cas où vous voulez vous pouvez aller dans le tab du dashboard dans le layout. Ensuite, vous pouvez aller dans le layout de la main. Et ensuite, vous pouvez positionner chaque bouton sur le charte. Donc, pour l'instant, je considère que ce n'est pas suffisant. Ou je peux aussi décider de mettre le bouton sur le charte. Je déploie la solution et ensuite je lance le dashboard et je peux commencer l'acquisition. Le même résultat sur la position des boutons sont différents. On peut commencer l'acquisition. Nous allons maintenant démonstrer la Codic, Cosine et Synth en utilisant le mode DMA. Comme pour le mode 0vL, la Codic Peripheral avec un checkbox dans la tab et la configuration. Et puis le tab de catégorie. La configuration additionnelle pour la configuration DMA, nous appartient dans le tab DMA. Dans le tab DMA, cliquez sur le bouton de l'aide et cliquez sur le bouton de l'aide et cliquez sur le bouton de l'aide et cliquez sur le bouton de l'aide. Nous allons maintenant générer un projet de CUBES ID grâce à la CUBES Mx en suivant le changement que nous avons discuté. Donc, premièrement, nous cliquez sur l'accès à l'électro-bord. Ensuite, cliquez sur le Nucléo 64 à STM32G4 et nous avons sélectionné Nucléo G474RI comme le B4. Nous avons sélectionné n'auparavant d'initialiser tout le Peripheral avec leur mode défaut. Nous n'avons pas besoin de ça. Nous avons sélectionné l'accès à l'accès à l'électro-bord parce que nous n'avons pas besoin de ça donc nous cliquez sur l'accès à l'électro-bord sur l'accès à l'électro-bord donc oui, nous voulons continuer de toute façon. Ensuite, comme nous l'avons discuté nous allons faire la compétition CORDIC. Ensuite, nous cliquez sur l'activité de l'électro-bord de l'activité de l'activité de l'électro-bord Peripheral. Nous allons au bouton de l'add Nous avons sélectionné l'activité de l'électro-bord puis nous allons au bouton de l'add et nous avons deux l'activité de l'électro-bord. La dernière chose, pour maintenir l'électro-bord de l'électro-bord nous allons dans le système-corps de l'électro-bord et nous avons sélectionné l'électro-bord. Quand nous pouvons arriver à l'électro-bord et nous appelons CORDIC COSIGN DMA Nous voulons générer avec STM32 CUBE IDE Nous avons changé quelques choses Nous allons sur le code-générateur Nous allons ajouter le laboratoire nécessaire comme référence dans le file de configuration de l'électro-bord et nous allons mettre tous les 3 pins Nous pouvons maintenant générer l'électro-bord Quand l'électro-bord est réussi généré, nous pouvons ouvrir l'électro-bord. L'électro-bord est ensuite suffisamment importé dans STM32 CUBE IDE Ce slide montre l'exemple des fonctions COSIGN et SIN dans DMA mode. Le paramètre Angle représente un table qui store un séquence de Q131 converti Angle Encore une fois, les valeurs sont en range de minus 1 à plus 1 Comme d'habitude, nous avons choisi de prendre le bénéfice de la meilleure précision par le code-générateur pour cette fonction par prendre 6 cycles pour s'occuper de ses résultats Nous allons aussi mettre le paramètre scale à 0, comme l'on l'a mentionné et le numéro de huit à 2 pour tous les angles de Q131 les séquences de COSIGN et SIN Ce slide montre la représentation mémoire de les angles et les résultats pour chaque angle donné un format Q131 ici en range mais converti en format Q131 nous allons obtenir les paires de COSIGN et SIN dans le table de résultats Nous avons 1 COSIGN et 1 SIN pour 1 Angle Pour utiliser cette fonction nous allons ajouter un code de SIN et CORDIC SIN et des tables Q131 Angle et Q131 TATA TAB en code 0 Nous nous allons générer un table de Q131 Angle le value de 361 Angle converti en format Q131 et puis de la fonction de la première CORDIC Q131 COSIGN Finalement En code 3 nous allons implémenter une enveloppe d'environ 360° et mettre le CORDIC SIN et CORDIC SIN dans le table Q131 TATA chaque 10 ms Nous sommes maintenant retournés au projet STM32 CUBE IDE appelé CORDIC COSIGN SIN DMA dans Core Directory SRC Directory Open main.cfile Puis En code 0 DECLARE Define Q131 Angle et Q131 TATA et CORDIC COSIGN et CORDIC SIN float variables Puis En code 2 CORDIC SIN Load 361 Angle in Q131 format in Q131 Angle tab et puis call the previously define CORDIC Q131 COSIGN array Then in user section 3 for each Angle load continuously the cosine and sine value in CORDIC COSIGN and CORDIC SIN variables We are now going to define the missing functions F32 to Q131 and Q131 to F32 Allowing to convert a float to a Q131 and a Q131 number to a float Then we are going to define the previously discussed function CORDIC Q131 COSIN array Then we are going to add the missing header file which is the mat.h from the mat standard library We should now be able to build our project Now, we are able to load our project into our nuclear board and now we can run to execute our code We are now going to reuse the same STM32 Q monitor project We are going to graphically visualize the output of CORDIC COSIGN and CORDIC SIN variables continuously In order to use STM32 Q monitor we will need to release the debugger by clicking on this button in order to disconnect STM32 Q by DE from the debugger Then in STM32 Q monitor we are going to go to the variable group CORDIC VALUES And load from the new executable CORDIC COSIGN SIN DMA the new ELF file We still have our COSIGN and SIN value We can update the project validate Then we can deploy and launch the dashboard Then we start the acquisition We have the same behavior than the one we had with the 0 overhead mode Thank you for watching this CORDIC COSIGN SIN Example in 0 overhead and DMA mode