8.9. Практикум: разбираем схемы
Удачные цифровые узлы — выделитель фронта, подавитель дребезга, ШИМ, детектор остановки, кольцевой счётчик, таймер, ввод кнопок через регистр, деление на три — и типичные ошибки: найдите, что не так.
Схемотехнику лучше всего учить, разбирая чужие схемы. Ниже — подборка небольших цифровых узлов, которые встречаются в самодельных и промышленных приборах сплошь и рядом, а за ней — схемы с ошибками, тоже вполне жизненными. Каждую оформили как задачу: сначала попробуйте объяснить сами, как работает удачная схема и почему подведёт негодная, потом откройте решение.
- Рассмотрите схемуна некоторых рисунках есть номера — подсказки называют роль деталей, но не ответ
- Объясните саминарисуйте временную диаграмму, найдите, что и когда переключается
- Сверьтесь с решениемоно спрятано под кнопкой «Решение»
8.9.1Удачные схемы
- Асинхронный сигнал сначала синхронизируют, потом выделяют фронт: два триггераЭлемент памяти на один бит с двумя устойчивыми состояниями (бистабильный мультивибратор). и вентиль дают импульс длиной ровно в такт.
- Таймеры и детекторы строят на счётчиках: длительность задаётся числом тактов, а не RC-цепью.
- Счётчики и регистры сдвига с самокоррекцией выходят в рабочий цикл из любого состояния; выход комбинационнойКомбинационная схема: выход в каждый момент определяется только текущими входами — памяти нет. Строится из одних вентилей. логики перед внешним миром полезно защёлкнуть.
1. Выделитель фронта. Кнопка, датчик или сигнал с другой платы меняется когда угодно, а синхронной схеме нужен аккуратный импульс длиной в один такт на каждое нажатие. Вот как его получают.
Что здесь что (4)
- Триггер №1. привязывает асинхронный вход к такту
- Триггер №2. помнит, каким вход был тактом раньше
- Вентиль И. вход с кружком — инверсия: «сейчас 1, а такт назад было 0»
- Общий такт. оба триггера переключаются одновременно
Объясните работу выделителя фронта и нарисуйте временную диаграмму для случая, когда вход поднимается в середине периода такта и держится несколько тактов. Как переделать схему, чтобы импульс получался на спаде входа? На обоих перепадах? Что произойдёт, если входной импульс короче периода такта?
Решение
Триггер №1 по каждому фронту такта переписывает вход: — это вход, «увиденный» на последнем фронте. Триггер №2 переписывает : — то, что было на входе тактом раньше. Вентиль вычисляет : «сейчас 1, а раньше было 0». После подъёма входа на ближайшем фронте , а ещё 0 — выход 1. На следующем фронте тоже становится 1 — выход 0. Импульс длится ровно один период и начинается и кончается сразу после фронтов, т. е. полностью синхронен.
Для спада берут , для обоих перепадов — . Если входной импульс короче периода, он может проскочить между фронтами и не попасть в триггер №1 — такой импульс сначала растягивают (например, ловят асинхронным входом установки отдельного триггера). И ещё одна тонкость: триггер №1 работает синхронизатором и в редких случаях может оказаться в метастабильномНеустойчивое промежуточное состояние триггера, когда данные изменились внутри окна установления — удержания: триггер какое-то время «не может решить», в какое состояние перейти. состоянии (раздел 8.8); в быстрых схемах перед ним ставят ещё один триггер, и выделитель становится трёхтриггерным.
Выделитель фронта тактируется частотой 4 МГц. Какова длительность выходного импульса? Какова наибольшая задержка от подъёма входа до начала выходного импульса (задержками триггеров пренебречь)?
Решение
Импульс длится ровно один период: нс. Если вход поднялся сразу после фронта, его «увидит» только следующий фронт — задержка до 250 нс (в среднем вдвое меньше). Для кнопки это ничто, а вот для быстрого сигнала такая неопределённость в один период — неизбежная плата за синхронизацию.
2. Подавитель дребезгаМногократное замыкание и размыкание механических контактов в течение ~1 мс после переключения — от 10 до 100 «отскоков». для простой кнопки. У большинства кнопок нет переключающего контакта, поэтому RS-триггер не поставить. Выручает RC-фильтр с триггером Шмитта.
В подавителе дребезгаПодавитель дребезга — RS-триггер с переключающим контактом: первый же контакт перебрасывает его, повторные касания ничего не меняют. R1 = 10 кОм, R2 = 100 кОм, C = 0,1 мкФ, питание 5 В. Пороги 'HC14: при спаде входа 1,7 В, при нарастании 3,0 В. Через какое время после нажатия (контакт замкнут без дребезга) сменится выход? Через какое время после отпускания? Током входа пренебречь.
Решение
Нажатие: конденсатор, заряженный до 5 В, разряжается через R2 на землю, мс; порог 1,7 В достигается через мс. Отпускание: заряд от 0 к 5 В через кОм, мс; порог 3,0 В — через мс. Дребезг длится обычно 1–5 мс; короткие отскоки лишь немного «подёргивают» напряжение на C, но не доводят его до другого порога — гистерезисГистерезис — два разных порога переключения: вверх — при одном напряжении, вниз — при другом. Состояние зависит от истории, шум меньше «петли» не вызывает дребезга. и делает фильтр надёжным. Резистор R2 нужен ещё и затем, чтобы кнопка не замыкала заряженный конденсатор накоротко (искрение и износ контакта).
3. ШИМ на счётчике и компаратореКомпаратор — схема, которая сравнивает два напряжения и выдаёт логический ответ, какое больше.. Яркость светодиода, скорость вентилятора, нагрев — всё это удобно регулировать широтно-импульсной модуляциейШиротно-импульсная модуляция: частота постоянна, а сигнал ошибки меняет длительность импульса (коэффициент заполнения).. Её «аппаратный» вариант — свободно бегущий счётчик и компаратор.
Что здесь что (4)
- Регистр N. задаёт скважностьСкважность — отношение периода импульсов к их длительности ; обратна коэффициенту заполнения.: число от 0 до 255
- Счётчик. бежит по кругу 0…255
- Компаратор '682. выход 1, пока N больше счётчика
- D-триггер. переписывает выход компаратора по такту — выбросы компаратора наружу не попадают
Счётчик ШИМ — восьмиразрядный, тактовая частота 2,56 МГц, в регистре N = 64. Какова частота ШИМ и коэффициент заполненияКоэффициент заполнения — доля периода, в течение которой выход находится в высоком уровне. выходного сигнала?
Решение
Полный цикл счётчика — 256 тактов: кГц. Выход равен 1, пока счётчик меньше N, т. е. в состояниях 0…63 — 64 такта из 256, 25 %. Отсюда видна и плата за простоту: шаг регулировки 1/256, а поднять частоту ШИМ можно, только подняв такт или уменьшив разрядность. Выходной D-триггер важен: компаратор — комбинационная схема, и при смене показаний счётчика (особенно 0111 1111 → 1000 0000) на его выходе бывают короткие выбросы. Защёлкнутый выход меняется строго по фронтам такта.
4. Детектор остановки вентилятора. У компьютерного вентилятора есть выход тахометра — два импульса на оборот. Если вентилятор встал, надо поднять тревогу.
Что здесь что (5)
- Генератор 100 Гц. отмеряет время
- Вентиль И. пропускает такт, пока Q9 = 0 (инверсный вход)
- Счётчик 4040. считает такты, пока его не сбросит очередной импульс тахометра
- Формирователь фронта. короткий импульс сброса на каждый импульс тахометра
- Авария. Q9 = 1: 256 тактов (2,56 с) без единого импульса
В детекторе остановки генератор 100 Гц, авария — выход Q9 счётчика 4040 (вес 256). Через какое время после остановки вентилятора включится авария? При какой наименьшей частоте вращения (об/мин) детектор ещё считает вентилятор работающим, если датчик даёт 2 импульса на оборот?
Решение
После последнего сброса счётчику нужно 256 тактов по 10 мс — 2,56 с. Чтобы авария не включилась, импульсы должны приходить хотя бы раз в 2,56 с, т. е. оборот — не дольше 5,12 с: об/мин. Обратная связь с Q9 на вентиль останавливает счёт: иначе счётчик пошёл бы дальше, и Q9 через 2,56 с снова упал бы — авария мигала бы. Первый же импульс тахометра сбрасывает счётчик и снимает аварию.
5. Кольцевой счётчик с самозапуском. «Бегущий огонь» на восьми светодиодах: единственная единица бежит по регистру сдвигаРегистр сдвига — цепочка D-триггеров с общим тактом (выход каждого — на вход следующего): по каждому фронту слово сдвигается на один разряд.. Простое кольцо (выход Q7 на вход) бежит, но не знает, сколько в нём единиц, — после помехи огней может оказаться два или ни одного (вспомните застывшую гирлянду из раздела 8.8). Вариант ниже от этого защищён.
Объясните, почему этот кольцевой счётчик сам приходит в правильный режим «одна бегущая единица» из любого начального состояния. Сколько тактов это может занять в худшем случае? Каков период полного цикла?
Решение
Вход регистра — ИЛИ-НЕВентиль ИЛИ-НЕ: на выходе низкий уровень, если высокий хотя бы один вход. В КМОП — n-канальные ключи параллельно, p-канальные последовательно. от Q0…Q6. Если среди Q0…Q6 есть хоть одна единица, в регистр вдвигается 0; единица вдвигается, только когда Q0…Q6 все нулевые. Возьмём любое начальное состояние: пока в Q0…Q6 есть единицы, вдвигаются нули, и все единицы постепенно уходят в Q7 и дальше — за борт. Не позже чем через 7 тактов Q0…Q6 обнулятся (самая «ранняя» единица в Q0 уходит из этой зоны за 7 сдвигов), и тогда вдвинется одна единица. Дальше она бежит одна: пока она в Q0…Q6, вдвигаются нули; когда она уходит в Q7, Q0…Q6 пусты — вдвигается новая единица. Цикл — 8 тактов (Q0, Q1, …, Q7). В худшем случае выход в рабочий режим — около 7–8 тактов, после чего схема живёт правильно хоть вечно. Это и есть самокоррекция: запрещённые состояния сами ведут в рабочий цикл.
6. Таймер задержки на счётчике с генератором. Вытяжной вентилятор в ванной должен поработать ещё 15 минут после того, как выключили свет. RC-цепь на 15 минут — плохая идея (огромные ёмкости, утечки, разброс). Хорошая идея — генератор на десяток герц и длинный двоичный счётчик; 4060 содержит то и другое в одном корпусе.
Частота встроенного RC-генератора 4060 примерно ; R = 470 кОм, C = 100 нФ. Выход Q14 впервые становится высоким через периодов генератора. Найдите частоту генератора и выдержку таймера в минутах.
Решение
Гц. периода: с ≈ 14,8 мин. Резисторы и конденсаторы дают разброс ±10–20 %, но выдержка определяется одним генератором и стабильна от раза к разу. Когда Q14 поднимается, диод подтягивает вход генератора и останавливает его — иначе через ещё 8192 периода Q14 упал бы, и вентилятор включался бы и выключался по кругу. Импульс на MR сбрасывает счётчик, Q14 = 0, генератор снова идёт.
7. Восемь кнопок на трёх проводах. Регистр сдвига работает и «в обратную сторону» по сравнению с '595: '165 защёлкивает восемь параллельных входов и выдаёт их последовательно.
Два '165 соединены цепочкой (16 кнопок) и читаются через SPI с тактом 1 МГц. Сколько микросекунд занимает выдвигание всех 16 битов (без учёта импульса PL)? Какую долю времени это занимает, если кнопки опрашиваются 100 раз в секунду?
Решение
16 тактов по 1 мкс — 16 мкс. Опрос 100 раз в секунду: мс в секунду, 0,16 %. Заодно опрос раз в 10 мс решает проблему дребезга программно: контакт дребезжит 1–5 мс, и два подряд одинаковых отсчёта с интервалом 10 мс надёжно говорят о новом состоянии. Подтягивающие резисторы обязательны — входы '165 КМОПКМОП — комплементарные МОП-транзисторы: n- и p-канальные приборы на одном кристалле. Основа почти всей цифровой логики и аналоговых ключей., и висящий вход при отпущенной кнопке читался бы как угодно.
8. Деление на три с симметричным выходом. Из счётчика деление на 3 получается легко, но скважность выходит 1/3 или 2/3. А если нужен ровный меандр с частотой f/3?
Объясните работу делителя на три с симметричным выходом и нарисуйте временную диаграмму. Почему третий триггер тактируется спадом? Какое требование это предъявляет к входному такту?
Решение
Триггеры №1 и №2 образуют синхронный счётчик на 3: , ; состояния : 00 → 10 → 01 → 00. равен 1 ровно один период из трёх. Триггер №3 переписывает по спаду такта, т. е. повторяет его с запаздыванием на полпериода. ИЛИ от и равно 1 полтора периода (от фронта, на котором поднялся , до спада, на котором опустился ) из трёх — ровно 50 %.
Спад нужен именно для сдвига на полпериода: сдвинуть на целый период было бы бесполезно (получилось бы 2/3). Отсюда требование: симметрия выхода прямо зависит от скважности входного такта — при такте 40/60 выход будет 46,7/53,3 %. Если нужна точность, входной такт берут с удвоенной частотой и делят на 2 триггером, либо делят на 6 и потом на 2. И ещё: на выходе стоит вентиль ИЛИ от двух триггеров, переключающихся в разные моменты, — выбросов здесь нет, потому что в каждый момент меняется только один из его входов.
8.9.2Схемы с ошибками
- Такт не пропускают через вентили: для счёта по команде есть вход разрешения.
- Многоразрядное число из «чужого» тактового домена нельзя читать как есть: биты меняются не одновременно.
- RC-сброс без триггера Шмитта и без диода, задержка такта RC-цепью, суммарный ток корпуса — классические ловушки.
Каждая из схем ниже на макете, скорее всего, заработает. Неприятности начнутся потом — у заказчика, на морозе, с другой партией микросхем. Найдите, что в них не так.
Счётчик '590 должен считать импульсы генератора 8 МГц, пока микроконтроллер держит сигнал «считай». Сигнал подан на вентиль И вместе с тактом. Найдите ошибки и предложите правильное решение.
Решение
Сигнал «считай» меняется в такт своего микроконтроллера, т. е. асинхронно по отношению к 8 МГц. Если он поднимется или опустится посреди высокой фазы такта, через вентиль пройдёт обрезок импульса произвольной ширины: счётчик может сосчитать его, может не сосчитать, а может и сбиться (часть разрядов переключится, часть нет). Кроме того, вентиль добавляет такту задержку — если от того же генератора тактируются и другие узлы, появляется перекос тактов. Правильно: такт подавать на счётчик напрямую, а «считай» — на вход разрешения счёта (у '590 это вход CCKEN), предварительно синхронизировав его D-триггером на такте 8 МГц. Тогда счётчик либо пропускает целый такт, либо считает его целиком, и неопределённость сводится к ±1 отсчёту в момент пуска и останова.
Микроконтроллер раз в секунду читает порт, к которому подключены выходы восьмиразрядного счётчика импульсов датчика. Почти всегда результат правильный, но иногда показание «прыгает» на 128 или 255 и тут же возвращается. Почему? Предложите три способа это исправить.
Решение
Счётчик тактируется импульсами датчика, а порт читается в такт микроконтроллера — в произвольный момент. Если чтение попало на переход счётчика, часть битов уже новая, часть ещё старая. Хуже всего переходы вроде 0111 1111 → 1000 0000, где меняются все разряды: в момент чтения можно получить 1111 1111 или 0000 0000, т. е. ошибиться на 128. (Если счётчик ещё и асинхронный, на переходах есть и ложные промежуточные числа.)
Исправления: 1) снимок — регистр между счётчиком и портом, который записывается по команде микроконтроллера синхронно с тактом датчика (или счётчик с выходным регистром, как '590), а читается уже неподвижным; 2) код ГреяКод, в котором соседние числа отличаются ровно одним разрядом: 000, 001, 011, 010, 110… Исключает ложные промежуточные коды в датчиках угла и счётчиках. — счётчик, у которого на каждом шаге меняется один бит: ошибка чтения не больше единицы; 3) программно — читать дважды подряд и повторять, пока два отсчёта не совпадут (годится, если счёт медленнее чтения). И общий принцип: любое многоразрядное значение из другого тактового домена передают либо через снимок с подтверждением, либо через FIFOFIFO («первым вошёл — первым вышел») — очередь слов с раздельными тактами записи и чтения; сглаживает пачки данных. с раздельными тактами, но никогда «как есть».
Цепь сброса: резистор 100 кОм к +5 В, конденсатор 10 мкФ на землю, точка их соединения подана прямо на вход RESET микроконтроллера и на оба входа вентиля И-НЕВентиль И-НЕ: на выходе низкий уровень, только когда все входы высокие. В КМОП — n-канальные ключи последовательно, p-канальные параллельно. 'HC00, выход которого сбрасывает остальные узлы. Найдите три недостатка.
Решение
1) Нет диода разряда. Постоянная времениПостоянная времени (или ) — за неё экспонента проходит 63% пути к новому значению; за — 99%. 1 с; при коротком провале питания конденсатор не успевает разрядиться, и повторное включение не даёт сброса — классический «зависший после мигания света» прибор (раздел 8.8). Нужен диод от конденсатора к шине питания.
2) Обычный вентиль на медленном фронте. Напряжение на конденсаторе проходит порог 'HC00 за сотни миллисекунд; в это время вентиль работает как усилитель с огромным усилением, его выход может многократно переключаться от шумов, а ток потребления растёт. Узлы получат пачку сбросов, и каждый закончит сброс в свой момент. Нужен триггер Шмитта ('HC14, '132). У многих микроконтроллеров вход RESET уже имеет гистерезис — для них это не ошибка, но проверьте документацию.
3) Нет резистора перед входами КМОП. При выключении питания заряженный конденсатор 10 мкФ разряжается через защитные диоды входов в шину питания — ток ограничен лишь их сопротивлением. Нужен резистор порядка 1 кОм последовательно со входами. Есть и четвёртый, мелкий недостаток: от питания со «вялым» нарастанием (большой конденсатор блока питания) RC-цепь может закончить сброс раньше, чем питание установится, — для ответственных приборов ставят специальный монитор питания (супервизорСупервизор питания — ИМС, следящая за напряжением питания: формирует сброс процессора, переключает на батарею, сигнализирует о провалах.).
Два регистра сдвига соединены цепочкой. Разработчик рассудил так: «Второй регистр должен записать бит, который первый выдаёт по фронту такта; пусть второй регистр тактируется чуть позже, чтобы данные успели прийти», — и поставил в такт второго регистра RC-цепь 1 кОм, 100 пФ. Что не так?
Решение
Всё наоборот. В регистре сдвига каждый следующий разряд должен записать старое значение предыдущего — то, что было перед фронтом. Задержка такта второго регистра на нс (и ещё больше из-за пологого фронта на пороге) означает, что к моменту его срабатывания первый регистр уже выдал новый бит (задержка 'HC595 — 15–20 нс): второй запишет его, и один бит будет потерян — ровно та ошибка, которую мы обсуждали как перекос тактов. Нарушено время удержания. Кроме того, RC-цепь делает фронт пологим, а порог входа КМОП не определён точно — момент срабатывания плавает. Правильно: общий такт на оба регистра без всяких цепей; если линии длинные — буферБуфер — повторитель с : огромное входное и малое выходное сопротивление, развязывает источник и нагрузку. с гистерезисом у каждого регистра. Если когда-то задержка всё-таки нужна, задерживают такт первого (источника) регистра относительно второго, а не наоборот, — или передают данные по противоположному перепаду.
Восемь светодиодов подключены к выходам регистра '595 через резисторы 150 Ом, каждый на ток около 20 мА. Отдельный выход в документации допускает ±35 мА. Почему схема всё равно негодная и что будет, если зажечь все светодиоды одновременно?
Решение
Кроме тока каждого выхода, у корпуса есть предельный ток через выводы питания и земли — у 'HC595 это ±70 мА. Восемь светодиодов по 20 мА — 160 мА, более чем вдвое больше. Микросхема перегревается и деградирует; выходное напряжение проседает (выходное сопротивление порядка 25–50 Ом при таком токе), и светодиоды горят тускло и неравномерно — в зависимости от того, сколько их включено. Плюс бросок тока при одновременном переключении восьми выходов — «подскок» земли«Подскок» земли (ground bounce) — бросок на индуктивности вывода земли при одновременном переключении многих выходов., который может сбить сам регистр сдвига (раздел 8.8). Правильно: уменьшить ток (современным светодиодам хватает 2–5 мА), поставить транзисторные ключи или сборку вроде ULN2803, либо специализированный регистр-драйвер светодиодов со стабилизаторами тока (например, TPIC6B595).