RFSim2023: Simulateur de circuits AC et d'antennes

Par Cédric Bérenger | 24 février 2024

Simulateur RFSim2023: Le circuit est défini textuellement, les valeurs sont ajustables finement avec des cadrants rotatifs. La capture montre la recherche des bonnes valeurs pour adapter l'impédance d'un transceiver NFC 13.56MHz. 

En fonction de ma dernière lubie du moment, il m'arrive de coder des petits utilitaires pour apprendre un concept de manière interactive. Afin d'éviter que tous ces petits utilitaires finissent dans l'oubli, je viens d'en passer certains en open-source sur mon gitlab https://gitlab.com/cb-embedded-open. Dans cet article, nous allons voir rapidement RFSim2023, un utilitaire codé from scratch en javascript permettant de simuler et d'ajuster de manière interactive des circuits passifs. L'utilisation principale est le fine-tuning d'antennes, pour des transceivers RFId par exemple. Cet outil peut s’avérer pratique car à ma connaissance, il n'existe pas de petit logiciel simple permettant une visualisation interactive fluide du time domain et du fréquency domain en même temps : LT-Spice par exemple ne permet pas d'afficher l'abaque de simth, et il faut choisir soit le mode transient pour le time domain, soit le mode AC-analysis pour le frequency domain.

Projet disponible à cette adresse : https://gitlab.com/cb-embedded-open/nodalanalysis

Fonctionnement interne du simulateur : Loi d'Ohm et  solveur d'équation linéaires à valeurs complexes

Le fonctionnement interne du simulateur est très simple. Sa conception ma permis de mieux comprendre l'analyse nodale des circuits électroniques.

L'analyse nodale d'un circuit, alimenté par un ou plusieurs générateurs,  cela consiste à déduire les tensions à chaque point de connexion (noeuds) entre les composants passifs (résistances, condensateurs, inducteurs). Cette analyse des circuits s'effectue en courant alternatif, c'est à dire que chaque tension a un paramètre de phase en plus d'un paramètre d'amplitude.

Chaque composants passif est modélisé par une impédance fonction de la fréquence. Cette impédance défini la relation entre la tension aux bornes du composant (amplitude / phase)  et le courant (amplitude / phase) qui va le traverser (Loi d'ohm généralisée à l'alternatif, U=ZI, avec U tension complexe, I courant complexe, et Z impédance complexe). à chaque point de jonction, les valeurs des courants provenant des différentes branches sont régis par la loi des noeuds : la somme des courants est nulle.

Toutes ces relations entre les différents valeurs complexes de tensions / courants constitue un système d'équation linéaire à n inconnues complexes entièrement contraint. Résoudre le système d'équation nous donne toutes les tensions pour tous les noeuds du circuit. La connaissance des tensions en tout point permet de calculer aisément le courant de chaque branche (I=U/Z).

Le fichier Complex.mjs implémente addition, soustraction,  multiplication, inversion, division de nombres complexes. Le fichier Solver.mjs contient le solveur linéaire, il applique un simple pivot de gauss pour résoudre des systèmes à n inconnues. Le fichier Network.mjs gère les composants passifs et leur interconnexion pour former un circuit. Une fois le circuit complété, il est possible de générer le système d'équation et de le passer au solveur pour résoudre toutes les tensions.

Utilisation du simulateur : codage du circuit et de l'interface dans Main.mjs

Configurer le simulateur s'effectue en deux étapes : une première étape consiste à lister tous les composants passifs et leurs connexions. la méthode addDevice de la classe Network permet de créer des composants passifs avec des noms (chaîne de caractère), un type parmis "Resistor", "Inductor", "Capacitor", "VSource" et une valeur fonction du composant choisi (respectivement en Ohm, Henry, Farad, VSource). (L'impédance de chaque composant sera calculée en fonction de la fréquence de simulation choisie).

Il est possible également de définir des noeuds avec une tension fixe avec addNet (tension complexe).  Pour réaliser les connexions, chaque composant dispose de ports.  Il est possible de connecter un port à un net, ou alors un port à un autre port.  Attention : le simulateur ne supporte pas le fait de connecter des nets, donc il y aura une erreur si on connecte à net un port déjà connecté.

La deuxième étape de la configuration consiste à ajouter tous les volets graphiques ainsi que les cadrants pour ajuster les variables voulues.

Tester le simulateur

Le simulateur est disponible à cette adresse gitlab: 

https://cb-embedded-open.gitlab.io/nodalanalysis/ 

Essayez d'ajuster les différents cadrants pour voir la réponse interactive. Il s'agit d'un circuit classique de matching pour un transceiver RFid (capas séries et parallèles, inductance de filtrage EMI). Les trois vues montre respectivement la tension aux bornes de l'antennes (il faut centrer sur 13.56MHz et garantir la bande passante pour la modulation 800kHz). La vue centrale représente la vue abaque de smith (impédance en fonction de la fréquence). La dernière vue représente le signal dans le time-domain.