Повышение помехоустойчивости Arduino

    Нет, это не кластер


    Даже если система собрана правильно и скопипащен написан хороший код, вероятность что все заработает как надо, примерно 50/50.


    Причин тому может быть три:


    1. Беспаечные макетные платы
    2. Электродвигатели
    3. Модули GSM-связи

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


    Под катом — наиболее простой и "беспроводной", как вы поняли из фото способ поменять фюьзы Ардуино, перейдя на внутренний RC-генератор и отключив контроль питания.


    И если решение с генератором я "подсмотрел" у моделистов, использующих мощные движки, то ко второму пришел сам, еще до знакомства с Arduino.


    Поскольку первой конструкцией был индикатор полива, потребляющий в активной фазе 0.5мА (ибо 1МГц и 2.4В питания).


    Почему платы ProMini? они не содержат ничего лишнего (кроме светодиодов ;-)


    Пара Ардуин


    Почему сделал стабильное решение на постоянной основе, переделав под программатор одну плату?


    Если что-то приходится делать более трех раз, то я пытаюсь это автоматизировать/упростить!


    А согласитесь, каждый раз перетыкивать проводочки — несерьезно.


    Забегая вперед, скажу, что тестировал результаты на своих СМС-весах.


    И если раньше стоило модулю связи зарегистрироваться в стандарте GSM-900, то при расстоянии между оным и Ардуинкой меньше метра, контроллер начинал бутаться.


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


    Все что нам нужно — гребенка разъемов PBS, тонкий скальпель и лупа:


    Переделка


    Скальпелем перерезаем дорожку ресета (в синем круге), и ни в коем случае не паяем разъемы на указанные желтым овалом места.


    Да, еще любым отрезком витой пары соединяем пин D10 с подрезанным ресетом.


    По сути, у нас получится вот такая (честно скопипащенная из интернета) схема:


    Схема соединений


    Только гораздо компактнее, без проводов и конденсатора, ибо работает.


    Теперь подключаем наш будущий программатор к USB-TTL, в ArduinoIDE задаем тип платы и порт, прошиваем из примеров скетч ArduinoISP (не забыв раскомментарить строку #define USE_OLD_STYLE_WIRING)


    В папке \arduino-ваша_версия\hardware\arduino\awr правим файл BOARDS, вместо блока Arduino Pro or Pro Mini ставим следующее:


    ## Arduino Pro or Pro Mini (3.3V, 8 MHz INTERNAL) w/ ATmega328P
    ## ---------------------------------------------------
    pro.menu.cpu.8MHzatmega328=ATmega328P (3.3V, 8 MHz INTERNAL)
    
    pro.menu.cpu.8MHzatmega328.upload.maximum_size=30720
    pro.menu.cpu.8MHzatmega328.upload.maximum_data_size=2048
    pro.menu.cpu.8MHzatmega328.upload.speed=57600
    
    pro.menu.cpu.8MHzatmega328.bootloader.low_fuses=0xE2
    pro.menu.cpu.8MHzatmega328.bootloader.high_fuses=0xDA
    pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses=0xFF
    pro.menu.cpu.8MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
    
    pro.menu.cpu.8MHzatmega328.build.mcu=atmega328p
    pro.menu.cpu.8MHzatmega328.build.f_cpu=8000000L

    Тут я поменял low_fuses FF > E2 (переход на внутрениий генератор) и extended_fuses FD > FF (запрет контроля питания)


    Все, перезапускаем ArduinoIDE, ставим донора в наш программатор, отключаем провод DTR от USB-TTL (если конечно он у Вас есть ;-)


    В разделе Инструменты-Программатор Выбираем "Arduino AS ISP", тип платы Arduino Pro or Pro Mini (3.3V, 8 MHz INTERNAL) — Прошить загрузчик.


    Все! Не буду напрягать лишними проверками с помощью avrdude и прочими премудростями и так описанными в десятках мануалов — хотелось дать максимально простой материал.


    На заглавном фото кстати, плата с уже выпаянным керамическим резонатором.


    Дополнительная плюшка — скетчи в ардуинки можно прошивать без нажатия reset — по Ctrl-Shift-U (Выгрузить с помощью программатора)


    Помимо помехозащищенности, такой метод избавляет от сбоя генерации обычного кварца при тряске и ударах.


    Минус — точность таймеров +-5%.


    Удачных Вам проектов!


    Андрей.

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 29

      +9
      А ещё лучше развести нормальную плату с блэк джеком и шлюхами. И самоделки, пущенные в жизнь, заработают как надо))
        –2
        А ещё лучше развести нормальную плату с блэк джеком и шлюхами. И самоделки, пущенные в жизнь, заработают как надо))

        Тут вопрос уже не обо мне и моих самоделках, а о людях, делающих первые шаги.


        Я например травить платы начал только в институте.

        +7
        Эмм… А зачем выпаивать кварц? Почему просто не перейти на внутренний генератор? Это влияет на помехозащищенность?

        Я не пользуюсь ARDUINO IDE, пишу в Atmel Studio, прошиваю такие-же платки USB-ASP-ом напрямую.

        Делал и GSM, и управление мощным двигателем (от индукции в обмотках двигателя — мосфет и диод) и ни разу никаких проблем не было с ребутом. Может дело в питании все-таки? А не в помехах?

        Ну или платки все-таки разные :)

        ИМХО — запаянный электролит и керамика по питанию 90% проблем с помехами решают.
          +7

          Ничего нет лучше правильно разведенной и платы. И вочдога))

            –1
            Ничего нет лучше правильно разведенной и платы. И вочдога))

            Согласен, но вот Вам простой пример — школа робототехники — какая разведенная плата? какой вочдог???

              +2

              Керамика на моторах, на мостах ещё с электролитами и никаких проблем...

            –1

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


            В этих платах фильтры по питанию и так есть:
            Схема


            И потом, в текущей конструкции СМС-весов у меня модуль связи с солнечной батареей в отдельном выносном блоке, на 5-метровом проводе.


            Как только в момент активности GSM-модуля расстояние до микроконтроллера сокращается меньше метра — он ребутится.


            Конденсаторов 10 + 0.1 мкФ для потребления 3-4мА более, чем достаточно.

              +7
              Думаю, тут проблема в чем-то другом. Когда-то давно я баловался с GSM шилдом на ардуине, и что-то не припомню никаких зависаний.

              И контроллер один мелкий на Atmega32U4 уже лет 7 в машине ездит и выполняет одну простую задачу и тоже никогда не зависал.
                +1
                Я в свое время для тестирования на помехоустойчивость клал мобилу на плату и делал вызов на нее и с нее. Ничего не сбивалось, только измерения плыли, но это неудивительно. Ну и печальный опыт на первых разработанных платах после института, когда на столе все работало, а на объекте сбоило (это было еще до мк, на 555 логике) научило внимательно относиться к трассировке. Да, и отключать контроль питания это зло. Надо разбираться с проблемой, а не отключать защиту.
                ЗЫ: извиняюсь, это было на сообщение ancc, промахнулся
                  –1
                  Я в свое время для тестирования на помехоустойчивость клал мобилу на плату и делал вызов на нее и с нее. Ничего не сбивалось, только измерения плыли, но это неудивительно. Ну и печальный опыт на первых разработанных платах после института, когда на столе все работало, а на объекте сбоило (это было еще до мк, на 555 логике) научило внимательно относиться к трассировке. Да, и отключать контроль питания это зло. Надо разбираться с проблемой, а не отключать защиту.
                  ЗЫ: извиняюсь, это было на сообщение ancc, промахнулся

                  Измерения плывут — мама-не-горюй — у меня до 1.5Кг на HX711 при включенном модуле GSM разброс. Потому и и меряю сейчас когда связь "спит"


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


                  стабильная работа контроллера на 8MHz лежит ниже 2.7В
                  А Brown-Out либо 2.7, либо 1.8 вольт.
                  Хотя я и на 2.7В 16-мегагерцовые гонял.


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

                    +1
                    стабильная работа контроллера на 8MHz лежит ниже 2.7В

                    График вообще не так читается) Это максимальная частота от напряжения. Следовательно, при 2,7В он работает на любой частоте до 10МГц. А при 4,5 можно взять любую частоту до 20 МГц. 8 МГц тоже будет работать стабильно.
                      +3
                      стабильная работа контроллера на 8MHz лежит ниже 2.7В

                      Почти так, но наоборот
                      стабильная работа контроллера на 8MHz начиная с ~ 2.5В и выше
                    +1
                    Думаю, тут проблема в чем-то другом. Когда-то давно я баловался с GSM шилдом на ардуине, и что-то не припомню никаких зависаний.

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

                  +2
                  Минус — точность таймеров +-5%
                  Если система позволяет работать с такой точностью временных отсчетов — то и фиг с ним. Но вот использовать UART (а с GSM модулем Вы же через него работаете) с такой погрешностью тактовой частоты — это можно даже не заикаться о надежности.
                    –1

                    Скажем так, SIM800L сам не отличается стабильностью работы.
                    Вот ради интереса, включал систему на 4.2В и 3.5В — смс приходят.
                    Датчики DHT22 и температуры DS18B20 работают, вес меряет.
                    Сейчас поставил в холодильник на пару часов, потом — засуну в духовку на 55 градусов ;-)


                    Я не утверждаю, что работа UART с таким разбросом — хорошо, но ведь все можно проверить.
                    И да, еще есть возможность калибровки внутреннего RC-генератора до 1%

                      +1
                      На каждую температуру и потом вносить изменения в счётчики по показаниям градусника?
                        +1
                        Скажем так, SIM800L сам не отличается стабильностью работы.
                        Я не работал конкретно с SIM800L, но очень много работал с TC65 (Siemens, позже Cinterion), G510 (Fibocom), SIM800C (SIMCom), и из них SIM800C оказался самым стабильным. Под «много работал» я подразумеваю не сборку нескольких любительских поделок, а создание промышленных распределенных систем мониторинга на сотни удаленных узлов. Поскольку SIM800C мало чем по внутренним потрохам отличается от SIM800L, то думаю, что и последний тоже весьма стабилен в работе. Возможно, как говорится, «Вы просто не умеете их готовить»? Под «Вы» я здесь подразумеваю не Вас лично, а и китайского производителя платок «для детского творчества», которые Вы используете в своих проектах (если бы Вы не использовали готовую плату, то вряд ли выбрали бы именно SIM800L по целому ряду причин).

                        Поймите, что GSM модуль — очень «тяжелый» компонент в использовании для схемотехника, так как он сочетает в себе ряд трудносовместимых свойств:
                        • Потребляемый ток имеет характер импульсов с амплитудой до 2А, но при этом имеются достаточно жесткие требования по допустимым просадкам напряжения питания (кстати, модули SIMCom в этом смысле самые «либеральные» из тех, что я использовал — допускают пульсации аж целых 350мВ, а у других модулей это обычно десятки мВ)
                        • Модуль содержит в себе достаточно мощный передатчик (до 2Вт на 900МГц), наводки от которого при неудачной разводке вполне способны вызывать сбои даже цифовых схем
                        • Модуль содержит в себе довольно чувствительный приемник (порядка -105дБм), который, опять же, при неудачной разводке может забиваться наводками от «цифры»

                        В общем, создать стабильно работающее устройство, содержащее GSM модуль — серьезная задача для опытного схемотехника. Открывайте документ Hardware Design на Ваш модуль, и в первую очередь проверяйте, насколько Вы выполняете требования по питанию. Кстати, модули SIMCom имеют вывод RF_SYNC, что очень упрощает синхронизацию осциллографа с работой передатчика модуля. Думаю, что после этого Ваше мнение насчет «не отличается стабильностью работы» кардинально изменится.

                        ПС: кстати, если вдруг понадобиться — на официальном китайском сайте информация по SIM800L отсутствует, но ее можно найти на эстонском сайте
                          0
                          Разрешите немного по оффтопить.

                          Поскольку в Вас, несомненно, широкий опыт работы с GSM-модулями, не подскажете, какой модуль умеет net monitor? Задача — отлавливать ближайшие БС-ки ОПСОСов с привязкой к местности (да, я в курсе, что есть база таких данных, но это не интересно).

                          Хотелось бы стабильного, шустрого монитора, за рубль килограмм и в минимальных габаритах.
                            0
                            Все модули, с которыми приходилось работать, имеют набор AT команд для мониторинга сети. Во первых, абсолютно все модули поддерживают стандартную команду AT+CSQ (это то, что на телефонах отображается в виде «палок»). Но это, наверное, Вам не интересно. Есть более продвинутые команды, но они специфичны для каждого конкретного вендора.

                            Далее на примере AT команд SIM800.

                            AT+CNETSCAN — Сканирует сеть и показывает все видимые соты, как своих, так и чужих операторов. Выполняется долго (десятки секунд), но выдает полный список подробной информации.
                            AT+CELLLIST — Аналогично предыдущей команде, но может выполняться автоматически в фоновом режиме с заданным периодом.
                            AT+CENG — Переводит модуль в инженерный режим, в котором можно в реальном времени получать информацию об обслуживающей соте и 6 соседних.

                            Но ни одна из описанных команд не выдает привязку к местности в виде координат (есть Lac — Location Area Code, но это не координаты). В принципе, по полученной информации можно получить координаты через API Google (давно не пользовался) или Яндекса. Так же у какого-то модуля (наверное, у того же SIM800, но это не точно) попадалась команда, имеющая опцию выдачи прямых координат, но она в наших сетях не работала (да особо и не заморачиваля).
                              0
                              Благодарю за ответ. Координаты от модуля и не нужны (да и откуда им там взяться то =) ?), нужны только данные по видимым вокруг сотам. Дальше уже привязка будет осуществляться по данным с внешнего GPS/GLONASS модуля.
                      +1

                      Открываем раздел "Вредные советы". Вместо того, чтоб разобраться с разводкой "вороньего гнезда", конфигураций МК и питанием — лепим благоглупости…
                      Вот, был такой клоун с "дурино нано для промышленных применений": http://caxapa.ru/748942.html?todo=full

                        –2

                        Хорошо, скажу так, чтобы стало всем понятно.
                        Я ВЕДУ КУРСЫ АРДУИНО.
                        Вы предложите детям на занятиях делать разводку печатных плат?
                        Когда на первом уроке изучается скетч Blink, а объяснение работы ШИМ для восьмилеток — это отдельный цирк с конями.


                        То что плохого в моем методе хоть как-то сделать детские конструкции стабильней?

                          +1

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

                            –1

                            Для восьмилеток — "правленные" ардуинки.


                            Меня просто поражает, как все возбудились на отключение BOD-а.


                            В мануале написано НЕ ОТКЛЮЧАТЬ данный режим — нет!


                            Никто процессора не разгонял?
                            Так те статьи — норм!
                            Про порнхаб — норм — годно прямо и православно для Хабра.


                            А то, что BOD отключается в режимах сна (по доке)- тоже ересь?

                          +1
                          Дело очень хорошее и трепетное!
                          Поэтому лучше сразу всё правильно делать:) особенно там где могут дети подсмотреть, а они такие умницы порой — всё замечают
                          ps «вёл» радиокружок, осознал, раскаиваюсь и теперь беспокоюсь о других
                            0

                            Вот чесно, мне нравится работать с детьми и платформой ардуино.


                            Дети менее циничны, чем хабровчане (но не всегда), а Atmega порой прощает ошибки потив STM32, за esp-шки вообще молчу — черный ящик в буквальном смысле слова.


                            Но на самом деле, с Хабра я не ухожу по другой причине — и как не странно, это критика!


                            Обыно, ошибки айтишника оцениваются временем и деньгами.


                            Ошибки электропчеловода оцениваются сотнями тысяч жизней… пчелиных.

                              0
                              как нИ странно
                            +2

                            Автор ты свой текст хоть читал? У тебя мысль прыгает даже не от абзаца к абзацу, а от предложения к предложению.
                            Чукча конечно не читатель ....

                              +1
                              У ардуинки же вроде есть нормальный 6-контактный разъем для программирования. Что мешало собрать человеческий программатор, хотя бы usbasp / usbisp / avrdoper, не говоря уж про всякие ft232 и подключаться по-человечески, шлейфом, без всяких этажерок?
                              UPD: А, так на этих недо-платках даже разъема нормального нет
                              Если уж решили избавляться от основного кварца (странное решение, вообще-то, но дело ваше), почему бы не заменить его на часовой? Когда нужны точные интервалы времени (увы, на интерфейсах это не скажется) запускаем асинхронный таймер и меряем все что нужно.

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

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