Перейти к содержимому

04s.ru

Только полезные вещи…

Меню
  • Главная
  • Объявления
    • Добавить объявления
    • Мои объявления
  • Полезные ресурсы
    • Другое
  • Генератор QR
  • Карта сайта
  • Контакты
Меню

Вольт-ампер-energy-метр на Arduino. Часть 2. Амперметр

Опубликовано в 05.02.202001.03.2021 от Lis

Исходные данные и доработка

Итак к этому момент у нас есть вольтметр постоянного напряжения с пределом 0..20в  (смотрите предыдущую часть). Теперь мы добавляем к нему амперметр 0..5а. Для этого немного модифицируем схему — она станет проходной, то есть имеет как вход так и выход.

Часть касающуюся отображения на LCD я убрал — она не будет меняться. Впринципе основной новый элемент — шунт Rx на 0.1 Ом. Цепочка R1-C1-VD1 служит для защиты аналогового входа. Такую же имеет смысл поставить и по входу A0. Поскольку мы предполагаем достаточно большие токи, есть требования к монтажу — силовые линии должны быть выполнены достаточно толстым проводом и соединяться с выводами шунта непосредственно (проще говоря, припаяны), иначе показания будут далеки от реальности. Есть так же замечание по току — впринципе опорное напряжение 1.1в позволяет регистрировать на шунте 0.1 Ом ток до 11 ампер с точностью немного хуже 0.01а, но при падении на Rх такого напряжения выделяемая мощность превысит 10 Вт, что совсем не весело. Для решения проблемы можно было бы использовать усилитель с коэффициентом усиления 11 на качественном ОУ  и шунт на 10 мОм (0.01Ом). Но пока мы не будем усложнять себе жизнь и просто ограничимся в токе до 5а (при этом мощность Rx можно выбрать порядка 3-5 Вт).

На этом этапе меня ждал сюрприз — оказалось что АЦП контроллера имеет достаточно большое смешение нуля — около -3мВ. То есть АЦП просто не видит сигналы менее 3мВ, а сигналы чуть большего уровня видны с характерной неточностью -3мВ, что портит линейность в начале диапазона. Беглый поиск не дал явных ссылок на такую проблему (смещение нуля это нормально, но оно должно быть существенно меньше), поэтому вполне возможно это проблема конкретного экземпляра Atmega 328. Решение я выбрал двоякое — по напряжению — программную ступеньку в начале диапазона (отображение начинается с 0.06 вольт), по току — подтягивающий резистор на шину 5в. Резистор обозначен пунктиром.

Исходный код

Полную версию этого вольт-ампер-метра (в варианте с I2C) можно скачать по ссылке в конце статье. Далее я покажу изменения в исходном коде.  Добавилось чтение аналогового входа A1 с таким же усреднением как и для вольтметра. По сути это тот же вольтметр, только без делителя, а амперы мы получаем по формуле Ома: I = U/Rx (например, если падение напряжения на Rx = 0.01 В, то ток равен 0.1А). Также я ввел константу усиления по току AmpMult — на будущее. Константу AmpRx с сопротивлением шунта вероятно придется подобрать — учесть неточность резистора шунта. Ну и раз уже это это вольт-ампер-метр и на дисплее 1602 еще осталось место, то осталось вывести текущую потребляемую мощность в ваттах, получив не сложный дополнительный функционал.

....
// Аналоговый вход
#define PIN_VOLT A0
#define PIN_AMP A1
// Внутреннее опорное напряжение (подобрать)
const float VRef = 1.10;
// Коэффициент входного резистивного делителя (Rh + Rl) / Rl. IN <-[ Rh ]--(analogInPin)--[ Rl ]--|GND
const float VoltMult = (180.0 + 10.0) / 10.0;
// Усиление по току
const float AmpMult = 1.0;
// Сопротивление шунта в омах (подобать)
const float AmpRx = 0.098;

....
void loop() {
 unsigned long CalcStart = millis();
 float InVolt = 0;
 float InAmp = 0;
 int ReadCnt = 0;
 // Чтение из порта с усреднением
 while ((millis() - CalcStart) < REFRESH_TIME) {
 InVolt += analogRead(PIN_VOLT);
 InAmp += analogRead(PIN_AMP);
 ReadCnt++;
 }
 InVolt = InVolt / ReadCnt;
 InAmp = InAmp / ReadCnt;
 // Компенсация смещения 0 АЦП (подобрать)
 if (InVolt > 0.2) InVolt += 3;
 // Перевод в вольты (In: 0..1023 -> (0..VRef) scaled by Mult)
 float Volt = InVolt * VoltMult * VRef / 1023;
 float Amp = InAmp * VRef / AmpMult / AmpRx / 1023 ;
 // Для учета падения на шунте раскомментировать 2 строки
 //float RxVolt = InAmp * VRef / 1023 / AmpMult;
 // Volt -= RxVolt;
 float Watt = Volt * Amp;
 // Вывод данных
 lcd.setCursor (8, 0);
 lcd.print(Watt);
 lcd.print("W ");
 lcd.setCursor (0, 1);
 lcd.print(Volt);
 lcd.print("V ");
 lcd.setCursor (8, 1);
 lcd.print(Amp);
 lcd.print("A ");
}
5/5 - (1 голос)
Просмотров: 5 321


Место для продажи

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Свежие записи

  • Авто выключатель для мультиметра
  • Индикатор разряда аккумулятора
  • Схема индикатора заряда аккумулятора на светодиодах
  • Linux mint восстановление системы с помощью LiveCD/USB
  • Схема стабилизатора тока на LM358

Популярные записи

  • Металлоискатель пират своими руками подробная инструкция (67 721)
  • Авторегулировка диаметра филамента (66 014)
  • A4988 и Arduino (18 844)
  • DT9205a — ремонт мультиметра (15 633)
  • ШИМ-регулятор 220 В ( IGBT ) (14 151)
  • Пробник для проверки оптопар (13 621)
  • ШИМ-регулятор на Arduino (12 026)
  • Шим регулятор на NE555 (11 078)
  • Схема стабилизатора тока на LM358 (10 766)
  • Linux mint восстановление системы с помощью LiveCD/USB (10 422)

Разделы

3D (1) Android (1) Arduino (14) CCleaner (1) Controller (1) DT9205a (2) LG (1) Linux (3) LM339 (1) LM358 (1) NE555 (9) NTC 100K (2) Power Bank (2) Server (4) SSD (1) SSL (1) Ubuntu (3) USB (2) VPS (1) Windows (8) АКБ (6) Авто (18) Асинхронный (3) Вирусы (1) Датчик (2) Двигатель (5) Индикатор (2) Металлоискатель (2) Мультиметр (2) Оптопара (1) Пластик (2) Полезное (18) Примочка (1) Разное (18) Реле (1) Сабвуфер (2) Симистор (1) Система (12) Схемы (36) Телевизоры (1) Телефон (1) Термистор (2) Тиристор (1) Тюнинг (5) Электроника (57)

Коментарии

  • Lis к записи ШИМ-регулятор 220 В ( IGBT )
  • Hdns Klos к записи ШИМ-регулятор 220 В ( IGBT )
  • Lis к записи Схема индикатора заряда аккумулятора на светодиодах
  • Lis к записи Индикатор разряда аккумулятора
  • Lis к записи Авто выключатель для мультиметра

Форма подписки

Подпишитесь на блог и получайте новые статьи!



QR код

QR код

Telegram канал

И смех и Грех — Тут весело и Интересно))
Красиво, но не факт… — Поделки на лазерном гравёре.