|
В начало
Курсовой проект
на тему:
«Контроллер
управления стиральной машиной»
Задание
на курсовой проект
Разработать
принципиальную схему и текст программы управления
контроллером на базе микроконтроллера PIC16F83. Объект управления – стиральная машина. Отсчет времени
осуществляется аппаратно, посредством встроенного модуля 8-битного таймера TMR0. Блоки RAM (36 байт),
Flash-ROM (512 байт) и EEPROM (64 байта)
входят в состав данного контроллера. Алгоритм
работы контроллера управления стиральной машиной
1. После закладки
белья и стирального порошка осуществляется программирование устройства: -
Ввести время предварительной стирки (замачивания),
ввод подтверждается клавишей «ENTER»; -
Ввести время основной стирки; -
Ввести температуру стирки; -
Ввести время отжима белья; -
Ввести скорость отжима белья (выбор из 3 вариантов); 2. Работа
устройства: а) начало
работы после нажатия клавиши «ENTER»; б) открывается
клапан воды и вода заливается до нужного уровня (до
датчика уровня воды); в) начинается
процесс замачивания, при этом каждые 2 минуты осуществляется вращение барабана
(2 оборота в одном направлении и 2 в обратном); г) после
окончания замачивания открывается клапан выпуска воды и насос до сигнала от
датчика воды об ее отсутствии; идет отжим белья в течении
2 минут на низшей скорости, при этом клапан и насос включены; д) Стирка.
Процесс начинается впуском воды до
нужного уровня (отличается от замачивания), после чего процессор дает команду
на нагрев воды до нужной температуры (задается в двоично-десятичном коде). В
течение стирки температура поддерживается на заданном уровне ± 5 % включением/выключением
нагревателя при изменении температуры ниже/выше заданного уровня. Включается
мотор для подачи воды для смыва порошка из контейнера и работает 2 минуты. Во
время стирки барабан вращается 3 минуты в одну сторону и столько же в противоположную. е) Слив воды
(См. п. г)); ж) Полоскание
(См. п. б), в), г)); з) Отжим.
Открывается клапан выпуска воды и насос до сигнала от датчика воды об ее
отсутствии; идет отжим белья в течение 2 минут на указанной скорости, при этом
клапан и насос включены; 3. После окончания стирки звучит звуковой сигнал из динамика устройства в течение 1 минуты. Частота сигнала 1кГц. Входы и
выходы блока стиральной машины
1. Вход для клавиатуры Клавиатура
состоит из: кодовых кнопок и кнопки «Enter» Рис. 1. Клавиатура При
нажатии, каждая кодовая кнопка возвращает 2-битный код.
При
нажатии, кнопка Enter возвращает
лог. «1» 2. Вход датчика воды Подача на
вход лог. «1» означает, что вода достигла уровня датчика. Сигнал лог.
«0» означает, что вода не достигла уровня датчика. 3. Выходы на двигатель Выходы на
двигатель имеют 3-битный формат:
4. Выход на клапан залива При подаче
на выход лог «1» клапан открывается и включается насос залива. Сигнал лог.
«0» подает команду на закрытие клапана и отключает насос. 5. Выход на клапан слива При подаче
на выход лог «1» клапан открывается и включается насос слива. Сигнал лог.
«0» подает команду на закрытие клапана и отключает насос. 6. Выход на цифровой нагреватель Выходы на
нагреватель имеют 2-битный формат:
7. Выход на динамик При подаче
лог. «1» динамик издает звук 1кГц. При подаче
лог. «0» динамик не издает звук. Блок-схема
работы устройства
Структурная схема устройства
Аппаратная часть
контроллера
Процессор Microchip PIC 16F83
|
PORTA |
RA0 |
Клавиша Enter |
RA1 |
1 бит кода
клавиш |
|
RA2 |
2 бит кода
клавиш |
|
RA3 |
Датчик воды |
|
RA4 |
Не используется |
|
PORTB |
RB0 |
1 бит кода
температуры |
RB1 |
2 бит кода
температуры |
|
RB2 |
1 бит кода
работы двигателя |
|
RB3 |
2 бит кода
работы двигателя |
|
RB4 |
3 бит кода
работы двигателя |
|
RB5 |
Клапан залива |
|
RB6 |
Клапан слива |
|
RB7 |
Динамик |
;Приложение к курсовому проекту ;Программа работы контроллера управления стиральной
машиной ;Говоров Д.Н. С-63 list p=16f873 ; list
directive to define processor #include <p16f873.inc> ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_ON & _BODEN_ON &
_PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _CPD_OFF ;Описание переменных timeZ EQU 0x22 ; время замачивания timeS EQU 0x23 ; время стирки tempS EQU 0x24 ; температура стирки timeO EQU 0x25 ; время отжима spdO EQU 0x26 ; скорость отжима 2min EQU 0x20 3min EQU 0x21 1min EQU 0x27 ;Стандартный рекомендуемый код инициализации ORG 0x000 ; processor
reset vector clrf PCLATH ; ensure page bits
are cleared goto main ; go
to beginning of program main ; начало процедуры main ; инициализация PORTA clrf PORTA bsf STATUS,
RP0 movlw 0x0F movwf TRISA ; установка порта на ввод ; инициализация PORTB clrf PORTB bsf STATUS,
RP0 movlw 0x00 movwf TRISB ; установка порта на вывод ; 1. Ввод параметров ; нажимаем на кнопку, не отпускаем её и подтверждаем
клавишей Enter ; время замачивания L1: movlw PORTA btfss PORTA,
RA0 ; проверка на "enter" goto L1 movwf timeZ ; время стирки L2: movlw PORTA btfss PORTA,
RA0 ; проверка на "enter" goto L1 movwf timeS ; температура стирки L3: movlw PORTA btfss PORTA,
RA0 ; проверка на "enter" goto L1 movwf tempS ; время отжима L2: movlw PORTA btfss PORTA,
RA0 ; проверка на "enter" goto L1 movwf timeO ; скорость отжима L4: movlw PORTA btfss PORTA,
RA0 ; проверка на "enter" goto L1 movwf spdO ; decode values ; timeZ movlw timeZ bcf W, 1 bcf W, 4 rrf W, 1 btfsc W, 1 btfsc W, 2 goto Lz1 btfsc W, 1 btfss W, 2 goto Lz2 btfss W, 1 btfsc W, 2 goto Lz3 btfss W, 1 btfss W, 2 goto Lz4 Lz1: movf timeZ, 12d goto Lz_end Lz2: movf timeZ, 24d goto Lz_end Lz3: movf timeZ, 36d goto Lz_end Lz4: movf timeZ, 48d goto Lz_end ; timeS Lz_end: movlw timeS bcf W, 1 bcf W, 4 rrf W, 1 btfsc W, 1 btfsc W, 2 goto Ls1 btfsc W, 1 btfss W, 2 goto Ls2 btfss W, 1 btfsc W, 2 goto Ls3 btfss W, 1 btfss W, 2 goto Ls4 Ls1: movf timeS, 12d goto Ls_end Ls2: movf timeS, 24d goto Ls_end Ls3: movf timeS, 36d goto Ls_end Ls4: movf timeS, 48d goto Ls_end ; tempS movlw tempS bcf W, 1 bcf W, 4 rrf W, 1 movwf tempS ; timeO movlw timeO bsf W, 1 bsf W, 4 rrf W, 1 btfsc W, 1 btfsc W, 2 goto Lo1 btfsc W, 1 btfss W, 2 goto Lo2 btfss W, 1 btfsc W, 2 goto Lo3 btfss W, 1 btfss W, 2 goto Lo4 Lo1: movf timeO, 12d goto Lo_end Lo2: movf timeO, 24d goto Lo_end Lo3: movf timeO, 36d goto Lo_end Lo4: movf timeO, 48d goto Lo_end movf timeZ2, timeZ ; spdO movlw spdO bsf W, 1 bsf W, 4 rlf W, 2 movwf spd0 ; 2. Начало работы L5: movlw PORTA btfss PORTA,
RA0 ; проверка на "enter" goto L1 ; открыть клапан залива, до тех пор, пока не получен
сигнал от датчика L6: movlw 00000010b ; код
клапана movwf PORTB ; посылаем на порт вывода movlw PORTA ; считываем порт ввода btsff PORTA,
RA3 ; проверка сигнала от датчика goto L6 ; если нет, то клапан открыт ; 3. Замачивание ; инициализация таймера TMR0 clrf TMR0 ; сброс TMR0 movlw 0xC7 ; выключить подтягивающие ризисторы, movf OPTION_REG ; на PORTB, TMR0 - от внутреннего
сигнала, ; предделитель
1:256 bcf STATUS,
RP0 ; банк 0 ; -------------------------- L7: clrw ; проверка, закночилось ли время decf timeZ decf timeZ cmpw timeZ goto L10 clrf 2min ; установка интервала=2мин movlw 26b movwf 2min clrf TMR0 L7xx: movlw 000001000b ; вращение барабана вперед,
скорость=1 movwf PORTB btfss INTCON,
T0IF goto L7xx goto L7 L7x: decf 2min clrw cmpw 2min goto L8 L8: clrw decf timeZ decf timeZ cmpw timeZ goto L10 clrf 2min ; установка интервала=2мин movlw 26b movwf 2min clrf TMR0 L9: movlw 001001000b ; вращение барабана назад,
скорость=1 movwf PORTB btfss INTCON,
T0IF decf 2min clrw cmpw 2min goto L9 goto L7 ; открыть клапан слива, до тех пор, пока не получен сигнал
от датчика L10: movlw 00000100b ; код
клапана movwf PORTB ; посылаем на порт вывода movlw PORTA ; считываем порт ввода btsff PORTA,
RA3 ; проверка сигнала от датчика goto L10 ; если нет, то клапан открыт clrf 2min ; установка интервала=2мин movlw 26b movwf 2min clrf TMR0 L11: movlw 000001000b ; вращение барабана вперед,
скорость=1 movwf PORTB btfss INTCON,
T0IF goto L11x goto L11 L11x: decf 2min clrw cmpw 2min goto L13 ; 4. Стирка ; открыть клапан залива, до тех пор, пока не получен
сигнал от датчика L12: movlw 00000010b ; код
клапана movwf PORTB ; посылаем на порт вывода movlw PORTA ; считываем порт ввода btsff PORTA,
RA3 ; проверка сигнала от датчика goto L12 ; если нет, то клапан открыт ; ------------- L13: clrw ; проверка, закночилось ли время decf timeS decf timeS cmpw timeS goto L10 clrf 3min ; установка интервала=3мин movlw 39b movwf 3min clrf TMR0 L14: movlw 000001000b ; вращение барабана вперед,
скорость=1 addlw tempS ; установим
температуру movwf PORTB btfss INTCON,
T0IF goto L14 goto L15 L15: decf 3min clrw cmpw 3min goto L16 L16: clrw decf timeS decf timeS cmpw timeS goto L10 clrf 3min ; установка интервала=3мин movlw 39b movwf 3min clrf TMR0 L17: movlw 001001000b ; вращение барабана назад,
скорость=1 addlw tempS ; установим температуру movwf PORTB btfss INTCON,
T0IF decf 3min clrw cmpw 3min goto L17 goto L13 ; 5. Слив воды ; открыть клапан слива, до тех пор, пока не получен сигнал
от датчика L18: movlw 00000100b ; код
клапана movwf PORTB ; посылаем на порт вывода movlw PORTA ; считываем порт ввода btsff PORTA,
RA3 ; проверка сигнала от датчика goto L10 ; если нет, то клапан открыт ; 6. Полоскание
; открыть клапан залива, до тех пор, пока не получен сигнал
от датчика pL6: movlw 00000010b ; код
клапана movwf PORTB ; посылаем на порт вывода movlw PORTA ; считываем порт ввода btsff PORTA,
RA3 ; проверка сигнала от датчика goto pL6 ; если нет, то клапан открыт ; вращение барабана... pL7: clrw ; проверка, закночилось ли время clrf TMR0 decf timeZ2 decf timeZ2 cmpw timeZ2 goto pL10 clrf 2min ; установка интервала=2мин movlw 26b movwf 2min clrf TMR0 pL7xx: movlw 000001000b ; вращение барабана вперед,
скорость=1 movwf PORTB btfss INTCON,
T0IF goto pL7xx goto pL7 pL7x: decf 2min clrw cmpw 2min goto pL8 pL8: clrw decf timeZ2 decf timeZ2 cmpw timeZ2 goto pL10 clrf 2min ; установка интервала=2мин movlw 26b movwf 2min clrf TMR0 pL9: movlw 001001000b ; вращение барабана назад,
скорость=1 movwf PORTB btfss INTCON,
T0IF decf 2min clrw cmpw 2min goto pL10 goto pL7 ; 5. Отжим ; открыть клапан слива, до тех пор, пока не получен сигнал
от датчика pL10: movlw 00000100b ; код
клапана mov movwf PORTB ; посылаем на порт вывода movlw PORTA ; считываем порт ввода btsff PORTA,
RA3 ; проверка сигнала от датчика goto pL10 ; если нет, то клапан открыт ; вращение барабана clrf 2min ; установка интервала=2мин movlw 26b movwf 2min clrf TMR0 pL11: movlw 000001000b ; вращение барабана вперед,
скорость=spd0 addlw spd0 movwf PORTB btfss INTCON,
T0IF goto pL11x goto pL11 pL11x: decf 2min clrw cmpw 2min goto pL13 ; 6. Звуковой сигнал clrf 1min ; установка интервала=2мин movlw 13b movwf 1min clrf TMR0 sndL11: movlw 000000001b ; сигнал movwf PORTB btfss INTCON,
T0IF goto sndL11x goto sndL11 sndL11x: decf 2min clrw cmpw 1min goto sndL13 sndL13: END ; directive 'end of program' |