Амперметр-вольтметр с записью на SD-карту
Часть 2 - схема и конструкция прибора
Электрическая схема
Принципиальная электрическая схема прибора показана на рисунке:

Измеряемое напряжение поступает на вход VOLTAGE INPUT и через делитель R1, R2, понижающий напряжение в 5 раз, попадает на вход A0 модуля АЦП U3. Благодаря делителю на вход прибора можно подавать напряжения в диапазоне 0…20 В. Диод D1 защищает вход АЦП от случайной подачи напряжения отрицательной полярности, которое может вывести микросхему АЦП из строя.
Измеряемый ток со входа CURRENT INPUT поступает на входы IN0 и IN1 микросхем ACS712 модулей U5 и U6. Эти микросхемы содержат датчики Холла, преобразующие магнитное поле, возникающее в проводнике от протекания по нему измеряемого тока, в пропорциональное ему выходное напряжение. Главным достоинством микросхем ACS712 является полная изоляция цепи измеряемого тока от остальных цепей микросхемы и, соответственно, от всей электрической схемы прибора, что дает возможность подключать вход CURRENT INPUT в любую точку схемы исследуемого устройства, например, как в положительный, так и в отрицательный провод аккумулятора, не опасаясь короткого замыкания с цепью измеряемого напряжения. Этим модули на базе ACS712 выгодно отличаются от более распространенных датчиков тока, измеряющих падение напряжения на шунте, включенном в измеряемую цепь. Еще одним полезным свойством микросхем ACS712 является возможность измерения тока любой полярности, что очень удобно при исследовании процессов в аккумуляторах, у которых, как известно, ток при зарядке течет в одном направлении, а при разрядке – в другом.
К сожалению, кроме отмеченных достоинств, микросхемы ACS712 имеют и некоторые недостатки, заключающиеся в значительной зависимости выходного напряжения от окружающей температуры, от напряжения источника питания и, особенно, от силы и направления окружающих магнитных полей, включая магнитное поле Земли. Это затрудняет измерение малых токов на уровне единиц или даже десятков миллиампер.
Для устранения этого недостатка в схеме использованы два одинаковых модуля, выходные сигналы которых подаются на входы A1 и A2 модуля АЦП U3, где преобразуются в цифровую форму, а затем программно вычитаются друг из друга микроконтроллером. При этом все погрешности, имеющие у двух модулей одинаковый знак и близкую величину, значительно уменьшаются (в идеале, вообще, становятся равными нулю), а полезный сигнал, наоборот, удваивается из-за встречного включения датчиков тока. Обратите внимание, что входы IN0 и IN1 двух модулей соединены таким образом, что измеряемый ток протекает через них в противоположных направлениях. Такое включение датчиков и дальнейшее вычитание их выходных напряжений образует дифференциальную схему, позволяющую значительно повысить точность измерений, что особенно заметно при малых величинах измеряемых токов.
Еще одним недостатком модулей на базе ACS712 является высокий уровень собственных шумов на выходах, который достигает десятков милливольт, что также отрицательно сказывается на точности измерений малых токов. Для подавления этих шумов выходы модулей U5 и U6 соединены со входами A1 и A2 модуля АЦП U3 через простейшие RC-фильтры нижних частот R3C1 и R4C2.
Модули часов реального времени, АЦП и дисплея подключаются к микроконтроллеру по шине I2C, таким образом, для обмена данными с этими модулями задействовано всего 2 входа-выхода Arduino (A4, A5), а microSD карта подключается при помощи интерфейса SPI (входы-выходы D10, D11, D12, D13). Кроме того, в приборе имеются три кнопки управления, подключенные ко входам D2, D3 и D4 микроконтроллера и необходимые для переключения режимов работы и настройки параметров.
Питающее напряжение 9V поступает на микроконтроллер U1 от внешнего источника питания, а все остальные модули питаются напряжением 5V от встроенного стабилизатора напряжения Arduino Nano (цепь VCC).
Компоненты
Основные компоненты, необходимые для сборки прибора, показаны на фото:

Цифрами обозначены:
- Микроконтроллер Arduino Nano, вернее, его аналог, изготовленный безымянным китайским производителем, но работающий при этом не хуже настоящего.
- Комбинированная плата Data Logging Board фирмы Deek-Robot, объединяющая в себе модуль часов реального времени и модуль адаптера карты microSD.
- Модуль АЦП на базе 4-канальной 16-разрядной микросхемы ADS1115 фирмы Texas Instruments
- Модуль датчика тока на базе микросхемы ACS712 фирмы Allegro (таких модулей нужно 2 штуки). Максимальный измеряемый модулем ток 5 А.
- Три кнопки без фиксации 12x12 мм с цветными колпачками.
- Модуль символьного LCD дисплея 1602 (16 символов, 2 строки) с припаянной к нему платой конвертера интерфейса I2C.
- Разъем для подключения внешнего источника питания 9 В.
Кроме перечисленных компонентов понадобятся также несколько резисторов и конденсаторов, монтажные провода, две пары гнезд для подключения проводов от измеряемых цепей и небольшой пластмассовый корпус. Для поддержания хода часов реального времени при выключенном питании прибора необходима литиевая 3-вольтовая батарейка формата CR1220.
Конструкция и монтаж
Прибор смонтирован в пластмассовом корпусе размерами 112х82х40 мм. Корпус состоит из двух половинок, соединяемых по углам саморезами. В верхней половине размещен дисплейный модуль и кнопки управления, в нижней половине – все остальные модули и разъемы.

Для того чтобы половинки корпуса можно было при необходимости разъединить, соединения между ними сделаны с помощью двух 4-контактных разъемов – один для подключения дисплея, другой для подключения кнопок управления.
В связи с простотой схемы и малым количеством соединений между модулями печатная плата не разрабатывалась. Модули и дискретные элементы размещены на куске перфорированной односторонней макетной платы, их выводы соединены на нижней стороне платы навесными проводниками. На другом куске той же макетной платы смонтированы кнопки управления.
Модули датчиков тока U5 и U6 должны размещаться параллельно друг другу, и, желательно, как можно ближе, при этом внешние магнитные поля будут одинаково влиять на их выходные сигналы, что позволит полностью скомпенсировать их в программе. В конструкции, показанной на фото, модули U5 и U6 размещены «этажеркой», то есть один под другим. Рекомендуется перед установкой этих модулей в прибор выпаять находящиеся на них SMD-светодиоды. Эти светодиоды индицируют подачу напряжения питания на модули, что не имеет большого смысла, когда они расположены в корпусе прибора и не видны снаружи, однако, они довольно сильно нагреваются в процессе работы и нагревают находящуюся рядом микросхему ACS712, вызывая заметный дрейф нуля прибора в первые минуты после его включения.
Возможности замены компонентов и модернизации прибора
При желании диапазон измеряемого напряжения можно расширить, изменив сопротивления резисторов входного делителя, а диапазон измеряемого тока – заменив 5-амперные модули датчиков тока на аналогичные 20-амперные или 30-амперные. При этом нужно будет внести соответствующие поправки в расчетные формулы, использованные в программном коде.
Микроконтроллер Arduino Nano, использованный в приборе, можно заменить другими микроконтроллерами того же семейства c 5-вольтовыми логическими сигналами и тактовой частотой 16 MHz, например, Arduino Uno или Arduino Pro Mini, однако при этом надо учитывать, что Arduino Uno стоит дороже и имеет большие габариты, что потребует увеличения размеров корпуса прибора, а Arduino Pro Mini не имеет USB интерфейса и в этом случае для загрузки управляющей программы потребуется внешний программатор (USB to TTL конвертер).
При отсутствии 4-х канального АЦП ADS1115 его можно вообще исключить из схемы, а сигналы со входного делителя напряжения и с модулей датчиков тока подавать непосредственно на любые свободные аналоговые входы Arduino, при этом для преобразования этих сигналов в цифровую форму нужно будет использовать встроенные АЦП микроконтроллера. Надо только иметь в виду, что в этом случае точность измерений значительно снизится, поскольку АЦП Arduino имеет разрядность всего 10 (диапазон 0…5 В разбивается на 1024 ступеньки) против разрядности 16 у ADS1115 (65536 ступенек).
Примечание. Реально АЦП ADS1115 имеет разрядность 16 только в режиме дифференциальных входов, мы же используем его в режиме одиночных входов (single-ended), при котором его разрядность равна 15 (32768 ступенек), однако, это все равно в 32 раза лучше чем разрядность встроенного АЦП Arduino.
Объединенные на одной плате модули часов реального времени и адаптера карты памяти можно без изменения электрической схемы заменить двумя отдельными модулями. При этом, если модуль часов реального времени будет выполнен на базе той же микросхемы DS1307, то и в программный код не придется вносить никаких изменений, а если микросхема окажется другой, например, DS1302 или DS1337, то нужно будет использовать в программе соответствующую библиотеку и внести некоторые изменения в код.
При использовании других адаптеров карты памяти обратите внимание на то, что сама по себе карта памяти расчитана на напряжение питания 3.3 В и соответсвующие этому напряжению уровни входных и выходных сигналов. Некоторые из имеющихся в продаже адаптеров питания имеют встроенные преобразователи напряжения питания и уровней логических сигналов, поэтому их можно использовать в сочетании с 5-вольтовым микроконтроллером Arduino Nano. В частности, использованный здесь адаптер Data Logging Board фирмы Deek-Robot имеет такие преобразователи и поэтому успешно работает с 5-вольтовыми микроконтроллерами AVR. Однако, многие платы адаптеров таких преобразователей уровня не имеют и поэтому они пригодны для работы только с 3.3-вольтовыми микроконтроллерами. Попытка использовать их в описываемом приборе в лучшем случае приведет к его неработоспособности, а в худшем - может вывести из строя карту памяти.
Четвертый канал АЦП ADS1115, не задействованный в приборе, можно при желании использовать для чего-нибудь полезного, например, подключить его к батарейке часов реального времени, что позволит контролировать ее напряжение и вовремя заменить в случае разрядки. Можно также добавить еще один входной делитель напряжения, аналогичный уже имеющемуся и подключить его к этому свободному входу, что позволит измерять и записывать в лог-файл величину напряжения не в одной точке цепи, как сейчас, а сразу в двух.
Еще одной интересной возможностью использования четвертого входа АЦП является подключение к нему датчика температуры, расположенного внутри корпуса прибора и соответствующая коррекция в программе результатов измерений с тем, чтобы скомпенсировать температурный дрейф датчиков тока и АЦП. Это может несколько снизить температурную погрешность измерений, что важно, если прибор предполагается использовать вне помещения.
Далее переходим к 3-й части описания, посвященной настройке и программному обеспечению прибора.