Автоматический Ввод Резервного питания на Atmega8.
Система автоматического пуска – это автоматическое устройство
для управления генераторной установкой резервного электроснабжения с функцией запуска от ИБП (резерв. аккумулятора) .
Схема автоматического ввода резервного питания контролирует напряжение основной сети,
обеспечивает автоматический запуск, останов генератора и переключение нагрузки.
Автор ManowaRus
Было мне не так давно начальством дано задание. Сделать автоматический ввод резервного питания, в роли источника питания генератор. Стандартные схемы с реле делать было неохото, да и требования к устройству несколько другие. Устройство должно было:
1.Контролировать напряжение на входе в дом, и при понижении его ниже 160 вольт перевести питание дома на генератор
2.При переходе на генератор: производить пять попыток запуска генератора, и при удачном старте время на прогрев генератора.
3.При появлении напряжения на входе: подать звуковой сигнал, после чего подождать, заглушить генератор и перевести питание дома на ввод.
4. Возможность дистанционного управления генератором.
5.Максимальная безопасность устройства ( контактор генератора находиться на расстоянии 25 метров от блока управления, генератор соответственно там же), развязка от питающей сети.
Схема.
Это только блок управления, выходы подключаются к буферным реле.

Немного по схеме. Трансформаторы использованы от какой то китайской лабуды ( главное что не греются во время работы), соответственно номиналы резисторов в делителях напряжения на входах АЦП подбирались отдельно и не соответствуют указанным на схеме. Так же при использовании других трансформаторов нужно изменить делитель в программе.
В программе задействованы только 2 кнопки UP и RIGTH , которые выполняют следующие функции:
В режиме питания от сети:
Тест запуска генератора с переключением питания на него, последующим глушением и переключением в нормальный режим.
Остановка запущенного вручную генератора.
В режиме питания от генератора:
Ручной запуск генератора при неудачных пяти попытках автоматического запуска.
Переход в режим ожидания подачи напряжения без запуска генератора.
Логика работы проста и видна из исходника программы.
Code
$regfile = "m8def.dat" ' используем ATmega8 $crystal = 8000000 ' частота внутреннего генератора 8 mHz
'$sim
'----------------------Конфигурируем порты ввода-вывода----------------------------------------------
Config Lcdpin = Pin , Rs = Portb.5 , E = Portb.4 , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 Config Adc = Single , Prescaler = Auto , Reference = Avcc 'конфигурация АЦП Speaker Alias Pinb.7
Config Portc.4 = Output ' Подсветка дисплея Config Portd.0 = Output ' контактор ввода Config Portd.1 = Output ' контактор генератора Config Portd.2 = Output ' сигнал на старт генератора Config Portb.6 = Output ' сигнал на остановку генератора Config Pinc.5 = Input ' пуск генератора успешен Config Pind.3 = Input ' ручное включение генератора Config Pind.4 = Input ' ручное выключение генератора Set Portd.3 Set Portd.4
Declare Sub Pusk Declare Sub Ostanovka Declare Sub Dom_on Declare Sub Vvod_on Declare Sub Dom_off Declare Sub Vvod_off Declare Sub Zvuk1 Declare Sub Zvuk2 Declare Sub Izmer Declare Sub Rabota Declare Sub Waitvvod Declare Sub Failmenu
'объявляем переменные Dim P As Word 'Флаг ошибки Dim I As Word 'Флаг сбоя питания ввода Dim G As Word 'Флаг сбоя питания генератора Dim W As Word 'преобразование напряжения на входе Dim V As Word 'преобразование напряжения на выходе
Dim N As Integer 'временная переменная 'Config Single = Scientific , Digits = 1 Dim D As Single 'напряжение на входе Dim B As Single 'напряжение на выходе
P = 0 I = 1 Portd.1 = 0
'--------------выводим заставку-------------------------------
Wait 1 'задержка 1 секунда
Cursor Off 'отключаем отображение курсора на ЖК
For N = -20 To 0 Cls Locate 1 , 5 'позиция курсора
Lcd "AVR 1.3" 'выводим надпись
Locate 2 , 2 Lcd "Bє»ЖАeЅёe" ; N Wait 1 Next N Gosub Zvuk2
Portd.0 = 1
'---------------------главный цикл программы----------------------------------------
Cls
Do
Gosub Rabota
Loop
'-------------------Подпрограммы-------------------------------------------
Rabota: 'Основной режим P = 0 'Сбрасываем флаг ощибки генератора
If Pind.3 = 0 Then 'Ручное включение генератора Gosub Zvuk1 Gosub Pusk Gosub Dom_on End If
If Pind.4 = 0 Then 'Ручное выключение генератора Gosub Zvuk1 Gosub Ostanovka Gosub Dom_on End If
Gosub Izmer
If G = 1 Then Portc.4 = 1 Else Portc.4 = 0 End If
If I = 0 Then
Cls Locate 1 , 1 Lcd "AіapёЗ ііoгa!" Gosub Vvod_off
For N = 1 To 50
Sound Speaker , 1000 , 220 Sound Speaker , 1000 , 180
Next N Else Goto Rabota End If
Cls Locate 1 , 1 Lcd "O¶ёгaeјc..." Locate 2 , 1 Lcd "5 јёЅ."
Wait 20 'Ожидание напряжения на вводе (изменить на 5 минут)
Gosub Izmer
If I = 1 Then Gosub Vvod_on Goto Rabota Else Gosub Vvod_off Gosub Pusk Gosub Dom_on Goto Waitvvod End If 'Loop Return
'-------------------------------------------------------------------------
Waitvvod: 'Режим резервного питания
If Pind.3 = 0 Then 'Ручное включение генератора Gosub Zvuk1 Gosub Pusk
End If
If Pind.4 = 0 Then 'Ручное выключение генератора Gosub Zvuk1 Gosub Ostanovka
End If
Gosub Izmer
If G = 1 Then Portc.4 = 1 Else Portc.4 = 0 End If
If P = 0 Then
If Pinc.5 = 1 And G = 0 Then 'Проверка на остановку генератора P = 1 Cls Locate 1 , 1 Lcd "ABAPҐ±" Locate 2 , 1 Lcd "ЎEHEPATOPA!!!" Gosub Zvuk2 Wait 20 Gosub Dom_off Goto Failmenu Else P = 0 End If End If
If I = 1 Then 'Проверка на появление питания
Cls Locate 1 , 1 Lcd "Cіeї гa»ё!!!"
For N = 1 To 50
Sound Speaker , 1000 , 220 Sound Speaker , 1000 , 180
Next N Else Goto Waitvvod End If
Cls Locate 1 , 1 Lcd "O¶ёгaeјc..." Locate 2 , 1 Lcd "20 ceєyЅг."
Wait 20 'Ожидание напряжения на вводе
Gosub Izmer
If I = 0 Then Goto Waitvvod Else Gosub Dom_off Gosub Ostanovka Gosub Vvod_on Goto Rabota End If
Return
'-------------------------------------------------------------------------
Izmer:
Start Adc
W = Getadc(0) 'получаем данные преобразования с АЦП0 V = Getadc(1) 'получаем данные преобразования с АЦП1
D = W / 2 B = V / 2
D = D * 10 B = B * 10
Locate 1 , 1 ' позиция курсора
Lcd D ; " " ; "аOM" 'выводим результат преобразования на ЖК, линия дома
Locate 2 , 1 ' позиция курсора
Lcd B ; " " ; "BBOа" 'выводим результат преобразования на ЖК, ввод дома
If B < 160 Then I = 0 Else I = 1 End If
If D < 160 Then G = 0 Else G = 1 End If
Waitms 100 ' зедержка 0,1 секунды
Stop Adc
Return
'---------------------------------------------------------------------
Pusk: 'Запуск генератора.Пять попыток запуска генератора с контролем пуска по обмотке заряда аакумулятора P = 0 'Сбрасываем флаг ощибки генератора Portd.0 = 0 ' Выключаем входжной контактор (хоть он и должен быть выключен,на всякий случавй) Portd.1 = 0 ' Выключаем контактор генератора
Sound Speaker , 1300 , 220
For N = 1 To 5
Cls Locate 1 , 1 Lcd "Ёycє ґeЅepaїopa." Locate 2 , 1 Lcd "ЁoѕГїєa - " ; N
Portd.2 = 1 Wait 5 Portd.2 = 0 Wait 2
If Pinc.5 = 0 Then 'Проверка запуска
Gosub Zvuk2 Cls Lcd "©cѕeБЅГ№ ѕycє!" Locate 2 , 1 Lcd "O¶ёгaЅёe 60 ceє." 'Если запуск успешен пиликаем, ждём 60сек и включаем контактор генератора, с поледующим переходом в режим ожидания напряжения на вводе Wait 60
Gosub Dom_on Cls Goto Waitvvod End If
Gosub Zvuk1
Cls Locate 1 , 1 Lcd "OЈҐаAHҐE Ё©CKA." Locate 2 , 1 Lcd "Ёay•a 15 ceє" Wait 15
Next N
Cls Locate 1 , 1 Lcd "O¬Ґ KA ¤AЁ©CKA" Locate 2 , 1 Lcd "ЎEHEPATOPA!" Wait 60
Goto Failmenu
Return
'---------------------------------------------------------------- Ostanovka: Cls Locate 1 , 1 Lcd "OCTAHOBKA" Locate 2 , 1 Lcd "ЎEHEPATOPA" Wait 7 'Останавливаем генератор Portb.6 = 1 Wait 3 Portb.6 = 0
Return
'----------------------------------------------------------- Failmenu:
Cls Locate 1 , 1 Lcd "1.ЁoіїopЅГ№ ѕycє" Locate 2 , 1 Lcd "2.Bє»ЖАёїД ііoг"
For N = 1 To 7000 If Pind.3 = 0 Then 'Ручное включение генератора Gosub Zvuk1 Cls Locate 1 , 1 Lcd "Ёycє ґeЅepaїopa" Locate 2 , 1 Lcd "Аepe• 5 ceє." Wait 5 Gosub Pusk Gosub Dom_on End If
If Pind.4 = 0 Then 'Ручное Включение режима ожидание питания Gosub Zvuk1 Cls Locate 1 , 1 Lcd "Bє»ЖАeЅёe ііoгa" Locate 2 , 1 Lcd "Аepe• 5 ceє." Wait 5
Goto Waitvvod End If
Wait 1 Next N Goto Waitvvod Return
'---------------------------------------------------------------- Vvod_on: 'Включение контактора ввода
Portd.1 = 0 'Блокируем контактор генератора
Cls Locate 1 , 1 Lcd "Bє»ЖАeЅёe ііoгa" Wait 5
Portd.0 = 1 'включение нагрузки на дом Cls Return
'---------------------------------------------------------
Dom_on: 'Включение контактора генератора
Portd.0 = 0 'Блокируем входной контактор
Cls Locate 1 , 1 Lcd "BK§°«EHҐE" Locate 2 , 1 Lcd "HAЎP©¤KҐ!" Wait 5
Portd.1 = 1 'Включение нагрузки на генератор Cls Return
'---------------------------------------------------------------- Vvod_off: 'Отключение контактора ввода
Cls Locate 1 , 1 Lcd "Oїє»ЖАeЅёe ііoгa" Wait 5
Portd.0 = 0 Return
'---------------------------------------------------------------- Dom_off: 'отключение контактора генератора
Cls Locate 1 , 1 Lcd "Oїє»ЖАeЅёe" Locate 2 , 1 Lcd "Ѕaґpy•єё" Wait 5
Portd.1 = 0 Return
'---------------------------------------------------------------- Zvuk1: Sound Speaker , 500 , 220 : Sound Speaker , 500 , 290 Return
'---------------------------------------------------------------- Zvuk2: Sound Speaker , 1000 , 220 Sound Speaker , 1000 , 290 Sound Speaker , 1000 , 340 Return
|
|
В общем логика работы следующая.
По прошествии 20 секунд после подачи питания на схему производится включение контактора на вводе.Далее устройство переходит в режим слежения за напряжением на вводе. В этом режиме можно проверить работоспособность ввода резерва. В случае понижения напряжения меньше 160 вольт, выдается звуковой сигнал и сообщение на дисплей. По прошествии 30 секунд сигнал снимается и следует пятиминутная пауза, в конце которой снова замеряется напряжение на вводе. Если напряжение за это время не пришло в норму то выключается контактор ввода и производится попытка пуска генератора. Запуск генератора контролируется реле подключенным к обмотке заряда аккумулятора генератора через диод, нормально разомкнутые контакты которого подключены на порт контроллера.Временные интервалы задаются в программе перед программированием контроллера, по умолчанию попытка пуска 5 сек. с интервалом 15 сек.(ожидание открытия воздушной заслонки генератора). Если в течении пяти попыток генератор не запустился то устройство перейдет в режим ручного выбора действий (либо снова попытаться запустить генератор, либо ожидать появления напряжения на вводе). При удачном запуске генератора ожидаем минуту для прогрева двигателя и включаем контактор на генератора. После появления напряжения на вводе, подается сигнал в течении 30 секунд, после чего пауза на 20 секунд, измерение напряжения на вводе. Если все в норме то отключается контактор генератора, производится остановка генератора и включение контактора ввода.
Генератор используется Stark PSG6500EL, со стартером и электромагнитом воздушной заслонки( на него установлено простейшее реле времени для удержания заслонки некоторое время после пуска двигателя).
Схемка симуляции работы в Proteus.
Схема блока управления, проект для Proteus, исходник на Bascom-AVR находятся во вложении.
AVR_ATMEGA.zip
В общем это все, если вспомню ещё нюансы то допишу. Схема блока управления, проект для симуляции в Proteus, исходник на Bascom-AVR прилагается.
Коментарі
Очень надо!