Пасечный логгер вёл себя как капризный дачник: от USB-порта ноутбука писал идеально, от зарядника в розетке — через раз, а от повербанка оставлял в файле строки-кашу: полдаты, обрыв, дальше нормальная запись. Я трижды переписал скетч, грешил на close и буфер, пока не воткнул модуль обратно к ноутбуку и не увидел идеальный лог. Схема не менялась — менялся источник. Диагноз вышел скучным: просадка питания в момент записи.
Грабли такие незаметные, потому что покой и запись — разные режимы нагрузки. В покое карта ест единицы миллиампер и прощает почти любую проводку. Но в момент записи контроллер карты гонит данные во флеш и захватывает ток импульсами до 100–200 мА при 3,3 В — на доли секунды, зато регулярно. Устройство модуля и арифметику dropout мы считали в уроке про устройство модуля, сегодня смотрим на болезнь целиком: где проседает, как выглядит, что лечит.
План такой: раскладываем потребление по режимам, считаем просадку на проводах и слабом стабилизаторе, разбираем симптомы — от провала SD.begin до мусорных строк — и три лекарства: конденсатор у модуля, короткие провода, отдельный стабилизатор.
Сколько карта тянет и в какой момент
Расклад по режимам примерно такой: в покое — единицы миллиампер, при чтении — 20–40 мА, при записи — импульсы 100–200 мА на 3,3 В. Разброс между картами большой: контроллеры разных производителей едят по-разному, у меня бывали и образцовые скромники, и экземпляры, просаживавшие макетку одним стартом. Конкретная цифра вашей карты зависит от модели и возраста, поэтому мерить надо свою, а не соседнюю: карты одной внешности едят вдвое-втрое по-разному, и чужая статья тут не аргумент.
Импульс — вот кто ломает схему. Средний ток может быть скромным: пишете раз в 10 секунд по 40 байт, усреднённые миллиамперы — копейки. Но стабилизатор и провода живут не средним, а пиком. Цепочка из тонких перемычек и контактных пар макетки легко даёт 0,3–0,5 Ом; импульс в 150 мА вычитает из питания 0,45–0,75 В. Вход модуля вместо 5,0 В получает 4,3–4,5 — на границе dropout AMS1117, которому нужен вход выше выхода на 1,1 В. Дальше стабилизатор выходит из режима, карта недополучает свои 3,3 В и сбоит именно на записи.
Отдельная жалоба — слабый источник. USB-порт по стандарту отдаёт 5 В и до 500 мА, но немолодые порты и хабы держат 4,7–4,8 В уже в покое, а зарядники из дешёвых наборов — тем более. Импульс записи вычитает из этих цифр ещё до полувольта, и вход модуля падает ниже требуемых 4,4 В. Схема, которая на столе работала год, на объекте молчит. Диагностика тут коварна: подключаете ноутбук для отладки — питание уже идёт с USB, и болезнь маскируется. Смотрите на питание именно в полевой конфигурации, а не с отладочным шнуром.
Симптомы нехватки: от begin до мусорных строк
Симптом первый и самый громкий — SD.begin возвращает false с первого раза или через раз. Карта при этом исправна: компьютер её читает. Если диагностика из урока про begin уже отмела формат и распиновку, питание выходит в первые подозреваемые. Меряйте вход модуля в момент старта, а не в покое: старт тоже тянет импульс, у некоторых карт — мощнее записи.
Симптом второй, коварный — мусорные записи. Лог идёт нормально, и вдруг среди чистых строк попадаются обрывки: половина даты, непечатаемые символы, повтор. Это почерк просадки посреди физической записи сектора: контроллер карты недополучил вольт в середине цикла записи во флеш. Скетч безупречен, схема open-print-close из урока про запись и close отработала по учебнику, а байты легли криво.
Симптом третий — лог живёт, пока живёт USB. Поменяли источник на зарядник — записи исчезли или плата перезагружается посреди цикла. Перезагрузка уже про всю плату: просадка добралась до Uno. Диагностика в три запуска: тот же скетч, тот же модуль, три разных источника — и диагноз готов. Таблица ниже собирает симптомы целиком.
| Симптом | Когда видно | Что мерить | Что помогает |
|---|---|---|---|
| begin false при старте | сразу после подачи питания | вход модуля под нагрузкой, нужно 4,4 В и выше | короткие провода, другой источник |
| мусорные строки в логе | посреди нормальной записи | просадку на импульсе записи | конденсатор 100–470 мкФ у модуля |
| плата перезагружается | в момент записи | шину 5 В на входе платы | источник помощнее, отдельный стабилизатор |
| от USB пишет, от батареи нет | после смены питания | напряжение источника под нагрузкой | повербанк с честными стабилизированными 5 В |
Лечение: конденсатор, провода, отдельный стабилизатор
Лекарство первое — блокировочный конденсатор у самого модуля: электролит на 100–470 мкФ между VCC и GND и керамика на 100 нФ впридачу. Электролит — местный склад энергии: импульс в 150 мА на десятки миллисекунд он отдаёт сам, не дёргая шину макетки. Ёмкость беру с запасом по напряжению — 16 В на 5-вольтовую шину, стоит копейки. Куда паять или втыкать: чем ближе к разъёму карты, тем лучше, в идеале соседние ряды макетки.
Лекарство второе — проводка. Питание тяну двумя короткими проводами от шин 5V и GND на краю платы, а не с середины линейки: почему длинные рейки и тонкие перемычки портят жизнь, я разбирал в уроке про макетку. Правило то же, что для сервоприводов из урока про внешнее питание серво: тяжёлая нагрузка получает свой короткий путь к источнику и общую землю со всей схемой.
Лекарство третье — отдельный стабилизатор для полевых конструкций: платка на AMS1117-3.3, вход от своего источника, выход строго на модуль, земля общая. Стоит тридцать рублей и снимает вопрос разом: карта перестаёт зависеть от того, что ещё висит на шине. Для автономного логгера из урока про первую карту это ещё и страховка от просадок самого аккумулятора — на морозе они случаются у каждого химического элемента.
Поймать просадку на живой схеме можно и без осциллографа. Делитель из двух резисторов по 10 кОм: один конец на шину 5 В, второй в землю, середина — на A0. На входе аналогового пина половина напряжения, 2,5 В — безопасно, а скетч умножает обратно. Дальше работает правило из первого урока раздела: питание проверяют в момент беды. Скетч печатает милливольты шины при каждой записи и при просадке ниже 4600 мВ отменяет запись до лучших времён — пропуск строки лечится, мусор в файле нет.
В симуляторе — модель той же логики: потенциометр изображает качество питания, скетч вычитает просадку на импульсе и решает, писать или отказываться. Перетащите это правило на свою плату один в один: замените аналоговое чтение своим делителем — и логгер сам начнёт жаловаться на питание раньше, чем карта начнёт врать. Такой самоконтроль стоит одну строку if и экономит выезды на объект: лог с пометкой про шину объясняет пропуски сам.
#include <SPI.h>#include <SD.h> const int chipSelect = 10; // делитель 10 кОм - 10 кОм с шины 5V на A0:// на входе пина половина напряжения, 2.5 В, скетч умножает обратно void setup() { Serial.begin(9600); if (!SD.begin(chipSelect)) { Serial.println("старт не удался: питание - первый подозреваемый"); while (true) {} }} void loop() { int raw = analogRead(A0); long mV = (long)raw * 5000 / 1023 * 2; // обратный пересчёт за делитель if (mV < 4600) { // шина просела - карту не дёргаем Serial.print("шину лихорадит: "); Serial.print(mV); Serial.println(" мВ, запись отменяю"); delay(2000); return; } File f = SD.open("log.csv", FILE_WRITE); if (f) { f.print(millis() / 1000UL); f.print(","); f.println(analogRead(A1)); f.close(); Serial.print("шина "); Serial.print(mV); Serial.println(" мВ - строка записана"); } delay(10000);}- 1. Какой ток захватывает карта в момент записи?
- 2. SD.begin возвращает false, карта в компьютере читается, формат FAT32, провода целы. Что мерить первым?
- 3. Почему блокировочный электролит ставят вплотную к модулю, а не в начале линейки макетки?
- 4. Что делает делитель 10 кОм + 10 кОм с шины 5 В на A0 в скетче самоконтроля?
- 5. Лог чистый от USB, от зарядника в файле появляются обрывки строк. Что это чаще всего?
- Покой — единицы мА, чтение — 20–40 мА, запись — импульсы 100–200 мА на 3,3 В; схему ломает именно пик
- Полома сопротивления проводки на импульсе съедает до 0,75 В — вход модуля падает к границе dropout 4,4 В
- Симптомы: провал begin на старте, мусорные строки посреди лога, перезагрузки при записи
- Электролит 100–470 мкФ вплотную к модулю плюс 100 нФ керамики — первый и самый дешёвый шаг
- Отдельный AMS1117-3.3 со своим входом и общей землёй — полевое решение для логгера на батарейке
Частые вопросы по теме урока
- Какой ток захватывает карта в момент записи?
- Контроллер карты гонит данные во флеш импульсами до 100–200 мА при 3,3 В. Средний ток при редких записях скромный — ломает схему именно пик. Импульсы 100–200 мА на доли секунды
- SD.begin возвращает false, карта в компьютере читается, формат FAT32, провода целы. Что мерить первым?
- Старт карты тоже тянет импульс тока. Стабильные 4,4 В на входе модуля под нагрузкой — граница, ниже которой питание становится подозреваемым номером один. Вход модуля под нагрузкой в момент старта
- Почему блокировочный электролит ставят вплотную к модулю, а не в начале линейки макетки?
- Просадка происходит на сопротивлении участка провода между ёмкостью и картой. Конденсатор в четырёх рядах от модуля почти ничего не спасает. Провод между конденсатором и модулем всё равно проседает на импульсе
- Что делает делитель 10 кОм + 10 кОм с шины 5 В на A0 в скетче самоконтроля?
- Пин A0 видит половину шины. Скетч умножает показание обратно на два и получает милливольты питания в момент записи. Даёт на A0 половину напряжения, 2,5 В, чтобы мерить шину
- Лог чистый от USB, от зарядника в файле появляются обрывки строк. Что это чаще всего?
- Разный источник — разный результат: слабый зарядник проседает на пике записи, и контроллер карты кладёт сектор криво. Проверьте шину делителем на A0. Просадка питания на импульсе записи