Arduino MPPT-контроллер заряда для максимальной эффективности солнечных панелей
Компоненты и материалы
- Arduino Nano R3 — 1 шт.
- Дроссель 100 мкГн — 1 шт. (ток должен соответствовать требуемой мощности)
- Мощный N-канальный MOSFET-транзистор — 1 шт. (например, IRFZ44N)
- LCD-дисплей 16×2 (белый на синем) — 1 шт. (Adafruit Standard)
- Модуль датчика тока ACS712 — 2 шт. (на входе и выходе)
- Диод Шоттки — 1 шт. (на выходе, для защиты от обратного тока)
- Резисторы, конденсаторы, перфоплата, провода — по необходимости
Необходимые инструменты
- Паяльник
- Мультиметр
- Осциллограф (желательно для отладки ШИМ)
Программное обеспечение
- Arduino IDE
О проекте
Обычные дешевые контроллеры заряда (PWM) неэффективны: они просто снижают напряжение панели до напряжения аккумулятора без увеличения тока. Дорогие MPPT-контроллеры стоят много. Цель проекта — сделать свой эффективный MPPT-контроллер, который:
- Использует понижающий преобразователь (buck converter) на N-канальном MOSFET с КПД >90%.
- Реализует алгоритм MPPT (Maximum Power Point Tracking) для выработки максимальной мощности с панели в любой момент времени.
- Управляется Arduino Nano, измеряющей входные/выходные напряжения и токи.
Шаг 1: Что такое MPPT и зачем он нужен
Солнечная панель 12В/100Вт выдает 18–21В, а аккумулятор 12В заряжается при 11–13.6В. PWM-контроллер просто «сбрасывает» лишнее напряжение, теряя мощность. Buck-преобразователь же преобразует избыточное напряжение в дополнительный ток зарядки.
Вторая проблема — нелинейная ВАХ панели. Точка максимальной мощности (MPP) смещается в течение дня. MPPT-алгоритм отслеживает её, меняя коэффициент заполнения ШИМ.
Шаг 2: Как работает MPPT в этом проекте
Измеряются входная мощность (Pin = Vin × Iin) и выходная мощность (Pout = Vout × Iout). Алгоритм сравнивает текущую входную мощность с предыдущей и корректирует выходное напряжение (через duty cycle ШИМ):
- Если Pin выросла при снижении Vout — продолжаем снижать Vout.
- Если Pin упала при снижении Vout — повышаем Vout.
Так система «крутится» вокруг MPP. Коллебания минимизируются эффективным алгоритмом.
Шаг 3: Реализация MPPT на Arduino
Основная функция регулировки (упрощенно):
void regulate(float Iout, float Vin, float Vout) {
float Pin = Vin * Iin; // входная мощность
// Логика Perturb & Observe
if ((Vout > Vout_max) || (Iout > Iout_max) ||
((Pin > Pin_previous && Vout_sense < Vout_last) ||
(Pin < Pin_previous && Vout_sense > Vout_last))) {
if (duty_cycle > 0) duty_cycle--;
analogWrite(BUCK_PIN, duty_cycle);
} else if ((Vout < Vout_max) && (Iout < Iout_max) &&
((Pin > Pin_previous && Vout_sense > Vout_last) ||
(Pin < Pin_previous && Vout_sense < Vout_last))) {
if (duty_cycle < 240) duty_cycle++;
analogWrite(BUCK_PIN, duty_cycle);
}
Pin_previous = Pin;
Vin_last = Vin;
Vout_last = Vout;
}
Шаг 4: Buck-преобразователь (понижающий)
Использована нестандартная схема с низкосторонним ключом (low-side switching) на N-канальном MOSFET (IRFZ44N). Это позволяет управлять мощным транзистором прямо от пина Arduino (логический уровень), не требуя драйвера или bootstrap-схемы.
Особенности схемы:
- MOSFET установлен в разрыве «минуса» панели, поэтому «земля» Arduino — это минус панели.
- Выходное напряжение измеряется хитро: разница между «минусом панели» (GND Arduino) и «минусом нагрузки» дает падение на дросселе/диоде, которое вычитается из входного напряжения.
- Ток измеряется модулями ACS712, запитанными от Arduino и заземленными по входу.
- ШИМ частота поднята до 62.5 кГц (таймер Timer0) для уменьшения риппла тока в дросселе.
- Дроссель 100 мкГн рассчитан на 5–10А (не превышать 80–90% от номинала насыщения).
Шаг 5: Дополнительные функции
- LCD-дисплей показывает: входное/выходное напряжение, ток зарядки, мощность, КПД, температуру радиатора.
- Две кнопки (Menu, Set) для настройки параметров: напряжение буст/флоат зарядки, макс/мин ток, порог отсечки по низкому входу, авто/ручной режим.
- Настройки сохраняются в EEPROM.
- Защита: перезаряд, глубокий разряд, перегрев радиатора (>80°C), низкое входное напряжение.
- Вентилятор радиатора включается при >45°C.
- Watchdog-таймер (8с) сбрасывает контроллер при зависании.
Шаг 6: Итоговая схема, спецификация (BOM) и полный код
Полный код скетча Solar_charger_tutorial_code.ino включает:
- Инициализацию АЦП с усреднением (10 измерений).
- Функции
regulate()(MPPT),auto_cutoff()(защита и стадии зарядки),soft_start(). - Меню настройки через LCD и кнопки.
- Работу с EEPROM.
- Serial-мониторинг и Serial-команды для калибровки.
// Пример основных настроек (в начале скетча)
float Vout_boost = 14.5; // Напряжение буст-зарядки
float Vout_float = 13.5; // Напряжение удержания
float Iout_max = 5.0; // Макс. ток зарядки, А
float Vin_thresold = 10.0; // Порог отключения по низкому входу
Файл прошивки и BOM доступны для скачивания в разделе Code исходного проекта.
Схемы (Eagle/изображения)
Производственный процесс
- Технология бульдозеров: дизайн, производство и будущие инновации
- Солнечные ячейки: от ранних экспериментов к современной фотовольтаике — технологии, производство и перспекти…
- Мониторинг солнечной панели в реальном времени: дешёвая система сбора данных на Arduino и Excel
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Солнечный трекер v2.0 — продвинутая DIY система слежения за солнцем
- Ветровая энергетика: превращение движения воздуха в чистую электроэнергию