Простой импульсный блок питания с осциллограммой на ЖК-дисплее
Введение:
Данный блок питания был реализован для контроля потребления тока небольших устройств. Также при внесении в рабочую программу соответствующих изменений возможно реализовать зарядное устройство с контролем тока заряда и какими-нибудь хитрыми режимами работы. Устройство может быть использовано и как индикатор напряжения и тока для уже готового блока питания.
В статье разобран выходной каскад с индикацией, то есть блок стабилизации напряжения и измерение параметров. В качестве входной части был использован трансформатор 220 -> 12 с выпрямителем (обычный блок питания на 12В без стабилизации). Рассматривать входную часть более подробно смысла не вижу.
Блок питания имеет один потенциометр для задания напряжения с точностью до сотых долей, шумление потенциометра отфильтровано программно методом накопления.
Внешний вид передней панели:
Рисунок 1. Внешний вид передней панели блока питания.
В качестве нагрузки подключен резистор на 100 Ом.
На дисплее красным цветом отображается ток в амперах, синим – текущее выходное напряжение в вольтах, зелёным – заданное напряжение тоже в вольтах.
Содержание:
1. Выходной транзисторный ключ
2. Подключение LCD от nokia 6100
3. Алгоритм работы программы
4. Расчёт номиналов элементов
1. Быстродействующий ключ.
При создании быстродействующего ключа было испробовано 3 схемы, представленные на рисунке 2. В качестве полевого транзистора был взят P-канальный IRF7205, в качестве входного транзистора - КТ3102 - то, что было в наличии.
Рисунок 2. Схемы быстродействующего ключа (слева направо: начальная, модифицированная, финальная)
Собрал схему, изображенную на рис 2А – обычное включение транзистора с общим эмиттером. Эта схема дала не очень хороший результат, затянут задний и передний фронт, то есть входной транзистор перенасыщался, из-за чего работал в не очень хорошем режиме.
Передний фронт - 0.25мс
Задний фронт - 1.4мс
Доработал схему диодом шоттки (рисунок 2Б), чтоб уменьшить его насыщение. Диод шоттки уменьшил задний фронт до 0.25мс.
Передний фронт - 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. алгоритм работы программы БП.
Программа обработчика АЦП выполнена таким образом, что измерение напряжения с подстройкой ШИМ происходит в 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 может и компенсируется взятыми деталями)