Датчик света для автоматической шторы я вынес к окну: фоторезистор на трёхметровом шлейфе из перемычек, состыкованных через две колодки. На столе при коротком проводе всё было ровно. На окне график плоттера превратился в пилу: показания гуляли на сорок единиц при ровном пасмурном небе. Вечером, когда на соседней макетке включилась лента, пила сменилась ступеньками с частотой ШИМ. Сама схема включения фоторезистора была из урока про ночной светильник и работала безупречно — врала трёхметровая антенна, которую я собрал своими руками.
В уроке про наводки и шум мы разобрали, что шум делает с числами, и поставили фильтры из конденсаторов и среднего. Здесь следующий слой — экранирование и геометрия проводов. Три врага, которых фильтр не отличит от сигнала: 50 герц от сети, ШИМ-наводки от соседних нагрузок и радиочастота от WiFi-модуля. И три лекарства: укорочение провода, витая пара и экран, заземлённый с одного конца.
Обещаю числа. Укорочение того шлейфа с трёх метров до тридцати сантиметров срезало дрожь с плюс-минус сорока единиц до плюс-минус трёх — и стоило ноль рублей. Остальное — про случаи, когда длина объективно нужна: уличный термометр, датчик в теплице, кабель вдоль силовой проводки.
Три врага: сеть, ШИМ и радиочастота
Первый враг — сеть 50 Гц. Провод датчика рядом с сетевым кабелем или просто рука над макеткой наводят на вход 200-250 милливольт — те самые 40-50 единиц шкалы из урока про наводки. Узнаётся враг по рисунку на графике: пила с периодом ровно 20 миллисекунд. Лечится геометрией, а не кодом: силовая проводка — в сторону, сигнальный провод — короче и свит с землёй.
Второй враг — ШИМ соседей. Плата дёргает светодиоды и ленты частотой 490 Гц на большинстве пинов и 976 Гц на пинах 5 и 6; токи нагрузки текут по своим проводам, их магнитное поле наводится на соседний сигнальный провод пропорционально площади петли между жилой и землёй. Симптом: дрожь возникает и исчезает вместе с ШИМ-нагрузкой, а на плоттере вместо ровной пилы — ступеньки. Лечится разнесением: силовая шина и сигнальная не идут рядом, а провод датчика идёт парой с GND.
Третий враг — радиочастота. WiFi-модуль передаёт пакеты на 2,4 ГГц, и вход АЦП выпрямляет эти всплески на нелинейностях: на графике — редкие иглы, привязанные к передаче. У типовой точки доступа маячки прилетают примерно раз в 100 мс; ESP с активной передачей уплотняет картину. Полностью убрать источник нельзя — модуль нужен проекту. Можно отнести его на 20-30 сантиметров от аналоговой части и закрыть вход экраном.
Экран — это оплётка или фольга вокруг сигнального провода, подключённая к земле. Наводка ложится на экран и уводится в землю, не добираясь до жилы. Тонкость, на которой спотыкаются все, включая меня в первый раз: экран заземляется ОДНИМ концом. Заземлённый с обоих концов, экран превращается в замкнутое кольцо; разность земель платы и датчика гонит по нему уравнивающий ток, и щит становится проводником помехи — греется, шумит и поднимает землю под сигналом. Один конец рвёт петлю: току некуда течь, и экран снова работает щитом.
Где именно заземлять — у приёмника, то есть у платы: наводка с экрана уходит прямо в землю, куда её и тянет вход. Честная оговорка: на радиочастотах профессиональные кабели заземляют с обеих сторон, иногда через конденсаторы; в макетной практике с датчиками на герцы и килогерцы правило одного конца работало у меня без исключений. Второе правило гигиены: оплётка не должна касаться жилы — замкнутый на сигнал экран хуже отсутствия экрана, и проверяется это прозвонкой.
| Симптом на графике | Виновник | Что экранировать и как |
|---|---|---|
| Пила с периодом ровно 20 мс | 50 Гц: сетевой кабель рядом, рука у провода | отодвинуть силовую проводку, свить сигнал с GND, экран одним концом |
| Ступеньки при работе ШИМ-ленты | 490-976 Гц от проводов соседней нагрузки | разнести шины, витая пара на датчик, конденсатор 100 нФ у входа |
| Иглы с интервалом около 100 мс | пакеты WiFi-модуля 2,4 ГГц | отнести модуль на 20-30 см, экран на землю у платы |
| Дрожь растёт при касании оплётки | экран заземлён с двух концов — по нему течёт уравнивающий ток | оставить заземление с одного конца, у платы |
| Дрожь пропадает на коротком проводе | сам провод работает антенной | датчик ближе, провод короче метра; дальше — экранированный кабель |
Витая пара и короткий провод
Витая пара — два провода, скрученные между собой с шагом в сантиметр-полтора: я креплю один конец в дрель и делаю около двадцати оборотов на метр. Работает она по двум причинам сразу. Площадь петли между жилой и землёй почти нулевая — магнитная наводка от ШИМ-соседей проваливается на порядок. И наводка 50 Гц ложится на обе жилы одинаково, а приёмник, читающий разность, её вычитает. Скручиваю сигнал с GND — это дешевле любого экранированного кабеля и делается за пять минут; готовые пары можно выдернуть из куска Ethernet-кабеля, там они скручены фабрично.
Длина провода бьёт всё остальное. Мой замер с тем же фоторезистором: 0,3 метра — дрожь плюс-минус три единицы, 3 метра — плюс-минус сорок. Разница в десять раз по дрожи на проводе, который в десять же раз длиннее. Поэтому первое действие с любым шумящим аналоговым датчиком — поднести его к плате и посмотреть на график: дрожь ушла — лечите провод, а не код. Порядок «сначала железо, потом софт» из урока про наводки здесь работает буквально: укорочение — самое дешёвое железо из возможных.
Если датчику объективно нужен длинный кабель — уличный термометр, датчик в теплице — берите экранированный кабель с заземлением одного конца и добавьте RC-цепочку на входе: резистор 10 кОм и конденсатор 100 нФ режут всё выше пары сотен герц, расчёт среза — в уроке про RC-фильтр. Для термистора с его медленным сигналом это бесплатно; для быстрых датчиков считайте честно. Конденсаторы фильтрации из урока про фильтр питания здесь не спасают: они чистят рейку, а не дорогу сигнала.
const int PIN_LDR = A1; // фоторезисторconst int PIN_LED = 12; // детектор дрожи int okno[8];int ukaz = 0;bool polnaya = false; void setup() { pinMode(PIN_LED, OUTPUT); Serial.begin(9600); Serial.println("Detektor drozhi: razmah poslednih 8 zamerov");} void loop() { int raw = analogRead(PIN_LDR); okno[ukaz] = raw; ukaz = ukaz + 1; if (ukaz >= 8) { ukaz = 0; polnaya = true; } int n = polnaya ? 8 : ukaz; if (n == 0) n = 1; int vmin = 1023; int vmax = 0; long summa = 0; for (int i = 0; i < n; i = i + 1) { if (okno[i] < vmin) vmin = okno[i]; if (okno[i] > vmax) vmax = okno[i]; summa = summa + okno[i]; } int razmah = vmax - vmin; digitalWrite(PIN_LED, razmah > 20 ? HIGH : LOW); Serial.print("razmah="); Serial.print(razmah); Serial.print(" verdict="); if (razmah <= 5) { Serial.println("chisto"); } else if (razmah <= 20) { Serial.println("shumit"); } else { Serial.println("silnye navodki"); } delay(80);}Мой порядок действий сложился за пару сезонов с шторами и теплицей. Первый шаг — укорочение: бесплатно и даёт порядок величины. Второй — скрутка сигнала с землёй: пять минут и дрель. Третий — экран одним концом, если провод всё ещё длинный или идёт вдоль силовой проводки. Четвёртый — RC на входе. Софт-фильтры из урока про наводки идут пятыми: они сглаживают остатки, но не различают наводку и сигнал — когда амплитуды сравнялись, фильтр сгладит и погоду, и правду.
И про контакт, потому что после скруток и крокодилов лишних соединений становится больше: каждый стык — потенциальный плавающий контакт, а дрожь плохого контакта отлично маскируется под наводку. Прежде чем каять экран, переткните цепочку и пошевелите провод под нагрузкой — методика из урока про плохой контакт. Длинные трассы из отдельных перемычек я заменил цельным проводом — и часть ступенек на графике ушла сама, без всякого экранирования.
- Три врага аналогового входа: 50 Гц (пила с периодом 20 мс), ШИМ соседей 490-976 Гц (ступеньки) и пакеты WiFi 2,4 ГГц (иглы)
- Экран заземляется одним концом, у платы: два конца дают петлю, по ней течёт уравнивающий ток, и щит сам становится проводником помехи
- Витая пара сигнал+GND: площадь петли минимальна, одинаковая наводка на обе жилы вычитается; примерно 20 оборотов на метр
- Длина решает: 0,3 м против 3 м — дрожь с плюс-минус 3 до плюс-минус 40 единиц; укорочение — первое и бесплатное лекарство
- Порядок лечения: укороти, скрути, экран одним концом, RC 10 кОм плюс 100 нФ, и только потом софт-фильтры
- 1. Экран кабеля датчика заземляют одним концом. Почему?
- 2. Как по графику Serial Plotter узнать наводку 50 Гц?
- 3. Почему витая пара снижает наводки?
- 4. Датчик на трёхметровом проводе дрожит на 40 единиц. Первое действие?
- 5. WiFi-модуль рядом с аналоговой частью даёт иглы на графике. Что делать?
Частые вопросы по теме урока
- Экран кабеля датчика заземляют одним концом. Почему?
- Заземлённый с обоих концов экран — замкнутое кольцо, по которому течёт уравнивающий ток между двумя точками земли. Один конец рвёт петлю и возвращает экрану роль щита. два конца дают замкнутую петлю: разность земель гонит по экрану ток, и он сам становится проводником помехи
- Как по графику Serial Plotter узнать наводку 50 Гц?
- Период сети 50 Гц — ровно 20 миллисекунд. Иглы с сотней миллисекунд — это пакеты WiFi, а медленный дрейф — греющийся датчик или плывущий контакт. пила с периодом ровно 20 мс
- Почему витая пара снижает наводки?
- Две работы сразу: магнитная наводка падает из-за нулевой площади петли, а сетевая ложится на обе жилы одинаково и вычитается приёмником разности. обе жилы ловят одинаковую наводку, и приём её разностью вычитает её; площадь петли минимальна
- Датчик на трёхметровом проводе дрожит на 40 единиц. Первое действие?
- Укорочение — самое дешёвое железо: мой замер показал падение дрожи с 40 до 3 единиц. Фильтр не различает наводку и сигнал, поэтому он пятый шаг, а не первый. укоротить провод до 0,3 м и посмотреть на размах
- WiFi-модуль рядом с аналоговой частью даёт иглы на графике. Что делать?
- Сначала дистанция — 20-30 сантиметров резко снижают наводку, затем экран у платы. Двустороннее заземление здесь даст петлю, а отдельная земля без общего провода сломает логические уровни. заземлить экран кабеля с двух концов