Главная » Статьи » Proton PICBasic

Измеритель напряжения и тока с регулировкой тока ограничения.

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

Схема: 

 

Сразу оговорюсь, схема схематическая, простите за каламбур. Это я к тому, что подходит к любому готовому БП - и к импульсному тоже - только с умом подойти. Нумерация выводов ОУ и ПИКа правильная. По схеме: резистором R1 выставляется ток ограничения - это напряжение масштабируется с помощью ОР4 (Ку=10) и подаётся для индикации установленного тока в ПИК. Также это напряжение через повторитель ОР3 подаётся в качестве опорного на ОУ ОР1, который следит за током и в случае превышения оного выдаёт сигнал на транзистор (в моей схеме), который прикрывает силовой транзистор и БП переходит в режим стабилизации тока. ОР2 усиливает (Ку=10) падения напряжения на R9 (0.1 Ом 5 Вт) для индикации потребляемого тока. Резистором R14 устанавливается соответствие выходного напряжения к отображению на индикаторе. Два стабилизатора для того, что напряжение у меня после диодного моста около 40 В. Две ступени стабилизации ещё и меньше греются. 13 В используется для питания ОУ и вентилятора. 5 В для питания ПИКа и термодатчика. Конденсатор С6 можно убрать - была мысль сделать ШИМ регулировку частоты вращения вентилятора, но не стал извращаться - незачем.

Программа:

DEVICE 16F676

DECLARE XTAL =4

DECLARE REMINDERS = OFF ;Выключает напоминания компилятора '

DECLARE WARNINGS = OFF ;Выключает предупреждения компилятора

CONFIG CPD_OFF, CP_OFF, BODEN_OFF, MCLRE_OFF, PWRTE_ON, WDT_OFF, INTRC_OSC_NOCLKOUT '

INTCON = %10100000 '

DECLARE OPTIMISER_LEVEL = 1

'-------------------------- Настройки подключения ЖКИ ------------------------

DECLARE LCD _ TYPE ALPHA ' Тип ЖКИ - буквенно -цифровой

DECLARE LCD_DTPIN PORTC.0 ' Порт данных ЖКИ

DECLARE LCD_ENPIN PORTC.5 ' Управление линией E

DECLARE LCD_RSPIN PORTC.4 ' Управление линией RS

DECLARE LCD_INTERFACE ' Разрядность шины данных

DECLARE LCD _ LINES ' Количество строк ЖКИ

DECLARE ADIN_RES 10

OPTION_REG = %10001111

ADCON0 = %00000001 ' 00000001 0порное 5в

ADCON1 = %01110000

ANSEL = %00000111

TRISA = %001111

DIM AS WORD ' Ток реальный

DIM AS WORD ' Напряжение

DIM UstI AS WORD ' Ток установленный

DIM AS BYTE ' коэфициент

DIM AS BYTE '

DIM Per AS BIT '

DIM Des AS WORD '

DIM Dei2 AS BYTE '

DIM Dei1 AS BYTE '

DIM Deiu2 AS BYTE '

DIM Deiu1 AS BYTE '

DIM AS BIT ' '

DIM AS BIT

DIM R_Temp AS WORD '

SYMBOL DQ = PORTA.4 ' Подключить 1 DS18B20 к выводу PORTc.0

SYMBOL Vent = PORTA.5 ' Вентилятор охлаждеения радиатора

PRINT $FE,$40,$06,$09,$09,$06,$00,$00,$00,$00 'Поcлать на ЖКИ команду создания знака градуса

p = 13 ' для максимального тока 5А

main: '

b = ~ b

I = ADIN ' Чтение АЦП А.2 (ток потребляемый)

I = I / p ' 5 ампер максимум

Dei1 = I DIG ' взять сотые доли тока (для индикации)

Dei2 = I DIG ' взять десятые доли тока (для тока больше 1А)

DELAYMS 50 ' задержка

UstI = ADIN ' Чтение АЦП А.0 (ток установленный)

UstI = UstI / p ' 5 ампер максимум

IF UstI < 14 THEN UstI = 14 ' минимум 14 мА (подобрано экспериментально)

IF UstI > 1000 THEN ' если установленно более 1А то

I = I / 1000 ' потребляемый переводим в Амперы (а не в милиамперах)

Deiu1 = UstI DIG ' взять сотые доли установленного тока (для индикации)

Deiu2 = UstI DIG ' взять десятые доли установленного тока

UstI = UstI / 1000 ' установленный ток тоже переводим в Амперы (а не в милиамперах)

Per = 1 ' если установленно более 1А то единица для BRANCHL (индикация в Амперах)

ELSE ' иначе

Per = 0 ' нуль для BranchL (индикация в МИЛИамперах)

ENDIF

PRINT AT 1, 1, "U=", DECDes, "," , DECU, "V ", DEC R_Temp, 8, "C " ' индикация напряжения и температуры

U = ADIN ' Чтение АЦП А.1

U = U / 2 ' 30 вольт максимум

Des = U / 1000 ' (напряжение - 00.000)

BRANCHL Per, [od, dva] ' зависимый переход

od:

PRINT AT 2, 1,"I=", DEC I, "mA ", "&I=", DEC UstI, "mA " ' индикация в МИЛИамперах

GOTO try ' перепрыгнуть

dva: '

PRINT AT 2, 1,"I=", DEC I, ",", DEC Dei2, DEC Dei1, "A ", "&I=", DEC UstI, "," , DEC Deiu2, DEC Deiu1, "A"' индикация в Амперах

try:

IF v > 30 THEN ' счётчик для измерения температуры

v = 0

OWRITE DQ, 1, [$CC, $44] ' Послать датчику DS18B20 команду старта измерения температуры

REPEAT ' Начать внутренний цикл

DELAYMS 25 'Пауза 25 мсек

OREAD DQ, 4, [c] ' Ждать полного преобразования пока не придет сигнал окончания ' преобразования

UNTIL c <> 0 ' Выйти из цикла если DS18B20 закончило преобразование.

OWRITE DQ, 1, [$CC, $BE] ' Послать команду чтения из ОЗУ датчика DS18S20 значения температуры

OREAD DQ, 2, [R_Temp.LOWBYTE, R_Temp.HIGHBYTE' Прочитать значение температуры и записать полученные два байта данных в переменную

' R _ Temp типа Dword , младщий байт в R _ Temp . LowByte и старший байт в R _ Temp . HighByte

R_Temp = R_Temp /16

IF R_Temp > 90 THEN ' Если температура превысит 90 гр.

PRINT AT 1, 1, "WARNING ! ", DEC R_Temp, 8, "C " ' то писать" ВНИМАНИЕ" и текущую температуру

PRINT AT 2, 1, " PEREGREW ! " ' "ПЕРЕГРЕВ !" (при желании что угодно...)

DELAYMS 800 ' задержка 800 мсек

ENDIF

ENDIF

IF R_Temp > 45 THEN ' Если температура превысит 45 гр.

Vent = 1 ' то включить вентилятор

ELSE ' иначе

Vent = 0 ' выключить вентилятор

ENDIF

INC ' + счётчика для измерения температуры

GOTO main


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


Вот как у меня выглядит ЖК дисплей в работе:

Значок & перед I символизирует ток установленный. Таких устройства изготовлено 2 штуки, на очереди третье - будет работать с импульсным БП. С микрухой TL494 в паре. 

Весь архив с программой, схемой, моей печаткой здесь.

 Вопросы, замечания приветствуются. Программа эволюционировала (какое длинное слово). Теперь делается 100 измерений через 3 милисек., потом результат усредняется и выводится на индикацию - так меньше мельтешат последние цифры. Ещё понизил температуру включения вентилятора и добавил гистерезис.

Вот всё http://yadi.sk/d/N4aHqyC5EspZr




Категория: Proton PICBasic | Добавил: mikhail09p (29.07.2012)
Просмотров: 13993 | Комментарии: 3 | Теги: шим, Измерение, напряжение, индикатор, БП, ток | Рейтинг: 5.0/4
Всего комментариев: 3
1 Matrix252005   (01.08.2012 12:48) [Материал]
Приятного времени суток!!!

Интересная конструкция... Вопрос, "какое наименьшее значения измеряемого тока???"

2 mikhail09p   (01.08.2012 19:05) [Материал]
Привет, Николай!
В данном устройстве 14 мА. Хотя теоретически от 0.

3 Matrix252005   (02.08.2012 08:51) [Материал]
Привет Михаил!

СПС...

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]