Как стать автором
Обновить

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

Время на прочтение3 мин
Количество просмотров20K

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


Даже если система собрана правильно и скопипащен написан хороший код, вероятность что все заработает как надо, примерно 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%.


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


Андрей.

Теги:
Хабы:
Всего голосов 27: ↑13 и ↓14-1
Комментарии29

Публикации