Python a un package appelé Lcapy qui peut analyser les circuits linéaires. Lcapy a diverses fonctions, mais cet article explique comment trouver la fonction de transfert d'un circuit symboliquement (mathématiquement).
L'article suivant explique comment activer Lcapy. [Circuit x Python] Comment activer le package d'analyse de circuit linéaire Lcapy
Python: 3.7.4、SymPy: 1.6.2、Lcapy: 0.67.0
Étant donné que Lcapy est toujours un package en développement, le code de cet article peut ne pas fonctionner avec le même ver que ci-dessus. Même dans mon environnement, le code de la documentation officielle peut ne pas fonctionner ... Sachez que votre code peut ne pas fonctionner sans pièces défectueuses!
Dans cet article, nous utiliserons la méthode Circuit pour trouver la fonction de transfert. Comme premier exemple, résolvons la fonction de transfert du circuit RC dans la figure ci-dessous.
Code pour trouver la fonction de transfert:
Exemple 1-1)
from lcapy import *
cct = Circuit("""
Vi 1 0
R 1 2 RF
C 2 0 CF
""")
H = (cct.C.V(s) / cct.Vi.V(s)).simplify()
H
Résultat de l'exécution:
Commentaire: J'entre dans une netlist dans Circuit ("" "" ""). La tension appliquée de C est obtenue par cct.C.V (s), et la fonction de transfert est obtenue en divisant celle-ci par la tension d'entrée cct.Vi.V (s). La fonction de transfert est simplifiée avec symplify. De cette façon, nous pouvons voir que la fonction de transfert a été obtenue symboliquement (mathématiquement).
Il est également possible d'omettre les valeurs d'élément (RF et CF dans l'exemple 1-1). Dans ce cas, valeur de l'élément = nom de l'élément (R et C).
Exemple 1-2)
from lcapy import *
cct = Circuit("""
Vi 1 0
R 1 2
C 2 0
""")
H = (cct.C.V(s) / cct.Vi.V(s)).simplify()
H
Résultat de l'exécution:
Bien entendu, il est également possible de saisir la valeur de l'élément sous forme de valeur numérique au lieu d'un symbole.
code:
Exemple 1-3)
from lcapy import *
cct = Circuit("""
Vi 1 0
R 1 2 1e3
C 2 0 1e-6
""")
H = (cct.C.V(s) / cct.Vi.V(s)).simplify()
H
Résultat de l'exécution:
Il est également possible de trouver symboliquement la fonction de transfert puis de la remplacer par la valeur.
Exemple 1-4)
from lcapy import *
cct = Circuit("""
Vi 1 0
R 1 2 RF
C 2 0 CF
""")
H = (cct.C.V(s) / cct.Vi.V(s)).simplify()
H.subs('CF',1e-6).subs('RF',1e3)
Résultat de l'exécution:
S'il s'agit d'un circuit simple comme l'exemple 1), il ne faudra pas beaucoup de temps pour saisir la liste des réseaux par vous-même. Cependant, lorsqu'il s'agit d'un circuit légèrement compliqué comme celui illustré ci-dessous, l'auto-entrée est gênante.
Vous n'êtes pas obligé d'écrire la netlist vous-même en créant un schéma de circuit avec l'outil de conception de circuit, en y générant une netlist et en la transmettant au code Lcapy.
La figure ci-dessus a été dessinée avec LTSPICE, mais dans le cas de LTSPICE, vous pouvez obtenir la netlist à partir de View => SPICE NETLIST.
Collez la netlist dans votre code Lcapy comme suit:
Exemple 1-3) Circuit RC
from lcapy import *
cct = Circuit("""
V1 IN 0 s 1
R1 OUT N001 RP
C1 OUT 0 CM
L1 IN N001 LP
R2 OUT 0 RM
C2 OUT N001 CP
""")
H = cct["OUT"].V(s).simplify()
H
La fonction de transfert est obtenue par une méthode différente de l'exemple 1). Tout d'abord, V1 est modifiée comme suit dans la liste des réseaux copiés. V1 IN 0 s 1 Cela signifie un signal d'amplitude = 1 dans la région s. La fonction de transfert H est obtenue en mesurant la tension du noeud "OUT".
Résultat de l'exécution:
Les amplificateurs non inverseurs comme celui illustré ci-dessous peuvent également être analysés avec Lcapy.
VCVS (source de signal de tension de commande de tension) est utilisé comme condensateur opérationnel. Si vous dessinez avec LTSPICE, cela ressemblera à la figure ci-dessous.
Comme dans l'exemple 2), si vous copiez et collez la liste des réseaux et modifiez V1, vous pouvez trouver la fonction de transfert.
Exemple 3-1)
from lcapy import *
cct = Circuit("""
R1 N001 N002 RG
R2 OUT N001 RF
V1 N002 0 s 1
C1 N001 OUT CF
E1 OUT 0 0 N001 AOL
C2 N001 0 CG
""")
H = cct["OUT"].V(s).simplify()
H
Résultat de l'exécution:
Si vous souhaitez analyser avec un amplificateur opérationnel à un pôle, vous pouvez créer un schéma de circuit comme celui illustré ci-dessous.
Les caractéristiques de l'amplificateur opérationnel doivent être exprimées par l'équation suivante.
Exemple 3-2)
from lcapy import *
cct = Circuit("""
E1 0 OUT N002 0 1
C1 N002 0 {1/p}
R1 N002 0 1
R2 OUT INN RF
R3 INN N001 RG
V1 N001 0 s 1
G1 0 N002 0 INN AOL
""")
H = cct["OUT"].V(s).simplify()
H
Résultat de l'exécution:
Un amplificateur entièrement différentiel peut être calculé avec Lcapy en utilisant le circuit illustré ci-dessous.
Le package Lcapy, qui vous permet de trouver facilement la fonction de transfert sans résoudre l'équation du circuit, est très pratique. Une fois que vous avez une fonction de transfert, vous voudrez l'étendre (comme trouver les pôles) ou faire une analyse numérique, que je couvrirai dans un article séparé.
[Circuit x Python] Comment développer et calculer les fonctions de transfert à l'aide de Lcapy
Recommended Posts