Блок управления стиральной машиной

Автор: Пользователь скрыл имя, 16 Октября 2012 в 18:04, курсовая работа

Описание работы

Цель курсовой работы – разработать структурную схему блока управления стиральной машины, которая должна иметь два режима стирки (с отжимом и без отжима) две кнопки, включающие режимы стирки, два светодиода для индикации этих режимов, а так же два семисегментных индикатора показывающих время стирки.
Было предложено использовать микроконтроллер ATmega48, среду разработки AVR Studio и язык программирования C .

Содержание

Введение……………………………………………………………......3
1 История стиральных машин……………………………….……… 4
1.2 Стирка под контролем электроники …………………………….. 5
2 Аппаратная реализация…………………………………………… 7
2.1 Описание микроконтроллера……………………………………... 7
2.2 Описание датчика температуры………………………………….. 9
2.3 Описание датчика уровня воды………………………………..…10
2.4 Структурная схема………………………………………………… 12
3 Алгоритм работы программы.……………………………………. 13
Заключение ……………………………………………………………. 15
Используемая литература…………………………………………….. 16
Приложение А…………………………………………………………. 17
Приложение Б…………………………………………………….……. 20

Работа содержит 1 файл

(0)Курсовая.doc

— 164.00 Кб (Скачать)

 

Таблица 1 Техническая характеристика ДУ-2

Название характеристики

значение

Напряжение питания, В (постоянное напряжение)

5-12

Максимальный ток потребления, мА

150

Тип выходного сигнала

сухой контакт

Габаритные размеры, мм

35х42х30


2.3 Структурная схема

Структурная схема приведена на рисунке 4.

 

 





 





 


Рисунок 4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3 Алгоритм работы программы

Программа начинается с  подключения заголовочных файлов avr/signal.h, avr/io.h, avr/interrupt.h, avr/delay.h, stdlib.h. Далее идет описание глобальных переменных и констант:

  • table  массив из 10 элементов типа char, необходим для правильного отображения цифр на семисегментных индикаторах;
  • t - целочисленная переменная для хранения значения температуры;
  • k - целочисленная переменная для хранения числа полученного из АЦП;
  • low - переменная типа char для хранения  единиц времени;
  • high - переменная типа char для хранения  десятков  времени;
  • T- целочисленная переменная для задания температуры стирки;
    • Time- переменная типа char для задания времени стирки;
    • Rejim- переменная типа char для хранения  режима стирки.

В основном блоке программы  сначала запрещаются все прерывания. Далее идет настройка АЦП, для  этого обнуляется регистр ADMUX, и выставляются биты 7 (ADEN) и 3 (ADIE) регистра ADSRA. Обнуление ADMUX ведет к включению настроек по умолчанию в АЦП, бит ADEN регистра ADSRA служит для включения АЦП, а ADIE для разрешения прерываний АЦП.

Датчик температуры  может работать с диапазоном температур от -50 до +150. Следовательно, для нахождения температуры используется формула (1):

   (1)

Когда температура найдена, необходимо отделить десятки и единицы значения.  Для нахождения единиц числа необходимо найти остаток от деления на 10 от абсолютного значения температуры. Для нахождения десятков необходимо абсолютное значение температуры поделить нацело на 10. 

Далее настраивается направление работы портов. Порты микроконтроллера могут быть настроены как для ввода, так и для вывода информации. Порты B и D подключаются к семисегментным индикаторам для отображения цифр, следовательно, они настраиваются на вывод информации. Для этого в DDRB и DDRD выставляем все единицы, а входы порта С, порта В7 и порта D7 настраиваются на ввод информации.

После срабатывания одной из кнопок, которым соответствуют порты: порт С(2) и порт С(3), включается клапан набора воды (порт С(6)). После чего начинается опрос датчика уровня воды подключенного к порту С(0), как только уровень воды достигнут отключается клапан заливки, включается нагреватель, и начинается опрос датчика температуры подключенного к порту АЦП (ADC(0)).

Температура полученная с датчика сравнивается с заданной температурой как только температура  достигает нужного значения отключается  нагреватель, включается электродвигатель (порт В(7)) и начинается отсчет времени, значение которого подается на семисегментные индикаторы подключенные к портам В и D.

По окончании работы таймера, отключается электродвигатель и включается клапан слива воды (порт D(7)), опрашивается датчик уровня воды как только значение датчика будет соответствовать  1 в порту С(6) происходит сравнивание переменной Rejim если ее значение не равно 2 работа программы заканчивается иначе программа продолжается с момента включения электродвигателя, где переменной Rejim присваивается значение 0 после повторного сравнения программа заканчивается.

 

 

 

 

 

 

 

 

 

 

 

ЗАКЛЮЧЕНИЕ

В ходе выполненной работы была разработана структурная схема блока управления стиральной машиной, имитирующий работу управляющего устройства. По данному алгоритму была реализована программа на языке C в среде AVR Studio. В качестве основы использовался микроконтроллер Atmega48. Алгоритм описан в виде блок-схемы в приложениях А. Текст программы приведён в приложении Б.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Используемая  литература

  1. Каталог познавательных статей «История развития стиральных машин». http://www.bcetyt.ru/house/technics/large/stiralka.html [Электронный ресурс]
  2. Shop CHIPDOC «Справочная литература по микроэлектронике». ATmega48. http://shop.chipdoc.ru/php/ishop/shop1.phtml?parentid=13&mode=2&prodid=333&search=&prec=0&into=0&typepoisk=&sort=0&start=0 [Электронный ресурс]
  3. RadioRadar.net «Прецизионные датчики температуры». http://www.radioradar.net/radiofan/security_devices/kodzam.html [Электронный ресурс]
  4. Датчики Siblink  «Датчики уровня». http://portal.pushok.ru/catalog/datch [Электронный ресурс]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ  А

Блок – схема работы блока управления стиральной машиной

 

 

 

ПРИЛОЖЕНИЕ В

Исходный текст  программы

#include<avr/signal.h>

#include<avr/io.h>

#include<avr/interrupt.h>

#include<avr/delay.h>

#include<stdlib.h>

/*Массив для записи  в порты семисегментных 

индикаторов чисел от 0 до 9*/

const unsigned char table[10] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};

/* t - температура

k - значение, считанное  из регистра АЦП 

low и high - младная и  старшая часть числа,

отображаемого на индикаторах

*/

int T, t ,i, k;

char low , high;

char s,time;

char rejim, sl;

/*Процедура обработки  прерывания АЦП*/

ISR(SIG_ADC)

{

//считываем значение  из АЦП в переменную

k = ADC;

/*В датчике температуры  температура прямо пропорциональна 

напряжению, учитывая, что датчик работает с диапазоном

температур от 0 до 100 получим  формулу для нах-я температуры*/

t = k*200/(1024);

 

if(t>=T) // условие для  температуры

{

PORTC&=~_BV(7); //выключаем  обогреватель

TCCR1B|=_BV(CS10);// Авторизация  времени стирки

PORTB = table[2];

PORTD = table[0];

s=0;

time = 20;

PORTB|=_BV(7); // Включаем двигатель  стиральной машины

ADCSRA&=~_BV(ADEN);

ADCSRA&=~_BV(ADSC);

}

//Разрешаем преобразования  в АЦП

ADCSRA|=_BV(ADSC);

};

ISR (SIG_OVERFLOW0)

{

/* Залив и нагрев воды*/

if(sl==0){

if(bit_is_clear(PORTC,6))

{

PORTC|=_BV(7);   //включаем  обогреватель

PORTC&=~_BV(0);  // Прекращаем  залив воды

TCCR0B&=~_BV(CS00); // отключаем таймер

sl=1;

/*Разрешаем преобразования  в АЦП*/

ADCSRA|=_BV(ADSC);

return;

}

/* Слив воды*/

if(sl==1){

if(bit_is_set(PORTC,6))

{

TCCR0B&=~_BV(CS00);  // отключаем таймер

sl=0;

PORTD&=~_BV(7);   // прекращаем слив

PORTC&=~_BV(4);   // откл индикацию режима 1

}

}

ISR (SIG_OUTPUT_COMPARE1A)

{

s++;

if(s==60)

{

s=0;

time--;

low = abs(time)%10;

high =(abs(time)-low)/10;

PORTB = table[high];

PORTD = table[low];

/*отсчёт таймера споследуещем  выводом на индикаторы*/

if(time==0)

{

PORTB&=~_BV(7);  // откл двигатель

TCCR1B&=~_BV(CS10);     //откл Таймер

if(sl==1)

TCCR0B|=_BV(CS00);

PORTD|=_BV(7);  // Вкл слив

PORTC&=~_BV(2)&~_BV(3); // откл  кнопки

if(rejim==2)

{

/*ставим время отжима*/

rejim = 0;

s=0;

time = 10;

PORTB|=_BV(7);

TCCR1B|=_BV(CS10);

PORTB = table[1];

PORTD = table[0];

/* режим с отжимом */

}

 

}

}

PORTC&=~_BV(5);  // откл индикацию режима 2

}

 

/*Основной блок программы*/

void main()

{

// Запрещаем все прерывания

cli ();

/*Настраеваем АЦП*/ 

ADMUX = 0;

ADCSRA|=_BV(ADEN)|_BV(ADIE);

/*Устанавливаем порты  на выход

эти порты будут подключены к индикаторам*/

DDRB = 0xFF; //старшая

DDRD = 0xFF;   //младшая

DDRC|=_BV(4);  //диод 1

DDRC|=_BV(5);  //диод 2

//вход

DDRC&=~_BV(2);//кнопка включения  первого режима

DDRC&=~_BV(3);//кнопка включения  второго режима

DDRC&=~_BV(6);//датчик уровня

DDRC&=~_BV(0);  //клапан  залива

DDRC&=~_BV(7);  //обогреватель

     DDRB&=~_BV(7);  //двигатель

     DDRD&=~_BV(7);  //клапан слива

//таймер

TCCR0B&=~_BV(CS01)&~_BV(CS02);

TIMSK0|=_BV(TOIE0);

TCCR1B|=_BV(CS11);

TIMSK1 = _BV(OCIE1A);

TCCR1B = _BV(WGM12);

TCNT1   = 0;

OCR1A = 62500;

/*Разрешаем прерывания*/

sei();

//бесконечный цикл

while(1)

{

        if(bit_is_set(PORTC,2))

{

for(i=1; i=30; i++)

{  /*убираем дребизг кнопки*/   }

                }

if(bit_is_set(PORTC,2))

{

T = 30;

PORTC|=_BV(0);

TCCR0B|=_BV(CS00); 

rejim = 1;

sl = 0;

PORTC|=_BV(4);

/*нажатие кнопки без  отжима (режим 1)*/ 

}

  if(bit_is_set(PORTC,2))

{

for(i=1; i=30; i++)

{  /*убираем дребизг  кнопки*/   }

                }

if(bit_is_set(PORTC,3))

{

T = 40;

PORTC|=_BV(0);

TCCR0B|=_BV(CS00); 

rejim = 2;

sl = 0;

PORTC|=_BV(5) 

/*нажатие кнопки с  отжимом (режим 2)*/

}

}

 

}

 




Информация о работе Блок управления стиральной машиной