Продолжаем осваивать NGSPICE.
Первые микросхемы интегральных таймеров появились в 1971 г. и были представлены фирмой Signetics Corporation (SE555 и NE555), позволяя формировать достаточно точные временные интервалы путём добавления времязадающих резисторов и конденсаторов. Интегральные таймеры сочетают в себе как элементы аналоговой схемотехники - компараторы, так и цифровой - триггеры. В настоящее время существует две разновидности 555-таймеров - классические, изготовленные на основе биполярных транзисторов, и их современные аналоги с меньшим энергопотреблением на полевых транзисторах. Несмотря на различия в принципиальных схемах и технологиях изготовления 555-таймеров от различных производителей все они полностью совместимы по номерам и назначению выводов и работают аналогично. На блок-схеме классического 555-таймера присутствует делитель напряжения из трёх последовательных резисторов 5 кОм - отсюда и название 555. В современных модификациях на полевых транзисторах номиналы сопротивлений могут отличаться.
На блок-схеме инвертирующий вход первого компаратора с опорным напряжением 1/3 напряжения питания соединён с ногой Trigger. В свою очередь Threshold поступает на неинвертирующий вход второго компаратора с опорным напряжением 2/3 напряжения питания. С выходов обоих компараторов сигнал поступает на RS-триггер (flip-flop). Для разминки начнём с таблицы истинности триггера c учётом инверсии входа Trigger.
В следующих схемах использовались SPICE модель интегрального таймера TLC555 на полевых транзисторах:
~$ wget http://www.ti.com/sc/data/msp/models/tlc555.mod
таблица истинности | netlist | ngspice.js
ngspice 1 -> source truth-table.net
ngspice 2 -> dc rr2 0 1g 1g rs2 0 1g 1g
ngspice 3 -> print s r q
ngspice 4 -> print ceil(max(1.5-s,0)/1.5) ceil(max(r-1.5,0)/1.5) ceil(max(q-1.5,0)/1.5)
Последняя строчка здесь помогает привести аналоговые величины напряжение к двоичному виду 0 или 1. Полученная таблицы истинности несколько упрощённая т.к. предыдущее состояние триггера всегда аппаратно сброшенное. Вцелом логика типичная если сравнивать с обычными RS-триггерами (R - reset, S - set) за исключением одной комбинации R=S=1
, при которой на выходе имеем единицу - получается S как бы сильнее R:
-------------------------------------------------
Index s r q
-------------------------------------------------
0 1.000000e+00 0.000000e+00 1.000000e+00
1 1.000000e+00 1.000000e+00 1.000000e+00
2 0.000000e+00 0.000000e+00 0.000000e+00
3 0.000000e+00 1.000000e+00 0.000000e+00
На практике 555-таймеры являются достаточно универсальными устройствами и могут выполнять различные функции, хотя наибольшее применение находят только первые две, которые являются классикой для микросхем данного семейства:
-
ждущий мультивибратор (иногда говорят одновибратор)
-
генератор прямоугольных импульсов (мультивибратор)
-
генератор, управляемый напряжением (ГУН)
-
триггер Шмитта, RS-триггер (бистабильный мультивибратор)
В ждущем мультивибраторе система находится в устойчивом состоянии до тех пор пока на вход не поступит импульс, продолжительность которого не имеет особого значения, порождая выходной импульс рассчитанной при проектировании схемы длительности. Нажали кнопку, отработали нужное время и выключилось.
ждущий мультивибратор | netlist | ngspice.js
ngspice 1 -> source monostable.net
ngspice 2 -> tran 2.5m 5
ngspice 3 -> plot (v(in)+3) v(out)
После подачи питания таймер аппаратно сбрасывается и выставляет напряжение на выходе 0. На вход TRIG у компаратора подаётся напряжение больше опорного и на выходе у него 0, который поступает на вход Set RS-триггера и соответственно на выходе RS-триггера по-прежнему 0. На инверсном выходе RS-триггера 1, транзистор открыт, на входе таймера THRES напряжение ниже опорного у соответствующего компаратора и тогда на вход Reset RS-триггера поступает 0.
В таком режиме схема будет находится бесконечно долго, ожидая изменения на входе TRIG. При напряжении достаточном для переключения компаратора на вход Set RS-триггера поступает 1, на выходе таймера установится 1, транзистор закрывается и начинает экспоненциально заряжаться конденсатор C1 через резистор R1 с постоянной времени R1C1. Пока заряжается конденсатор на выходе таймера сохраняется высокий уровень т.к. при R=S=0
RS-триггер хранит предыдущее состояние. Как только напряжение на конденсаторе достигнет 2/3 напряжения питания, переключается компаратор и на вход Reset RS-триггера попадает 1. Тут есть два варианта, которые отражены в таблице истинности R=1|S=0|Q=0
и R=1|S=1|Q=1
. В любом случае при переключении выхода с высокого уровня на низкий схема снова переходит в режим ожидания входного импульса. Время задержки рассчитывается по формуле t = -ln(1 - (2/3))*C*R = l(3)*3*10^6*10^-6 ≈ 3.3 сек
В режиме мультивибратора входы таймера TRIG и THRES соединены вместе. После подачи питания напряжение на них ниже опорных, на входе RS-триггера Set=1, на выходе 1, транзистор закрыт и конденсатор С1 заряжается через последовательно соединённые резисторы Ra и Rb. Когда напряжение на конденсаторе достигнет 1/3 питания Set переключится в 0, но при S=R=0 RS-триггер сохраняет предыдущее состояние. При напряжении 2/3 питания Reset переключится в 1, на выходе таймера 0, транзистор открывается и конденсатор разряжается через резистор Rb до 1/3 питания и процесс повторяется заново. Перед симуляцией мультивибратора в браузере рекомендуется сделать глубокий вдох и набраться терпения, т.к. процесс занимает порядка минуты !
мультивибратор | netlist | ngspice.js
ngspice 1 -> source astable.net
ngspice 2 -> tran 0.1u 6.4m 5m
ngspice 3 -> plot v(out)
В отличие от мультивибратора на транзисторах на выходе имеем чёткие прямоугольные импульсы правильной формы. Частота колебаний f = 1/(ln(2)*C*(Ra+2*Rb)) = 1/(l(2)*0.15*10^-6*(5000+2*3000)) ≈ 874 Гц
| HIGH = ln(2)*C*(Ra+Rb) = l(2)*0.15*10^-6*(5000+3000) ≈ 0.83 мс
| LOW = ln(2)*C*Rb = l(2)*0.15*10^-6*3000 ≈ 0.31 мс
P.S. в документации к TLC555 нагрузку R подключают к Vdd а не к земле.
Далее цифровая электроника.