В этом примере показано, как устранить неполадки при преобразовании двухполюсного транзистора (IGBT) с изолированным затвором SPICE и преобразовать его в эквивалентный компонент Simscape™. subcircuit2ssc функция преобразует все компоненты подсистемы в файле списка соединений SPICE в один или несколько эквивалентных файлов Simscape. Однако в некоторых случаях необходимо вручную отредактировать исходный список соединений SPICE.
В этом примере необходимо преобразовать этот IGBT в компонент Simscape, добавить его в модель и смоделировать модель. Подсхема IGBT объединяет модели и уравнения транзистора биполярного перехода (BJT) и МОП-транзистора типа металл-оксид-полупроводник (SPICE Level 1) с емкостной моделью сток-затвор. Для открытия списка соединений SPICE в окне команды MATLAB введите edit ee_igbt_subckt_original.cir.
% Display ee_igbt_subckt_original.cir type('ee_igbt_subckt_original.cir') % Create a temporary directory and change present working directory ee_igbt_subckt_temporary_directory; % Create a subdirectory called +myIGBT if ~exist('+myIGBT', 'dir') mkdir('+myIGBT') end
* Fast and accurate SPICE IGBT model
.SUBCKT IGBTMODEL C G 0
.FUNC WDSJ(X1,X2) {SQRT(12.422*{ESI}*VDS(X1)/(X2))}
.FUNC VDS(X) {SQRT(X^2+0.01^2)/2}
M1 N1 N2 0 0 MOSN
RG G N2 {5.7-7M*(125-TEMP)}
Q1 0 N1 C BJTP
CGDOX N3 N2 0.1N
VICGDOX N1 N3 0
GCGD N1 N2
+VALUE = {(COXD*AGD*ESI/(WDSJ(V(N1,N2),{NB})*COXD+AGD*ESI))*I(VICGDOX)}
.PARAM TEMP=25
.PARAM AGD=50 ESI=1.0359 NB=2 COXD=175 VTO={4+7M*(125-TEMP)}
.MODEL MOSN NMOS (IS=20N KP=20 VTO={VTO} RD=0.5M CGSO=160U)
.MODEL BJTP PNP (BF=0.26 TF=1.5U CJC=0.6N RE=1M BR=0.44 IS=2E-15 NF=2 XTI=6 XTB=5)
.ENDS IGBTMODEL
Не все подкарты SPICE могут быть преобразованы непосредственно с помощью subcircuit2ssc функция. Если запустить subcircuit2ssc при преобразовании непосредственно в этот файл будет получена следующая ошибка:
"Error using spiceSubckt/extractSubcktDefinitionStrings (line 1182)" "Connecting public nodes to ground is illegal."
"Error in spiceSubckt/loadSubckt (line 379)" "this.extractSubcktDefinitionStrings; % parse the subckt line"
"Error in spiceSubckt (line 69)" "this.loadSubckt(fullNetlist); % populate the object properties"
"Error in subcircuit2ssc (line 55)" "subcircuitArray(ii) = spiceSubckt(file,subcctName(ii));"
"Error in subcircuit2ssc (line 31)" "subcircuit2ssc(netlist,target);"
Преобразование порождает ошибку, так как подсистема SPICE подключила открытый узел непосредственно к узлу 0. В SPICE узел 0 заземлен. Для устранения ошибки обновите файл списка соединений SPICE, переименовав узел 0 в узел E.
Если теперь выполнить subcircuit2ssc а затем ssc_build появится следующая ошибка:
"Failed to generate 'myIGBT_lib'"
"Caused by:" "Error using ne_parselibrarypackage (line 66)" "Error: Class member redefinition has been found:" "Error using myIGBT.igbtmodel> (line 22)" "Class member 'temp' is defined." "Error using myIGBT.igbtmodel> (line 31)" "Class member 'temp' is defined."
Сборка генерирует ошибку, поскольку подсистема SPICE включает определение локального параметра TEMP, который является зарезервированным именем переменной SPICE для глобальной температуры. Для устранения ошибки и использования глобальной температуры удалите определение локального параметра TEMP из файла библиотеки SPICE. Кроме того, если требуется задать локальную температуру, выберите имя, отличное от TEMP, для локального параметра.
Сохранение изменений в новом файле с именем ee_igbt_subckt_modified.cir.
% Display ee_igbt_subckt_modified.cir type('ee_igbt_subckt_modified.cir')
* Fast and accurate SPICE IGBT model
.SUBCKT IGBTMODEL C G E
.FUNC WDSJ(X1,X2) {SQRT(12.422*{ESI}*VDS(X1)/(X2))}
.FUNC VDS(X) {SQRT(X^2+0.01^2)/2}
M1 N1 N2 E E MOSN
RG G N2 {5.7-7M*(125-TEMP)}
Q1 E N1 C BJTP
CGDOX N3 N2 0.1N
VICGDOX N1 N3 0
GCGD N1 N2
+VALUE = {(COXD*AGD*ESI/(WDSJ(V(N1,N2),{NB})*COXD+AGD*ESI))*I(VICGDOX)}
.PARAM AGD=50 ESI=1.0359 NB=2 COXD=175 VTO={4+7M*(125-TEMP)}
.MODEL MOSN NMOS (IS=20N KP=20 VTO={VTO} RD=0.5M CGSO=160U)
.MODEL BJTP PNP (BF=0.26 TF=1.5U CJC=0.6N RE=1M BR=0.44 IS=2E-15 NF=2 XTI=6 XTB=5)
.ENDS IGBTMODEL
Чтобы увидеть различия между двумя файлами, в окне команды MATLAB введите visdiff («ee _ igbt _ subckt _ original.cir», «ee _ igbt _ subckt _ modified.cir»).
Выполните эту команду для преобразования подкарты SPICE ee_igbt_subckt_modified.cir модель в компонент Simscape и поместить созданные файлы в только что созданную папку с именем +myIGBT:
subcircuit2ssc('ee_igbt_subckt_modified.cir','+myIGBT')
Netlist converted. Review Simscape component files and make manual edits for any unsupported items before building the Simscape library located at: +myIGBT.
Создание библиотеки Simscape с помощью ssc_build функция.
ssc_build myIGBT
Generating Simulink library 'myIGBT_lib' in the current directory '/tmp/BR2021ad_1584584_202060/publish_examples0/tpbd4d9f17_49df_435a_b73d_e1f2533e9c9c' ...
igbtmodel.ssc файл, хранящийся в +myIGBT - преобразованный компонент Simscape, полученный при выполнении subcircuit2ssc в измененном списке соединений SPICE. subcircuit2ssc функция также преобразовала все функции, реализованные в подкаталоге SPICE, и сохранила их в подкаталоге с именем +igbtmodel_simscape_functions. Для редактирования созданного компонента simscape в окне команды MATLAB введите edit + myIGBT/igbtmodel.ssc.
open_system('ee_igbt_subckt') set_param(find_system('ee_igbt_subckt','FindAll', 'on','type','annotation','Tag','ModelFeatures'),'Interpreter','off')

Для настройки глобальной температуры Simscape в блоке «Параметры среды» измените параметр «Температура».
ee_igbt_subckt_verification сценарий сравнивает кривые тока коллектора и напряжения коллектора-эмиттера для диапазона напряжений затвора-эмиттера с результатами моделирования списка соединений SPICE, которые хранятся в ee_igbt_subckt_data.mat MAT-файл. Напряжения затвора-эмиттера Vge составляют 8 В, 10 В, 12 В, 15 В и 20 В. Напряжение Vce сдвигается от 0 В до 10 В.
ee_igbt_subckt_verification;

Чтобы отобразить эти характеристики с различными настройками, дважды щелкните блок «Определить условия» (Vge и Vce) и определите вектор Vge и минимальное и максимальное напряжения Vce. В модели для выполнения моделирования и построения графика результатов щелкните график кривых.
Наконец, удалите временный каталог и все его подкаталоги.
% Delete temporary directory if exist('originalDirectory','var') cd (originalDirectory); rmdir(temporaryDirectory,'s') clear temporaryDirectory originalDirectory; end