Altinkaya: турецкие корпуса для РЭА

Управляемый микроконтроллером самодельный источник питания Proto для проектов на Arduino

Atmel ATmega328

В статье описан портативный регулируемый источник питания, удобный для установки на беспаечные макетные платы и идеально подходящий для питания проектов на Arduino и для других маломощных схем.

Он способен, питаясь от двух литий-ионных аккумуляторов, обеспечивать выходное напряжение от 0 В до 5.5 В при токе до 0.5 А. Выходное напряжение, величина которого отображается на трехразрядном 7-сегментном индикаторе, можно регулировать с помощью поворотного энкодера. Вся схема управляется микроконтроллером ATmega328.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Блок питания Proto вставляется в беспаечную макетную плату и обеспечивает напряжение от 0 до 5.5 В при токе до 0.5 А.
Рисунок 1. Блок питания Proto вставляется в беспаечную макетную плату и
обеспечивает напряжение от 0 до 5.5 В при токе до 0.5 А.

Для примера, на Рисунке 1 Proto питает ATtiny85V напряжением 1.8 В – самым низким для данного микроконтроллера, в котором выполняется программа Blink.

Характеристики

Предназначенные для работы с прототипами источники питания, как правило, имеют фиксированные выходные напряжения 3.3 В и 5 В, получаемые от порта USB, или регулируемое напряжение, получаемое из постоянного входного напряжения.

Однако всем им не хватает нескольких функций, которые я хотел иметь в источнике питания:

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

Поскольку блок питания предназначен для проверки проектов с AVR, нет необходимости в напряжении больше 5.5 В. Это означает, что источник можно удобно запитать от двух Li-Ion аккумуляторов напряжением 3.7 В.

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

Схема

На Рисунке 2 приведена полная схема источника питания Proto.

Схема источника питания Proto, построенная на ATmega328.
Рисунок 2. Схема источника питания Proto, построенная на ATmega328.

Для корректной работы LT3080 требуется минимальный ток нагрузки, который согласно технической документации составляет 500 мкА. Простейший способ выполнить это требование – подключить параллельно выходу резистор. Я выбрал сопротивление 220 Ом, которое добавляет к показаниям индикатора  0.05 В при отсутствии нагрузки и отбирает дополнительные 25 мА при полном выходном напряжении. Среднеквадратичное значение пульсаций выходного напряжения ниже примерно 2 мВ.

Процессор

В более ранней статье «Portable Lab Power Supply» мой проект основывался на микроконтроллере ATtiny861, имеющем достаточно линий ввода/вывода. Однако для источника питания Proto я решил использовать более популярный микроконтроллер ATmega328 из-за его большей доступности и, часто, меньшей цены, чем у ATtiny861. И хотя выводов у него больше, версия SMD на самом деле имеет меньшую площадь, чем ATtiny861 в корпусе SOIC.

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

Стабилизаторы

LT3080 выпускается в корпусах различных типов. Я выбрал корпус для поверхностного монтажа SOT-223. Теплоотводящий контакт стабилизатора припаян к большому полигону на печатной плате. Для дополнительного охлаждения я через самоклеющуюся термопрокладку прикрепил к нему небольшой радиатор и протестировал источник питания под нагрузкой 0.5 А. Стабилизатор оставался холодным. Теоретически он должен выдавать до 1 А, но при бóльших токах, вероятно, понадобится радиатор большего размера.

Для получения напряжения питания цифровой цепи 5.5 В и опорного напряжения для АЦП я использовал регулируемый стабилизатор LM317L в корпусе SOT-89, выходное напряжение которого можно установить с помощью двух резисторов.

Напряжение определяется формулой:

Значения R1 = 200 Ом и R2 = 680 Ом дают нам ровно 5.5 В, как и требуется.

Поворотный энкодер

В качестве поворотного энкодера я использовал приобретенное у Adafruit устройство, которое выдает 24 импульса на один поворот.

Индикатор

В схеме используется недорогой трехразрядный семисегментный светодиодный индикатор с общим анодом типа 2381BS с размером символов 0.28 дюйма, который можно купить на eBay. Также можно использовать индикатор с общим катодом.

Для этого нужно внести изменения в подпрограмму Display().

Аккумуляторы

Печатная плата рассчитана на установку держателя аккумулятора типоразмера AA. В качестве источника питания я выбрал два аккумулятора 14250 напряжением 3.7 В. Высота такого аккумулятора – это половина высоты батареи AA, поэтому в держатель поместятся два аккумулятора, что в сумме дает 7.4 В. Обратите внимание, что большинство аккумуляторов 14250 не имеют защиты, поэтому их нельзя разряжать ниже 3 В. В качестве альтернативы можно использовать неперезаряжаемые батареи 14250 или сборки из трех никель-кадмиевых аккумуляторов.

Конструкция

Я спроектировал плату в программе Eagle и отправил ее для изготовления в Ragworm в Великобритании. Для достижения компактной компоновки при использовании легкодоступных деталей в схеме используется смесь компонентов для поверхностного и сквозного монтажа (Рисунок 3).

Верхняя и нижняя стороны готовой печатной платы источника питания Proto.
Рисунок 3. Верхняя и нижняя стороны готовой печатной платы источника
питания Proto.

Среди SMD компонентов нет особенно маленьких, поэтому их можно паять вручную с помощью паяльника с тонким наконечником, но я использовал термофен c температурой 250 °C. Сначала установите компоненты SMD, а затем компоненты для сквозного монтажа.

Программа

В этом разделе объясняются различные части программы Proto Power Supply. Смотрите листинг программы, доступный для скачивания в разделе Загрузки.

Считывание положения энкодера

Поворотный энкодер подключен к двум выводам микроконтроллера – PC2 и PC3. В подпрограмме setup() они сконфигурированы входами с подтяжкой к шине питания, а PC2 настроен как вход прерывания по изменению состояния.

Процедура обработки прерывания по изменению уровня считывает состояния двух входов, определяет, в каком направлении должно измениться значение, и вызывает ChangeValue(). Переменные a и b хранят текущие состояния двух входов, глобальная переменная a0 содержит предыдущее состояние a, а a0 содержит очищенный сигнал.

Обработка сигнала энкодера подробно описана в моей статье «Bounce-Free Rotary Encoder» [1].

Получение аналогового напряжения

Источник питания управляется аналоговым напряжением, получаемым фильтрацией сигнала ШИМ, сформированного на выводе PD3. Этот ШИМ сигнал создается с использованием Timer/Counter2, который в подпрограмме setup() настроен на работу в режиме ШИМ с фазовой коррекцией.

Вращение энкодера вызывает подпрограмму ChangeValue(), которая инкрементирует или декрементирует значение глобальной переменной Count.

ChangeValue(), в свою очередь, вызывает SetVoltage(), которая изменяет значение в регистре сравнения OCR2B.

Измерение выходного напряжения

Регулируемое выходное напряжение подается на вход АЦП (ADC0/PC0). Источником опорного напряжения в setup() выбрано напряжение питания VCC. Значение аналогового напряжения считывается подпрограммой ReadADC().

Индикация напряжения

Выходное напряжение отображается на трехразрядном семисегментном индикаторе. Для простоты индикатор мультиплексируется с использованием того же таймера – Timer/Counter2. Каждые 220 отсчетов таймер переполняется, и это событие используется для вызова подпрограммы обработки прерывания ISR (TIMER2_OVF_vect).

Она, в свою очередь, вызывает подпрограмму DisplayNextDigit(), которая выводит соответствующие данные сегментов следующей отображаемой цифры в PORTB, а затем устанавливает высокий уровень на общем аноде цифры, подключенном к PORTD. Число, которое будет отображаться в каждом разряде дисплея, задается массивом Buffer[].

Каждый четвертый цикл эта подпрограмма считывает информацию из АЦП и вызывает Display() для записи соответствующих значений в буфер индикатора Buffer[]. Для предотвращения мерцания между двумя соседними значениями индикация обновляется только в том случае, если напряжение изменилось не менее чем на 10 мВ.

Отключение при перегрузке

LT3080 имеет защиту от короткого замыкания, ограничивающую выходной ток примерно до 1.4 А, но этого достаточно, чтобы повредить неправильно подключенную схему. Поэтому я ввел отключение по перегрузке, которое срабатывает, если заданное напряжение, установленное энкодером, превышает измеренное выходное напряжение более чем на 500 мВ. Эта ситуация обрабатывается проверкой в DisplayNextDigit(), которая устанавливает флаг Overload, если перегрузка произошла. Выходное напряжение устанавливается на ноль, а на дисплее отображаются прочерки. Для сброса защиты необходимо повернуть энкодер.

Кнопка предварительной установки напряжения

Кнопка поворотного энкодера устанавливает выходное напряжение равным 3.3 В. Кнопка подключена к выводу PD2, который в подпрограмме setup() сконфигурирован как вход прерывания INT0.

Затем подпрограмма обработки прерывания просто устанавливает значение Count равным 3.3/0.025 или 132.

Компиляция программы

ATmega328 можно запрограммировать с помощью внутрисхемного программатора через 6-контактный разъем ISP, установленный на печатной плате. Я использовал недорогой программатор USBASP, купленный вместе с ленточным кабелем на eBay, который подключается к разъему ISP на плате источника питания Proto. Вместо него для внутрисхемного программирования можно использовать программатор Sparkfun Tiny AVR или Arduino Uno.

В Arduino IDE отсутствует конфигурация с внутренним генератором, поэтому я создал ее сам. Ее можно загрузить с GitHub [2]. После копирования конфигурации в папку hardware выберите в папке Arduino опцию ATmega328 под заголовком ATmegaBreadboard в меню Boards. Затем в последующих меню выберите B.O.D. Enabled (4.3V), ATmega328P и 8 MHz (internal). Выберите «Burn Bootloader» чтобы правильно установить фьюзы; затем выберите Upload, чтобы загрузить программу.

Дополнительно к программе по ссылке в разделе Загрузки можно скачать проектные файлы платы в формате Eagle.

Ссылки

  1. Bounce-Free Rotary Encoder
  2. ATmegaBreadboard

Материалы по теме

  1. Datasheet Atmel ATmega328
  2. Datasheet XLITX 2381BS
  3. Datasheet Fairchild LM317L
  4. Datasheet Analog Devices LT3080

Загрузки

  1. Файлы проекта Proto Power Supply

Перевод: SGovor по заказу РадиоЛоцман

На английском языке: Microcontroller-controlled homemade Proto power supply for Arduino projects

71 предложений от 37 поставщиков
Плата Arduino Pro Mini на базе микроконтроллера ATmega328, создана на основе открытой архитектуры серии Arduino.Платформа содержит 14 цифровых входов/выходов (6 из...
AliExpress
Весь мир
Usb кабель с R3 ATMEGA328P-PU/ATMEGA8U2 и Мега 2560 R3 Mega2560 REV3 ATmega2560-16AU доска 2,0 принтера "Mei Qing" (30 см)
22 ₽
ЗУМ-СМД
Россия
ATMEGA328P-AU
Microchip
26 ₽
ATmega328P-AU
Atmel
64 ₽
Romstore
Россия, Беларусь
ATmega328P-AU
341 ₽
Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • В приципе очень здравая идея. Для лабораторных со студентами такой ИП пригодился бы. Огорчает, что нет измерения тока.
  • Маломощный ИП на аккумуляторах со светодиодным трехразрядным индикатором... Наверное я чего-то не догоняю... :(
  • Да, резисторы 220 Ом маловаты. Я не заглядывал в программу, но если время свечения сегментов ограничено, то ток потребления индикатора не превышает 10 мА. Если вообще без токоограничивающих резисторов, то я обычно задаю время свечения одного символа 40-50 мкс за цикл. Но можно и 20-30 мкс, если взять индикатор поярче. Это при равёртке 1-5 кГц для 3-4х символьных индикаторов. Так что 10 мА не такая уж и жертва для макетной платы. Для LED индикатора всегда можно подобрать щадящий режим по току.
  • Индикаторы только лучше брать красные - они при том же токе светят гораздо ярче зеленых. Не знаю, может это особенность человеческого глаза, но это так ...
  • Вы правы, какой смысл предъявлять претензии автору по потреблению индикатором, когда у него только один делитель для LM317 аж 6 мА жрет! Предложить Хоровицу с Хиллом для их нового издания в раздел "неудачные схемы" что ли? :)
  • В этом БП, если говорить об энергосбережении, без существенного изменения схемы не обойтись. Если мои соображения интересны, то малой кровью можно сделать следующее: 1. Отказаться от стабилизатора LM317, например, в пользу фиксированного MC33275. Погоня автора за 0,5 В кажется неоправданной. 2. Включать индикацию только при вращении ручки энкодера, на 5-10 секунд. Пусть индикатор светится только при настройке. 3. Поскольку выходное напряжение LT3080 задаётся напряжением на входе SET (какое подал на SET, такое и получил на выходе LDO), то при питании МК от 5В, очевидно, больше 5В на выходе ИП не получить. Но как часто нужны именно 5,5В? Вообще, LT3080 - это очень неплохой LDO с низким шумом на выходе. И использовать его в этой схеме, где точность измерения и установки напряжения невысока... даже не знаю. С другой стороны, возможность [B]регулировки напряжения от 0В[/B], низкие шумы и высокая стабильность - это замечательное преимущество данного LDO перед импульсными DC-DC.
Полный вариант обсуждения »