Эта статья предназначена для тех, кто хочет отказаться от проектов на отладочных платах (Arduino, Nucleo, Discovery и другие) и испытать себя в разработке, программировании и отладке собственной печатной платы. У вас на это могут быть свои мотивы: размеры, устройств больше 10, эстетический вид или любые другие. В этой статье я хочу рассказать по пару лайфхаков при разработке таких схем.

Как же происходит разработка устройств в нашем конструкторском бюро. Существует такой негласный алгоритм (программированием занимаются отдельные люди).

  1. Получение технического задания

  2. Разработка принципиальной схемы с основным функционалом

  3. Заказ электронных компонентов

  4. Разводка первого варианта печатной платы

  5. Разработка принципиальной схемы с исправлением ошибок и дополнение ее оставшимся функционалом

  6. Разводка второго варианта печатной платы

  7. Внесение окончательных изменений в принципиальную схему

  8. Разводка окончательного варианта печатной платы

Эти пункты могут добавляться или сокращаться в зависимости от ваших параметров. Я не претендую на истинность в первой инстанции.

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

У меня лично была история как при заказе компонента, который был В НАЛИЧИИ его пришлось ждать полгода… Так что этот этап желательно сделать максимально быстро.

За время доставки как раз происходит разработка ПЕРВОГО варианта электронной схемы, ибо нельзя с первого раза сделать красивое и законченное устройство. Будьте готовы: то, что может пойти не так обязательно пойдет не так. Конечно, позже, на опыте у вас все будет получаться с первого раза, но сейчас готовьтесь к пайке навесом. Вот мы и подходим к предмету обсуждения нашей статьи первый вариант печатной платы. От этого прототипа зависит очень многое: сколько времени у вас будет на разработку второго варианта, удобство работы программистам, удобство внесения изменений и тому подобные моменты. И так перейдем к тонким моментам

Изначально в плату вы включаете только основной функционал, ибо нужно как можно скорее разработать и отдать на производство, но потом приходится что-то допаивать навесом разные модули типа дисплея или каких-то датчиков. Для этого выведите отельные PLS коннекторы под различные интерфейсы типа UART, I2C, SPI и другие. Не обязательно как-то заморачиваться с коннектором или расположением. Делайте как вам удобно просто чтобы было если это необходимо быстро подключить модуль с таким интерфейсом. И в целом не стоит оставлять ножки микроконтроллера без места, где к ним можно комфортно припаяться.

Частенько в процессе работы приходится менять местами подключаемые выводы микроконтроллера. Для удобного решения этих проблем заранее закладывайте кучу перемычек вокруг микросхемы (примерно, как показано на рисунке).

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

Так же хорошо бы упростить разработку ПО для программистов. Часто им нужно получать обратную связь от программируемого устройства. К примеру, выполняется какая-то функция в программе или нет. Для этого я обычно добавляю три светодиода.

Во-первых, для того чтобы зажечь светодиод вам необходима одна строчка кода. Это гораздо удобнее чем выводить сообщение об ошибке на дисплей. Его на этом этапе еще может и не быть. Светодиод основа, если хотите «Hello World!» из мира микроконтроллеров.

Во-вторых, для схемотехника не составляет труда добавить светодиод в схему. 2 минуты отрисовать схему. 5 минут развести на плате.

В-третьих, три светодиода позволяют указать или 3 ошибки одновременно или 8 по одной.

Про три ошибки это понятно. Каждой ошибке присвоен конкретный светодиод. А про 8 ошибок расскажу подробнее. Ошибку можно закодировать комбинацией светодиодов смотри табличку ниже.

P.S.            

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

Комментарии (24)


  1. milssky
    06.04.2023 17:52
    +1

    Чем эта реализация в итоге отличается от обычной отладки? Как по мне -- ничем. Первый вариант поэтому и делается на отладке всегда.


  1. GennPen
    06.04.2023 17:52
    +2

    К примеру, выполняется какая-то функция в программе или нет.

    Для этого лучше всего использовать дебаггер, т.к. функция может выполняться достаточно быстро и обычным включением светодиода на время работы функции можно не уследить. А светодиода достаточно одного двухцветного красный-зеленый: моргающий зеленый - нормальная работа, желтый - предупреждение, красный - ошибка.


    1. makkarpov
      06.04.2023 17:52

      Зато светодиоды могут быть полезны для базовой профилировки. Включение и выключение светодиода - это одна запись в память, что очень неинвазивно и позволяет осциллографом смотреть, сколько времени и в каком порядке функции исполняются.


      1. GennPen
        06.04.2023 17:52
        +3

        что очень неинвазивно и позволяет осциллографом смотреть, сколько времени и в каком порядке функции исполняются

        Осциллографом можно и без светодиодов. А если функция выполняется как минимум с десяток раз в секунду, то визуально по светодиоду уже что то отследить невозможно.

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


        1. kulhaker478
          06.04.2023 17:52

          Осциллографом можно и без светодиодов...

          AVR'ки только так дебажить и остаётся)


          1. GennPen
            06.04.2023 17:52

            Именно поэтому практически не имею с ними дело. =)


        1. HardWrMan
          06.04.2023 17:52

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


        1. SuperTEHb
          06.04.2023 17:52

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


  1. smart
    06.04.2023 17:52
    +15

    По заголовку и началу думал, что в статье будет рассказано о том, как собственно производить эти печатные платы для прототипирования (и не проклинать себя). Я как раз себя причисляю к тем "кто хочет отказаться от проектов на отладочных платах" – но честно говоря, не понял, что полезного я должен был вынести из статьи.


    1. QwertyOFF
      06.04.2023 17:52
      +1

      Раньше было примерно два варианта: в Резоните быстро и дорого и у JLCPCB долго и дешево. И еще вариант для любителей хардкора делать плату самому ЛУТом или фрезером. Сейчас JLCPCB по-моему больше не дружит с заказчиками из России, так что все грустно. Может знающие люди подскажут к каким китайцам еще можно обратиться за вкусной ценой или где искать посредника для заказов с JLCPCB.


      1. Heggi
        06.04.2023 17:52

        В смысле не дружит? Очень даже дружат и карту Мир принимают. Заказывал не так давно, сделали быстро, ехало долго.


        1. QwertyOFF
          06.04.2023 17:52
          +3

          Я вижу вот такую картинку при оформлении заказа. Какое-то время, насколько я знаю, у них еще можно было заказать платы, но без монтажа компонентов. Сейчас видимо совсем нельзя.

          Доставка недоступна


          1. r1000ru
            06.04.2023 17:52

            Ходит слушок, что nextpcb отправляет платы обычной почтой, а оплату принимает через алиэкспресс.


        1. GennPen
          06.04.2023 17:52

          "Не так давно" - это наверное до марта месяца?


    1. vin2809
      06.04.2023 17:52
      +6

      "не понял, что полезного я должен был вынести из статьи "

      Как же так, а 3 светодиода, да и таблица с кодировкой...

      Надеюсь, что народ понял, что это сарказм. А в целом это опять статья - курсовая очередного студента.


  1. placidity_master
    06.04.2023 17:52
    +2

    Про три ошибки это понятно. Каждой ошибке присвоен конкретный светодиод.
    А про 8 ошибок расскажу подробнее. Ошибку можно закодировать
    комбинацией светодиодов смотри табличку ниже

    7 ошибок + "ошибок нет".
    регистрировать лучше логич. анализатором.
    если он подключён к ПК, то "памяти" у него хоть 128 Гб.

    и все варианты ошибок по хронологии можно посмотреть,

    и "длительность" каждой ошибки/события, и т.д.

    дешёвый вариант анализатора, которым я сам пользуюсь,
    простой чип FTDI_2232_HL + PulseView.
    (i2c анализирует хорошо, UART иногда ошибается )

    Во-первых, для того чтобы зажечь светодиод вам необходима одна строчка
    кода. Это гораздо удобнее чем выводить сообщение об ошибке на дисплей

    одна строчка кода может наломать Вам дров.
    строчка кода исполняется на частоте ядра.

    Ядро может "бежать" в 2, 3, 4 раза быстрее периферии,
    в итоге диод может "не моргнуть", "моргнуть со смещением".
    в критических местах обязательно использовать

    ассемблерные вставки "синхронизация арбитра шин"
    например на STM32 это
    asm("DMB\r\n");
    asm("DSB\r\n");
    asm("ISB\r\n");

    и помнить, что в "эти моменты", ядро может просто ждать и ничего не делать.

    для высокоточных замеров придётся использовать "таймер",

    в начале функции запустить, в конце остановить,

    а потом "на фоне" отправить его показания в USART


    1. Alexeyslav
      06.04.2023 17:52

      Не знаю где вы берёте нормальные анализаторы, но все с чем я пытался ознакомится, ни один не работает в реальном времени. Т.е. нельзя посмотреть на экране то что происходит вот прям сейчас, ты запиши а потом анализируй.... это те что подключаются к ПК. Кроме того, сильно они опираются на возможности ПК... почему-то на любой скорости всегда вылазит ошибка "переполнение буффера", означающая что данные не успевают передаваться(даже на скорости 1Квыб/сек) и виной тому может быть USB-контроллер, а собственной памяти на этих приставках не более 2кб. Почему? Во времена когда про DDR2 объёмом в 1Гб уже начинают забывать...


      1. placidity_master
        06.04.2023 17:52

        мой анализатор это голая ИМС FTDI_2232HL, на плате которую я развёл за 1 вечер, а потом утюгом воплотил в реальности.

        плата 2 слойная, одна сторона сплош земля, а на второй дорожки.

        без проблем работает до 10 МГц. Возможно у Вас инвалидоуз мешает нормальной работе.

        эта связка работает относительно сносно, как я писал выше, i2c декодирует нормально, USART иногда не правильно.

        Если Вам надо "здесь и сейчас", то анализатор как бы не отменяет того, что СИД могут оставаться на плате и светить для наглядности.
        Если хочется смотреть на СИД, делайте программную задержку, чтоб они не могли быстро погаснуть.

        Ко всему выше сказанному , СИД и логич. анализатор ни коим образом не препятствуют параллельному подключению ослика,
        И ДАЖЕ двух осликов ! один в режиме "разовая развёртка",

        второй в постоянной, и тригер по "фронту/спаду" в режиме "норм".


      1. HardWrMan
        06.04.2023 17:52

        DreamSource Lab. У меня есть как USB2.0 так и USB3.0 версии. Оба в стриме отлично пишут десятками минут на максимальной скорости. 3.0м я записал 32 канал IDE ATAPI, например, 70 секунд:


  1. Indemsys
    06.04.2023 17:52
    +2

    Вспоминается как делали мы что-то типа умного дома и для диагностики применяли аж целую светодиодную ленту.

    Сигналов ошибок на нее море можно было выводить.
    А сама передача шла по DMA и не останавливалась даже когда процессор зависал.


  1. Crazy_Pit
    06.04.2023 17:52
    +1

    Распечатываем схему на бумаге и раскладываем компоненты. Обычно таким методом убираю одну из итераций производства платы.


  1. DanilinS
    06.04.2023 17:52
    +2

    Статья "не о чем". Минимум полезной информации.

    От себя могу добавить:

    1) Демоплата как на рисунке "солнышком" - наихудший вариант. Нужно делать нормальную землю и шины питания.

    2) Громадная куча перемычек - куча гемороя на этапе отладки. Я перемычки закладываю на линии RX-TX для возможности менять их местами. Остальное при макетировании можно и проводами сделать.

    3) Распечатайте плату и разложите на ней компоненты. Убедитесь, что корпуса чипов "правильные". И что они не разведены "к верху брюхом". Особенно с низу.

    4) Светодиод конечно хорошо, но что делать если он не горит? Светодиод хорош для индикации режима работы. Для всего остального разводим SWD ( или аналог) и используем осциллограф и логический анализатор. Или в крайнем случае выплюнем строчку в отладочную консоль.


  1. Andy_Big
    06.04.2023 17:52
    +1

    Так же хорошо бы упростить разработку ПО для программистов. Часто им нужно получать обратную связь от программируемого устройства. К примеру, выполняется какая-то функция в программе или нет. Для этого я обычно добавляю три светодиода.

    Купите уже своим программистам внутрисхемный отладчик и не мучайте их обратной связью через три светодиода :)

    В-третьих, три светодиода позволяют указать или 3 ошибки одновременно или 8 по одной.

    Строго говоря, 3 светодиода могут указать не 8, а 7 ошибок по одной. 8-е состояние - это отсутствие ошибок :)


  1. vozov
    06.04.2023 17:52
    +1

    Не нашел ничего полезного