В данной ветке представлена попытка создать стабилизированные регуляторы напряжения и тока на Arduino Pro mini.
Если у вас сразу возникло много вопросов, рекомендую прочитать этот текст до конца, возможно ответ на большинство из них уже есть.
РЕГУЛЯТОР НАПРЯЖЕНИЯ:
Скрытый текст
U_regulator_free.ino
Регулировка напряжения фазовая, измерение напряжения среднеквадратичное.
Количество полупериодов изменяется в коде if (zero == 3) и if (zero >= 3) о чем в тексте скетча есть соответствующий комментарий.
Значение напряжения подается на Serial порт в виде TWxxx, где ххх значение от 35 до 400, выдает назад в порт текущие параметры:
realU - Измеренное выходное напряжение
ustU - Установленное вами значение выходного напряжения
Проект писался и проверялся на Atmega328 16 мГц (Arduino Pro mini), Коллега U-M протестировал работу на Uno.
Изначально выставлено нулевое напряжение, симистор закрыт, если не реагирует на команды с порта, в окне монитора порта Arduino IDE выбрать в выпадающем списке NL&CR.
После сборки требуется выставить входящее напряжение. Для этого выставить максимальное напряжение подключить тестер к выходу под нагрузкой (например через тройник) и путем подстройки потенциометра добиться соответствия показаний тестера и показаний получаемых с Arduino.
В коде if (ch == '\n'){ выставляется что будет являться признаком окончания строки, символ возврата каретки (ASCII 13, или '\r') или символ новой линии (ASCII 10, или '\n')
Скетч, схема, проект для Протеуса (программа симуляции, может кому то пригодиться) прилагается.
Если будете заказывать Arduino, то можно заказать сразу и печатную платку. В результате может получиться например вот так:
РЕГУЛЯТОР ТОКА НА ACS712:
Скрытый текст
I_regulator_free_ACS712.ino
Добавлен скетч для версии с ACS712, схема аналогичная, за исключением замены трансформатора на датчик тока. Стабилизация с помощью скользящего алгоритма.
Значение тока подается на Serial порт в виде TWxxx, где ххх требуемое значение тока, выдает назад в порт текущие параметры:
realI - Измеренный ток
ustI - Установленное нами значение выходного тока
Измерение тока среднеквадратичное за три периода.
Количество полупериодов изменяется в коде if (zero == 6) и if (zero >= 6) о чем в тексте скетча есть соответствующий комментарий.
Тип датчика ACS712 выставляется в начале скетча, есть комментарий для установки коэффициента.
Помните что ACS712 очень шумный датчик, если вы видите на холостом ходу значение близкое к нулю но не ноль, ничем я вам помочь не смогу.
//--------------------------------------------------------------------------------------
По просьбам добавлен скетч с энкодером вместо кнопок I_regulator_free_ACS712_LCD_Display_Encoder.
Подключение энкодера:
Пин 7 - энкодер SW (кнопка энкодера)
Пин 8 - энкодер CLK
Пин 9 - энкодер DT
Нажав на кнопку энкодера увидим на экране LCD ---> и цифры устанавливаемого тока,
установив необходимое значение (сам ток не меняется на выходе) нажимаем снова кнопку энкодера и применяем изменения.
//--------------------------------------------------------------------------------------
РЕГУЛЯТОР ТОКА НА ACS712 С ПРЕДУСТАНОВКАМИ И ЗАПИСЬЮ В ПАМЯТЬ:
Скрытый текст
Файл: I_regulator_free_712_LCD_Encoder_Preset_EEPROM
Перечень возможностей: вывод информации в ваттах, время работы, счетчик затраченной электроэнергии, пять предустановок с записью в память.
Название предустановок и их количество правиться в программе.
Расчет потребления электроэнергии ПРИМЕРНЫЙ, в виду значительных погрешностей измерения.
Для корректной работы требуется измерить сопротивление ТЭНа и записать в программу, о чем в тексте есть комментарий.
Программа имеет три меню:
1. Текущая мощность (ВАТТ), включен или выключен регулятор (OFF/ON)
Название предустановки, установленная мощность.
2. Время работы, включен или выключен регулятор (OFF/ON)
Потребленная мощность в ваттах.
3. Установка, включен или выключен регулятор (OFF/ON)
Название предустановки >> устанавливаемая мощность.
Переключение между меню 1 и 2 с помощью кнопки энкодера;
Переключение между предустановками с помощью энкодера;
Переход в меню 3 и выход из него нажатием кнопки 1 , установка мощности с помощью энкодера;
Запись в память установки с помощью кнопки энкодера в меню 3, в качестве подтверждения появится надпись WR;
Включение регулятора кнопкой 2 в меню 1 или 2. Если требуется регулировка на «ходу» то при включенном регуляторе нажать кнопку 1 и производить регулировку из меню 3 установки;
Звучит несколько запутанно, но в процессе эксплуатации трудностей возникнуть не должно.
Схема подключения:
Пин 10 – кнопка 1
Пин 11 – кнопка 2
Пин 7 - энкодер SW
Пин 8 - энкодер CLK
Пин 9 - энкодер DT
//--------------------------------------------------------------------------------------
Для прямого подключения LCD без I2C в начале скетча есть комментарий
//--------------------------------------------------------------------------------------
РЕГУЛЯТОР ТОКА НА ТРАНСФОРМАТОРЕ ТОКА DL-CT1005A:
Скрытый текст
I_regulator_free_Current.ino
Добавлен вариант с трансформатором тока DL-CT1005A реализованный по схеме https://learn.openenergymonitor.org/...ce-with-arduino Работа аналогична работе с ACS712, точность и стабильность показаний выше.
, ,
ВЕРСИИ С СЕМИСЕГМЕНТНЫМ ИНДИКАТОРОМ НА СДВИГОВЫХ РЕГИСТРАХ 74HC595:
Скрытый текст
Скетч - расширенная версия бездисплейного варианта, подходит как к версии с дисплеем так и без.
Совместимый модуль возможно заказать в интернет магазинах, например такой:
Семисегментные дисплеи подходят как с общим анодом так и с общим катодом. Для смены нужно в скетче инвертировать биты (есть соответствующий комментарий в коде). По умолчанию установлена схема с общим анодом.
Алгоритм работы кнопок следующий:
1. При запуске индикация входного напряжения / выходного тока
2. При нажатии на кнопку 1 циклически показываются В- входное напряжение / выходной ток, У - установленное.
3. При нажатии на кнопку 2 вход в режим установки , увеличение значения кнопка 1, уменьшение 2. Установленное значение напряжения / тока меняется СРАЗУ во время регулировки.
4. После окончания установки при отсутствии нажатий на кнопки в течении 10 секунд происходит возврат в меню индикации.
Версии скетчей находятся в архивах под соответствующий вариант регулятора.
ВЕРСИИ С LCD ДИСПЛЕЕМ ПОДКЛЮЧЕННЫМ ПО I2C:
Скрытый текст
Мной использовался дисплей LCD 1602 на HD44780 с модулем I2C на PCF8574 и библиотека LiquidCrystal_I2C.
Библиотека ставиться из менеджера библиотек в IDE, либо с сайта https://github.com/marcoschwartz/LiquidCrystal_I2C.
С подключением дисплея проблем возникнуть не должно, распиновка Pro Mini:
Для работы Вашего дисплея требуется узнать его адрес, для этого требуется запустить скетч i2c_scanner.ino из аттача,
запустить монитор порта в IDE и вставить полученный адрес в скетч в строку LiquidCrystal_I2C lcd(0x3F, 16, 2);, где 0х3F адрес дисплея.
Кнопки подключены и работают так же как и в схеме с семисегментным индикатором.
Если после подключения символов нет, требуется покрутить потенциометр на плате I2C
АЛГОРИТМ НАСТРОЙКИ ТОЛЬКО СОБРАННОГО РЕГУЛЯТОРА НАПРЯЖЕНИЯ (от Tomat7)
Скрытый текст
Внимание! Высокое напряжение опасно для жизни. Будьте внимательны!
Не собирайте прибор "на соплях", используйте подходящие провода и инструменты.
0. Схемы в шапке темы все рабочие! Никакого подбора деталей, супертюнинга, дополнительных резисторов, подтяжек и прочего не нужно.
Сам собирал и регулятор напряжения, и регулятор тока на ACS712, и на трансформаторе тока.
1. Убеждаемся что высокое напряжение отключено. Плата Ардуино питается от компьютера по USB.
2. Загружаем тестовый скетч U_reg_test.ino - без всяких LCD, энкодеров и кнопок. Убеждаемся что он скомпилировался и загрузился корректно.
3. В "среде" Ардуино включем монитор порта (Ctrl-Shift-M). В нём устанавливаем скорость "9600 baud" и "Both NL&CR".
Убеждаемся что в окне Монитора порта появляется разумная информация обновляющаяся каждую секунду - "realU, ustU" и тд.
4. На выход регулятора подключается нагрузка (например лампа накаливания) и параллельно нагрузке вольтметр (желательно имеющий надпись TrueRMS)
Убеждаемся что лампа не горит, вольтметр показывает 0, ustU = 0, realU = 0 для регулятора напряжения или realU = 512 для регулятора тока.
Если лампа горит - повторяем пункт 1. Если все равно горит - оформляйте патент на вечный двигатель!
5. Осматриваем конструкцию, убеждаемся в ее электробезопасности. Отойдя подальше подаем высокое напряжение.
Убеждаемся что нигде ничего не бахнуло, не появился лишний запах, лампа не горит, вольтметр показывает 0, в Мониторе порта ustU = 0 и realU = 0 или 512.
Если не так - всё выключаем и перепроверяем соединения, монтаж, пайку в части moc3023, симистора.
Исправляем и начинаем с пункта 1.
6. Через "Монитор порта" отправляем регулятору команду "M1". (без кавычек, латинская "М" и цифра "1"
Убеждаемся что загорелась лампа.
Если не так - всё выключаем и перепроверяем соединения, монтаж, пайку в части moc3023, симистора.
Исправляем и начинаем с пункта 1.
7. Смотрим в монитор порта и видим что там появились дополнительные строчки.
Находим "ZeroCross" и смотрим число - оно должно быть близко к 100. (с большой долей вероятности узел детектора "0" работает корректно)
Если не так - всё выключаем и перепроверяем соединения, монтаж, пайку в части детектора нуля.
Исправляем и начинаем с пункта 1.
8. Через "Монитор порта" отправляем регулятору команду "TW0".
Убеждаемся что лампа не светит. (с большой долей вероятности узел симистора работает корректно)
Если не так - всё выключаем и перепроверяем соединения, монтаж, пайку в части moc3023, симистора.
Исправляем и начинаем с пункта 1.
Для регулятора тока на этом можно остановится и перейти к пункту 10.
9а. Для регулятора напряжения необходимо провести первоначальную подстройку "измерителя" напряжения.
9б. Через "Монитор порта" отправляем регулятору команду "TW300".
9в. Убеждаемся что ustU ежесекундно появляющееся в окне Монитора порта стало показывать 300. (realU тоже может поменяться)
9г. Смотрим на показания вольтметра - теперь он должен показывать что-то от 200 до 250 вольт. (может и меньше - зависит от качества электросети)
9д. Вращением подстроечного резистора "измерителя" напряжения нужно добиться чтобы realU стало как можно ближе к показаниям вольтметра.
9е. Если от вращения подстроечного резистора realU никак не меняется - всё выключаем и перепроверяем соединения, монтаж, пайку в части "измерителя" напряжения.
Исправляем и начинаем с пункта 1.
9ж. Через "Монитор порта" отправляем регулятору команду "TW150". Убеждаемся что вольтметр стал показывать что-то близкое к 150 вольтам.
9з. Через "Монитор порта" отправляем регулятору команду "TW100". Убеждаемся что вольтметр стал показывать что-то близкое к 100 вольтам.
На этом настройку регулятора напряжения можно считать законченным.
10. Заливаете понравившийся вам скетч и проверяете работу LCD, энкодера, кнопок и прочего.
--------------------------------------------------------------------------------------------------------------------------------------------------
Коллега Zoldrax изготовил вариант с тремя тэнами в связке с "Доступная автоматика на Ардуино Мега 2560 v2.47"
[сообщение #12784736]
--------------------------------------------------------------------------------------------------------------------------------------------------
Коллега OldBean представил вариант с подключением семисегментного индикатора без сдвиговых регистров 74HC595:
[сообщение #12819567]
--------------------------------------------------------------------------------------------------------------------------------------------------
Коллега bigson изготовил свой вариант регулятора[сообщение #12983065]
--------------------------------------------------------------------------------------------------------------------------------------------------
Коллега sevpro разработал макет печатной платы для регулятора напряжения (Трансформатор для последней версии прошивки должен подключаться НА ВЫХОД!): [сообщение #12978404]
--------------------------------------------------------------------------------------------------------------------------------------------------
Коллега Chatterbox изготовил свой вариант с датчиком тока, энкодером и записью установок в память: [сообщение #13000957]
--------------------------------------------------------------------------------------------------------------------------------------------------
Коллега dev11bk изготовил свой вариант с датчиком тока, энкодером и записью установок в память: [сообщение #13377512]
Скетч основан на нескольких, представленных в этой теме, адаптировал под свои нужды--------------------------------------------------------------------------------------------------------------------------------------------------
Коллега IlyaSPb продолжает развивать свою версию регулятора.
Версия первая: [сообщение #13179698]
Версия PMC_TT_2.0.: [сообщение #13527186]
Дополнительно выкладываю версию прошивки PMC_TT_4.19, совмещенную прошивкой, выложенной коллегой dev11bk--------------------------------------------------------------------------------------------------------------------------------------------------
Если у вас еще остались вопросы, я постараюсь ответить.
П.С. Выражаю огромное спасибо msg31, по сути это его схема и идея, просто я немного подогнал ее под свои нужды.
Так же выражаю огромную благодарность m16 за своевременные наставления.
И sevpro за консультации по схемотехнике
СПИСОК РАСПРОСТРАНЕННЫХ ВОПРОСОВ под спойлером
Скрытый текст
В. А вы можете сделать тоже самое только с перламутровыми кнопками?О. Могу, но я не занимаюсь реализацией хотелок, рассматривайте эти устройства как часть Вашего самостоятельного проекта.
В. Я не умею программировать, код для меня - ироглифы.
О. Не могу ничем помочь, либо учитесь либо просите коллег на форуме.
В. Зачем считать среднеквадратичное напряжение? Это трудно.
О. Если вы о контроллере то ему абсолютно все равно что считать, если о методе то он дает лучшие результаты ([сообщение #12649978]), если вы знаете другой метод измерения действующего значения напряжения, я с удовольствием выслушаю, если вы хотите измерять амплитудное значение, измеряйте, вам никто не запрещает.
В. Почему у вас такая громоздкая схема, все можно сделать намного проще! Нужно сделать так и вот так!
О. Проект создавался под готовое устройство, эта схема из автоматики msg31 с параллельной ветки, я сделал себе автоматику похожую по алгоритму, выделил блок питания и написал отдельный скетч. Если вы воплотите в жизнь другую схему, поделитесь, я выложу ее в шапке для всех и мы скажем спасибо.
В. У вас индусский код!!! Так делать нельзя!
О. Можно, я не программист, и уж тем более не программист микроконтроллеров. Я не скован рамками правописания программного кода. Код работает, большинству людей все равно что и как внутри крутиться если устройство выполняет свои функции. Если у вас есть замечания по коду и дельные, конкретные советы с алгоритмом, я буду рад вас выслушать. Я взрослый адекватный человек который абсолютно нормально реагирует на аргументированную критику.
В. Если вы не программист, и в электронике как я посмотрю, тоже не очень разбираетесь, зачем вообще создавать ветку???
О. Меня просто попросили довести до ума устройство которое я выкладывал ранее в параллельной ветке. Некоторыми оно востребовано, лично я успешно его использовал и использую по назначению даже не смотря на недостатки, а на то время там была просто куча ошибок.
В. Зачем фазовое регулирование? Там масса помех от которых ломаются телевизоры, глючат айфоны и лысеют коты!
О. Знаете другие доступные методы? Выслушаю, но моргающие лампочки и меня, и домашних напрягают больше. К тому же помехи можно отсечь, в интернете много информации.
В. А почему ты сделал именно так а не иначе?
О. Возможно в тот момент на меня снизошло озарение или отупение, кто знает, я не профи ни в электронике не в программировании.
П.С. Просьба не воспринимать этот спойлер на свой счет, никого конкретно я не имел ввиду, спасибо.
Если вы собрали устройство и проверили его работу ЛАТРом и обрадовались/удивились/расстроились большая просьба выложить результаты.