Рисунок 7
КД – концевой датчик блокировки двери
ДТ – датчик температуры
КЗ – клапан залива
Алгоритм работы
Вывод
В данном курсовом проекте разработан блок управления стиральной машиной. Данный блок управления обладает всеми необходимыми функциональными возможностями, с помощью чего осуществляется полностью автоматизированный цикл стирки белья в одном из предложенных режимов, каждый из которых реализован для двух возможных температур воды. Помимо отвечающей современным требованиям функциональности блок управления имеет конкурентоспособную стоимость и обладает высокой надежностью.
Литература
1. О. Николайчук «x51-совместимые микроконтроллеры фирмы Silicon Laboratories (Cygnal),M.,ИД СКИМЕН,2004»
2. Бродин В.Б., Шагурин М.И. Справочник. Микроконтроллеры: архитектура, программирование, интерфейс. М.: ЭКОМ 1991 г.
3. «Справочник по однокристальным микроконтроллерам
4. КМ1816ВЕ48 и КМ1816ВЕ51» (источник - http://ofap.ulstu.ru/files/REFER_BOOK_MK48&MK51/start.htm)
5. Свободная энциклопедия «Википедия» (ресурс – http://www.wikipedia.org)
Приложение А
Код программы
Вход концевого датчика P 1.1 показывает закрыта ли дверца, если закрыта – необходима её заблокировать перед началом стирки
M_BLOCK:
MOV A, P1 // записываем в аккумулятор значение порта P1
ANL A, #10B // обнуляем ненужные биты (оставляем только сигнал концевого датчика)
JZ M_BLOCK // если дверь не закрыта (датчик разомкнут - P1.1=0) возвращаемся к началу проверки и так до тех пор пока дверца не будет зарыта
SETb P2.3 // закрыли замок на двери перед стиркой
Процедура работы таймера:
Для каждого этапа работы определена длительность:
Набор воды – 30 сек (R2 = 10B)
Вращение барабана – 10 мин (R2 = 100100B)
Нагрев воды – 2 мин (R2 = 111B)
Слив воды – 30 сек (R2 = 10B)
Отжим – 20 мин (R2 = 1001000B)
TIMER:MOV TMOD, #1B
XRL TH0, TH0
SETB TR0
MOV A, #R2// посчитанное значение для текущего режима работы
MOV R2, #0B
MAIN:MOV R1, #0B
INC R2
SEC:INC R1
CICLE: JNB TF0, CICLE
CLR TF0
CJNE R1, #11111111B, MAIN
CJNE R2, A, END
SJMP SEC
END:RET
ACPCONF:// Конфигурирование АЦП для использования AIN0 в однопроводном режиме
MOV ADC0CF, #10000101b // Тактовая частота преобразование SAR0 = 941кГц,коэф. усиления = 16
MOV AMX0CF, #00H// 8 входов в однопроводном режиме
MOV AMX0SL, #00H// Выбор входа AIN0
MOV ADC0CN, #10001101b // Разрешение АЦП0 (режим непрерывной выборки, преобразование инициализируется по переполнению Таймера 2, данные выровнены по левому краю).
RET
После того как дверца заблокирована можно приступать к работе. Режим работы определяется битами 0 и 1 порта P2, бит 2 порта P2 определяет температуру для стирки в выбранном режиме. При проверке установленного режима в случае если он не равен нулю происходит уменьшение значения режима на единицу – в таком случае на каждом следующем шаге мы точно знаем какой режим установлен.
Список режимов работы (биты указаны по убыванию – второй, первый, нулевой):
000 – «обычна стирка при температуре 30 градусов Цельсия»
100 – «обычна стирка при температуре 60 градусов Цельсия»
001 – «полоскание при температуре 30 градусов Цельсия»
101 – «полоскание при температуре 60 градусов Цельсия»
010 – «быстрая стирка при температуре 30 градусов Цельсия»
110 – «быстрая стирка при температуре 60 градусов Цельсия»
011 - «отжим»
MOV R0, P2 // запись режима работы в регистр R0
ANL R0, #00000011B // обнуление ненужных бит (несмотря на обнуление второго бита, отвечающего за температуру, со входа P2.2 мы всегда сможем его считать)
MOV A, R0 // переносим в аккумулятор (для команды условного перехода)
JZ M_NABOR // если режим 0 (простая стирка) переходим к стирке
DEC R0 // уменьшаем значение режима для последующего сравнения с нулём
MOV A, R0 // переносим в аккумулятор (для команды условного перехода)
JZ M_PredNabor // если режим "полоскание" переходим к установке режима "отжим" чтобы не стирать дважды
DEC R0 // уменьшаем значение режима для последующего сравнения с нулём
MOV A, R0 // переносим в аккумулятор (для команды условного перехода)
JZ M_BezOtzhima // если режим "без отжима" (10, уже равен 00) переходим
SJMP M_OTZHIM // если режим "отжим" (11, уже равен 01) переходим
M_BezOtzhima:
Mov R0, #11111111B // устанавливаем любое значение кроме выбранных режимов, для того чтобы в последствии пропустить этап «отжим»
SJMP M_NABOR // пропускаем установку режима "отжим" и переходим к стирке
M_PredNabor:
MOV R0, #00000011B // Устанавливаем режим "отжим"
Блок набора воды:
M_NABOR:
ANL P0, #0B // гасим светодиоды
SETb P0.0 // включаем светодиод "набор воды"
SETb P1.2 // включение насоса
MOV R2, #10B// запись времени работы в данном режиме
CALL TIMER // включение таймера
CLR P1.2 // по истечению заданного времени залива происходит отключение насоса
Блок нагрева воды:
ANL P0, #00000000B // гасим светодиоды
JB P2.2, M_TEMP// проверка температурного режима
MOV R3, #11110B// записали температуру 30 градусов
M_TEMP:
MOV R3, #111100B// записали температуру 60 градусов
SETb P0.1 // включем светодиод "нагрев воды"
SETb P1.0 // включаем тэн
Считываем показания датчика температуры:
CALL ACPCONF// конфигурирование ацп
M_NSTEP:
MOV A, ADCOH//старшие биты
SWAP A// обмен тетрад
ANL A, #0F0H// получили старший полубайт
MOV R5, A// временно записываем в R5
MOV A, ADC0L// считываем младший байт
SWAP A// обмен тетрад
ANL A, #0FH// получили младший полубайт
ADD A, R5// суммирование полубайт
CJNE A, R3, M_NSTEP // если требуемая температура достигнута идем дальше, если нет проверяем снова
CLR P1.0 // выключили тэн
Блок вращения барабана при стирке:
ANL P0, #0B // гасим светодиоды
SETb P0.2 // включаем светодиод "стирка"
MOV P1, #10000000B // Установка скорости оборотов (режим 000)
SETb P1.7 //включение двигателя (старший бит=1)
MOV R2, #100100B// запись времени работы в данном режиме
CALL TIMER // Включение таймера
CLR P1.7 // выключение двигателя по истечении времени
Блок выпуска воды:
ANL P0, #0B // гасим светодиоды
SETb P0.3 // включем светодиод "выпуск воды"
SETb P1.3 // открытие клапана
MOV R2, #10B// запись времени работы в данном режиме
CALL TIMER // вызываем процедуру работы таймера
CLR P1.3 // закрытие клапана по истечении времени
CJNE R0, #0B, M_PredNabor // если первый режим (первые два бита порта P2 равны нулю) то переход
CJNE R0, #11111111B, M_END // если режим «быстрая стирка» то переход к окончанию работы
Блок отжима (проходит во всех режимах работы кроме режима «быстрой стирки»):
M_OTZHIM:
ANL P0, #0B // гасим светодиоды
SETb P0.4 // включаем светодиод "отжим"
MOV A, P2 // передача скорости двигателя в аккумулятор
ANL A, #01110000B // обнуление ненужных битов (оставляем только те, которые используются двигателем)
MOV P2, A
SETb P1.7 // включение двигателя
MOV R2, #1001000B// запись времени работы в данном режиме
CALL TIMER // включение таймера
CLR P1.7 // выключение двигателя по истечении времени
Блок окончания работы:
M_END:
ANL P0, #0B // гасим светодиоды
SETb P0.5 // включаем светодиод "конец работы"
CLR P2.3 // открыли замок