Сколько на самом деле ест моторчик от батарейки? Мультиметр в режиме амперметра отвечает, но его надо втыкать в разрыв, держать руками и всё время занимать им макетку. ACS712 закрывает вопрос насовсем: крошечная плата с винтовыми клеммами, провод нагрузки проходит сквозь неё, а на выходе — напряжение, пропорциональное току. Модуль стоит копейки, выпускается на 5, 20 и 30 А — смотря какая версия — и не требует лезть в цепь щупами.
Внутри — чип Allegro на эффекте Холла: датчик ловит магнитное поле вокруг проводника и переводит его в милливольты. Замеряющая часть гальванически развязана от силовой цепи — даташит заявляет изоляцию 2.1-2.4 кВ в зависимости от поколения чипа. Сам чип прожорлив скромно: порядка десяти миллиампер от пяти вольт — на фоне любого мотора это незаметно.
Здесь соберу амперметр на 5-амперной версии с LCD 16x2: вывод «I = 1.23 A», разбор формулы от 512 до амперов, честная таблица шунт против Холла и разговор о шуме, нуле и минусе. Дисплей подключается по I2C, как в уроке про первый текст, поэтому экран здесь почти не обсуждается.
В разрыв, а не параллельно
Схема включения единственно правильная: разрываем плюсовой провод нагрузки. Питание приходит на винтовую клемму IP+, с IP− уходит дальше на нагрузку, и весь ток течёт сквозь чип. Проводник внутри — пластинка сопротивлением 1.2 мОм: на пяти амперах это падение в шесть милливольт, такое нагревать нечего и нечем. Вариант «подключить модуль параллельно, как вольтметр» ничего не измерит — ток через чип не пойдёт, а выход замрёт на середине.
Электрика модуля проста: VCC в 5 В, GND в землю Arduino, OUT на A0 — механику analogRead я разбирал в уроке про потенциометр. Стрелка на корпусе подсказывает направление: плюс источника к IP+, иначе на экране будет минус — для постоянного тока это не поломка, а перепутанная полярность. В этом разница с шунтом: землю нагрузки и землю Arduino соединять не нужно, развязка уже внутри чипа.
Пара слов про переменный ток: чип ACS712 меряет и его — выход колеблется вокруг середины вслед за синусоидой. Но скетч выше читает мгновенное значение, поэтому годится только для постоянного тока: для сети и трансформаторов нужен RMS — набор выборок за период, возведение в квадрат и корень. Это отдельная кухня, и здесь я её сознательно не трогаю: вся серия про DC-нагрузки, от повербанков до бортовой сети.
#include <Wire.h>#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); const float SENS = 0.185; // В/А: 185 мВ/А у 5A; 0.100 у 20A, 0.066 у 30A void setup() { lcd.init(); lcd.backlight();} void loop() { long sum = 0; for (int i = 0; i < 16; i++) { // 16 замеров против шума sum += analogRead(A0); delay(2); } float raw = sum / 16.0; float amps = (raw - 512.0) * 5.0 / 1023.0 / SENS; if (amps < 0.05 && amps > -0.05) { amps = 0.0; // экран пишет 0.00, а не -0.03 } else if (amps < 0) { amps = -amps; // abs(): направление сейчас не нужно } lcd.setCursor(0, 0); lcd.print("I = "); lcd.print(amps, 2); lcd.print(" A "); delay(250);}Формула по шагам. При нуле тока выход датчика сидит ровно посередине питания — 2.5 В, это отсчёт около 512. Отклонение от середины, raw - 512, пропорционально току: влево — течёт в обратную сторону, вправо — в прямую. Умножаем на 5.0 / 1023.0 — переводим отсчёты в вольты, делим на чувствительность 0.185 В/А — получаем амперы. Одна строка, а внутри три измерительных факта. Строго говоря, середина десятибитного диапазона — 511.5, и ушедшие в 512 пол-отсчёта соответствуют 0.013 А — цифре ниже шума прибора, поэтому округление здесь безболезненно.
Чувствительность — паспортная величина версии: 5A-чип отдаёт 185 мВ/А, 20A — 100 мВ/А, 30A — 66 мВ/А. Подставляете свою в константу SENS — скетч общий для всех трёх. Один отсчёт АЦП у 5A-версии — это 0.026 А: вот почему на экране два знака после точки и почему последний разряд дрожит даже на стабильной нагрузке — механику десятичных знаков я разбирал в уроке про числа и нули.
Диапазон ±5 А — это отсчёты примерно от 152 до 872: за ними выход чипа упирается в питание, линейность кончается, и прибор занижает. Если показания прилипли к краю, ток вышел за паспорт версии — берите 20A-модуль и меняйте SENS на 0.100.
Как проверить прибор, если эталонного амперметра нет: закон Ома. Резистор 10 Ом на 5 В обязан взять 0.5 А, и если экран показывает 0.48-0.53 — прибор честен в пределах своего шага. Токоизмерительный резистор берите мощностью от трёх ватт: половина ампера на десяти Омах рассеивает 2.5 Вт, и четвертьваттный вывод из стартового набора начнёт подкрашивать результаты запахом.
Выбор версии — вопрос задачи, а не статуса: 5A даёт шаг 0.026 А и годится для электронных проектов, 20A с шагом 0.049 А покрывает автомобильную и солнечную технику, 30A с 0.08 А — грубые силовые цепи. Меняется одна константа SENS, но меняется и цена отсчёта: чем жирнее версия, тем грубее малые токи, поэтому мёртвую зону для 20A и 30A стоит расширять пропорционально шагу.
Практическое следствие для покупок: модули с маркетплейса порой продают как «5A», а внутри стоит 20A-чип. По внешнему виду не отличишь — только по маркировке на самом чипе: ACS712ELCTR-05B против 20A-T. Тест по закону Ома из предыдущего раздела отсекает такое вранье за минуту: половина ампера на честном 5A — это половина ампера на экране, а у 20A — около четверти.
| Критерий | Шунт + усилитель | ACS712 (Холл) |
|---|---|---|
| Схема | резистор 0.1-1 Ом и операционный усилитель | готовый модуль: провод сквозь клеммы, OUT на A0 |
| Развязка | нет — земли измерителя и нагрузки общие | есть, до 2.1 кВ: нагрузке можно своё питание |
| Падение на пути тока | 0.5 В на 5 А при 0.1 Ом — и греется | 1.2 мОм внутри — 6 мВ на 5 А |
| Малые токи | точнее: собственного шума почти нет | шум ±0.05-0.1 А у 5A-версии по даташиту |
Шум, ноль и минус
Шум — главный минус Холла. Даташит для 5A-версии честно пишет 21 мВ от пика до пика — это треть ампера на экране, если брать одиночные замеры. Лечение двухслойное: усреднение 16 чтений сглаживает дрожание, а мёртвая зона ±0.05 А заставляет экран писать честное 0.00 на холостом ходу вместо танца 0.02 и -0.03. Увидеть шум вживую удобнее графиком: Serial Plotter рисует дорожку сигнала до и после усреднения — разница убедительнее любых слов.
Живой тест каждого нового модуля у меня занимает пять минут: холостой ход — ноль и мёртвая зона; лампа на 5 В — ток по паспортной мощности, например лампа 2.5 Вт обязана взять пол-ампера; мотор — плавный разгон и рывки, где видна работа усреднения. Три точки отделяют живой модуль от подделки с чувствительностью, гуляющей вдвое от паспортной.
Ноль — вторая грабля. У реального чипа есть смещение: при отключённой нагрузке среднее может быть 511 или 514, и тогда «ноль» прибора плывёт. Лечится нулевой калибровкой: при выключенной нагрузке запоминаете среднее в переменную и вычитаете её вместо 512. Третий момент — знак: для аккумулятора минус несёт смысл разряда, а для моторчика пугает напрасно. В скетче выше стоит abs() с комментарием: уберите строку — и знак вернётся на экран.
Обновление экрана — раз в 250 мс, без clear() и без мерцания: механику точечной перерисовки я разобрал в уроке про термометр без мерцания. И про питание модуля: если пять вольт на плате просели до 4.7 от прожорливой нагрузки, середина съедет с 512 ниже — ещё один аргумент за нулевую калибровку перед каждым серьёзным замером. И дайте плате прогреться минуту: у Холла есть тепловой дрейф первых минут, и ноль на холодной плате отличается от нуля на прогретой.
- ACS712 ставится в разрыв плюсового провода нагрузки: ток течёт сквозь чип, OUT отдаёт на A0 напряжение, пропорциональное току
- Ноль тока — середина питания 2.5 В, отсчёт около 512; формула: (raw - 512) × 5.0 / 1023.0 / 0.185 для 5A-версии
- Чувствительности версий: 5A — 185 мВ/А, 20A — 100 мВ/А, 30A — 66 мВ/А; в скетче меняется одна константа SENS
- Шум около трети ампера у 5A лечится усреднением 16 замеров и мёртвой зоной; минус — перепутанные IP+/IP− или честное направление тока
- Изоляция 2.1-2.4 кВ внутри чипа: землю нагрузки соединять с землёй Arduino не нужно — в этом разница с шунтом
- 1. При каком выходном напряжении ACS712 ток нагрузки равен нулю?
- 2. Какая формула пересчитывает отсчёт АЦП в амперы для 5A-версии?
- 3. Провод нагрузки подключили к клеммам наоборот, против стрелки. Что покажет прибор на постоянном токе?
- 4. Что даёт ACS712, чего нет у шунта на резисторе?
- 5. В скетче заменили 5A-модуль на 20A. Что правим?
Частые вопросы по теме урока
- При каком выходном напряжении ACS712 ток нагрузки равен нулю?
- Чип строит выход вокруг половины питания: при 5 В это 2.5 В, отсчёт около 512. Ток отклоняет напряжение от середины пропорционально своей величине. 2.5 В — ровно середина питания
- Какая формула пересчитывает отсчёт АЦП в амперы для 5A-версии?
- Сначала снимаем смещение нуля 512, затем переводим отсчёты в вольты и делим на чувствительность 0.185 В/А. Вариант с делением на 185 забыл про перевод АЦП в вольты. (raw - 512) × 5.0 / 1023.0 / 0.185
- Провод нагрузки подключили к клеммам наоборот, против стрелки. Что покажет прибор на постоянном токе?
- Эффект Холла честно регистрирует направление поля: обратный ток отклоняет выход вниз от середины. Меняете местами IP+ и IP− — знак на экране меняется. те же амперы, но со знаком минус
- Что даёт ACS712, чего нет у шунта на резисторе?
- Развязка — фирменная черта Холла: силовая цепь и электроника связаны только магнитным полем. На слабых токах всё наоборот — шунт точнее, потому что не шумит. гальваническую развязку до 2.1 кВ между нагрузкой и измерителем
- В скетче заменили 5A-модуль на 20A. Что правим?
- Чувствительность зашита в формуле одной константой: 20A-версия отдаёт 100 мВ/А. Заодно стоит расширить мёртвую зону — шаг прибора вырастет с 0.026 до 0.049 А. константу SENS с 0.185 на 0.100