«Простой импульсный блок питания с осциллограммой на ЖК-дисплее. Сайт о микроконтроллерах AVR.RU», версия для печати. Исходный документ: https://avr.ru/ready/contr/power/switch_power

Простой импульсный блок питания с осциллограммой на ЖК-дисплее

 

Введение:

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

В статье разобран выходной каскад с индикацией, то есть блок стабилизации напряжения и измерение параметров. В качестве входной части был использован трансформатор 220 -> 12 с выпрямителем (обычный блок питания на 12В без стабилизации). Рассматривать входную часть более подробно смысла не вижу.

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

Внешний вид передней панели:

 

Внешний вид передней панели блока питания

Рисунок 1. Внешний вид передней панели блока питания. (/int/Files/Picture/powers/switch_power/pic%201.%20Appearence.JPG)

 

В качестве нагрузки подключен резистор на 100 Ом.

На дисплее красным цветом отображается ток в амперах, синим – текущее выходное напряжение в вольтах, зелёным – заданное напряжение тоже в вольтах.

 

Содержание:

1.        Выходной транзисторный ключ

2.        Подключение LCD от nokia 6100

3.        Алгоритм работы программы

4.        Расчёт номиналов элементов

 

1.      Быстродействующий ключ.

При создании быстродействующего ключа было испробовано 3 схемы, представленные на  рисунке 2. В качестве полевого транзистора был взят P-канальный IRF7205, в качестве входного транзистора - КТ3102 - то, что было в наличии.

 

 

 

 

Схемы быстродействующего ключа

Рисунок 2. Схемы быстродействующего ключа (слева направо: начальная, модифицированная, финальная)

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

 

Передний фронт       - 0.25мс

Задний фронт           - 1.4мс

 

Доработал схему диодом шоттки (рисунок 2Б), чтоб уменьшить его насыщение. Диод шоттки уменьшил задний фронт до 0.25мс.

Также было испробовано включение с общей базой и по схеме Дарлингтона. Всё это не дало результата. При частоте ШИМ 31.25кГц, период получается 32мкс, следовательно, фронты в 0.25мс  нас никак не устраивают.
Добавив в цепь эмиттера RC цепочку (рисунок 2В), удалось получить хороший результат. Она не даёт входить транзистору в насыщение и обеспечивает резкое закрывание входного транзистора.

Передний фронт       - 20 нс

Задний фронт           - 25 нс

Схема вполне прилично отрабатывает все скважности ШИМ. А при применении транзистора с более высоким коэффициентом передачи фронты можно ещё уменьшить.

 

2.      Работа с дисплеем от Nokia6100.

Дисплей от нокии 6100 реализован на чипе фирмы Philips PCF8833. Вся информация по протоколу работы дисплея была взята из даташита на этот чип.

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

Есть несколько способов выполнения инициализации, все они подробно описаны в даташите. Самый простой, на мой взгляд, опишу на основе макроса lcd_init из моей библиотеки disp6100.inc

 

текст макроса lcd_init:

в тексте использованы следующие макрокоманды:

_command – передача в чип дисплея 8битной команды

_data – передача в чип дисплея 8 бит данных

_wait_lcd – программная задержка

 

;1 аппаратный сброс, то есть подача на сигнал Res низкого уровня соответствующей длительности.

            in         tempb,port_lcd           ;считываем состояние порта, чтобы не испортить лишние биты

            cbr       tempb,Reset+SCE      ;сбрасываем в сигнал Reset и выбор чипа

            out       port_lcd,tempb           ;выводим это дело в порт

            wait_lcd 8000                        ;пауза 10ms с запасом

            sbr       tempb,Reset               ;устанавливаем сигнал Reset

            out       port_lcd,tempb           ;выводим в порт

            wait_lcd 8000                        ;пауза 10ms для того чтоб контроллер вышел в нормальный режим работы.

;2 ------------- установки

Программный сброс. Это в принципе лишнее, но не помешает

            _command      0x1      ;Soft reset

Выход из спящего режима - после сброса чип находится в спячке

            _command      0x11    ;slep out

Включение внутреннего dc-dc преобразователя для работы матрицы

            _command      0x03    ;booster on

            wait_lcd          8000    ;10ms взял с запасом. Время выхода конвертора на режим.

Включение дисплея

            _command      0x29    ; display on

Дисплей может работать в 3-х режимах вывода

NORON – нормальный режим, обычное отображение информации

PLTON – какой-то запутанный режим: в нём дисплей не выводит данные на отображение.

SEP – режим скроллинга.

            _command      0x13    ; normal mode

Задание режима хранения данных – это лучше не трогать

            _command      0xBA  ; data order

Задание настроек вывода на дисплей подробно расписано на стр.43 даташита.

Имеется возможность инвертировать координаты Х У - можно отзеркалить по любой оси информацию на дисплее установкой соответствующих битов. Также режим заполнения, то есть слева направо или наоборот.

            _command      0x36    ;memory data access

            _data               (8 | 32);//rgb + MirrorXY + V

Задание цветового режима. Дисплей может работать в трёх цветовых режимах.

8 бит – 256 цветов, пишем 2

12 бит – пишем 3. Не очень удобно, потому как  не кратно - для задания цвета пикселя используется 1,5 байта

16 бит – пишем 5.

            _command      0x3A   ;color mode

            _data               2          ;256 color

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

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

Приведеная гамма взята из даташита на чип.

            _command      0x2D   ;color set

;установка гаммы красного

            _data               0x00

            _data               0x02

            _data               0x04

            _data               0x06

            _data               0x09

            _data               0x0B

            _data               0x0D

            _data               0x0F

;установка гаммы зелёного

            _data               0x00

            _data               0x02

            _data               0x04

            _data               0x06

            _data               0x09

            _data               0x0B

            _data               0x0D

            _data               0x0F

;установка гаммы синего

            _data               0x00

            _data               0x04

            _data               0x0B

            _data               0x0F

;3 ------------------- концовочка -------

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

            _command      0x2C; memory write

;----------------------------------------

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

 

3.      алгоритм работы программы БП.

Алгоритм работы программы блока питания

 

 

Рисунок 3. Схема работы программы БП (/int/Files/Picture/powers/switch_power/pic%203.%20Algorithm.jpg)

   

  Программа обработчика АЦП выполнена таким образом, что измерение напряжения с подстройкой ШИМ происходит в 12 раз чаще, чем потенциометра и тока. Это выполнено, чтобы увеличить скорость реакции ШИМ и уменьшить влияние скачков тока на выходное напряжение. Грубо говоря, чтобы выходная напруга меньше скакала, поскольку это основная задача БП, а измерение тока и потенциометра - дело второстепенное.

Все вычисления происходят в процедуре обработки АЦП, так как вывод на дисплей занимает довольно длительное время.

Обработчик АЦП переключает мультиплексор для выбора канала и соответствующего измерения. Изначально было задумано, что с выбором канала будет переключатся и опорное напряжение, то есть измерение тока происходит при опорном напряжении 1.1В, остальное - при 5В. Но выяснилось, что переход от 5В опоры к 1.1 В очень длительный и занимает порядка 40мс, поэтому пришлось всё сделать на 1.1В.

Для устранения шумления АЦП было решено сделать накопление. Его суть заключается в том, что помеха складывается, и, таким образом, получается усреднённое значение. Чем больше величина накопления, тем выше точность.

Классический вид накопления рассчитывается таким образом: В= В*0.75 + Ацп*0.25; это накопление на 4. Для упрощения вычисления было решено сделать так: В = (В – В/4) + Ацп; тот же алгоритм, но результат вычисления получается в 4 раза больше. Для увеличения точности в вычислениях используются все 12 бит (10 бит - разрядность Ацп + накопление – 2 бита). Итого с АЦП мы получаем значения от 0 до 4095, а для вычисления потенциометра было применено накопление на 16. Соответственно, значения потенциометра получаются от 0 до 16383 (14бит).

Для перевода величин в нормальные величины и удобного вывода на дисплей информации были применены следующие расчёты.

Вычисления напряжения:

Значение напряжения с учётом накопления лежит в пределах от 0 до 4096.

При максимальном задаваемом напряжении 12 В получается, что для перевода в десятичное значение необходимо умножить на 3. В результате, 12 287 - будем считать, что это максимальное значение напряжения в милливольтах.

Вычисление потенциометра:

Значение потенциометра с учётом накопления в 4 раза больше значений напряжения. Поэтому расчёт такой же плюс деление на 4, то есть умножаем на 3 и делим на 4, итого получаются значения задаваемого напряжения от 0 до 12 287 МВ.

Вычисление значения тока:

Значение тока с учётом накопления получается от 0 до 4096 при максимальном токе 5А. Получается, необходимо умножить на 12 - значение до 49104 переведём в амперы и будем считать, что максимальный ток 4.91 А.

4.      Расчёты номиналов элементов схемы:

Схема приведена на рисунке2.

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

Сопротивление датчика тока:

Известно, что ток равен 4.9104А

Напряжение при максимальном токе должно быть 1.1В.

Из закона Ома известно, что I=U/R, отсюда Rдатчика = 1.1 / 4.9104=0.224Ома

При этом на датчике тока будет рассеиваться 5.4Вт. така как P=U*I

Я взял 5 резисторов по 1 Ом на 0.5 Вт. Итого получается 2.5Вт J Ну, я не собираюсь гонять его на 5 Амперах. При моих параметрах значение тока меньше на 10%, а максимальный продолжительный ток 2.5 А. Для более точных параметров и максимальных токов необходимо выбрать более подходящее сопротивление.

Расчёт делителя измерения выходного напряжения:

Известно, что максимальное расчётное напряжение 12.287В

Напряжение на входе ацп при максимальном напряжении 1.1В

Сопротивление R7 должно быть в 10.17раз больше R5 из расчёта:
K=(12.287-1.1)/1.1=10.17

Я взял R7=11k, а R5=1k.

Погрешность получается:

D=((Uрасчётное-Uделителя)/Uрасчётное)*100%=1.52%

Uделителя=1.1*11=12.1

D-погрешность. Составляет +1.52%, то есть показания получаются больше на 1.52%

Это дело можно компенсировать, выставив более точно делитель: навешать на R5 дополнительное сопротивление, чтоб R5 было ближе к 983 Ом.

Если учесть, что погрешность сопротивлений 5%, то это фигня :D может и компенсируется взятыми деталями)

 

 

 

 
рис 4. Общая схема блока питания. (/int/Files/Picture/powers/switch_power/pic%204.%20Scheme.JPG)

 

 

 

Схема тут (/int/Files/Dounload/powers/switch_power/Shematic.rar)
Прошивка с исходниками - вот (/int/Files/Dounload/powers/switch_power/pwm_dc.rar)
 
 
 
 
Автор:  Сергей Меньшиков (http://forum.avr.ru/member.php?u=69342) , e-mail для связи -
 
Обсуждение на форуме: Блок Питания (http://forum.avr.ru/prostoy-impulsnyy-blok-pitaniia-s-t35814.html)
 
 
 

Все права защищены © AVR.RU, 2021.