Блок питания с программным управлением

ArticleCategory: [Choose a category, do not translate this]

Hardware

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to ru Gleba

AboutTheAuthor:[A small biography about the author]

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

Abstract:[Here you write a little summary]

Это четвертая статья из серии заметок Focus о микроконтроллерах серии AT90S4433. рекомендуем также ознакомиться с содержанием предыдущих статей о микроконтроллерах Atmel.
  1. How to install and use the Linux AVR development environment and how to build the programmer hardware:
    March 2002, Programming the AVR Microcontroller with GCC
  2. How to make your own printed circuit board:
    May 2002, A LCD control panel for your Linux server
  3. How to build the case/box for your power supply:
    September 2002, Frequency counter 1Hz-100Mhz with LCD display and RS232 interface
Одной из главных составляющих вашего компьютера всегда был надежный блок питания. В этой статье мы расскажем как самому собрать подобное устройстсво, причем программируемое и управляемое программно. Он будет оснащен жидкокристаллическим дисплеем, а его управление будет осуществляться через RS232 интерфейс. Да и выглядеть он будет тоже нехило.

Придется распаять не самую простую плату, но так мы познакомимся со всем многообразием микроконтроллеров.
Ну а если же вам навороченый блок питания ни к чему, тогда загляните сюда: "simple DC power". Для экспериментирования с электроникой в Линукс вполне достаточно и простого блока питания...Focus. Да собственно с программным обеспечением Линукс он и не имеет ничего общего.
В любом случае, сложный или простой блок питания вы хотите собрать, это статью будет интересно прочитать даже в ознакомительных целях.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

Вступление

Штука которую мы попытаемся собрать, не самое простое из того, что вы делали в этой жизни.Но однозначно вы не пожалеете о времени, проведенной за сборкой.Получится очень надежная и полезная вещица. Кроме всего, она технически интересна тем, что вы научитесь генерировать DC ток без использования преобразователя.

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

Что нам понадобится

Перечень коплектующих вы найдете здесь: part list Так же понадобятся части, приведенные на схеме ниже.
Наш блок питания может существовать в трех вариантах, за исключением одного трасформатора и резистора, изменения будут только в программном обеспечении.Все три главные комплектующие будут общими для всех вариантов:
  1. 0-16V Imax=2.2A
    Трансформатор 15V 2.5A
  2. 0-24V Imax=2.2A
    Трансформатор 24V 2.5A
  3. 0-30V Imax=3A
    Трансформатор 30V 3A
Замечание: Во всех трех случаях вам понадобится так же дополнительный трасформатор на 9V, 100mA, для обеспечения питания основной платы.

Плата

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

Схема разделена на две части: основная и та, которая будет прилегать к транзисторам питания.Ниже приведены 2 схемы обеих частей, которые между собой будут соединяться проводами.

Основная схема (кликните на картинку чтобы увеличить):
[main schematic]

Часть схемы отвечающая за высокое напряжение(кликните чтобы увеличить):
[power part schematic]
Присоединение кнопок к плате (кликните чтобы увеличить):
[push buttons schematic]

Основная плата, вида сверху (кликните чтобы увеличить):
[board]


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

Силовая часть схемы может быть смонтирована на макетной плате ( той, что с большим количеством отверстий ).Силовая часть и основная плата соединяются между собой проводами ( JP2 и JP3 ). Заземление подсоединено на положительный контакт выхода питания. Здесь все правильно, и именно поэтому нам понадобятся два отдельных трансформатора ( для питания и обеспечения работы логической части микроконтроллера и усилителей).

Принцип работы

Главная схема состоит из двух частей.На рисунке они обозначены: "current control" и "voltage control". Это две абсолютно независимые схемы.Одна прямо следит за выходным напряжением, а другая за падением напряжения на резисторе 0.275 Ohm. Напряжение на резисторе прямопропорционально протекающему через него току. Обе цепи управления объединены через диоды D2 и D3. Таким образом диоды образуют аналоговую схему ИЛИ. Таким образом, при превышении тока в нагрузке цепь регулирующая ток понижает выходное напряжение источника питания до момента, пока ток в нагрузке не станет ниже установленного предела и тогда в силу вступит цепь отвечающая за уровень выходного напряжения источника питания.

Такой логический OR-шлюз возможен из-за того, что транзистор T3 соединен через R19 на +5V. Если отключить выходы операционных усилителей от D2 и D3, то на выходе мы получим максимальное напряжение. Операционные усилители управляют выходным напряжением посредством транзистора T3 ( понижая уровень напряжения на его входе ).

Петля управления напряжением контролирует выход в соответствии с уровнем напряжения на входе 5 микросхемы IC6B. Другими словами, напряжение на входе 5 соответствует выходному напряжению, умноженному на коэффициент усиления усилителя определяющегося номиналами резисторов R15,R10 и R16. То же самое относительно цепи ограничения тока, с той лишь разницей, что здесь контролируется напряжение на резисторе R30, эквивалентное уровню тока в нагрузке.

Для того, чтобы установить уровень ограничения тока или необходимое выходное напряжение, нам просто необходимо достигнуть соответствующих напряжений в двух точках схемы : на входе 5 микросхемы IC6B и резисторе R30. Это то, что должен сделать микроконтроллер.... Но каким образом микроконтроллер сможет сформировать требуемые выходные напряжения ? Взгляните на следующий рисунок:
[pwm]

На рисунке изображено преобразование импульсного сигнала в постоянное напряжение. Все что для этого необходимо, пропустить входной импульсный сигнал через низкочастотный фильтр с частотой среза в сотни и более раз ниже частоты входного сигнала. Поскольку микроконтроллер работает на частоте 4Mhz, собрать подобный фильтр будет не сложно. Даже если импульсы мы будем формировать программно, то и в этом случае мы легко получим частоту порядка нескольких кГц и требуемый фильтр окажется легко реализуемым

Разница между первой и второй диаграммой демонтсрирует нам широтно- импульсную модуляцию ( ШИМ ). Изменяя ширину импульсов можно менять постоянное напряжение на выходе фильтра.

Правда круто? Можно формировать точное напряжение из цифрового сигнала!

В состав микроконтроллера AT90S4433 входят два внутренних счетчика. Один 16-битный, а второй 8-битный. 16-битный счетчик может аппаратно формировать 10-битный ШИМ. В 8-ми битном счетчике такой возможности нет, но мы сформируем программный ШИМ с достаточной для нашей задачи несущей частотой. Мы используем 16-ти битный счетчик для регулирования напряжения это будет: 10 бит=1023 шага для регулирования напряжения. А током на выходе будем управлять 8-ми битным счетчиком это даст нам 255 шагов на диапазон регулирования 1-3000 мА. Это значит, что точность регулирования составит 12мА и даже меньше. Что достаточно для нашего устройства.

Все остальные компоненты отвечают за питание схемы и формирование опорного напряжения ( за это отвечает 7805 ), а также контроль стабильности поведения выходного напряжения блока питания при включении-выключении.

Программное обеспечение

Нюансы программного обеспечения работы микроконтроллера были описаны в предыдущих статьях (uart для rs232,жидкокристаллический дисплей, счетчики в режиме прерывания). Прочитать их можно здесь:
linuxdcp.c.

Пожалуй наибольший интерес представляет реализация программного ШИМ. Переменная ipwm_phase вместе с ipwm_h формируют ШИМ для управления схемой ограничения тока. Мы включим 8-ми битный счетчик в режиме генерации прерываний по переполнению, вызывая каждый раз функцию "SIGNAL(SIG_OVERFLOW0)". В ней проверяется ipwm_phase и принимается решение в какое состояние необходимо перевести выход ШИМ: 0 или 1 , после чего перезапускаем таймер. Легко.

Программное обеспечение абсолютно несложное, следует лишь ознакомиться с rfc 4433.

4433 представляет из себя 8-ми битный микроконтроллер с ограниченными математическими возможностями.Функции divXbyY и multiXbyY используют 24 битные расчеты, необходимые для точного расчета скважности в зависимости от заданого пользователем напряжения.

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

Создание печатной платы

Главная плата:
[main board]
Корпус блока питания.Боковые стенки выполнены из дерева; верх, низ, тыльная и лицевая стороны из листового металла:
[box]
Лицевая панель:
[front]
Пакет програмного обеспечения содержит постскрипт файл ( linuxDCpower.ps ) с изображением печатной платы. Лично я считаю, что печатные площадки вокруг отверстий для установки элементов маленькие, и поэтому рекомендую подправить их маркером перед травлением. Процесс изготовления печатной платы в домашних условиях подробно описан здесь:May 2002, A LCD control panel for your Linux server.
Как сделать дешевый и стильный корпус для блока питания написано тут: "September 2002, Frequency counter 1Hz-100Mhz with LCD display and RS232 interface". Рисунок лицевой панели моего блока расположен справа. Кликните чтобы увеличить.

Тестирование

Как и любую другую электрическую цепь, блок питания не стоит сразу включать в сеть, а следует сначала протестировать все ее компоненты. Так будет легче обнаружить ошибки, допущенные при сборке платы.
  1. Соберите основную плату но не подключайте ее.
  2. Возьмите батарейку на 9V и подсоедините плюс на pin 2 а минус на pin 1 коннектора, на схеме обозначеного как AC_POWER. Проверьте вольтметром, что у вас есть +5V на max232 между ножками 8 и 16 и ножками 7 и 8 микроконтроллера. Положительное питающее напряжение на операционных усилителях должно быть около 9V.
  3. Теперь переверните батарейку наоборот. Проконтролируйте наличие отрицательного питающего напряжения около -9V на операционных усилителях.
  4. Если вышеуказанные тесты прошли успешно, значит все нормально и на плату можно установить МАХ232 и микроконтроллер.
  5. Еще раз подключите 9V батарейку так ,чтобы на плате было +5В питающее напряжение (см.выше ).Далее подсоедините программирующий кабель к параллельному порту и к плате.
    Распакуйте скачаный софт, зайдите в созданную директорию и наберите:
    make avr_led_lcd_test.hex
    make testload
    make ttydevinit

    После этого должна загрузиться программа тестирующая блок. На ЖК экране должно высветиться слово "hello", замигает красный индикатор и если вы подсоединили компьютер через rs232, то высветится слово "ok"(запустите rs232 командой ttydevinit, далее - cat /dev/ttyS0, или cat /dev/ttyS1 для COM2).
  6. Теперь соберите главный блок но не подключайте основной трансформатор. Вместо этого подключите к кабелю подключения трансформатора батарейку. При этом не важно в какой полярности вы подключили батарейку на конденсаторе 4700мкФ будет напряжение 9V. Проверьте вольтметром.
  7. После того как главный тест пройден, проверьте еще раз провода и подключайте все трансформаторы и питание. Без установки операционных усилителей вы получите максимальное напряжение на выходе блока питания. Осторожно замерьте напряжение - главное теперь не создать короткое замыкание, т.к. схема ограничения тока еще не работает.
  8. Отключите питание, установите операционные усилители и программирующий кабель, включите питание и наберите:
    make
    make load
  9. Теперь блок питания функционирует. Обратите внимание, что кабель через который осуществлялось программирование, все еще включен и может создавать помехи напряжения. Отключите его чтобы получить более точные значения напряжения.

Вот он: наш собственный блок питания

Как уже говорилось ранее, блок питания может функционировать в трех режимах, в зависимости от трансформаторов.По умолчанию у нас 6V, 2.2A. Чтобы изменить, отредактируйте в файле linuxdcp.c строку содержащую:
MAX_U, IMINSTEP, MAX_I, и в функции set_i следует изменить калибровку, если у нас на максимуме 3А. Коментариев там достаточно, так что проблем с этим не возникнет и вы поймете, что вам править.

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

[front view]

[top view]

Использование блока питания

Вряд ли есть смысл рассказывать зачем нужен блок питания. 4 кнопки служат для для изменения напряжения. 2 кнопки для пошагового переключения вверх/вниз на 1V и еще две, для пошагового плюс-минус 0.1V. Хотя в принципе можно ограничиться и двумя кнопками. Ведь понижение/повышение здесь нелинейное. Для малых зачений можно ограничиться и 50mA. А для значений более 200mA можно переключать и по 100mA. Выше 1А, соответственно по 200mA.И для этого вполне достаточно двух кнопок.
Кнопка перехода в режим ожидания пожет быть использована как как включатель/выключатель, без необходимости восстановления предыдущих значений, при последующем включении.
Красный индикатор загорится в том случае, если вы достигните порогового значения, а в режиме ожидания он будет мигать.
Блок питания может быть полностью управляем из консоли через последовательный порт rs232. Предусмотрены следующие команды:

u=X регулирует вольтаж (e.g u=105 переход в режим 10.5V)
i=Xmax ток (e.g i=500 устанавливает лимит в 500mA)
s=1 или s=0 переход в режим ожидания
u=? или i=? или s=? вывод на экран текущих установок в следующем формате:
u: 50 s:0 i: 100 l:0
u: означет voltage=50 =5V, s:0 означает режим ожидания отключен, i: 100 равно 100mA, и l:0 означает что предел не достигнут

При желании можно написать еще и графический интерфес для программы управления. Для использования последовательного порта необходимо его инициализировать командой ttydevinit, она включена в установочный пакет. Дополнительная информация содержится здесь: September 2002, Frequency Counter.

На схеме выше видно, что мы использовали два трасформатора, а земля основной платы подключается к плюсу выходного напряжения силовой платы. Трансформаторы развязаны, поэтому здесь нечего опасаться. Такое подключение необходимо для того, чтобы соблюсти правильную полярность в цепи обратной связи операционных усилителей. Немного о предосторожности: При таком подключении земля последовательного порта также оказывается подключена к положительному выходу источника пиатния. Другими словами, вы не сможете использовать другие устройства, подключенные к последовательному порту. На всякий случай можно написать предупреждение на корпусе об этом. Если вы не хотите оказаться перед угрозой короткого замыкания, пользуйтесь либо ноутбуком с аккумуляторами, либо убедитесь, что к блоку питания не подключены другие устройства, либо не используйте последовательный порт. Пусть эта предосторожность вас не шокирует. Если установить уровень ограничения тока не более 250mA, то любая ваша даже самая глупая ошибка не испортит ваш компьютер, а о вашей ошибке сообщит красный светодиод.

Безопасность

В цепи задействован трансформатор, который подключен к главному блоку питания : (230V или 110V в зависимости от страны). Обязательно проверьте изоляцию проводки. Если ранее вам не приходилось сталкиваться с блоками питания, лучше лишний раз проконсультируйтесь с человеком который в этом разбирается.

Настройка

Программное обеспечение для блока питания откалибровано полностью. Скорее всего вам не придется ничего менять.В основном точность калибровки зависит от номиналов 7805, R15, R10, R16, R38, R30, R26. Они определяют погрешность установки напряжения и уровня тока. Для тонкой настройки вам следует либо поменять резисторы, либо внести изменения в программу. Не забывайте, что подключенный программирующий кабель влияет на выходное напряжение. В программе изменить настройки можно в функциях set_u и set_i. Все это подробно описано здесь: linuxdcp.c

Ссылки и полезная литература