Итак, я все-таки погорячился, когда утверждал, что питания 3,3 В будет достаточно для работы датчика Холла в ACS712. После нескольких попыток подключения как в цепь постоянного, так и переменного тока, убедился, что на выходе датчика — случайный шум, никак не коррелирующий с величиной тока, замеряемой мультиметром.
Вот, например:
Кажется, что красный график коррелирует с синим, но это только кажется — если посчитать корреляцию, то она близка к нулю. Это можно визуализировать, если убрать время и построить график зависимости выдачи АЦП от показаний мультиметра:
Тут нужно сделать три важных пояснения.
Первое: на графиках приведено значение амплитуды переменного тока Irms, определенное мультиметром как среднеквадратичное значение I(t)=I0eiwt, осциллирующего, в случае подключения к сети 220 В, с частотой 50 Гц. Для целей проекта, в котором планируется фиксировать относительные значения (как в нашем случае), значение самой амплитуды не так важно, но, если что, стоит помнить, что Irms2 =I02, т.е. значение амплитуды в корень из двух раз больше значения Irms.
Второе: согласно спецификациям RP2040, её АЦП — 12-разрядный. Т.е. результат оцифровки входного сигнала должен принимать одно из 4096 значений. Однако, поскольку для хранения результата оцифровки используется 16-разрядный формат, мы получаем 65536 разных значений.
Третье: датчики Холла, если верить интернету, устроены так, что на выходе всегда стоит усилитель. ACS712 — не исключение, причем выходной усилитель устроен так, что нулевому току, протекающему через датчик, соответствует уровень 2,5 В (или половине питающего напряжения, как я изначально подумал). Так или иначе, я ожидал бы увидеть значения в диапазоне 32768, флуктуирующие в ту или иную сторону — тут реальность совпала с ожиданиями, мы видим на графике, что среднее значение как раз соответствует половине величины напряжения питания. Вот только никакой корреляции с силой тока не наблюдается.
Что ж, попробуем повторить эксперимент, подключив ACS712 к источнику питания 5В (я воспользовался пином VUSB: заявлено, что он держит ток до 90 мА, в то время как заявленное потребление ACS712 — 10 мА). Увеличив напряжение питания усилителя датчика Холла мы попадаем на риск того, что напряжение на его выходе может превысить предельно допустимое напряжения для входа АЦП. Согласно даташиту RP2040, сгореть он не должен (там стоят диоды защиты), но и работать корректно не будет.
Заодно я решил повторить эксперимент, используя подключение по постоянному току. У меня еще со времен изучения выбросов энергопотребления при соединении мобильных устройств по USB сохранился мини-стенд с удобными разъемами для подключения вольтметра и амперметра в разрыв шины питания. Правда, потребитель был другой — вместо блока питания ноутбука (ну не было у меня под рукой переходников USB Type A на Type C) к розетке подключил зарядное устройство мобильного телефона.
Сразу видим качественно иную картинку:
Что наглядно подтверждается корреляционным графиком:
Аппроксимируя линейной зависимостью даже без особой чистки датасета получаем коэффициент 5691 ± 427 А-1 с R2-Score 88%. Обратите внимание, что минимальное значение оцифрованного сигнала с датчика Холла принимает значение около 44000, что как раз соответствует уровню около 2,5 В.
И еще один нюанс: ACS712 доступен в четырех вариантах исполнения — с максимальным током 5А, 10А, 20А и 30А. Я, правда, сомневаюсь в практической применимости двух последних вариантов в силу ну очень уж малой толщины клеммы (а для токов в 20 и 30 ампер потребуется провод толщиной 2 и 3 мм, соответственно), но такой вариант исполнения в природе существует (я даже по ошибке себе прикупил такой на Aliexpress). В этом эксперименте использовался датчик Холла, рассчитанный на максимальный ток в 5А, так что я правильно сделал, что поставил менее мощный блок питания, а то при токе более двух ампер сигнал на входе АЦП RP2040 составил бы более 5В. Но там есть нюанс: для постоянного тока обратное подключение должно приводить к обратной корреляции сигнала: т.е. с ростом тока он будет падать, причем заявлено, что с таким же коэффициентом.
Но это я проверю уже в следующий раз.