Главная » Файлы » Проекты » Готовые проекты и примеры программ |
Авт.Запуск Генератора
19.07.2010, 19:51 | |
Автоматический старт генератора при прекращении подачи электроэнергии В данной статье предлагается к повторению для использования в быту устройство, которое осуществляет автоматический старт двигателя (электрогенератора) при прекращении подачи электроэнергии потребителям. Устройство разработано на базе микроконтроллера PIC16F628A Алгоритм работы следующий: Каждый цикл программы контролирует вход на который в случае наличия Эл. Энергии в сети подана логическая «0». В случае прекращения подачи, на этом входе появляется логический «1» и запускается цикл автоматического старта движка-генератора. 1. Включение зажигания. 3. Стартер, 3 цикла по 2 секунды, паузы между циклами 10 секунд. (В случае если движок не завелся, цикл прекращается,устройство переходит в Аварийный режим ) Горит светодиод Авария генератора и через каждые 10сек подаётся звуковой сигнал, при этом включён ручной режим ( от сети ) (Если движок завелся, то стартер отключается, зажигание остается включенным, после паузы в 10 секунд включается подача электроэнергии от генератора). 4. Устройство переключается в режим ожидания восстановления подачи эл. энергии. 5. При восстановлении подачи, генератор автоматически глушится и все возвращается в изначальное состояние. Для управления заслонкой карбюратора применён электропривод от автомобильного дверного замка ( импульс открытия и закрытия заслонки 0.8сек ) схема устройства: Вот сам исходник: '-------------------------- Описание проекта --------------------------------- 'Проект : Gen_And_Set ( Автоматический старт двигателя бензоэлектрического генератора ) 'Идея : ( Виталий Иванов г.Оренбург ) 'Версия : 1.0.0 от 16.06.2012 ( Программное обеспечение МК ) Бросалин Ф А '-------------------------- Опции компилятора -------------------------------- Declare SHOW_SYSTEM_VARIABLES = OFF ' При симуляции в Proteus не показывать внутренние переменные Declare FSR_CONTEXT_SAVE = OFF ' Не заботиться о сохранении содержимого регистра FSR Declare Reminders = OFF ' Выключить напоминания компилятора Declare Warnings = OFF ' Выключить предупреждения компилятора Declare Optimiser_Level 1 ' Включить оптимизацию программы ;-------------------------- Общие настройки------------------------------------ Device = 16F628A ' Используемый микроконтроллер Xtal = 4 ' Частота осциллятора 4 МГц '-------------------------- Конфигурация программирования -------------------- Config BODEN_OFF, BOREN_OFF, CP_OFF, DATA_CP_OFF, PWRTE_ON, WDT_OFF, LVP_OFF, MCLRE_ON, INTRC_OSC_NOCLKOUT '-------------------------- Настройки портов --------------------------------- PortB_Pullups = OFF ' Выключить подтягивающие резисторы на PORTB Declare All_Digital = On ' Установить все порты цифровыми входами/выходами TRISA = %00111111 TRISB = %00000000 PORTB = %00000000 PORTA.6 = 0 PORTA.7 = 0 Symbol Ob_Set = PORTA.1 Symbol Gen = PORTA.0 Dim J As Byte Dim H As Byte Dim G As Byte DelayMS 5000 '-------------------------- Главная программа ------------------------- Main: PORTB.7 = 0 PORTB.0 = 0 If Ob_Set = 0 And Gen = 1 Then DelayMS 20 If Ob_Set = 0 And Gen = 1 Then PORTB.4 = 1 If Ob_Set = 1 And Gen = 1 Then DelayMS 20 If Ob_Set = 1 And Gen = 1 Then GoTo Avt_z If PORTA.4 = 0 Then DelayMS 20 If PORTA.4 = 0 Then GoTo Test If PORTA.3 = 0 Then DelayMS 20 If PORTA.3 = 0 Then GoTo Rucn GoSub mig GoTo Main mig: PORTB.2 = 1 DelayMS 1000 PORTB.2 = 0 DelayMS 1000 Return Avt_z: DelayMS 2000 PORTB.4 = 0 DelayMS 4000 PORTB.7 = 1 DelayMS 4000 PORTA.6 = 1 DelayMS 800 PORTA.6 = 0 DelayMS 4000 If Ob_Set = 0 And Gen = 1 Then DelayMS 20 If Ob_Set = 0 And Gen = 1 Then PORTB.7 = 0:PORTB.4 = 1:GoTo Main For J = 1 To 3 Step 1 If Ob_Set = 0 Then DelayMS 2000 If Ob_Set = 0 Then PORTB.7 = 0:PORTB.3 = 0: GoTo Main PORTB.6 = 1 DelayMS 3000 PORTB.6 = 0 DelayMS 10000 If Ob_Set = 1 And Gen = 0 Then PORTA.7 = 1:DelayMS 800:PORTA.7 = 0:GoTo U_K If Ob_Set = 0 And Gen = 0 Then DelayMS 2000 If Ob_Set = 0 And Gen = 0 Then PORTB.7 = 0:PORTB.3 = 0: GoTo Main Next J GoTo Cikl2 U_K: For H = 1 To 120 Step 1 PORTB.1 = 1 PORTB.2 = 0 DelayMS 500 PORTB.2 = 1 PORTB.1 = 0 DelayMS 500 PORTB.2 = 0 PORTB.1 = 0 If Ob_Set = 0 And Gen = 0 Then DelayMS 4000 If Ob_Set = 0 And Gen = 0 Then PORTB.7 = 0:PORTB.3 = 0: GoTo Main Next H PORTB.3 = 1 DelayMS 4000 GoTo PR_T PR_T: If Ob_Set = 0 And Gen = 0 Then DelayMS 4000 If Ob_Set = 0 And Gen = 0 Then PORTB.7 = 0:PORTB.3 = 0: GoTo Main GoTo PR_T Test: For H = 1 To 4 Step 1 PORTB.0 = 1 DelayMS 200 PORTB.1 = 1 DelayMS 200 PORTB.2 = 1 DelayMS 400 PORTB.2 = 0 DelayMS 200 PORTB.1 = 0 DelayMS 200 PORTB.0 = 0 DelayMS 400 Next H GoTo Main Rucn: PORTB.1 = 1 DelayMS 500 PORTB.3 = 0 DelayMS 500 PORTB.4 = 1 DelayMS 500 If PORTA.2 = 0 Then DelayMS 20 If PORTA.2 = 0 Then PORTB.1 = 0: GoTo Main GoTo Rucn Avariy: PORTB.0 = 1 PORTB.7 = 0 DelayMS 2000 PORTB.4 = 1 DelayMS 2000 For G = 1 To 3 Step 1 PORTB.5 = 1 DelayMS 500 PORTB.5 = 0 DelayMS 500 Next G DelayMS 20000 GoTo Avariy Cikl2: PORTB.7 = 0 For G = 1 To 30 Step 1 PORTB.2 = 1 DelayMS 500 PORTB.2 = 0 DelayMS 500 Next G DelayMS 2000 PORTB.4 = 0 DelayMS 4000 PORTB.7 = 1 DelayMS 4000 PORTA.6 = 1 DelayMS 800 PORTA.6 = 0 DelayMS 4000 If Ob_Set = 0 And Gen = 1 Then DelayMS 20 If Ob_Set = 0 And Gen = 1 Then PORTB.7 = 0:PORTB.4 = 1:GoTo Main For J = 1 To 3 Step 1 If Ob_Set = 0 Then DelayMS 2000 If Ob_Set = 0 Then PORTB.7 = 0:PORTB.3 = 0: GoTo Main PORTB.6 = 1 DelayMS 3000 PORTB.6 = 0 DelayMS 20000 If Ob_Set = 1 And Gen = 0 Then PORTA.7 = 1:DelayMS 800:PORTA.7 = 0:GoTo U_K If Ob_Set = 0 And Gen = 0 Then DelayMS 2000 If Ob_Set = 0 And Gen = 0 Then PORTB.7 = 0:PORTB.3 = 0: GoTo Main Next J GoTo Cikl3 Cikl3: PORTB.7 = 0 For G = 1 To 30 Step 1 PORTB.2 = 1 DelayMS 500 PORTB.2 = 0 DelayMS 500 Next G DelayMS 2000 PORTB.4 = 0 DelayMS 4000 PORTB.7 = 1 DelayMS 4000 PORTA.6 = 1 DelayMS 800 PORTA.6 = 0 DelayMS 4000 If Ob_Set = 0 And Gen = 1 Then DelayMS 20 If Ob_Set = 0 And Gen = 1 Then PORTB.7 = 0:PORTB.4 = 1:GoTo Main For J = 1 To 3 Step 1 If Ob_Set = 0 Then DelayMS 2000 If Ob_Set = 0 Then PORTB.7 = 0:PORTB.3 = 0: GoTo Main PORTB.6 = 1 DelayMS 3000 PORTB.6 = 0 DelayMS 20000 If Ob_Set = 1 And Gen = 0 Then PORTA.7 = 1:DelayMS 800:PORTA.7 = 0:GoTo U_K If Ob_Set = 0 And Gen = 0 Then DelayMS 2000 If Ob_Set = 0 And Gen = 0 Then PORTB.7 = 0:PORTB.3 = 0: GoTo Main Next J GoTo Avariy | |
Просмотров: 7150 | Загрузок: 107 | Комментарии: 2 | |
Всего комментариев: 2 | |
| |