Форум » Модели » Управляемый генератор "пилы" » Ответить

Управляемый генератор "пилы"

avp: Нужна модель двух выводного устройства: IN - вход (напряжение), OUT - выход (напряжение). Алгоритм работы: До тех пор, пока на входе IN напряжение меньше U1, OUT = 0. При превышении IN порога U1 выходное напряжение определяется OUT = K*T, где К - коэф, T - время с момента IN>=U1. При понижении напряжения порга U2 на входе IN напряжение OUT =0. Величины U1, U2, K - параметры, которые можно было задавать (и в последствии при моделировании варьировать). P.S. А вообще как в модели задать время, которое будет отсчитываться от некоторого события?

Ответов - 15

Aml: Думаю, что простыми функциональными источниками не обойдешься. Фактически нужен компаратор и ГЛИН. Недавно реализовывал нечто подобное (одновибратор). Похоже что в этом случае нужно использовать связку из ключа, управляемого напряжением, источника тока и конденсатора. Пока управляющее напряжение ниже порога, ключ закорачивает конденсатор и ток от источника тока просто течет через закоротку, не создавая падения напряжения. Как только будет превышен порог, ключ разомкнется и конденсатор начнет заряжаться постоянным током. Напряжение на нем будет линейно зависеть от времени. Как только управляющее напряжение ключа опустится ниже порога, ключ замкнется и разрядит конденсатор.

avp: Решение - компаратор + интегратор со сбросом используется, но хочется что-то попроще, с целью уменьшения времени моделирования (много их в модели устройства). А по второму вопросу - "как в модели задать время, которое будет отсчитываться от некоторого события и будет использоваться в модели до наступления другого события (не зависимого от времени)" - есть-ли какие-то решения?

Aml: По моему, явных способов задания временного интервала встроенными функциями (примитивами) в Микрокапе нет. Приходится пользоваться одновибраторами и триггерами. Однако, есть - TIMER (там же, где идеальные ключи находится). Событие начинается, когда <входное выражение> становится истинным (принимает значение равное 1). <Входное выражение>, записываемое в по-зиции атрибута INPUTEXPR представляет собой типовое логическое выраже-ние, определяющее условие возникновения события, например V(IN)>=3.4. Счетчик Count устанавливается в <начальное значение> либо при начале моделирования, либо когда напряжение на выводе RESET превысит значение 1B. При каждом возникновении события счетчик таймера увеличивается на <приращение счетчика>. Счетчик таймера не может принять значение меньшее <минимального значения> или большее <максимального значения>. Таймер имеет следующие выходные сигналы: • COUNT — число событий, подсчитанное либо от начального момента времени моделирования либо от конца последнего импульса сброса RESET • ELAPSED TIME — сигнал в виде напряжения, пропорционального време-ни, прошедшего от начала последнего события. • LAST TIME — сигнал в виде напряжения равного времени в секундах (от момента начала моделирования) до начала последнего события. Все выходные сигналы являются выходами источников напряжения, ЭДС которых копирует значение времени от начала события (elapsed time), числа в счетчике (count value), и времени начала последнего события (last event time).

Aml: как в модели задать время, которое будет отсчитываться от некоторого события и будет использоваться в модели до наступления другого события (не зависимого от времени Вообще-то описан алгоритм работы RS-триггера. В 1993 году мне понадобилось сделать триггер для MicroCap (встроенных тогда еще не было), максимально простой и обеспечивающий хорошую сходимость. Получилась вот такая схема Эту схему, оформленную в виде макромодели, я до сих пор использую при моделировании источников питания наряду с отять-таки самодельной моделью компаратора Они используются вот в таких схемах

avp: Спасибо, именно модели такого сорта и хочется сделать, что бы сначала провести функциональное моделирование. Вопрос - а как сделать модель с нуля? Если возможно опишите последовательность действий создания модели на каком - либо наипростейшем примере, т.е. где (в каком окошке) нарисовать символ, где описать саму модель, как собрать все это вместе и протестировать и в случае удачи записать в библиотеку (лучше созданную то же собственноручно). Книг на русском языке по этому вопросу фактически нет (исключения: Ваша, да две книги В.Д.Разевига - Orcad 9.2 и DesingLab 8.0) но и там этого (создания с нуля) я не нашел. P.S. На самом деле нашел в шкафу еще две книги В.Д.Разевига - Система проектирования цифровых устройств OrCAD (в двух словах обо всем) и Система схемотехнического моделирования МС5 - но по интересующему вопросу там тоже ничего нет.

Aml: Книг на русском языке по этому вопросу фактически нет (исключения: Ваша, да две книги В.Д.Разевига - Orcad 9.2 и DesingLab 8.0) но и там этого (создания с нуля) я не нашел. В нашей есть точно. Вставляю кусок оттуда: Создание схемной макромодели 1. Создайте с помощью схемного редактора схему блока. Обозначьте выводы блока текстовыми надписями (с использованием английских букв) для идентификации схемных выводов блока. Если вы хотите при моделировании передавать в макромодель численные значения параметров, используйте для атрибута VALUE элементов макромодели символические имена и (или) объявите эти символические имена в директиве .PARAMETERS. Сохраните схему на диске под выбранным именем как макромодель (с расширением файла MAC). 2. Введите вновь созданный компонент в библиотеку компонентов следующим образом: - Запустите Component Editor (Windows>Component Editor). Выберите группу, в которую вы хотите поместить вашу макромодель. Дайте ко-манду Add Part ( ). - Введите в поле NAME для появившегося нового компонента имя файла макромодели. - Выберите подходящее условное графическое обозначение (УГО) для созданной макромодели (с соответствующим количеством выводов), т.е. заполните поле SHAPE. - Выберите в поле DEFINITION — Macro - Присвойте выводам УГО имена, кликнув мышью на выводе УГО. Для названия выводов используйте те же текстовые обозначения, которыми были обозначены выводы в схемном файле макромодели (см. п. 1). - Закройте Component Editor с сохранением сделанных изменений. - Добавьте директиву .MACRO в один из *.LIB файлов для замены длинного списка параметров на более короткий (необязательное действие). В следующих пунктах описывается постановка в схему и использование созданной макромодели. 3. Находясь в схемном редакторе, выберите из библиотеки компонентов макромодель (Component…). Поместите ее в схему, при необходимости введя в окне задания параметров необходимые значения параметров макромодели. Когда схемная макромодель помещается в схему, программа просматривает схемный файл макроопределения, определяет, имеет ли она параметры, и если имеет, то показывает параметры и их значения, заданные по умолчанию в окне задания атрибутов компонента. При необходимости их в этом окне можно отредактировать. 4. При наличии соответствующих директив .MACRO в библиотечном файле (если выполнено последнее необязательное действие при создании макромодели, см. п. 2) можно вызвать нужную разновидность макро по ее псевдониму. При этом подставляется короткое имя-псевдоним, например 2N5168, на место имени файла макроопределения с соответствующим переопределением параметров.

avp: Спасибо, если можно ссылку на страницы, а вроде действительно читал, а найти не могу. А экраны переключать дело не благодарное.

Aml: стр. 160

avp: Очередное спасибо и очередная просьба - нельзя ли выложить скриншот для инструкции по п.1 (а если возможно,то и по всем - т.к. начинаю чувствовать себя причисленным к лику "особо одаренных"), на примере двух выводной модели (In, Out) связанных любой функцией.

Aml: Давно была мысль макромодель одновибратора сделать - сейчас попробую.

Aml: Итак, у нас есть желание создать свой компонент, содержащий некую принципиальную схему для дальнейшего использования этого компонента в составе. Это можно сделать определив макромодель. Порядок ее создания следующий: 1. Рисуем схему макромодели. Проверяем ее работоспособность. В качестве примера я сделал модель одновибратора со сбросом. Схема сделана на основе созданной ранее модели RS-триггера. Эта модель отличается от стандартной (встроенной в МС) реализации RS-триггера лучшей сходимостью при моделировании импульсных источников питания с ОС. За прошедшие 15 лет ничего дающего более стабильные результаты мне не встретилось. Логической единицей считается 10В. Можно адаптировать и под ТТЛ-уровни, но не виду в этом необходимости. 2. Удаляем лишнее (все, что использовалось для проверки), делаем краткое описание (желательно). 3. Если нужно задавать какой-нибудь параметр макромодели извне, то в ней нужно этот параметра определить директивой .Parameters. В используемой модели мы должны задавать извне длительность формируемого импульса - Ti. Определяем значение по умолчанию в 10 мкС - .Parameters(Ti=10U). Длительность импульса в макромодели определяет порог, при котором срабатывает компаратор (ключ), следящий за пилой напряжения. Порог этот задан напряжением источника V7. Величина напряжения этого источника задана выражением Ti*1e6. Т.е. при задании длительности импульса в 10 порог срабатывания составляет 10В. 4. Сохраняем полученный файл как макроопределение (с расширением mac). 5. Нарисуем компонента подходящее условное графическое обозначение. Для этого заходим в редактор изображений компонентов (Shape Editor). Нам нужно УГО с двумя входами (старт и сброс) и с двумя выходами (прямой и инверсный). Создаем новое изображение. Присваиваем ему имя RMM (к примеру). Рисуем УГО с использованием стандартных примитивов редактора. Выходим из редактора с сохранением изменений. Теперь в списке изображений компонентов и нас появилось еще одно – RMM. 6. После этого нужно сопоставить изображение и макромодель. Запускаем редактор компонентов (Component Editor). На правой панели выбираем группу, где будет располагаться этот компонент. Я обычно новые компоненты (которых нет в базовой конфигурации Micro-Cap записываю в раздел Import. Там расположены все компоненты, которые я использую при моделировании преобразователей напряжения (раздел SMPS). 7. Выполняем команду «добавить компонент» и задаем его имя (RMM). 8. Выбираем в поле определения компонента (DEFINITION) позицию Macro. 9. Выбираем изображение компонента. 10. Присваиваем выводам УГО имена, кликнув мышью на выводе УГО. Для названия выводов используются те же текстовые обозначения, которыми были обозначены выводы в схемном файле макромодели (InS, InR, Out, Out1). 11. Заполняем поле Memo - Одновибратор со сбросом для моделирования SMPS. (не обязательно, но желательно). 12. Выходим из редактора компонентов с сохранением сделанных изменений. Все. Новый компонент готов для использования. Он будет располагаться в той группе компонентов, куда мы его поместили при определении. Но его в любой момент можно перенести в другую группу, используя редактор компонентов. При выборе этого компонента появится окно задания параметров. В нем нужно задать длительность импульса. Проверить работу компонента можно несложной схемой.

avp: БОЛЬШОЕ СПАСИБО! Теперь есть ясность, где что рисовать и как бороться. Если я правильно понимаю, то и макрос "без схемы", можно описать в схемном редакторе в режиме "Text Mode" и дальше по указанной методике?

Aml: Имеется в виду модель на языке Spice? Если да - то можно. Впрочем, можно и в любом текстовом редакторе. дальше по указанной методике? С маленькими отличиями. (поскольку это не Macro, а Subckt). Процесс также описан в книге (стр. 161-163)

avp: Очередное БОЛЬШОЕ СПАСИБО! Так понемногу, глядишь и разберусь с MicroCap.

Zuzi: avp пишет: Нужна модель двух выводного устройства: IN - вход (напряжение), OUT - выход (напряжение). Алгоритм работы: До тех пор, пока на входе IN напряжение меньше U1, OUT = 0. При превышении IN порога U1 выходное напряжение определяется OUT = K*T, где К - коэф, T - время с момента IN>=U1. При понижении напряжения порга U2 на входе IN напряжение OUT =0. Величины U1, U2, K - параметры, которые можно было задавать (и в последствии при моделировании варьировать). P.S. А вообще как в модели задать время, которое будет отсчитываться от некоторого события? OUT = K*T, где К - коэф, T - время с момента IN>=U1. Как это понять? Ведь нельзя говорить, что Т- это время, потому что получается глупость. Следует говорить, что Т есть отрезок времени. Тогда встает следующий вопрос: если начало остчета условно принимаем в момент IN>=U1, то как узнать момент окончания отрезка, чтобы получить его значение и получить выражение OUT = K*T? То есть, на что умножать К, если проще?



полная версия страницы