Простой лабораторный блок питания на Arduino — DRIVE2

Давно была необходимость использовать блок питания на различные напряжения, но руки все не доходили сделать. Однажды попался в руки трансформатор 18v-2A и было решено все-таки изготовить этот нужный прибор.

В сааамом простом варианте регулируемый блок питания можно сделать всего лишь на LM317 (или КР142ЕН12) по схеме вроде этой:

Полный размер

Самый простой блок питания в мире

Взяв за основу эту схему, я вместо потенциометра сделал набор из 6 подстроечных и одного переменного сопротивления. Управляет подключением резисторов к регулятору ATMega368(или ATMega168) через ULN2003. Таким образом в моем блоке питания появилось 6 предустановленных напряжений и возможность регулировать вручную тоже осталась. Я настроил такой ряд напряжений: 3.3в, 5в, 9в, 12в, 15в и 24в.

На выходе регулятора добавлен транзистор IRF9540 — это дало возможность программно управлять подачей напряжения на выходные клеммы.

Раз уж у нас есть мозги в БП, то, наверное, стоит добавить и LCD экран, и отображать на нем напряжение и ток. Я взял символьный экранчик Winstar 1202 русифицированный. Так же в схему добавлены узлы измерения напряжения и тока. Простой делитель напряжения R16-R17 от выходной клеммы на аналоговый вход ATMega измеряет напряжение. Другой аналоговый вход измеряет напряжение на делителе, образованным сопротивлением подключаемой нагрузки и шунтом R18, что позволяет вычислить силу тока. Два стабилитрона, позволяют защитить входы МК, если напряжение будет выше расчетных. Решение подсмотрено тут. Измерение силы тока и наличие транзистора позволило моментально отключать нагрузку в случае превышения силы тока выше заданного или коротком замыкании.

Для управления добавлены 3 тактовые кнопочки подключенные к третьему аналоговому входу.

Для питания ATMega я использовал импульсный стабилизатор, у меня сразу был готовый модуль. Наличие постоянных и стабилизированных +5В позволило добавить в БП USB гнездо для подзарядки чего-либо.

В итоге получил вот такую схему:

Полный размер

Схема умного блока питания

Плату разводил в Sprint Layout 6. Давно пытаюсь перейти на что-то другое, но нигде не встретил той простоты, что есть в SLayout. Потихоньку пытаюсь переучится на DeepTrace.

Полный размер

Плата умного блока питания

Программу МК написал, как всегда в Arduino IDE. Долгими нажатиями на «<» и «>» можно поочередно перебирать предустановленные напряжения. Кратким нажатием кнопки «Режим» включать и отключать напряжение на выходе. Краткими нажатиями «<» и «>» переключать отображение параметров: «Напряжение и ток»=>»Напряжение»=>»Ток»=>»Мощность». Долгим нажатием «Режим» можно войти в режим настройки, где также можно выбрать выходное напряжение и настроить состояние БП при включении(подавать или нет напряжение на выход сразу).

Корпус для БП тоже сделал с нуля. Разработал 3д модель в программе FreeCad и распечатал на своем 3D принтере.

Модель

Блок питания, после сборки необходимо настроить.
— Во-первых модуль lm2596 нужно ОБЯЗАТЕЛЬНО настроить на +5в еще до подключения в схему, иначе можно спалить МК.
— Далее подключить к БП мультиметр и по нему настроить все предустановленные напряжения подстроечными резисторами.
— Также по мультиметру подобрать все значения в скетче Meters (опроное напряжение, резисторы), чтобы значения были как можно более точными.

Немного фото готового изделия:

Полный размер

Рабочий режим

Полный размер

Режим превышения тока или КЗ.

Полный размер

Регулятор прикручен к мощному радиатору.

Полный размер

В собранном виде все довольно плотненько. Плату и элементы лицевой панели закрепил термоклеем.

Полный размер

Просто вид сзади.

Полный размер

На рабочем месте

Все файлы проекта можно скачать тут.

www.drive2.ru

Лабораторный блок питания на Arduino

Электропитание

Главная  Радиолюбителю  Электропитание



Этот блок предназначен для домашней лаборатории радиолюбителя. Его выходное напряжение можно регулировать от 0,5 до 15,5 В. Имеется защита от замыкания выхода или превышения допустимого тока нагрузки. Порог её срабатывания можно изменять от 0,2 до 2 А. Информация об установленных напряжении, токе нагрузки и заданном пороге срабатывания токовой защиты выводится на экран ЖКИ от сотового телефона Nokia 5110.

Блок включают и выключают нажатиями на соответствующие кнопки. Третья кнопка даёт возможность временно отключить и вновь включить напряжение на выходе блока. С её же помощью восстанавливают работоспособность блока после срабатывания токовой защиты. При простое без нагрузки более 5 мин блок отключается от сети автоматически.

Схема блока питания изображена на рис. 1. Нажатие на кнопку SB3 подключает обмотку I трансформатора T1 к сети ~230 В. Блок начинает работать, и прежде всего, программа микроконтроллера устанавливает высокий логический уровень напряжения на выходе D1 модуля Arduino Nano, обозначенного на схеме A1. Этим открывается транзистор VT1, реле K1 срабатывает и замкнувшимися контактами K1.1 шунтирует кнопку SB3, которую теперь можно отпустить.

Рис. 1. Схема блока питания

На экране ЖКИ начало работы блока отмечается заставкой в виде двух вращающихся зубчатых колёс (рис. 2), которая сменяется информацией о версии программы (рис. 3). Затем появляется основное изображение (рис. 4) со значениями выходного напряжения, тока нагрузки, отдаваемой в нагрузку мощности (программа вычисляет её как произведение первых двух параметров) и установленного тока срабатывания защиты.

Рис. 2. Заставка на экране ЖКИ

Рис. 3. Информация на экране ЖКИ

Рис. 4. Информация на экране ЖКИ

При нажатии на кнопку SB1 низкий уровень на входе D0 модуля A1 приводит к тому, что программа выводит на экран прощальное сообщение (рис. 5) и устанавливает низкий уровень на выходе D1 модуля A1. Транзистор VT1 закрывается, реле K1 размыкает контакты и этим отключает блок от сети.

Рис. 5. Сообщение на экране ЖКИ

Стабилизатор выходного напряжения собран на ОУ DA1.2 и транзисторе VT2. Коэффициент пропорциональности между установленным переменным резистором R15 задающим напряжением на неинвертирующем входе ОУ DA1.2 и выходным напряжением стабилизатора равен R19/R18+1 (3,2 при указанных на схеме номиналах резисторов R18 и R19). Эти резисторы образуют делитель выходного напряжения, часть которого поступает для измерения на аналоговый вход A6 модуля A1. Задающее напряжение получено из выведенного на вывод D6 модуля A1 образцового напряжения встроенного в этот модуль АЦП, которое можно включить или выключить программно.

Вывод D2 модуля A1 сконфигурирован программой как вход запросов её внешнего прерывания. Если ток нагрузки превысит заданный порог, напряжение на инвертирующем входе компаратора DA2 станет больше, чем на неинвертирующем. Выходной транзистор компаратора откроется и зашунтирует резисторы R9 и R15 цепи регулировки выходного напряжения блока, которое станет нулевым. Одновременно низкий уровень поступит на вход запроса прерывания программы D2. Процедура обработки прерывания выдержит паузу приблизительно 50 мс, а затем, если перегрузка не прекратилась, выключит образцовое напряжение на выходе D6. В результате выходное напряжение блока останется равным нулю и после прекращения перегрузки. Пауза необходима для предотвращения аварийных срабатываний защиты при подключении к блоку нагрузки с конденсаторами большой ёмкости. Сигналом срабатывания защиты служит изображение ладони (рис. 6) на экране ЖКИ. Чтобы вернуть блок в рабочий режим, нужно нажать на кнопку SB2.

Рис. 6. Сигнал срабатывания защиты

Во время нормальной работы блока питания нажатие на кнопку SB2 выключает образцовое напряжение на выходе D6 модуля A2, в результате чего напряжение на выходе блока падает практически до нуля. Сигнализируя об этом, изображение на экране ЖКИ HG1 станет негативным. Повторное нажатие на кнопку SB2 вернёт блок в прежнее состояние.

К аналоговому входу A7 модуля A1 подключён движок переменного резистора R2, которым регулируют порог срабатывания токовой защиты блока. Подбирая резистор R1, устанавливают минимальное значение этого порога.

Вывод D9 сконфигурирован программой микроконтроллера как выход импульсов с ШИМ. В модуле Arduino Nano частота повторения этих импульсов по умолчанию — около 490 Гц. Для удовлетворительного сглаживания импульсов, следующих с такой низкой частотой, и выделения их постоянной составляющей потребовался бы слишком сложный фильтр. Поскольку в среде разработки программ Arduino IDE стандартная функция для изменения этой частоты отсутствует, она была повышена до 3900 Гц прямым изменением константы в соответствующем регистре микроконтроллера:

TCCR1B = TCCR1B & 0b11111000 I 0x02;

Вращение ручки переменного резистора R2 изменяет коэффициент заполнения импульсов на выходе D9. Фильтр R3C1 выделяет из импульсной последовательности постоянную составляющую, которая поступает на неинвертирующий вход компаратора напряжения DA2 и задаёт порог его срабатывания. На инвертирующий вход компаратора поступает с датчика тока (резистора R20) через усилитель на ОУ DA1.1 с коэффициентом усиления 25 пропорциональное току нагрузки блоканапряжение.

Печатная плата для этого блока питания не разрабатывалась. Всё собрано на двух макетных платах размерами 50×75 мм. На одной из них установлен ЖКИ HG1 с резисторами R10-R14, на другой — всё остальное, за исключением транзистора VT2 с теплоотводом и трансформатора T1.

Трансформатор должен быть мощностью не менее 36 В·А и с напряжением на вторичной обмотке около 18 В. Контакты реле K1 должны быть рассчитаны на коммутацию переменного напряжения не менее 250 В. Если номинальное рабочее напряжение обмотки реле меньше выпрямленного диодным мостом VD1, излишек нужно погасить, включив последовательно с обмоткой реле резистор Rдоб, показанный на схеме рис. 1 штриховой линией.

К статье приложены две компьютерные программы, облегчающие подготовку изображений для вывода на графический ЖКИ. Исходные данные для них — цветные или монохроматические изображения в форматах *.BMP, *.JPG, *.PNG, *.TGA или *.TIFF. Программа GLCD84X48 Converter укладывает это изображение в размеры 84×48 пкс и преобразует его в битовый формат. Она выдаёт результат в виде текстового файла на языке C, пригодного для включения в программу микроконтроллера, и помещает его под именем grap-hics.c на рабочий стол компьютера. Программа OLED_LCD 128X64 I2C con-vertimage работает аналогично, но формирует файл для загрузки в графический дисплей с размерами экрана 128×64 пкс и интерфейсом I2C.

Программа для модуля Arduino, библиотеки к ней и программы для компьютера имеются здесь.

Автор: О. Кольчурин, г. Нижняя Тура Свердловской обл.

Дата публикации: 14.10.2017

Мнения читателей
  • андрей / 05.11.2017 — 13:57
    собрал работает .напрежение под нагрузкой держит стабильно.

Вы можете оставить свой комментарий, мнение или вопрос по приведенному вышематериалу:


www.radioradar.net

Цифровой лабораторный блок питания с управлением через ПК

Наткнулся в интернете на схему лабораторного блока питания, да еще и с управлением от компьютера, и не смог устоять. Детали решил брать в российских магазинах, потому что доллар, санкции, ну и все такое. Вот что из этого получилось…

Лабораторный блок питания нужен для запитывания различных

махараек устройств на этапе разработки. Первое подобие лабораторника я сделал лет в 16. Это был леденящий душу ужас, который, тем не менее, худо-бедно справлялся со своими функциями. Тогда я только начинал познавать электронику, и все ограничивалось кручением моторчиков. Мне бы в то время интернет и хоть какие то карманные деньги…

Первый блок питания

Потом был длительный перерыв, армия, несколько лет работы далеко от дома, но после этого периода я вернулся к этому хобби, все было гораздо серьезнее, и был изготовлен из подручных материалов этот монстр:

Фото



Он выдержал много издевательств, и жив до сих пор, но мне хотелось большего. Были мысли купить готовый у китайцев, но пока душила жаба случился кризис, а тут подвернулась эта схемка. Начал собирать компоненты. Многое нашлось в закромах (резисторы и транзисторы, импульсник от ноутбука, ненужная зарядка от телефона), но без закупки не обошлось.

Список закупленных деталей:

Чип-Дип
силовой транзистор 2SD1047 — 110 р.
конденсатор электролитический 330 мф — 2х8 р.
корпус будущего блока питания — 540 р.
итого 825 р.

Чип-нн (со ссылками не получается из-за специфики сайта)
операционный усилитель LM358N — 12 р.
конденсатор электролитический 2200 мкф. — 13 р.
винтовые терминалы 2х — 22 р.
держатель светодиода х3 — 20 р.
кнопка с фиксацией красная, здоровенная — 17 р.
шунт 0.1 ом — 30 р.
многоборотные подстроечные резисторы 470 ом х2 — 26 р.
итого 140 р.

Для любопытствующих схема.

Принцип работы сего устройства.


Ардуино следит за напряжением на выходе, за током, и посредством ШИМ пинает силовой транзистор так, чтобы блок питания выдавал установленные значения.
Блок питания умеет выдавать напряжение от 1 до 16 вольт, обеспечивать ток 0.1 — 8 ампер (при нормальном источнике напряжения) уходить в защиту и ограничивать ток. То есть его можно использовать для зарядки аккумуляторов, но я не рискнул, да и зарядник у меня уже есть. Еще одна особенность этого странного блока питания в том, что он питается от двух напряжений. Основное напряжение должно подкрепляться вольтодобавкой от батарейки, или второго блока питания. Это нужно для корректной работы операционного усилителя. Я использовал ноутбучный блок питания 19в 4А в качестве основного, и зарядку 5в 350мА от какого-то телефона в качестве добавочного питания.

Сборка.


Сборку я решил начать с пайки основной платы с расчетом забить болт, если не заработает, так как начитался комментов от криворуких, как все у них дымит, взрывается и не работает, да и к тому же я внес некоторые изменения в схему.
Для изготовления платы я купил новый лазерный принтер, чтобы наконец то освоить ЛУТ, ранее рисовал платы маркером (вот пример), тот еще геморрой. Плата получилась со второго раза, потому что в первый раз я зачем-то отзеркалил плату, чего делать было не нужно.

Окончательный результат:


Пробный запуск обнадежил, все работало как надо

После удачного запуска я принялся курочить корпус.
Начал с самого габаритного — системы охлаждения силового транзистора. За основу взял кулер от ноутбука, вколхозил это дело в заднюю часть.

Натыкал на переднюю панель кнопок управления и лампочек. Здоровенная крутилка это энкодер со встроенной кнопкой. Используется для управления и настройки. Зеленая кнопка переключает режимы индикации на дисплее, прорезь снизу для разъема юсб, три лампочки (слева направо) сигнализируют о наличии напряжения на клеммах, активации защиты при перегрузе, и об ограничении тока. Разъем между клеммами для подключения дополнительных устройств. Я втыкаю туда сверлилку для плат и резалку для оргстекла с нихромовой струной.

Засунул все кишки в корпус, подсоединил провода


После контрольного включения и калибровки закрыл крышкой.

Фото собранного

Отверстия проделаны под радиатором стабилизатора lm7805, который нехило греется. Подсос воздуха через них решил проблему охлаждения этой детали

Сзади выхлопная труба, красная кнопка включения и разъем под сетевой кабель.

Прибор обладает кое-какой точностью, китайский мультиметр с ним согласен. Конечно калибровать самопальную махарайку по китайскому мультиметру и говорить о точности достаточно смешно. Несмотря на это прибору найдется место на моем столе, так как для моих целей его вполне достаточно

Некоторые тесты

Взаимодействие с программой. На ней в реальном времени отображается напряжение и ток в виде графиков, так же с помощью этой программы можно управлять блоком питания.

К блоку питания подключена 12-вольтовая лампа накаливания и амперметр. Внутренний амперметр после подстройки работает сносно

Измерим напряжение на клеммах. Великолепно.

В прошивке реализована ваттосчиталка. К блоку подключена все та же лампочка на 12 вольт, на цоколе которой написано «21W». Не самый паршивый результат.

Изделием доволен на все сто, поэтому и пишу обзор. Может кому-то из читателей нехватает такого блока питания.

О магазинах:
Чип-нн порадовал скоростью доставки, но ассортимент маловат на мой взгляд. Этакий интернет магазин, аналогичный арадиомагазину в среднем городке. Цены ниже, кое на что в разы.
Чип-дип… закупил там то, чего не было в чип-нн, иначе б не сунулся. розница дороговата, но все есть.

Мои исходники:
Переделанная схема в протеусе+печатная плата

Животное

животных под руку не подвернулось, есть искусственный слон с испорченной платой для этого блока питания

mysku.ru

Управление нагрузкой с Arduino | simplea.ru

Управление электрической нагрузкой с помощью Arduino ( реле, транзисторы, диммеры).

Эта статья посвещенна в основном тем экпериментаторам, которые уже попробовали моргать светодиодыми с помощью Arduino и хотели бы попробовать применить свои контроллеры и приобретенные знания для более серьезных и полезных вещей. Также она будет интересная людям желающим систематизировать свои знания относительно возможности управления силовой нагрузкой и коммутации электрических цепей с помощью одноплатных контроллеров Arduino и им подобных плат.

Для начала давайте рассмотрим характеристики платы. Для примера возьмем Arduino Nano :

Микроконтроллер Atmel ATmega168 или ATmega328
Рабочее напряжение (логическая уровень) 5 В
Входное напряжение (рекомендуемое) 7-12 В
Входное напряжение (предельное) 6-20 В
Цифровые Входы/Выходы 14 (6 из которых могут использоваться как выходы ШИМ)
Аналоговые входы 8
Постоянный ток через вход/выход 40 мА
Флеш-память 16 Кб (ATmega168) или 32 Кб (ATmega328) при этом 2 Кб используются для загрузчика
ОЗУ 1 Кб (ATmega168) или 2 Кб (ATmega328)
EEPROM 512 байт (ATmega168) или 1 Кб (ATmega328)
Тактовая частота 16 МГц
Размеры 1.85 см x 4.2 см

Питание контроллера осуществляется через mini-USB или от нерегулируемого источника 6-20В ( вход Vin соединенный со табилизатором напряжения).

Некоторые входы Arduino дуплексированны, тоесть могут выполнять несколько функций, например Pin 3, 5, 6, 9, 10, и 11 помимо возможности дискретных входов и выходов ( задается программно) может выполнять функцию ШИМ с разрешением 8 бит и это пригодится нам чуть позже. максимальные выходные характеристики выходов контроллера 5В при токе 40мА

Вернемся к теме данной статьи, первым и самым простым методом управления нагрузкой как постоянного, так и переменного тока является реле. Суть работы которого заключается в управлении контактной группой на выходе ( 11, 12, 14), подачей напряжения на катушку на входе ( А1, А2 ), которая по средствам магнитной силы двигает свой сердечник в свою очередь механически связанный с контактной группой. У реле есть один большой плюс – это гальваническая развязка между силовой цепью которую оно коммутирует и цепью управления, которая чаще всего низковольтная, в нашем случае катушка реле управляется 5V постоянного тока (DC) напрямую с любого выхода Arduino. Выходная контактная группа обычно состоит из 3 контактов: общий контакт, нормально закрытый NC, и нормально открытый NO. Общая схема реле выглядит следующим образом.

Сборка из 4 реле.

Таким образов с помощью реле можно коммутировать нагрузку до 10 А ( согласно спецификации самого реле). Для программной реализации используется функция: digitalWrite(pin, value). Где value принимает значение HIGH или LOW. Практическая схема, а также программа для управления лампой 250W 220V приведена в статье обогрев птичника.

Если же необходимо плавное управление нагрузкой, подходящим инструментом бедет ШИМ регулирование. Как известно выходы ардуино не могут выдавать аналоговых значений в диапазоне 0…5 В, но возможно менять скважность сигнала тем самым получая эффект плавно рагулировки яркости светодиода или скорости электромоторчика. В программе используется функция: analogWrite(pin, value) , в которой value принимает значение от 0…255 ( переод работы цикла). Частота же ШИМ сигнала приблизительно 490 Hz.

Для плавной регулировки яркости более мощной нагрузки (постоянного тока), чем обычный светодиод нам понадобится транзисто. Есть как готовые сборки ( драйверы) с транзиторами для Arduino. Пример использования транзистора в статье освещение прихожей, но также довольно просты в использовании простые транзисторы, цена их будет значительно ниже. В примере будет рассмотрен полевой транзистор STP16NF06 . Это N канальный транзистор, что значит без напряжения на затворе транзистор будет закрыт. Суть прибора заключается в управлении проводимостью канала сток – исток с помощью небольшого напряжения на затворе. Ниже фото устройства собранного мной для управления светододными лентами.

Сток ( drain ) – подача высокого напряжения
Затвор ( gate ) – управляющее напряжения с вых Arduino
Исток ( source ) – протекает ток со стока, когда транзистор открыт

Для наглядности привожу одну из своих схем по управлению светодиодными лентами.

Datasheet на транзистор также прикладываю к этой статье. Наиболее интересующие нас пареметры :

Vds – максивальное напряжение сток — исток 60 В
Pd – рассеиваемая мощность 45 Вт
Id – максимальный ток через транзистор 16 А
Vgs.th – пороговое V затвор-исток 20 В
Vgs – напряжение затвор-исток 2-4 В    

Vgs.th – должно быть в нашем случае не выше 5В. Vgs должно быть не меньше напряжения управляющего сигнала. Чтобы убедиться пропустит ли транзистор достаточный ток при подаче 5В от ардуино достаточно посмотреть на характеристику Id(Vgs).

Также обратите внимание что рассеивающая способность зависит от типа корпуса, для корпуса TO-220 она выше.

Существуют более специфичные схемы управления нагрузкой, например для управления мощными светодиодами, которые приобретают все большую поплярность. Пример такого управления я приводил в статье посвещенной фитолампам (управление умной фитолампой). Особенность этих светодиодов заключается в отсутсвии токоограничивающих резисторов в цепи светодиода, значит постоянное значение тока 300mA для 1W светодиодов и до 700mA для 3W светододов должен поддерживать драйвер. При этом драйвер должен изменять значение своего выходного напряжения в зависимости от количества подключаемых светодиодов, так как светодиоды подключаются последовательно величина напряжения будет равна сумме падений напряжения на каждом светододе для 3W светодиодов это порядка 3V, значит для 5 светодиодов нам понадобится 15V на выходе драйвера и 700mA соответсвенно. Для уравления такими светодиодами я использую драйвер LDD-700H. Есть модификации как для установки на плату так и для наружной установки.

Устройсво имеет сравнительно невысокую стоимость и высокое качество сборки. Часто блоки питания и драйверы Mean well используются в промышленной автоматике.

Интересующие нас параметры:

Входное напряжение DC 9…56 В
Выходное напрядение 2…52 Вт
Постоянный выходной ток ток 600 мА
Вход диммирования 0.8…6 В

Устройство имеет вход для диммирования состояние выкл при V 2.5V DC. Таким образом драйвер можно напрямую подключать к платам ардуино с выходом ШИМ 5V.

Это все методы коммутации нагрузки, которые я хотле рассмотреть сегодня, конечно существуют и други схемы, с применением контакторов, импульсных реле и твердотельных реле, но о них я напишу в слюдеющей статье.


Драйвера мощных светодиодов meanwell LDD-700H datasheet приобрести можно на Aliexpress
Транзистор N канальный STP16NF06 MOSFET datasheet
Сборка из 4 реле, Aliexpress.

simplea.ru

Мощный лабораторный блок питания

Не так давно приобрёл паяльную станцию. Давно занимаюсь любительской электроникой, и вот настал момент когда точно осознал что пора. До этого пользовался батиным самопальным блоком, совмещавшим лабораторный блок питания и блок питания низковольтного паяльника. И вот встала передо мной проблема: паяльную станцию я ставлю, а старый блок держать ради хилого и не точного блока питания 0-30в 3А или таки купить нечто современное, с защитой по току и цифровыми индикаторами? Поползав по ебею понял что максимум что мне светит это за 7-10 тыс купить Китайский блок с током максимум в 5А. Жаба сказала своё веское «ква», руки зачесались и…

Теперь к сути. Сформировал требования к блоку: минимум 0-30В, при токах минимум 10А, с регулируемой защитой по току, и с точностью регулировки по напряжению 0.1В. И что б стало ещё интереснее — 2 канала, пусть и от общей земли. Установка напряжения должна быть цифровой, т.е. никаких переменных резисторов, только энкодеры. Фиксированные установки напряжения и запоминание — опционально.

Для индикации состояния выхода были выбраны цифровые китайские комбинированные индикаторы на ЖК, с диапазоном до 199В с точностью 0.1В и до 20А с точностью 0.01А. Что меня полностью устроило. А вот что забыл, так это прикупить к ним шунты, т.к. по наивности думал что они будут в комплекте.

Для первичного преобразования напряжения думал использовать обычный трансформатор с отводами через каждые 6В, коммутируемый релюшками с контроллера, а для регулировки выхода простой эмиттерный повторитель. И всё бы ничего, но когда узнал стоимость и габариты такого трансформатора (30В * 10А = 300вт), то понял что надо быть современнее и использовать импульсные блоки питания.

Пробежавшись по предложениям понял что ничего толкового на мои токи нет, а если и есть, то жаба категорически против. В связи с этим пришла мысль попробовать использовать компьютерные блоки питания, коих всегда у любого ITшника предостаточно. Были откопаны блоки по 350Вт, что обещало 22А по +5В ветке и 16А по 12В. Пробежавшись по интернету нашёл много противоречивых мнений по поводу последовательного соединения блоков, и нашёл умную статью на Радиокоте как это сделать правильно. Но перед этим решил рискнуть и таки взять и нахрапом соединить блоки последовательно, дав нагрузку.

… И получилось!
На фото последовательно соединены 3 блока. Де-факто на выходе 35В, 10.6А.

Далее возник вопрос: каким контроллером управлять. По идее ATMega328 тут идёт за глаза, но ЦАПы… Посчитав почём обойдётся хотя б 2 ЦАПа на 12 бит и посмотрев характеристики Arduino DUE с ними на борту, а так же сравнив кол-во требуемых ПИНов, понял что проще и дешевле и быстрее будет просто поставить эту ардуину в блок целиком, вместе с платой.

Постепенно на макетках родилась схема. Приведу её в общем виде, только для одного канала:

Схема бьётся на несколько функциональных блоков: Набор блоков питания ATX, блок коммутации БП, блок усилителя напряжения ЦАП Arduino, блок усилителя напряжения токового шунта, блок ограничения напряжения по заданному току.

Блок коммутации БП: В зависимости от заданного пользователем напряжения Ардуино выбирает какую ветку задействовать. Выбирается минимальная по напряжению ветка, на минимум +3В большая заданного. 3В остаются на неточности установки напряжения в блоках питания + ~1.2В просада напряжения на переходах транзистора + не большой запас. Одновременно задействованный ключ ветки активирует тот или иной блок питания. Например задав 24В надо активировать все 3 блока питания и подключить выход на +5в 3-го в цепочке, что даст на коллекторе выходного транзистора VT1 +29В, тем самым минимизируя выделяемую тепловую мощность транзистора.

Блок усилителя напряжения: Реализован на операционном усилителе OP1. ОУ используется Rail-to-Rail, однополярый, с большим напряжением питания, в моём случае — AD823. Причём выход ЦАП Ардуино имеет смещение нулевой точки = 0.54В. Т.е. если Вы задаёте напряжение выхода = 0, на выходе де-факто будет присутствовать 0.54В. Но нас это не устраивает, т.к. ОУ усиливает с 0, и напряжение тоже хочется регулировать с 0. Поэтому применён подстроечный резистор R1, вычитающий напряжение. А отдельный стабилизатор на -5В, вместо использования -5В ветки блока питания, используется ввиду нестабильности выдаваемого блоком питания напряжения, меняющимся под нагрузкой. Выход же ОУ охвачен обратной связью с выхода VT1, это сделано что б ОУ сам компенсировал изменения напряжения в зависимости от нагрузки на выходе.

Кстати, о AD823 из Китая по Ебею: день промучился, понять не мог, почему схема не работает от 0 на входе. Если больше 1.5В то всё становится нормально, а иначе всё напряжение питания. Уже подумав что сам дурак, нарвался на рассказ как человек вместо AD823 получил с Китая подделку. Тут же поехал в соседний магазин, купил там, поставил и… О чудо — всё сразу заработало как надо. Игра, найди отличия (подделка в кроватке, справа оригинал. Забавно что подделка выглядит лучше):

Далее усилитель напряжение токового шунта. Поскольку токовый шунт достаточно мощный, то и падение напряжения на нём мало, особенно на малых токах. Поэтому добавлен OP2, служащий для усиления напряжения падения шунта. Причём от быстродействия этого ОУ зависит скорость срабатывания предохранителя.

Сам предохранитель, а точнее блок ограничения тока, реализован на компараторе OP2. Усиленное напряжение, соответствующее протекаемому току, сравнивается с напряжением, установленным электронным потенциометром и если оно выше — компаратором открывается VT2, и тот сбрасывает напряжение на базе выходного транзистора, по сути выключая выход. В работе это выглядит так:

Теперь к тому, почему в качестве шунта у меня дроссель. Всё просто: как я писал раньше — я просто забыл заказать шунты. А когда уже собирал блок и это выявилось, то ждать с Китая показалось долго, а в магазине дорого. Поэтому не долго думая, порылся в распайке старых компьютерных блоков питания и нашёл дроссели, почти точно подошедшие по сопротивлению. Чуть подобрал и поставил. Дополнительно же это даёт защиту: В случае резкого изменения нагрузки, дроссель сглаживает ток на время, достаточное что б успел отработать ограничитель тока. Это даёт отличную защиту от КЗ, но есть и минус — импульсные нагрузки «сводят блок с ума». Впрочем, для меня это оказалось не критично.

В итоге у меня получился вот такой блок питания:

Надписи на лицевой части сделаны с помощью ЛУТа. Индикаторы работы блоков питания выведены на 2-х цветный светодиод. Где красный запитан от дежурных +5в и показывают что блок готов к работе. А зелёный от Power_Good, и показывает что блок задействован и исправен. В свою очередь транзисторная развязка обеспечивает гашение красного светодиода и если у блока проблема — потухнет и красный и зелёный:

Маленькие экраны показывают заданные параметры, большие — состояние выхода де-факто. Энкодерами вращением устанавливается напряжение, короткое нажатие — вкл/выкл нагрузки, длинное — выбор режима установки напряжения/максимального тока. Ток ограничен 12.5А на канал. Реально в сумме 15 снимается. Впрочем — на той же элементной базе, с заменой блоков питания на нечто 500-т Ваттное, можно снимать и по 20. Не знаю, стоит ли приводить тут код скетча, простыня большая и достаточно глупая, + везде торчат хвосты под недоделанный функционал вроде коррекции выходного напряжения по АЦП обратной связи и регулировки скорости вентилятора.

Напоследок, пара слов. Оказалось что Arduino DUE при включении после длительного простоя может не начать выполнять программу. Т.е. включаем плату, думаем что сейчас начнёт выполняться наша программа, а в ответ тишина, пока не нажмёшь reset. И всё бы ничего, но внутри корпуса reset нажимать несколько затруднительно.
Поискал по форуму, несколько человек столкнулось с такой же проблемой, но решения не нашли. Ждут когда разработчики поправят проблему. Мне ждать было лениво, поэтому пришлось решать проблему самому. А решение нашлось до безобразия примитивное, впаять электролитический конденсатор на 22мкФ в параллель кнопке. В результате, на момент запуска, пока идёт заряд этого конденсатора, имитируется нажатие кнопки reset. Отлично работает, прошиваться не мешает:

В заключение:
По-хорошему надо повесить на все радиаторы датчики температуры и регулировать скорость вентилятора в зависимости от температуры, но пока меня устроила и платка регулятора скорости вентилятора из какого-то FSPшного блока питания.

Ещё хотелось бы через АЦП обратную связь с блоком коммутации на случай залипания релюшки, а так же обратную связь по выходу, дабы компенсировать температурный дрейф подстроечных резисторов (в пределах 0.1в на больших напряжениях бывают отклонения).

А вот кнопки памяти и фиксированные настройки по опыту использования кажутся чем-то не нужным.

Автор: Skiffrusspb

Источник

www.pvsm.ru

Источник тока управляемый Arduino — StopTest.ru

// Arduino NANO V3, Atmega 328P,  robotdyn.com

//Барт Дмитрий, Stoptest.ru, апрель 2018

/******************************************/

#include <MsTimer2.h>        // библиотека для конфигурирования аппаратного прерывания от Таймера 2  

#include <OneWire.h>         // библиотека для управления устройствами по Протоколу 1-Wire (DS18B20)

OneWire DS18B20(11);             // подключаем датчик к выводу 11 платы

#define POWER_MODE 0             // режим питания датчика DS18B20 (0 значит с внешним питанием)

#define TEMP_MEASURE_PERIOD 200  // период измерения температуры с учетом коэффициента 10 (200 — значит 2000 мс)

#define ALARM_TEMPERATURE 50     // температура включения аварийного звукового сигнала

#define COOLER 6                 // обозначим вывод, управляющий вентилятором

#define COOLER_START 35          // температура включения вентилятора

#define COOLER_STOP 30           // температура вЫключения вентилятора

#define CRYSTAL_TEMP_LIMIT 175   // максимально-допустимая температура кристалла транзистора

#define JUNCTION_TO_SINK 4       // тепловое сопротивление кристал-радиатор, градус/Ватт, с учетом теплопроводящей прокладки

 

#define LED_GREEN 3              // обозначим вывод платы, управляющий зеленым светодиодом

#define LED_YELLOW 4             // обозначим вывод платы, управляющий желтым светодиодом

#define RELAY 12                 // обозначим вывод платы, управляющий реле

#define BEEP 5                   // обозначим вывод платы, управляющий излучателем звука

 

#define CHANNEL_A1 2             // обозначим аналоговый вход платы, который измеряет напряжение канала А1

#define CHANNEL_A2 1             // обозначим аналоговый вход платы, который измеряет напряжение канала А2

#define CHANNEL_B1 0             // обозначим аналоговый вход платы, который измеряет напряжение канала В1

 

#define A 10                     // определяем: канал А управляется ШИМ с вывода 10 платы Arduino Nano

#define B 9                      // определяем: канал B управляется ШИМ с вывода 9 платы Arduino Nano

 

#define CURRENT_PULSE 1          // задаем значение тока в импульсе для проверки скорости установления тока

 

uint8_t symbol, temperature;        // переменные типа uint8_t (значения от 0 до 255)

uint16_t timeCount,

timeCount1, timeCount2;             // счетчики времени с шагом 10 мс

boolean sensStatFlag, showTemp,

beepOn, beepFlag, alarmTempFlag,

currentPulseOn, currentFlag,

checkFlag, alarmCrystalFlag;        // логические переменные

float Ua1, Ua2, Ub1, current;   // переменные типа float для чисел с плавающей точкой

byte data[9];                       // массив для размещения девяти байт из памяти датчика DS18B20

 

float currentCheck[2],

crystalPower[2], crystalTemp[2];    // задаем массивы для хранения соответствующих значений по двум каналам

                      

void setup() {  

  Serial.begin(115200);                 // инициализируем работу с монитором порта в Arduino IDE

  TCCR1A = TCCR1A & 0xe0 | 1;           // устанавливаем режим ШИМ 82 кГц

  TCCR1B = TCCR1B & 0xe0 | 0x09;        

  analogWrite(B, 0);                    // ШИМ на выводе 9 (канал B), начальное значение ноль

  analogWrite(A, 0);                    // ШИМ на выводе 10 (канал А), начальное значение ноль

  pinMode(COOLER, OUTPUT);

  pinMode(LED_GREEN, OUTPUT);

  pinMode(LED_YELLOW, OUTPUT);

  pinMode(RELAY, OUTPUT);

  pinMode(BEEP, OUTPUT);

  MsTimer2::set(10, timerInterrupt);    // обозначим прерывания по таймеру с периодом 10 мс и обработчиком timerInterrupt

  MsTimer2::start();                    // разрешение прерывания

  analogReference(INTERNAL);            // задаем опорное напряжение АЦП:

}                                       // INTERNAL-1.1V (внутреннее), DEFAUL-5V(от питания), EXTERNAL-внешнее

 

 

void serialEvent()  {                          // функция вызывается при вводе любых символов в монитор порта Arduino IDE

  symbol = Serial.read();                      // значение кода ASCII, введенного символа, присваиваем переменной symbol

  

  if ((symbol==43)&(currentPulseOn==0)) {      // символ ‘+’ увеличивает ток при каждом вводе на 0.1 А

    current = current + 0.1;                   // увеличиваем ток на 0.1 А

      if (current > 4.9) {                     // не позволяем задать ток более 4.9 А

        current = 4.9;

        Serial.println(«Ток не может быть БОЛЬШЕ 4.9 АМПЕР»);

      }

      else {

        Serial.print(«Установленный ток: «);

        Serial.print(current,1);               // выводим задаваемый ток в монитор порта Arduino IDE

        Serial.println(» А;»);

        currentSet(A, current);                // вызываем функцию установки тока в канале А

        currentSet(B, current);                // вызываем функцию установки тока в канале В

      }

  }

  if ((symbol==45)&(currentPulseOn==0)) {      // символ ‘-‘ уменьшает ток при каждом вводе на 0.1 А

    current = current — 0.1;                   // уменьшаем ток на 0.1 А

      if (current < 0) {                       // не позволяем задать ток менее 0 А

        current = 0;

        Serial.println(«Ток не может быть МЕНЬШЕ НУЛЯ»);

      }

      else {

        Serial.print(«Установленный ток: «);

        Serial.print(current,1);

        Serial.println(» А;»);

        currentSet(A, current);

        currentSet(B, current);

      }

  }

  if ((symbol >= 48)&(symbol < 53)&(currentPulseOn==0)) {      // устанавливает ток грубо цифрами на клавиатуре от 1 до 4

    current = symbol — 48;                                        

    Serial.print(«Установленный ток: «);

    Serial.print(current,1);

    Serial.println(» А;»);

    currentSet(A, current);

    currentSet(B, current);

  }

  if (symbol==116) {                           // используем символ «t» — команда на вывод температуры радиатора в монитор порта

    showTemp = 1;                              // устанавливаем флаг процедуры вывода температуры

    Serial.println(«ВНИМАНИЕ. Включено отображение температуры радиатора»);

  }  

  if (symbol==117) {                           // символ «u», однократно измеряем напряжение в канале А по двум цепям и в канале B

    Ua1 = ReadVoltage(CHANNEL_A1);

    Ua2 = ReadVoltage(CHANNEL_A2);

    Ub1 = ReadVoltage(CHANNEL_B1);

    Serial.print(«Напряжение в канале А1: «);

    Serial.print(Ua1,2);

    Serial.println(» В»);

    Serial.print(«Напряжение в канале А2: «);

    Serial.print(Ua2,2);

    Serial.println(» В»);

    Serial.print(«Напряжение в канале В1: «);

    Serial.print(Ub1,2);

    Serial.println(» В»);

  }

  if (symbol==103) {                                     // символ «g», включаем зеленый светодиод

    digitalWrite(LED_GREEN,1);                          

    Serial.println(«Включен зеленый светодиод»);

  }

  if (symbol==121) {                                     // символ «y», включаем желтый светодиод

    digitalWrite(LED_YELLOW,1);                          

    Serial.println(«Включен желтый светодиод»);

  }

  if (symbol==114) {                                     // символ «r», включаем реле

    digitalWrite(RELAY,1);                              

    Serial.println(«Включено Реле»);

  }

  if (symbol==98) {                                      // символ «b», включаем прерывистый звуковой сигнал

    beepOn = 1;                                          // устанавливаем флаг для режима звукового сигнала

    Serial.println(«Включен прерывистый звуковой сигнал»);

  }

  if (symbol==112) {                                     // символ «p», включаем пульсирующий ток для тестирования

    currentPulseOn = 1;                                  // устанавливаем флаг для режима пульсирующего тока

    current = 0;                                         // сбрасываем переменную ручной установки тока

    Serial.println(«Включен режим пульсирующего тока в каналах А и В.»);

    Serial.print(«Ток в импульсе: «);

    Serial.print(CURRENT_PULSE);

    Serial.println(» А»);

    Serial.println(«Период импульсов 20 мс»);

  }

  if (symbol==115) {                                     // символ «s» останавливает все процедуры, кроме защитных

    showTemp = 0;                                        // прекратить вывод температуры радиатора

    beepOn = 0;                                          // прекратить подачу звуковых сигналов

    currentPulseOn = 0;                                  // прекратить работу в импульсном режиме

    current = 0;                                         // сбрасываем переменную ручной установки тока

    currentSet(A, current);                              // установить нулевой ток в канале А

    currentSet(B, current);                              // установить нулевой ток в канале B

    digitalWrite(LED_GREEN,0);

    digitalWrite(LED_YELLOW,0);

    digitalWrite(RELAY,0);

    Serial.println(«ВСЕ режимы отключены.»);

  }  

}

 

void loop() {  

                                            

  if (sensStatFlag==0) {                     // флаг статуса датчика температуры, если 0 то датчик готов к процессу преобр.температуры

    DS18B20.reset();                         // инициализация датчика

    DS18B20.write(0xCC, POWER_MODE);         // 0xCC — команда пропуск ROM так как датчик один

    DS18B20.write(0x44, POWER_MODE);         // 0х44 — команда на выполнение преобразования температуры

    sensStatFlag = !sensStatFlag;            // установим флаг, запущен процесс преобразования температуры, к датчику обращаться нельзя

    timeCount = 0;                           // начинаем отсчет времени, счетчик установлен в обработчике прерывания, считает по 10 мс

  }

  if (timeCount >= TEMP_MEASURE_PERIOD) {    // условие, выполняющееся если прошел период времени, превышающий TEMP_MEASURE_PERIOD  

    DS18B20.reset();                         // инициализация датчика

    DS18B20.write(0xCC, POWER_MODE);         // команда пропуск ROM так как датчик один

    DS18B20.write(0xBE, POWER_MODE);         // 0хBE — команда чтения памяти

    DS18B20.read_bytes(data, 9);             // читаем девять байт из памяти датчика побайтно и сохраняем в массив data

    int16_t raw = (data[1]<<8)|data[0];      // обработка байтов регистра измер-ой темп-ры (операция сдвига, операция ИЛИ)

    temperature = raw / 16;                  // преобразуем полученные данные в целое значение температуры в градусах Цельсия

    sensStatFlag = !sensStatFlag;            // сбросим флаг статуса датчика температуры, теперь он готов к следующему измерению  

      if (temperature >= COOLER_START) {    

        digitalWrite(COOLER,1);                         // включаем охлаждение

      }

      if (temperature < COOLER_STOP) {      

        digitalWrite(COOLER,0);                         // вЫключаем охлаждение

      }

      if (showTemp==1) {                                // выводим значения температур

        Serial.print(«Температура радиатора: «);

        Serial.println(temperature,1);                  // выводим измеренную температуру радиатора в монитор порта

        

        Serial.print(«Температура/мощность на кристалле A: «);

        Serial.print(crystalTemp[1],1);               // выводим рассчитанную температуру кристалла транзистора в монитор порта

        Serial.print(» / «);  

        Serial.println(crystalPower[1],1);            // выводим рассчитанную рассеиваемую мощность на транзисторе

        

        Serial.print(«Температура/мощность на кристалле B: «);

        Serial.print(crystalTemp[0],1);

        Serial.print(» / «);  

        Serial.println(crystalPower[0],1);

        Serial.println();  

      }

  }

  if (temperature >= ALARM_TEMPERATURE) {               // если температура радиатора превышает критическую

    currentSet(A, 0);                                   // отключаем ток в канале А

    currentSet(B, 0);                                   // отключаем ток в канале В

    beepOn = 1;                                         // включаем звуковой сигнал

    alarmTempFlag = 1;                                  // устан. флаг, показывающий что произошел перегрев радиатора

    

  }

  else if ((temperature < ALARM_TEMPERATURE)&(alarmTempFlag == 1)) {  // если темп. радиатора снизилась до безоп. значения

    beepOn = 0;                                                       // отключаем звуковой сигнал  

    alarmTempFlag = 0;    

  }

}

void  timerInterrupt() {                                // обработчик прерывания с периодом 10 мс

   timeCount++;                                         // счетчик    

   timeCount1++;                                        // еще один счетчик  

   timeCount2++;                                        // еще один счетчик

  

   //*** защита от превышения допустимой мощности на транзисторе, расчитывается каждые 20 мс на каждом транзисторе

   checkFlag = !checkFlag;                              // каждые 10 мс переменная меняет свое значение на противоположное (0 или 1)

   crystalPower[checkFlag] =                            // вычислим рассеиваемую мощность на кристалле

   currentCheck[checkFlag] * ReadVoltage(checkFlag*2);

   crystalTemp[checkFlag] =                             // выислим температуру кристалла

   JUNCTION_TO_SINK * crystalPower[checkFlag] + temperature;

  

   if (crystalTemp[checkFlag] > CRYSTAL_TEMP_LIMIT ) {  // если превышена рассчетная температура кристалла транзистора

     currentSet(A, 0);                                  // отключаем ток в канале А

     currentSet(B, 0);                                  // отключаем ток в канале В

     beepOn = 1;                                        // включаем сигнал аварии

     alarmCrystalFlag = 1;                              // устанавливаем флаг превышения температуры кристалла транзистора

     timeCount2 = 0;                                    // обнуляем счетчик для отсчета времени работы аварийного сигнала

     showTemp = 0;                                      // прекратить периодический вывод температуры

     current = 0;                                       // сбрасываем переменную ручной установки тока

     Serial.println(«ВНИМАНИЕ. Превышение допустимой мощности на транзисторе»);

     Serial.print(«Температура/мощность на кристалле: «);

     Serial.print(crystalTemp[checkFlag],1);

     Serial.print(» / «);  

     Serial.println(crystalPower[checkFlag],1);  

   }

   else if ((crystalTemp[checkFlag] < CRYSTAL_TEMP_LIMIT)&(alarmCrystalFlag == 1)&(timeCount2 > 500)) {

     beepOn = 0;

     alarmCrystalFlag = 0;

   }

    

   //*** прерывистый звуковой сигнал

   if (beepOn==1) {

     if (timeCount1 > 10) {

      timeCount1 = 0;

      beepFlag = !beepFlag;

      digitalWrite(BEEP,beepFlag);          // формируем прерывистый звуковой сигнал  

     }

   }

   else {

     digitalWrite(BEEP,0);                  // выключаем прерывистый звуковой сигнал

   }

  

   //*** режим импульсного тока

   if (currentPulseOn==1) {                            // проверка скорости установки тока, проверяем на осциллографе

     currentFlag = !currentFlag;

     currentSet(A, CURRENT_PULSE * currentFlag);  // период следования импульсов тока 20 мс

   }

}

 

float ReadVoltage(int pin){           // функция измерения напряжения с усреднением 20, в функцию передаем необходимый вход АЦП

  uint8_t n;

  float averageU, sumU, k;

    for (n = 0; n < 20; n++)  {

      sumU+=analogRead(pin);

    }  

    switch (pin)  {                   // из-за разброса параметров резистивных делителей используем разные поправочные коэффициенты

      case 0:      

        k = 0.01730;                  // коэффициент для измеренного напряжения в канале В1 (на выводе А0 платы Arduino)

        break;

      case 1:

        k = 0.01723;                  // коэффициент для измеренного напряжения в канале А2 (на выводе А1 платы Arduino)

        break;

      case 2:

        k = 0.01728;                  // коэффициент для измеренного напряжения в канале А1 (на выводе А2 платы Arduino)

        break;

    }

  averageU = k * sumU/20;

  return averageU;                    // функция возвращает измеренное усредненное значение напряжения

}

void currentSet(int channel, float cur) {  // функция установки тока, передаем ей канал и необходимый ток в данном канале

  analogWrite(channel, cur*51.0);

  currentCheck[channel-9] = cur;           // передаем текущий установленный ток в массив значений токов поканально для проверки

}

stoptest.ru

Ардуино нано питание: варианты подключения, схемы

Ардуино – одна из популярнейших систем упрощенного проектирования материнских плат для инженеров. Такому статусу она обязана своей простоте, относительно программной и аппаратной составляющей, ведь что первое, что второе – уже предоставляется пользователю на блюдечке, а ему остается лишь скомбинировать их по своему желанию. Получается такой конструктор, с целым рядом микроконтроллеров, под различные ситуации, что также увеличивает вариативность его применения.

Давайте же разберёмся в одной из основ создания проектов, а именно, как подключать на Ардуино нано питание и с какими нюансами вы столкнетесь по ходу этого процесса.

Способы питания Ардуино

Как уже упоминалось, система крайне вариативна, и это в ней заложено самими создателями. А соответственно, она должна быть готова к разным ситуациям и вариантам эксплуатации, чтобы «неловкий» пользователь не сломал что-то ненароком. Или, что происходит чаще, ему не приходилось самостоятельно проектировать материнскую плату под нюансы каждой системы.

Отклоняясь от темы, упомянем, что последнее всё же приходится делать, и, создавая полностью авторские разработки, вам придется докупать резисторы, транзисторы и прочую утварь, но в большинстве случаев – такой подход архаичен и в нем нет необходимости.

А всё дело в том, что на Ардуино питание выстроено специальным образом, позволяющим работать с различными источниками питания, а соответственно, и с некоторой областью характеристик тока, вместо четких значений у аналогов системы. Именно этим питание Аrduino nano и подкупает большинство новичков, а вот более продвинутым пользователям такое решение кажется спорным и может вызывать в их сообществе множество дискуссий.

Почему так происходит, вы поймете сами, как только наработаете определённый опыт в проектировании систем и начнете делать более серьезные вещи, но к тому моменту, скорее всего, надобность в использовании Ардуино у вас и вовсе отпадет.

Если говорить более конкретно, то питание на Ардуино может подключаться через три различных источника:

  1. Mini В USB, когда вы тестируете проект на ПК. Это крайне важный и удобный момент, ведь нет необходимости, при программировании и тестировании вашего продукта, подводить ток дополнительно, что экономит силы. А наличие систем, позволяющих через такой источник регулировать характеристики тока, упрощает некоторые задачи.
  2. Непосредственно через нерегулируемые источники в 6-20 вольт. Это происходит через 30 пин, и подобно выходу на цифровой сигнал, данный вход воспринимает весь диапазон. Удобно в некоторых случаях, подробнее о которых вы можете узнать, когда начнете разбирать проекты на системе.
  3. Через регулируемые источники в 5 вольт. Это стандартный и часто используемый способ подавать питание на Аrduino uno. В нем есть небольшой недостаток, заключающийся в том, что вам потребуется как-то преобразовать входное напряжение к 5 вольтам, но решений данной задачи уже множество, и все их вы можете найти в открытом доступе на нашем сайте. Данный вход находится на 27 пине.

У нано лишь три входа, описанных выше, и это стоит учитывать при проектировании систем. Также учтите, что если одновременно подключиться к каждому, то плата на программном уровне выберет в качестве источника питания тот, у которого выше всего напряжение, а остальные заблокирует.

Удобство такого решения и объяснять не стоит. Внешние источники питания дополнительно стабилизируются при помощи LM1117IMPX-5.0 с 5В напряжения, а при подключении к компьютеру система начинает использовать диод Шоттки, чтобы регулировать поступающий ток (см. схему выше).

Характеристики питания для Ардуино

Итак, мы оговорили все способы, как подключить питание на Аrduino, и затронули характеристики последнего, которые необходимы, чтобы плата не сгорела и могла исправно выполнять поставленные задачи. Заранее стоит оговориться, что последнее, в принципе, маловероятно, так как, несмотря на то, что питание Ардуино от Ардуино может иметь различные характеристики, микроконтроллер всё же более строго относится к нему, чем это сделала бы какая-то «болванка», которой вы бы захотели его заменить.

Мы уже говорили, что у ограничений есть свои недостатки и достоинства, поэтому здесь вам придется самостоятельно решать, является ли такой подход удобным для вашего проекта или нет.

В любом случае, подключенное питание лучше регулировать под заданные характеристики по возможности, поэтому в документации некоторых проектов указывают, как правильно выстроить электросхему, чтобы конечный ток поступал в строго ограниченных количествах и регулировался в плане напряжения.

Последнее уже было упомянуто, и то, каким оно должно быть, мы уяснили, но как же сила тока? Ведь это не менее важный нюанс, который стоит заранее учитывать при создании сложных систем, особенно с большим количеством модулей. А последнего добра, в некоторых случаях, может быть действительно много.

Из-за этого и тяжело точно сказать, какое питание на Аrduino mini pro лучше подключать, по силе тока. Дело в том, что каждая мелочь, которую вы используете в проекте, потребляет определённое ограниченное количество электричества, зачастую указываемого в мА, поэтому здесь все расчеты исключительно индивидуальны и зависят от конкретного случая.

Схема подключения светодиода к Ардуино Нано

Новичкам об этом задумываться не приходится, ведь необходимое питание для Ардуино в мельчайших подробностях расписывается в гайдах, и ошибиться там крайне тяжело. Это необходимо затем, чтобы новый пользователь смог привыкнуть ко всем нюансам проектирования и архитектуры систем.

Ведь если у esp8266 питание от батарейки, то необходимо ещё проследить, чтобы не было его излишков. Если же вы собираетесь подключать питание esp8266 к индивидуальному проекту, аналогов которого в сети не нашли, то тут всё также не очень тяжело. Дело в том, что характеристики каждого модуля и каждой платы в подробностях расписываются в многочисленных мануалах, вам же достаточно будет воспользоваться несколькими законами электротехники и правильно спроектировать платформу, чтобы каждый элемент получал необходимые ему ресурсы.

Подключение питания

Подключать всё это можно непосредственно к пинам или, в случае тестирования системы, просто воспользоваться usb-портом. Система сама рассчитает, сколько ей необходимо, и внутренними силами преобразует входное напряжение к подходящим значениям.

Если же вы пользуетесь нерегулируемым и регулируемым источником, то достаточно припаять соответствующий провод к пину, и электричество спокойно потечет по плате.

arduinoplus.ru

alexxlab

leave a Comment