Table des matières

Simulation SPICE avec KiCad

1. Introduction

Cette page montre comment effectuer une simulation SPICE avec KiCad (version 7).

2. Saisie du schéma

Lorsqu'on définit un schéma pour faire une simulation, on doit sélectionner les composants dans la partie Simulation_SPICE. En effet, ces composants ont tous un comportement par défaut défini dans le langage SPICE. Il est possible d'utiliser un composant ne figurant pas dans cette partie (par exemple un ampli-op ou tout autre circuit intégré) mais il faudra dans ce cas fournir un modèle spice pour ce composant.

Pour illustrer la procédure, nous considérons le schéma suivant :

mosfet-fig.svgFigure pleine page

Il s'agit d'un circuit comportant un transistor MOSFET de puissance, permettant de piloter le courant passant dans une bobine ou dans un moteur.

Pour information, le fichier SVG de la figure ci-dessus est obtenu avec la fonction Tracer de KiCad. Le fichier SVG est ensuite ouvert avec Inkscape puis le cadre est redimensionné de manière à contenir seulement le schéma (il contient initialement toute la page A4).

Le but est de faire une simulation TRAN (transitoire). La source de tension V1 est définie par le composant VPULSE. Elle fournit une tension carrée allant de 0 à 10 V, de fréquence 10 kHz et de rapport cyclique 0,5. La source de tension V2 est définie par le composant VDC; sa tension est fixée à 10 V. Le transistor MOSFET et la diode ont un comportement par défaut. Nous avons ajouté deux labels globaux (ne pas utiliser les autres types de labels) : l'un pour marquer le nœud qui contient le signal de commande, l'autre pour marquer le drain du transistor. L'ajout de labels n'est pas obligatoire mais il permet de simplifier l'identification des nœuds importants lors de la simulation.

Si l'on dispose d'un fichier .lib qui comporte un modèle spice pour un composant, il est possible de l'utiliser. Par exemple pour le transistor MOSFET, nous souhaitons utiliser le modèle du transistor IPA50R500CE du fabricant Infineon, qui est dans le fichier IFX-SimulationModel_CoolMOS_CE_MOSFETs_500V_Spice-web.lib (téléchargeable sur Infineon's Power MOSFET). Pour cela, cliquer deux fois à gauche sur le symbole du transistor; la fenêtre suivante apparaît :

symbole

Cliquer sur le bouton Modèle de simulation; la fenêtre suivante apparaît :

symbole

Par défaut, le modèle SPICE intégré est sélectionné. Dans le cas présent, nous avons sélectionné Modèle SPICE à partir d'un fichier (*.lib) puis choisi le fichier IFX-SimulationModel_CoolMOS_CE_MOSFETs_500V_Spice-web.lib; la liste des sous-circuits (modèles) définis dans ce fichier apparaît alors automatiquement : il reste à sélectionner le transistor que l'on souhaite utiliser. On remarque que le changement de transistor sera très facile à faire.

Pour la diode, nous gardons le modèle SPICE intégré.

3. Simulation

La simulation SPICE est accessible par le menu Inspecter:Simulateur ou bien par le bouton situé sur la barre au dessus du schéma. Voici la fenêtre qui appparaît :

symbole

Il faut cliquer sur Commande Simulation pour définir la simulation. Voici la fenêtre qui apparaît :

symbole

Dans le cas présent, on définit une simulation Transitoire, avec un pas de temps de 1 microseconde et une durée de 5 ms (soit 50 cycles du signal de commande).

Après validation de la commande de simulation, il faut lancer la simulation puis cliquer sur Ajouter Signaux pour sélectionner un signal à tracer ou bien utiliser la sonde. Voici la fenêtre qui apparaît dans le premier cas :

symbole

Les intensités de courant dans les dipôles et dans les trois bornes du transistor sont facilement identifiables. On voit aussi les potentiels des deux nœuds auquels nous avons attribué un nom (COMMANDE et DRAIN). Les autres nœuds portent le nom attributé par KiCad, qui n'est pas compréhensible sans consultation de la Netlist. Dans le cas présent, on s'intéresse au courant dans la bobine (I(L1)) et au signal de commande (V(COMMANDE)). Voici le tracé qui apparaît :

symbole

On peut modifier un paramètre du circuit dans le schéma puis relancer la simulation. Voici par exemple le nouveau tracé après avoir défini une largeur de pulse plus petite (rapport cyclique plus faible) :

symbole

Les tableaux peuvent être exportés au format CSV. Voici le début du fichier :

time;I(L1);V(COMMANDE);
0;1,45268e-06;0;
1e-11;1,4523e-06;0,1;
1,08401e-11;1,45226e-06;0,108401;
1,25203e-11;1,45219e-06;0,125203;
1,58807e-11;1,45201e-06;0,158807;
2,26015e-11;1,45151e-06;0,226015;
3,60431e-11;1,45e-06;0,360431;
5,57891e-11;1,44655e-06;0,557891;
8,53832e-11;1,43862e-06;0,853832;
1,28768e-10;1,4211e-06;1,28768;
1,70114e-10;1,39856e-06;1,70114;
2,1066e-10;1,37302e-06;2,1066;
2,57737e-10;1,34152e-06;2,57737;
			   

Ce fichier ne peut pas être lue directement avec la commande numpy.loadtxt car le séparateur décimal est une virgule et non un point. De plus, chaque ligne se termine par un point-virgule, ce qui pose problème car ce point-virgule n'est pas un séparateur de champs.

La fonction suivante permet de lire ce fichier :

from io import StringIO
import numpy as np

def readData(filename):
    with open(filename) as f:
        lines = f.readlines()
    lines = [x[:-2].replace(',','.') for x in lines]
    string = ""
    for s in lines: string += s+"\n"
    return np.loadtxt(StringIO(string),unpack=True,skiprows=1,delimiter=';')		   
			   

Voici le tracé des deux signaux :

from matplotlib.pyplot import *
[t,IL1,VCOMM] = readData('simulation-mosfet.csv')
figure(figsize=(12,8))
subplot(211)
plot(t*1e3,VCOMM)
ylabel('VCOMM (V)')
grid()
subplot(212)
plot(t*1e3,IL1)
ylabel('I(L1) (A)')
xlabel('t (ms)')
grid()
			   
figAfigA.pdf
Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.