Датчик влажности на моём стенде раз в час выдавал мусор: столбик падал в ноль, серво дёргалась, через минуту всё проходило. Код я переписал дважды, библиотеку заменил на другую, лог завёл на двадцать строк — а в два часа ночи, шевеля макетку в поисках плохого заземления, дрогнул один jumper. Мусор ушёл навсегда. Виноват оказался контакт, а весь этот вечер я лечил софт. Разовые грабли макетки — обрыв жилы, загнутый усик — разобраны в уроке про плохой контакт; здесь вопрос шире: как понять, что макетка кончилась как инструмент, и что приходит ей на смену.
Макетку я не ругаю — она справляется ровно с тем, для чего сделана: смена схемы за секунды, датчики на замену, обучение. Но у пружинчатых контактов есть потолок, и на тихом логическом стенде он невидим. На стенде с током, вибрацией и датчиками на длинных проводах потолок начинает светиться: контактное сопротивление растёт, общая земля шумит, баги плавают. Поэтому разговор не про то, что макетка плохая, а про опору под конкретную задачу: одна и та же схема на двух стендах ведёт себя по-разному, и виной не код.
План урока: где именно макетка врёт и как это поймать прибором; критерий, по которому я решаю, что пора паять; и выбор между перфбордом и шилдом, с ценой каждого варианта. Сразу договоримся о рамках: речь про стенд, который должен пережить месяц работы — учебная мигалка с двумя светодиодами может жить на макетке вечно.
Контактное сопротивление: где макетка врёт молча
Числа, на которые стоит опираться. Свежая пружинка макетки держит контакт в десятки миллиом; jumper того же порядка; а изношенный, окисленный или раздутый усик — сотни миллиом и выше, и это число ползёт неделями незаметно. На двадцати миллиамперах логического сигнала разница невидима. На шести сотнях миллиампер сервомотора сотня миллиом — это 60 милливольт на одном-единственном контакте, нагрев и просадка, которая приходит и уходит вместе с вибрацией. Хуже всех держатся три подозреваемых: раздутый усик jumpers, который вы уже гнули, лужёный конец провода, вставленный в гнездо без вилки, и песок в пружинке от полки на подоконнике. Ветку сервы через два таких контакта я находил с суммарным 0,2 Ом: сто двадцать милливольт на ровном месте. Больше всего страдают две дороги: силовая ветка и земля датчиков — там токи и там же всё измеряется.
Симптом, по которому я узнаю плохой контакт, один: баг плавает без изменения кода. Перезапустили — прошло, через час — вернулось, шевельнули провод — поменялось место. Ловится контакт под током: пропускаем через подозрительный участок известный ток и меряем падение милливольтметром. Разрешение АЦП платы — 4,9 мВ на деление, поэтому на плате честно ловятся сотни милливольт; для единиц милливольт нужен мультиметр с режимом мВ, но сотни — это как раз тот случай, когда контакт уже болен.
// Милливольтметр контакта: через подозрительный участок течёт ток// известной нагрузки (резистор 10 Ом на 5 В - около 500 мА).// A0 - до участка, A1 - после; оба входа через делители 2x10 кОм,// поэтому разность halves умножаем на 2.const int PIN_DO = A0;const int PIN_POSLE = A1; void setup() { Serial.begin(9600); Serial.println("mV-metr kontakta: A0 do, A1 posle");} void loop() { int d = analogRead(PIN_DO) - analogRead(PIN_POSLE); if (d < 0) d = -d; float mV = d * (5.0 / 1023.0) * 2.0 * 1000.0; Serial.print("padenie na uchastke "); Serial.print(mV, 0); Serial.print(" mV"); if (mV > 200.0) Serial.print(" CONTACT BOLIT - peredelvay"); Serial.println(); delay(1000);}Сопротивление участка считается в уме: падение в милливольтах делите на известный ток — двести милливольт на пятистах миллиамперах дают 0,4 Ом, и это уже не пружинка, а антенна с нагревом. Ток для диагностики задаётся нагрузкой, а не блоком: резистор 10 Ом на пяти вольтах — это полампера, рабочая зона пружинки, а не холостой ход. Пара проводов, резистор и две минуты на ветку — дешевле, чем вечер в догадках. И вот нюанс, из-за которого прозвонка врёт: щупы мультиметра гонят через контакт единицы миллиампер, и сухой стык на них звенит как здоровый; под полампером тот же стык греется, плывёт и рвёт связь. Поэтому мV-метр меряет под рабочим током, а не под током батарейки мультиметра. Диагностику ведите по одному узлу, так же как переносили схему узел за узлом: одна ветка под током, два щупа по её краям, таблица падений на бумаге. И держите глаза на графике: если просадка приходит со стартами серво, её видно на плоттере Serial быстрее, чем глазами в цифрах.
| Монтаж | Ток | Правки | Когда выбирать |
|---|---|---|---|
| Макетка (+ клеммники на входе) | до 1-2 А на ветку | правки за секунды | прототип: схема меняется каждую неделю |
| Перфборд | 5 А и выше | перерезать дорожку ножом | выносные узлы, силовая часть |
| Шилд на Uno | пины платы | перепайка | проект, живущий на самой плате |
Симулятор ниже показывает контакт изнутри. Движок сопротивление не эмулирует — модель по закону Ома: ручка A0 задаёт сопротивление подозрительного контакта, кнопка D2 изображает шевеление макетки, нагрузка 600 мА. Светодиод D12 — та самая нагрузка: горит, мигает, гаснет. Нагрузка взята серво-типичная: для логической ветки в двадцать миллиампер те же контакты останутся незаметными — макетки и врут в основном под током.
Обратите внимание на кнопку в модели: контакт дёргается вдвое за одно нажатие — и нагрузка из спящей становится мигающей без единого изменения в «коде». Это и есть плавающий баг в модельном виде: железо гуляет, софт ни при чём. Вторая половина вины макетки — шумные шины: длинная общая земля тянет на себе токи всех ветвей, старт серво качает её, и датчики на другой стороне макетки видят рябь на своих показаниях. Лечение наводок по возрастанию жёсткости — от порядка разводки до экрана — разобрано в уроке про наводки и в уроке про экранирование. Критерий воспроизводимости простой: баг плавает от запуска к запуску без изменения кода — сначала железо и питание, потом библиотеки.
Землю тоже считайте участком: минус сервы и минус датчика на одной рейке делят десятки миллиом общего пути, и старт серво поднимает «пол» датчика на 20-30 мВ — на показаниях АЦП это пара-тройка единиц, а на длинных проводах датчика — уже всплески. И не лечите контакт конденсатором: он сгладит рябь на экране осциллографа, но сотня миллиом в силовой ветке останется, нагрев останется, а через месяц пружинка доплавится. Сначала контакт, потом фильтр — обратный порядок создаёт иллюзию ремонта.
Логика переезда: критерий и порядок
Мой критерий переезда из двух пунктов, и оба должны сойтись. Первый: схема не менялась две недели — правки уходят из неё в скетч, а не в проводку. Второй: счётчик странностей перевалил за три — плавающие баги, перетыкания, вопросы вида «а что там с контактом» за неделю. Схема, которая живёт две недели и трижды напоминала о себе, дороже вечера пайки. А вот порядок переезда всегда один: скетч замораживается, макетка фотографируется с трёх сторон, узлы прозваниваются, и только потом паяльник. Фото — главный документ: я один раз восстанавливал схему по памяти, и этот вечер стоил дороже любой фотографии — через месяц вы не вспомните, куда шла серая перемычка, а снимок вспомнит за вас.
Что выбрать на выходе. Шилд-прототип садится на плату сверху, дублирует все пины и оставляет макетку свободной — идеален для проекта, который живёт на самой Arduino, и у меня он съедает вечер: гребёнка, пара светодиодов статуса, клеммники на силовые ветки. Разбор конструкции и типовых граблей шилдов — в уроке про платы расширения. Продаются шилды пустыми: гребёнка пинов, площадка под распайку, пара свободных кнопок — вся начинка ваша. Потолок у шилда тоже есть: он дублирует пины Uno, поэтому всё, что шире платы по пинам или по току, едет на перфборд отдельным узлом. Перфборд — для выносного: силовая часть, узел с реле, датчиковая коробочка; у него свои тупики с дорожками под панелью, но ток он держит выше пяти ампер, и это его главное преимущество — техника описана в уроке про перманентный монтаж. Пайка — отдельный навык со своими граблями: холодный стык, расплавленная изоляция, капля между соседними ножками — на уроке про пайку лежит мой порядок тренировки. Три тренировочных стыка на обрезках провода перед настоящим монтажом — полчаса, которые экономят вечер переделки. И финальное мнение: макетку я не выбрасываю и не «спускаю» — она возвращается в следующий прототип тем же вечером, просто этому проекту нужна уже другая опора.
- 1. Какой симптом первым выдаёт плохой контакт?
- 2. Сколько падает на контакте 0,1 Ом при токе 600 мА?
- 3. Почему милливольтметр на АЦП платы ловит только сотни милливольт?
- 4. Когда я беру шилд, а не перфборд?
- 5. Что делает до пайки, чтобы не платить за прототип дважды?
- Свежий контакт макетки — десятки мОм, изношенный — сотни: на 600 мА сотня мОм даёт 60 мВ и нагрев
- Симптом плохого контакта — баг плавает без изменения кода; проверяйте железо раньше библиотек
- Милливольтметр контакта: известный ток, два входа по краям участка, шаг АЦП 4,9 мВ — ловим сотни мВ
- Критерий переезда: схема не менялась две недели и счётчик странностей больше трёх
- Шилд — для проекта на самой плате, перфборд — для выносных узлов и токов выше 5 А
Частые вопросы по теме урока
- Какой симптом первым выдаёт плохой контакт?
- Контакт гуляет — поведение гуляет. Перезапуск прошёл, через час вернулось, шевельнули провод — сменилось место. Это железо; софт не менялся, а поведение менялось. баг плавает от запуска к запуску без изменения кода
- Сколько падает на контакте 0,1 Ом при токе 600 мА?
- Закон Ома: 0,6 А × 0,1 Ом = 0,06 В = 60 мВ. На логике незаметно, на силовой ветке — уже просадка и нагрев. Сотни милливольт на контакте — диагноз. 60 мВ
- Почему милливольтметр на АЦП платы ловит только сотни милливольт?
- Шаг АЦП при 5 В — 5/1023 ≈ 4,9 мВ. Сотни милливольт видны в десятки делений, единицы — одно-два деления и теряются. Для милливольт нужен мультиметр в режиме мВ. разрешение 10 бит даёт шаг около 4,9 мВ, и мелочь тонет в шуме
- Когда я беру шилд, а не перфборд?
- Шилд сидит на плате и дублирует её пины — проект становится единым целым. Перфборд — для выносных узлов и силовой части с токами выше пяти ампер. когда проект живёт на самой плате Arduino
- Что делает до пайки, чтобы не платить за прототип дважды?
- Переезд с сырым скетчем оставляет вас гадать, железо или софт. Неделя стабильной работы схемы и скетча на макетке — билет на пайку. замораживает скетч и держит неделю стабильного прогона