Преобразование СПАЙС компаратора напряжения КМОП

В этом примере показана типовая реализация компаратора напряжения CMOS и то, как можно преобразовать подсхему SPICE в Simscape™ компонент с помощью subcircuit2ssc функция. Можно использовать компараторы напряжения CMOS в цепях аналого-цифрового преобразователя (АЦП) или генератора релаксации.

В порядок получения частотной характеристики малого сигнала системы этот пример включает в себя вход u, вывод y и включает в себя блок Solver Configuration с параметром Start симуляции из установившегося состояния. Можно использовать linmod функция для линеаризации этой модели.

Откройте подсхему компаратора напряжения CMOS

В этом примере вы преобразуете эту подсхему компаратора напряжения в компонент Simscape и анализируете его в существующей модели. Список сетей SPICE с именем ee_CMOS_comparator.cir является списком сетей, который описывает модель компаратора напряжения CMOS.

% Display ee_CMOS_comparator.cir
type('ee_CMOS_comparator.cir')
* CMOS Voltage Comparator
* Simulation of Two-stage comparator

* Input Signals
VIN VP 0 AC 1V
VOS VN 0 DC 0V

* Power Supplies
VDD VDD 0 DC 5V
VSS VSS 0 DC -5V

* External Components
CL  VOUT  0        2pF

X1 VDD VSS VP VN VOUT COMPARATOR1
* Subcircuit for CMOS Voltage Comparator
.SUBCKT COMPARATOR1 VDD VSS VP VN VOUT
M1  N1  VN N2 VSS    NMOS1  W=680u   L=5u
M2  N3  VP N2 VSS    NMOS1  W=680u   L=5u
M3  N1  N1 VDD VDD    PMOS1  W=5u     L=5u
M4  N3  N1 VDD VDD    PMOS1  W=5u     L=5u
M5  N2  N4 VSS VSS    NMOS1  W=5u     L=5u
M6  VOUT  N3 VDD VDD    PMOS1  W=60u    L=5u
M7  VOUT  N4 VSS VSS    NMOS1  W=30u    L=5u
M8  N4  N4 VSS VSS    NMOS1  W=30u    L=5u
IS  0  N4      20u

.MODEL NMOS1 NMOS VTO=1 KP=17U
+ LEVEL=1
+ GAMMA=0.8 LAMBDA=0.015 PHI=0.6
+ LD=0.5U CJ=5E-4 CJSW=10E-10
+ U0=425 MJ=0.5 MJSW=0.5 CGSO=0.4E-9 CGDO=0.4E-9
.MODEL PMOS1 PMOS VTO=-1 KP=8U
+ LEVEL=1
+ GAMMA=0.4 LAMBDA=0.02 PHI=0.6
+ LD=0.8U CJ=5E-4 CJSW=10E-10
+ U0=200 MJ=0.5 MJSW=0.5 CGSO=0.4E-9 CGDO=0.4E-9
.ENDS

* Analysis
*.DC VIN  -1e-3 1e-3 1e-5
.AC DEC 10 1e-1 1e6
.PROBE
.END

Откройте подсистему компаратора CMOS

Откройте ee_CMOS_comparator модель, которая моделирует список сетей SPICE при помощи блоков SPICE из библиотеки Simscape Electrical™ Дополнительные компоненты. Эта модель включает подсистему, называемую CMOS Comparator. Эта подсистема является ручной реализацией подсхемы компаратора напряжения, которую вы замените на компонент Simscape, преобразованный из подсхемы SPICE.

% Open model
open_system('ee_CMOS_comparator')
set_param(find_system('ee_CMOS_comparator','FindAll', 'on','type','annotation','Tag','ModelFeatures'),'Interpreter','off')

% Display CMOS Voltage Comparator Subsystem
open_system('ee_CMOS_comparator/CMOS COMPARATOR','force');

Подсистема описывает компаратор схематично. На графике ниже показаны выходы схемы компаратора CMOS.

ee_CMOS_comparator_plot;

Коэффициент усиления составляет около 100 дБ, а пропускная способность - около 3 кГц. Чтобы задать минимальное и максимальное входные напряжения постоянного тока и частоты развертки переменного тока, вернитесь на верхний уровень модели и дважды щелкните блок, помеченный как Define Sweep Parameters. Щелкните График результатов симуляции переменного тока постоянного тока в модели, чтобы запустить симуляцию и построить график результатов.

Однако для больших списков SPICE с несколькими подсхемами ручное преобразование может быть неэффективным, длительным и подверженным ошибкам. Simscape Electrical предоставляет вам способ автоматического преобразования нетлиста SPICE при помощи subcircuit2ssc функция.

Преобразуйте подсхему SPICE в компонент Simscape

Преобразовать компоненты SPICE можно с помощью одного из .cir или .lib расширения в компоненты Simscape с помощью subcircuit2ssc функция. The subcircuit2ssc функция преобразует каждую .subckt разделите внутри списка цепей SPICE на один компонент.

Создайте временную директорию, содержащий файлы валидации, и измените текущую рабочую директорию.

ee_CMOS_comparator_temporary_directory;

Файлы валидации ee_comparator_traf.mat и ee_comparator_freq.mat являются файлами MATLAB, которые хранят данные для передаточных характеристик SPICE и частотной характеристики малого сигнала.

Используйте subcircuit2ssc функция для преобразования подсхемы компаратора напряжения, ee_CMOS_comparator.cir, в файл Simscape и поместите его в новую директорию с именем +myComparator.

subcircuit2ssc('ee_CMOS_comparator.cir','+myComparator');
Netlist converted. Review Simscape component files and make
manual edits for any unsupported items before building the
Simscape library located at:
+myComparator.

Сгенерируйте библиотеку Simscape с помощью ssc_build функция.

ssc_build myComparator;
Generating Simulink library 'myComparator_lib' in the current directory '/tmp/BR2021ad_1584584_202060/publish_examples0/tpd32f02ec_6cba_41ae_ae27_6c0dd7946af6' ...

Проверьте результаты симуляции

Необходимо заменить подсистему компаратора CMOS на преобразованный компонент и перемонтировать клеммы. Чтобы увидеть код верификации, в Командном Окне MATLAB, введите edit ee_CMOS_comparator_verification. Скрипт автоматически соединяет компонент Simscape, сгенерированный в результате преобразования в модель. Затем он получает передаточные характеристики и частотную характеристику малого сигнала модели Simscape с помощью метода линеаризации. Напряжение входа передаточных характеристик в область значений от -1 В до 1 В, в то время как частотная область значений Диаграммы Боде в область значений от 0,1 Гц до 1 ГГц. Наконец, скрипт строит графики и сравнивает результаты симуляции между чистой моделью нетлиста SPICE, исходной моделью с подсистемой Simscape и моделью с преобразованным компонентом Simscape, полученным с помощью subcircuit2ssc.

На графике ниже показаны результаты симуляции трех различных моделей. Передаточные характеристики и частотная характеристика модели с преобразованным компонентом Simscape совпадают с характеристиками исходного нетлиста SPICE.

ee_CMOS_comparator_verification;

Очистка

Наконец, удалите временную директорию и все его подкаталоги.

% Delete temporary directory
if exist('originalDirectory','var')
    cd (originalDirectory);
    rmdir(temporaryDirectory,'s')
    clear temporaryDirectory originalDirectory;
end