От программирования к железу или «Почему оно не работает?».Ликбез

    image
    Привет Хабр. В последнее время среди программистов все больше стала набирать популярность цифровая электроника, появляются все новые платформы, позволяющие без каких либо особых знаний в электронике собирать различные устройства. Сам я начинал заниматься аналоговой электроникой, позже — цифровой и программированием. Многие же — наоборот — сначала программированием, а потом пытаются заниматься железом, при этом знания по части электроники практически нулевые и люди не знают/не понимают элементарных для олдфажного электронщика вещей. В данной статье я постараюсь затронуть наиболее важные на мой взгляд моменты, как по части проектирования схем, так и по части разводки плат. Надеюсь мои советы помогут миновать некоторые грабли

    Входы микросхем


    Заглянем немного внутрь микросхем и посмотрим как устроены их части. Подавляющее большинство современных цифровых микросхем сделано по технологии КМОП. Базовым элементом является полевой транзистор с индуцированным каналом p или n типа. Объединив их по следующей схеме — получаем инвертор, при подаче высокого напряжения на входы — сопротивление n канального транзистора мало, а p канального — велико, нижний транзистор подключает выход к земле, если же наоборот — подать низкий уровень — сопротивление будет мало у p канального транзистора — и он подключит выход к высокому напряжению.

    Тут кроется, на первый взгляд незаметная вещь — а что будет, если транзисторы будут открыты одновременно?
    Правильно — короткое замыкание между питанием и землей — и тут уж что быстрее выйдет из строя — канал одного из транзисторов или питающая схема, которая не сможет обеспечить такой ток. И такое вполне может быть и бывает ведь. Дело тут в том, что для транзисторов существуют диапазоны напряжений на затворе в пределах которых мы считаем, что сопротивление транзистора мало или велико. В зависимости от транзисторов они разные — скажем до 0.6В мы считаем, что один транзистор гарантированно закрыт, а другой открыт, а выше 1.8В считаем, что наоборот. диапазон между этими напряжениями — ЗАПРЕЩЕННЫЙ в цифровой электронике, потому что один транзистор уже может приоткрыться, а второй еще не закрыться. Обеспечить такое условие достаточно просто — достаточно оставить неиспользуемый вход микросхемы болтаться в воздухе — напряжение в таком случае на нем может быть какое угодно. Поэтому
    Совет номер 1: всегда подтягивайте неиспользуемые входы микросхемы к какому либо логическому уровню схемы. Потом будет меньше огромных глаз и возгласов «От статики сгорело! Нужно антистатические браслеты одевать.» — Нужно правильно делать схемы, тогда они САМИ гореть не будут. Всегда следите за тем, чтобы логический уровень на входах был четко задан в любой момент работы схемы. Невыполнение этого условия чревато не только ошибками в работе устройства, но и выходом его из строя. И хотя входы обычно оснащены защитными диодами, которые защищают от перенапряжения и задают напряжение на затворе — надеяться на них не стоит. Кроме того хаотично переключающиеся элементы внутри микросхемы повышают ее энергопотребление, что может быть критично в системах с батарейным питанием

    Выходы микросхем


    Кроме входов у микросхем есть еще и выходы — в зависимости от того — какое напряжение мы подаем на выходной каскад — открывается один или другой транзистор, через который течет ток — он либо вытекает либо втекает в микросхему, чтобы получить напряжение (ведь именно его мы измеряем) ток нужно пропустить через сопротивление. Это сопротивление и будет определять ток, протекающий через выход микросхемы, если мы нагружаем выход на высокоимпедансный вход 10МОм, при напряжении питания 5В — через выход контроллера будет протекать ток 0.5 мкА. Канал транзистора имеет ограничение по протекающему через него току — как правило это отражено в даташитах. Сопротивление на которое нагружается выход микросхемы не должно быть меньше допустимого. Скажем — если максимальный выходной ток 10мА, а напряжение питания 5В, то минимальное нагрузочное сопротивление будет 0.5кОм или 500Ом, если меньше — сгорит.

    Совет номер 2:
    Подключайте выходные разъемы через проходные резисторы ~1кОм, потому что к выходным разъемам по определению можно подключить что угодно, проходной резистор обезопасит схему от кривых рук (возможно даже своих же). Внутри схемы — если уверены, что выход всегда будет нагружен на высокоимпедансный вход — можно обойтись без них. Все это разумеется справедливо, если выходной сигнал — напряжение, если на выходе требуется ток — тут можно сконфигурировать выходы в режиме открытого коллектора, либо использовать дополнительный внешний транзистор для управления нагрузкой.

    Индуктивности


    Индуктивность — это некоторая инертность места, где протекает ток — мне очень нравится тут аналогия с сантехникой — индуктивность это массивная турбина, которая при подаче давления — постепенно раскручивается, потом все меньше и меньше сопротивляется напору воды, в итоге перестает сопротивляться вообще, а если снять давление, то турбина продолжает толкать воду, пока не остановится. В общем в самом начале давление совершает работу по раскрутке турбины, которая запасает в себе энергию. В случае с током — то же самое тут напряжение это то же давление в сантехнике — мы пытаемся сдвинуть электроны с места, прикладывая некоторое напряжение, но природа так устроена, что часть энергии должна запастись в электромагнитном поле — сколько именно — определяется геометрией контура (массой, геометрией турбины).

    Всегда помните, чему вас учили в школе — ток течет по кольцу! И площадь этого кольца с током, так же как и толщина проводника определяют индуктивность контура — сколько энергии будет запасаться в магнитном поле. Это магнитное поле может влиять на другие проводники — это явление используется в трансформаторах. Любые 2 контура с током обладают взаимной индукцией и один будет влиять на другой. Во вторых — высокая индуктивность ограничивает быстродействие схемы, кроме того индуктивности с паразитными емкостями могут образовывать резонансные контуры и схема может работать непредсказуемо… Но обо всем по порядку — Расскажу о некоторых эффектах, связанных с индуктивностью в цифровой технике

    Индуктивность выводов, срабатывание на удвоенной частоте


    Любой кусочек проводника, по которому течет ток имеет свою индуктивность, в том числе и ножки микросхемы. Посмотрим, на что она может влиять. Рассмотрим следующую схему — все что в желтом квадратике — кристалл микросхемы, внутренние линии питания связаны с внешними через индуктивность ножек.

    Допустим на выходе удерживался высокий логический уровень — тек небольшой ток через входное сопротивление приемника и была заряжена входная емкость, и тут происходит переключение выхода в низкий логический уровень. Открывается нижний транзистор, закрывается верхний, емкость C — заряжена, сопротивление R — велико, емкость будет разряжаться через нижний транзистор и индуктивность земляного вывода — что мы имеем? После переключения выхода из 1 в 0 — получаем бросок тока, обусловленный входной емкостью приемника, ток проходя через индуктивность земляного вывода вызывает ЭДС самоиндукции, внутренняя земля таким образом подпрыгивает относительно внешней на величину этой ЭДС равной -LdI/dt, причем знак производной сначала будет положительный — ток через индуктивность возрастает, а затем — отрицательный — ток падает. Получаем импульсную помеху по внутренней шине земли — её потенциал сначала подпрыгнет, а потом просядет на одинаковую величину.

    Но все внутренние измерительные цепи используют потенциал земли как опорный! Подпрыгивает только он, с другими сигналами на затворах ничего не происходит. А теперь представим, что микросхема наша тактируется от внешнего генератора и выходов у неё не 1, а 8 — 32 — какая нибудь микросхема памяти с раздельными выводами для чтения и записи — одновременно и пишем и читаем — сначала выставляем данные на входах, которые хотим записать, потом выдаем тактовый сигнал — входные данные защелкиваются, а выходные выставляются. Механизм распознавания тактового сигнала — дифференциальный — внутри измеряется разница между напряжением на входе тактовой синхронизации и внутренней землей. Допустим произошло переключение по тактовому сигналу выходов из состояния 0xff в 0x00 — при этом напряжение импульсной помехи будет в 8 раз больше, чем с 1 ножкой — внутренняя земля сначала подпрыгивает, а поскольку важна разница между входным сигналом и внутренней землей — может подпрыгнуть настолько, что внутренний компаратор переключится в 0, затем земля опустится и компаратор снова переключится в 1 — получаем дополнительный такт сразу за первым, при этом новые входные данные еще не выставлены, а выходные еще не приняты. Внешне это не проявится никак — схема просто будет сбоить непонятно почему — на осциллографе все будет чисто, вы же не можете ткнуться в кристалл микросхемы.
    Производители решают эту проблему, снижая индуктивность выводов, создавая безвыводные корпуса, которые к тому же экономят место. Но все это ценой снижения механической надежности и усложнения монтажа. Кроме того — одно из решений — использовать отдельные выводы для измерительных цепей, так же используются несколько выводов земли и питания — таким образом индуктивности выводов соединяются параллельно и общая индуктивность снижается, кроме того это позволяет распределить токи внутри кристалла и уменьшить их влияние друг на друга.
    Совет номер 3:
    Если микросхема имеет раздельные выводы питания — у каждого должна быть своя точка соединения с шиной земли или питания- не нужно соединять их вместе, а затем одной сопелькой все это присоединять к шине — так вы убиваете всю задумку!

    Взаимная индукция контуров с током, наводки


    Помните я говорил, что ток течет по кольцу? Об этом всегда нужно помнить, когда вы разрабатываете высокочастотное устройство. На высоких частотах сопротивление линии начинает играть меньшую роль, по сравнению с индуктивностью — ВЧ ток течет не по пути наименьшего сопротивления, а по пути наименьшей индуктивности ток всегда стремится образовать контур с наименьшей индуктивностью — то есть обратный ток стремится течь как можно ближе к дорожке, по которой течет прямой ток — так площадь контура будет минимальна, соответственно будет минимальна и его индуктивность. Чем меньше индуктивность линии — тем выше её быстродействие(турбина легче раскручивается), кроме того — обратные токи разных линий не должны течь по одному и тому же месту — так они имеют высокую взаимную индуктивность — один контур начинает давать наводки на другой, как в трансформаторе. В общем все, что вам нужно сделать при разводке печатной платы — позволить обратному току течь под дорожкой.
    Вот пример того, как не стоит делать: — в земляном слое разрез — обратный ток от верхней пары приемник — передатчик вынужден огибать разрез — при этом возникает пересечение с другим контуром тока и увеличивается площадь и индуктивность контура

    Совет номер 4:
    Следите за обратными путями сигнальных токов — ток сам стремится минимизировать индуктивность — вы просто не должны ему мешать. Следите, чтобы контуры пересекались как можно меньше — это увеличит помехоустойчивость схемы

    Емкости


    Везде, где есть 2 проводящие поверхности — есть емкость — будь то провода, проводники на печатной плате или ножки микросхем — иногда емкость это хорошо иногда плохо. Например в случае срабатывания на удвоенной частоте — большая входная емкость приемника — плохо, потому что увеличивается количество принимаемого ей заряда, соответственно амплитуда импульсной помехи. Если в случае индуктивности — связь идет по магнитному полю, то в случае с емкостью — по электрическому, решающую роль здесь играет площадь проводников и расстояние, а также то, что расположено между ними. Например емкостная связь между проводниками в шине — плохо(например шлейф IDE) — минимизировать её можно пустив между дорожками земляной проводник, тогда эквивалентная схема будет следующей: C — емкость между двумя проводниками. — в таком случае влияние взаимной емкости снижается во первых — в 2 раза за счет увеличения расстояния, во вторых — имеем 2 параллельно соединенных конденсатора — один идет в землю, второй в другой проводник — один имеет импеданс 1/iwC, другой 2/iwC, переменный ток поделится между ними в отношении 2/1, то есть наличие земляного проводника между линиями позволяет снизить влияние взаимной емкости в 4 раза

    Если в схеме присутствуют 2 земли — аналоговая и цифровая или сильноточная и слаботочная — нужно следить, чтобы взаимная емкость между полигонами была минимальна — добиться этого можно, делая один из полигонов сеточкой. Но стоит предостеречь, что уменьшение емкости полигона не всегда идет на пользу

    Блокировочные конденсаторы


    Вообще говоря для переменного тока не имеет никакого значения — течь по земле или по шине питания — для него они равноправны. В идеальном случае источник питания должен обладать нулевым импедансом, но в реальности это не так, вклад в это вносят подводящие провода и разводка питания. Чем это плохо? Допустим — какой то выход микросхемы переключился из состояния 0 в состояние 1 — при этом должна зарядиться выходная емкость. а где взять электроны для заряда? правильно — из батарейки, то есть при каждом переключении у нас происходит импульсный бросок тока в цепи питания — и так при каждом переключении чего то внутри микросхемы, а что делает ток, протекая через индуктивности цепи питания? создает помехи для других таких же цепей — если не обеспечен низкий импеданс по переменному току между питанием и землей и у тока нет другого пути кроме как через батарейку — уровень перекрестных помех в схеме возрастает. Проблема решается установкой блокировочных конденсаторов рядом с каждой микросхемой — это по сути маленькие батарейки с низким импедансом — при помощи них мы разделяем и уменьшаем контура переменных токов микросхем. Стоит остановиться немного на конденсаторах — на приведенной схеме L2, C2, ESR, ES — эквивалентная схема конденсатора — L2 — последовательная индуктивность выводов, C2 — собственно емкость, ES — сопротивление диэлектрика,ESR — эквивалентное последовательное сопротивление — засуньте кусок текстолита в микроволновку и включите на несколько секунд — теплый? Вот это и есть — эквивалентное последовательное сопротивление — дело в том, что диэлектрик это диполи — по сути 2 шарика, соединенные пружинкой — это колебательная система, которая имеет свою частоту — если вы меняете внешнее поле с близкой частотой — сопротивление мало, если с отличной — систему все сложней заставить колебаться — ESR зависит от частоты и имеет резонансный пик — в окрестности этого пика ESR мало — положение этого пика зависит от материала диэлектрика — у электролитических конденсаторов он находится на низких частотах, у керамических — на более высоких. Таким образом, чтобы конденсатор имел малый импеданс мы должны обеспечить минимальную индуктивность выводов и минимальное ESR


    Совет номер 5:
    Для уменьшения перекрестных помех по линиям питания старайтесь минимизировать импеданс разводки линий питания, по возможности используйте полигоны для питания и земли — емкостная связь между ними способствует уменьшению импеданса.
    Поскольку для переменного тока не имеет значения — возвращаться по линии питания или по земле — используйте конденсаторы, чтобы возвратный ток мог перетекать из слоя в слой при необходимости. Располагайте блокировочные конденсаторы в непосредственной близости от микросхем, для минимизации перекрестных помех по линиям питания. Используйте конденсаторы с различными типами диэлектриков.

    На этом все — надеюсь кому то статья была полезна — свои вопросы и замечания оставляйте в комментариях или в ЛС
    Поделиться публикацией
    Комментарии 36
      +1
      Отлично! Вдогонку хотелось бы кинуть всем интересующимся ссылкой со статьями по обозначенной в статье тематике. elart.narod.ru/
        +6
        В последнее время среди программистов все больше стала набирать популярность цифровая электроника


        Увлечение электроникой среди программистов было всегда. Просто вы только сейчас это стали замечать.
          +7
          не всегда, просто сейчас более доступно стало обучение
            +3
            Зря вы его заминусовали, по факту он написал всё верно.
            Немного глобально написал но всё-же верно — увлечение электроникой не зависит от профессии.

            Автору просто не стоило так конкретизировать проф принадлежность.
            +6
            Программист не знающий как работает цифровая электроника должен вызывать подозрение.
              +3
              Вот сейчас армия фортраннеров, которые в вузах учили уравнения и физику начнет возмущаться…
                +4
                А чего нам возмущаться? Во-первым, мы уже лет 20 как на C/C++ перешли. Во-вторых, физика еще никому не мешала, в том числе не мешает она и пониманию цифровой электроники. Но электроника аналоговая, как по мне, так на порядок интереснее цифровой.
                +9
                Толпы пхпшников как-то странно на тебя смотрят
                +1
                А вот поясните еще про запрещенные уровни (в Вашем примере между 0,6 и 1,8В), который так опасны. Ведь время перехода из одного уровня в другой тоже не нулевое и существует фронт сигнала, который не строго вертикальный. Т.е. получается эти промежуточные положения штатная ситуация, возникающая дважды за каждый входной сигнал.
                  +2
                  У транзисторов тоже не бесконечное быстродействие. Да и в микросхемах обычно используются push-pull выводы. Там еще компаратор ставится, чтобы фронты не затягивались.
                    +2
                    действительно — вопрос времени, которое находится в этом состоянии
                    +6
                    В современных микросхемах на всех входах используются Триггеры Шмитта, обеспечивающие нужный гистерезис, так что опасность этого явления в статье преувеличена.

                    Однако, оставлять висящие выводы всё же не стоит, т.к. хаотично переключающиеся части кристалла просто потребляют лишнюю энергию.
                    +3
                    И еще пример про входы болтающиеся в воздухе. На днях подключал самодельный модуль с 7-сегментным индикатором к ардуине. Сначала залил в ардуину прошивку. На модуле был сдвиговый регистр 74HC164. Его вход строб подключался в самом конце. У меня челюсть отпала, когда я увидел, что индикация побежала еще до подключения, че за глюк. Потом увидел, что индикация меняется просто когда я руку к проводу подношу, который одним концом на модуле и на строб вход регистра идет, а другим еще в воздухе висит. Т.е. он как антенна работает и даже 5 см куска висящего провода достаточно, чтобы уровень на входе поменять и сдвинуть содержимое регистра на 1 бит.
                      +1
                      Про наводки у Дихалта был пост easyelectronics.ru/nemnogo-pro-navodki.html, тоже с сдвиговым регистром.
                        0
                        ага — было у самого нечто подобное — весело было — подносишь руку — лампочка загорается — магия) при этом если стоять на проводе сетевом каком то 50Гц
                        0
                        Спасибо! То что доктор прописал!
                          0
                          Подскажите, пожалуйста: если в программе для микроконтроллера (STM32VLDiscovery, если конкретно) я выставляю режим входа с подтяжкой к ± (IPU/IPD), контроллер сам подтягивает или он рассчитывает, что резистор подключу я?
                            +1
                            Сам подтянет. См. подробнее figure 11 в reference manual для stm32f100rb
                              +1
                              Сам. Иначе он ничем не будет отличаться от обычного, с триггером Шмитта (Floating назывался, если не ошибаюсь).
                                0
                                Там и такой режим есть. Правда я не знаю, зачем он нужен — не для любителей самостоятельно вставлять резисторы, наверное.
                                  +1
                                  Нет, он используется, если непосредственно подключить вход к выходу с устойчивыми логическими уровнями. Это обычный цифровой вход, например, как на большинстве микросхем стандартной логики.

                                  А подтягивающие резисторы появились только в микроконтроллерах, для удобства, при этом стало доступным собрать схему практически из одной детали.
                                    +2
                                    Стоит различать weak pull или stong pull. Если вам надо например на этой ноге 1-wire жарить, то weak pull-а может не хватить. Так что не надо так категорично про любителей :)
                                +1
                                Жаль автор мало написал про цифровую и аналоговую земли. Интересно было бы почитать, как они разводятся, формируются и почему так делается.
                                  +2
                                  это лучше на примере показывать — по сути это то же самое, что и явление, описанное в пункте про срабатывание на удвоенной частоте — импульсные помехи цифровой земли вносят шум в потенциал аналоговой — если для цифровой части схемы — максимум это чревато срабатыванием на удвоенной частоте, да и то в худшем случае, то для ЦАП, АЦП это чревато увеличением уровня шумов входного/выходного сигнала — суть та же — обратные токи цифровой земли не должны протекать через обратные токи аналоговой — таким образом минимизируется взаимная индуктивность этих токов, кроме того земли могут быть связаны через емкость полигонов — поэтому стоит делать полигоны сеточкой. Желательно использовать для аналоговых частей отдельные источники питания — опять же, чтобы обратные токи цифровой земли протекали через свой источник питания, а аналоговой — через свой, все же земли должны иметь одинаковый потенциал и быть где то соединены — желательно это делать в одной точке через дроссель — чтобы высокочастотный ток с цифровой земли не просачивался в аналоговую, то же самое касается полигонов питания. Основное правило тут — следите — как будут идти обратные токи
                                    0
                                    А для чего некоторые производители цифро-аналоговых микросхем советуют соединять выводы аналоговой и цифровой земель как можно ближе к корпусу микросхемы?
                                    Например если мы имеем схему с чипом декодера, у которого есть как ЦАП так и АЦП. Перед ЦАП и после АЦП стоят простейшие аналоговые усилители на ОУ. Производитель декодера советует соединять ноги аналоговой и цифровой земель как можно ближе к чипу. А что в этом случае делать с землями усилителей? Получается, что у декодера своя аналоговая земля внутри, а у усилителей будет своя и все они должны в одной точке присоедениться к цифровой земле?
                                      0
                                      Я бы еще обозначил проблему возникновения паразитной ООС на эмиттерах транзисторов в подобной схеме. Хоть это нынче уже почти не актуально.
                                    0
                                    Есть вопрос по поводу земель и «так вы убиваете всю задумку!».
                                    1. Означает ли это что при тактовой частоте в 1khz я могу соеденить с землей только одну ногу? При это у меня точно нет сильно-точных нагрузок.
                                    2. Нужно но ли мне на плате размером 3х3см делать раздельные подоводы к земле, если от этой платы до источника питания у меня идет провод длиной 25см. Какая длина дорожки до земли какой тактовой частоте должна соответствовать? (при чисто CMOS-овских нагрузках).
                                      +2
                                      Важна не тактовая частота, а крутизна фронтов.
                                      Если у вас цифровой сигнал с фронтами 2нс — то не важно, с какой частотой он будет повторятся, все равно развязка нужна, как будто мы 500Мгц сигнал передаем.

                                      Именно поэтому в FPGA и некоторых микроконтроллерах есть возможность управлять «крутизной» IO пинов. Более медленные фронты уменьшают требования к развязке.
                                        0
                                        Амплитуда импульсного броска определяется производной, то есть — как заметили — важна крутизна фронта. Почему не стоит объединять ноги — потому что вы объединяете пути обратных токов — им просто ничего не остается кроме как идти по тому месту, которое вы им оставили — в итоге возрастает взаимоиндукция этих токов и импульсный скачок, вызванный одним из них тут же отзывается на других — в итоге пользы от разделения почти никакой — формально мы разделили индуктивности, но так же еще должны разделить обратные токи, чтобы они не связывались между собой как в трансформаторе. Кроме того цель разделения — распределить токи по кристаллу, если вам не позволяет место на плате и схема не особо скоростная — можно и пожертвовать помехоустойчивостью и объединить ноги. Чтобы подводящие линии не играли роли — ставят электролитические и керамические конденсаторы на плате.
                                        +2
                                        Спасибо, отличная статья, натолкнула на еще две ваших, не менее интересных!
                                          0
                                          Тут кроется, на первый взгляд незаметная вещь — а что будет, если транзисторы будут открыты одновременно?
                                          Правильно — короткое замыкание между питанием и землей — и тут уж что быстрее выйдет из строя — канал одного из транзисторов или питающая схема, которая не сможет обеспечить такой ток.

                                          не всегда
                                          кое-кто специально загоняет инвертирующий елемент в состояние метастабилити (когда оба транзистора полуоткрыты), и использует уровень переключения + шум в благих целях, например для генерации случайных чисел
                                          вот тут в паблик доступе статья www.iacr.org/archive/ches2008/51540162/51540162.pdf
                                          + оно релаьно работает и используется
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                              +1
                                              Так это уже «второй уровень», для начинающего полезнее просто будет знать, что такую ситуацию следует избегать. Представляете во что превратилась бы статья, если для каждого указанного правила приводить всевозможные исключения?

                                              Это как оголенные провода — все знаю что их трогать нельзя, все, кроме электриков, которые знаю когда и как их трогать можно.
                                              0
                                              Спасибо за статью! В целом со всем вышеизложенным я знаком, но не хватает наглядных примеров в формате, как стоит делать, а как нет и описания почему именно так в конкретном случае, у вас как раз приближенный к этом формат повествования!

                                              В общем, я с радостью еще почитал бы, если бы вы написали продолжение!)
                                                +1
                                                интересна нотация iwC для импеданса, нас учили использовать j для мнимой единицы т.к. i это ток )
                                                  +2
                                                  книга high speed digital design a handbook of black magic рекомендуется к прочтению

                                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                  Самое читаемое