Table des matières:
Vidéo: Fabriquer n'importe quel capteur à partir d'un FPGA : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
La plupart des fabricants ont essayé de construire au moins une fois dans leur vie un thermomètre, peut-être que celui qu'ils ont à la maison n'est pas assez intelligent, ou peut-être qu'ils pensent qu'ils peuvent construire le prochain NEST. Néanmoins, à un moment donné, ils avaient un microcontrôleur avec leur logiciel de pointe connecté à un capteur de température (et peut-être d'autres capteurs: pression, lumière). Jusqu'à présent, tout est parfait, le logiciel fonctionne et le capteur détecte. Testons-le !
Hmmmm… peut-être qu'il devrait chauffer le capteur à l'aide d'un sèche-cheveux et le refroidir à l'aide de glace, cela fonctionne pendant un certain temps. Mais cela ne semble pas professionnel, le capteur change de valeurs trop rapidement si vous le chauffez, il ne chauffe pas plus de quelques degrés. Le projet est un échec ! Mais l'algorithme est nouveau, prend en compte beaucoup de facteurs, quel dommage qu'il se soit coincé à cette chose stupidement mineure.
Ma solution est la suivante: faire en sorte qu'un FPGA agisse comme un capteur avec des valeurs diffusées depuis un PC (ou stockées en mémoire, ou créées ad-hoc à l'intérieur du FPGA). Donc, pour votre précieux MCU, le FPGA ressemble à un capteur, mais pas à n'importe quel capteur: quel que soit le capteur que vous aimez. Peut-être que vous décidez que vous avez besoin de plus de résolution ou d'un temps de réponse plus rapide que prévu, vous devez changer le capteur. Commandez-le en ligne, il arrivera dans quelques jours, quelques mois, qui sait. Respin votre PCB ou commandez un module avec le nouveau capteur. Ou… quelques clics et le FPGA est configuré comme votre tout nouveau capteur et il peut émuler la configuration interne exacte.
Au moment d'écrire ces lignes, le FPGA pourrait agir comme un LM75 avec des données de température stockées dans la BRAM (sur le FPGA).
Étape 1: Le MCU
Mon MCU de choix est un LPC4337 sur un LPCXpresso. En plus, j'ai un shield (LPC General Purpose Shield) avec un écran et un vrai capteur LM75. Le LPC4337 est un ARM Cortex M4 fonctionnant à 200 MHz et un plus petit Cortex M0 (non utilisé ici). Le vrai capteur est connecté au périphérique I2C1 et notre virtuel sera connecté à I2C0. La source est disponible sur mon GitHub.
Comment le construire ? Téléchargez LPCXpresso IDE avec la bibliothèque LPCOpen. Importez cette bibliothèque dans l'IDE et ouvrez également le projet depuis GitHub. Tout doit être configuré et vous pouvez cliquer sur "Debug" dans le coin inférieur gauche.
L'ensemble du projet est basé sur l'un des exemples de NXP (pour montrer que mon projet simule un vrai capteur et n'a pas besoin de code spécial côté MCU). Dans le fichier principal (appelé iox_sensor.cpp) se trouve ce code:
#define SENSORS_ON_SHIELD
#if défini(SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif défini(SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif
En changeant SENSOR_ON_SHIELD et SENSOR_OR_FPGA, l'utilisateur peut basculer au moment de la compilation vers quel capteur parler, le vrai ou le virtuel, car ils sont sur des broches I2C différentes.
Étape 2: Le FPGA
Ma carte FPGA de choix est une Artix 7 fabriquée par Digilent, ayant un Xilinx Arty 7. Deux des connecteurs PMod sont utilisés, un pour le débogage et un pour la charge utile réelle, la connexion avec la carte MCU.
Encore une fois, le code source du FPGA est disponible sur mon GitHub (dossier fpgaSide).
Comment le construire ? Téléchargez, achetez ou ouvrez Xilinx Vivado IDE. Importez les fichiers du projet depuis GitHub. L'un des fichiers (content.coe) contient les données de température au format brut qui seront transmises au faux capteur. Il existe également un fichier Excel du même nom qui aide à convertir les données de température lisibles par l'homme en données LM75 brutes. Je prévois de changer cela en un processus automatisé avec un logiciel écrit en Java, mais jusque-là, cette solution fonctionne. La synthèse et la mise en œuvre devraient prendre un certain temps, prenez cela en considération.
Étape 3: Comment ça marche ?
Comme je l'ai dit, pour le MCU, le FPGA ressemble à un capteur, plus exactement un capteur I2C. La sortie du périphérique I2C est connectée à l'entrée du FPGA. À l'intérieur du FPGA, il y a 3 composants principaux: - Contrôleur I2C - Périphérique I2C - Données Le contrôleur I2C reçoit les données I2C des broches du FPGA et les envoie au reste du FPGA et fait la même chose dans l'ordre inverse. Il maintient une machine à états interne pour le protocole I2C (en passant, voici la documentation pour cela). Qu'est-ce que ce composant envoie au périphérique I2C ? L'octet actuellement reçu, la position de cet octet dans la communication actuelle et si le MCU écrit ou lit depuis le FPGA. Le dispositif I2C reçoit les octets envoyés et met à jour la structure interne simulée du capteur. Il peut simplement mettre à jour le pointeur de registre ou demander de nouvelles données à la source de données. Le composant Data diffuse de nouveaux points de données. Actuellement, il ne s'agit que d'une mémoire ROM dont l'adresse est incrémentée (environ) deux fois par seconde.
Quel est mon objectif final ? Il est montré dans la deuxième image. C'est-à-dire: permettre à plus de dispositifs I2C (capteurs et autres) d'être simulables en même temps à l'intérieur du FPGA. Les données à l'arrière du capteur doivent être mises en cache dans le FPGA et diffusées à partir du PC via USB ou Ethernet. Prend en charge des capteurs plus avancés et d'autres périphériques I2C (mémoire, pilotes LED, etc.).
Étape 4: Tout assembler
Il est maintenant temps de tout connecter ensemble. Théoriquement, c'est simple: la carte mcu a un connecteur PMod (I2C0 & SSP0 (peut fonctionner comme SPI)). La carte Artix dispose de 4 connecteurs PMod qui peuvent être utilisés comme vous le souhaitez. Je choisis le connecteur D pour parler au MCU et le connecteur B pour me connecter à mon analyseur logique.
Avertissement
Vous ne pouvez pas connecter les deux cartes ensemble comme ça. Pourquoi? PMod a été conçu pour faciliter la connexion d'une carte maître/hôte (qui fournit l'alimentation) à une carte esclave/capteur (qui reçoit l'alimentation). Mais dans ce projet, les deux cartes fournissent de l'énergie et si vous connectez la sortie 3,3 V d'une carte à la sortie 3,3 V de l'autre carte, de mauvaises choses peuvent arriver. Mais ils pourraient ne pas et vous pourriez juste changer les paramètres des rails d'alimentation du FPGA (ils sont très soigneusement conçus). Ne prenez donc pas ce risque et déplacez le connecteur d'une broche vers la gauche (et retournez également la carte FPGA) comme le montrent les images ci-dessus. Voici la spécification PMod, vous pouvez l'étudier, ce que j'ai fait en bref, c'est de ne pas connecter les VCC des deux cartes.
Conseillé:
Bricolage HomePod à partir de n'importe quel haut-parleur : 8 étapes (avec photos)
Bricolage HomePod à partir de n'importe quel haut-parleur : construisez votre propre haut-parleur intelligent Apple HomePod gratuitement ! Ce Instructable prend moins de 20 minutes si vous avez le bon matériel. boîtierVous aurez peut-être besoin de : Soudure o
Comment obtenir de la musique à partir de PRESQUE N'IMPORTE QUEL (Haha) site Web (tant que vous pouvez l'entendre, vous pouvez l'obtenir Ok très bien s'il est intégré dans Flash, vous ne pourrez peut-être pas) ÉDITÉ !!!!! Informations ajoutées : 4 étapes
Comment obtenir de la musique à partir de PRESQUE N'IMPORTE QUEL (Haha) site Web (tant que vous pouvez l'entendre, vous pouvez l'obtenir… Ok très bien s'il est intégré dans Flash, vous ne pourrez peut-être pas) ÉDITÉ !!!!! Informations supplémentaires : si jamais vous allez sur un site Web et qu'il joue une chanson que vous aimez et que vous voulez, voici l'instructable pour vous pas de ma faute si vous gâchez quelque chose (la seule façon dont cela se produira est si vous commencez à supprimer des éléments sans raison ) J'ai pu obtenir de la musique pour
Convertissez (à peu près) n'importe quel fichier multimédia en (à peu près) n'importe quel autre fichier multimédia gratuitement ! : 4 étapes
Convertir (à peu près) n'importe quel fichier multimédia en (à peu près) n'importe quel autre fichier multimédia gratuitement ! : Mon premier instructable, bravo ! est plus universel, comme.wmv ou.mov.J'ai recherché d'innombrables forums et sites Web, puis j'ai trouvé un programme appelé
Utilisez n'importe quel système de haut-parleurs 5.1 avec n'importe quel lecteur MP3 ou ordinateur, pour pas cher ! : 4 étapes
Utilisez n'importe quel système de haut-parleurs 5.1 avec n'importe quel lecteur MP3 ou ordinateur, pour pas cher ! Je l'ai utilisé avec mon ordinateur de bureau qui avait une carte son 5.1 (PCI). Ensuite, je l'ai utilisé avec mon ordinateur portable qui avait un
Chargez Axim X50v à partir de n'importe quel chargeur USB + problèmes de synchronisation : 6 étapes
Chargez Axim X50v à partir de n'importe quel chargeur USB + problèmes de synchronisation : récemment, j'ai eu quelques problèmes avec mon PDA Dell Axim X50v. Ce PDA se charge via USB, mais nécessite un port 2.0. Cela n'a jamais été un problème auparavant, c'est jusqu'à ce que mon ordinateur s'éteigne et que j'en ai un nouveau. Pour une raison quelconque, le nouvel ordinateur ne se connectait pas