Каталог файлов
Главная » Файлы » » На микроконтроллере

Автоматический Ввод Резервного питания на Atmega8.
[ Скачать с сервера (60.7 Kb) · Скачать удаленно () · Скриншот ] 01.02.2013, 18:29
Было мне не так давно начальством дано задание. Сделать автоматический ввод резервного питания, в роли источника питания генератор. Стандартные схемы с реле делать было неохото, да и требования к устройству несколько другие. Устройство должно было: 

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 находятся вверху статьи



Источник http://c2.at.ua

Категория: На микроконтроллере | Добавил: DontMoO | Теги:
Просмотров: 8324 | Загрузок: 660 | Комментарии: 2 | Рейтинг: 5.0/1
Помоги сайту, кликни на рекламу
Всего комментариев: 2

07.04.2020 22:15 Вторник | №2
Почему данную статью никто не коментирует.Статья очень нужная. Интересно собирал кто-то кроме автора или нет.

12.03.2020 14:06 Четверг | №1
В схеме есть ошибка.Резистор R5 должен подключаться к 24 ноге микроконтроллера а не 23 или я ошибаюсь?

Добавить комментарий
(