Материал: Бытовой холодильник

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рисунок 6 - Структура программы

Система управления поддерживает температуру в камерах холодильника с точностью 1 0С: компрессор включается, если температура в одной из камер холодильника будет на 1 0С больше, чем должна быть. Выключается компрессор, когда температура в обеих камерах будет на 1 0С ниже, чем поддерживаемое значение. Если в течение минуты открыта дверь холодильника, включается звуковой сигнал, который выключается, как только дверь будет закрыта. Когда контроллер включается, он начинает работать в первом режим охлаждения. Пользователь может последовательно менять режим охлаждения нажатием на кнопку S2. Параметры режима охлаждения, в котором работает контроллер, отображаются на семисегментных индикаторах: на первых двух отображается температура в холодильной камере в градусах Цельсия (предполагаются значения выше нуля), на вторых двух - температура в морозильной камере в градусах Цельсия (предполагаются значения ниже нуля).

Схема программы управления микропроцессорной системы приведена в приложении В.

Алгоритм работы микропроцессорной системы начинается с самотестирования. Выводится символ «1» на левый индикатор. Затем выполняется тест ОЗУ. Если при тестировании была выявлена неисправность, алгоритм завершается и выведенный на индикатор символ указывает на неисправность ОЗУ. Если ОЗУ исправно, на левый индикатор выводится символ «2» и выполняется тестирование ПЗУ. Если контрольная сумма не совпала с эталоном, алгоритм завершается, иначе выполняется инициализация регистров, портов и таймера.

При поступлении прерывания от таймера если требуется сменить светящийся индикатор, на контакты GPIOB0-GPIOB6 выводится следующий символ, а бегущая единица на GPIOB7-GPIOB10 меняет свое положение. Если выводится звуковой сигнал, изменяется состояние вывода GPIOB11 с выбранной частотой сигнала. Если по сравнению с предыдущим моментом прерывания сигнал на GPIOA1 изменился с логической единицы на логический нуль, выполняется переход к следующему из шести режимов охлаждения и обновление отображаемых символов на индикаторах. Зная частоту прерываний таймера, можно определить сколько прерываний произойдет в секунду. По прошествии этого числа прерываний, раз в секунду проверяется открыта ли дверь (уровень сигнала на GPIOA0). Если дверь была открыта в течение 60 секунд, устанавливается флаг включения звукового сигнала. Как только дверь закрывается, флаг включения звукового сигнала снимается. Так же раз в секунду опрашиваются датчики температуры и в зависимости от полученных от них данных принимается решение о запуске или остановке компрессора, как описано выше.

Временные диаграммы работы микропроцессорной системы приведены в приложении Г.

АЦП непрерывно преобразует входные сигналы с любой пары каналов (A0/B0 - A7/B7). При установленном бите SMODE в 1, преобразование сигналов происходит одновременно с двух активных каналов при каждом поступлении импульса защёлкивания образца. Период поступления импульсов настраивается программно Acqps*tADCCLK (Acqps может принимать значения от 0 до 15) .

Максимальное значение частоты ADCCLK составляет 25 МГц. Для SYSCLKOUT значения 25 МГц или ниже, ADCCLK должен быть SYSCLKOUT / 2 или ниже. ADCCLK = SYSCLKOUT не является действительным режим для любого значения SYSCLKOUT.= 150 МГц, ADCCLK = 25 МГц.d(SH) - время до начала снятия данных (составляет 2.5tADCCLK)SH - период поступления импульсов защёлкивания образцаd(scshA0_n) - время до записи первого результата с канала A0 в регистр (составляет 4tADCCLK)d(scshB0_n) - время до записи первого результата с канала B0 в регистр (составляет 5tADCCLK)d(scshA0_n) - время до записи следующего результата с канала A0 в регистр (составляет (3+Acqps)*tADCCLK)d(scshB0_n) - время до записи следующего результата с канала B0 в регистр (составляет (3+Acqps)*tADCCLK)

5. Выбор и обоснование языка программирования


Выбор языковых средств в каждом конкретном применении зависит от характеристик прикладной задачи, опыта программиста, допустимых затрат на разработку и сроков проектирования.

При выборе языка программирования необходимо помнить, что на языке ассемблера программировать труднее и дольше, чем на языках высокого уровня, но при этом требуется меньшая емкость памяти программ, и программа выполняется быстрее.

В данном случае целесообразнее всего выбрать основным средством написания ПО язык программирования C, так как есть средства для преобразования программы на С в машинный код, а жесткие требования по быстродействию отсутствуют.

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

. Разработка системы диагностирования аппаратных средств


Подпрограммы тестирования прошиты в постоянной памяти микроконтроллера. Для тестирования исправности ПЗУ применяется вычисление суммы по модулю 216 всех заполненных кодом ячеек и сравнение результата вычислений с числом, записанным в ПЗУ.

В таблице 2 приведены данные по обнаруживающей способности тестов ОЗУ и продолжительности их выполнения [9].

Таблица 2 - Тесты ОЗУ



Обнаруживаемые отказы

Тест

Время

В матрице

В дешифраторах


выполнения

Отсут-ствие записи

Ложная запись

Ложное считыва-ние

Отсутст-вие выборки

Много-кратная выборка

Неодно-значная выборка

Сканирующий

4N

-

0

0

0

0

0

Шахматный

4N

+

-

0

-

0

0

Зп и Сч/Зп вперед и назад

5 N

+

+

-

-

-

-

Марширующий

10N

+

+

-

-

-

-

Дополнительная адресация

10N

+

-

-

+

-

+

Крест

128N

+

+

-

-

-

0

Бегущий

2 (N2 +2N)

+

+

+

-

-

-

Пинг-понг

2 (2 N2 +2N)

+

+

+

+

+

+

Галопирующий

2 (3 N2 + 3N)

+

+

+

+

+

+

Примечание:

•  « + » обнаруживает;

•  « - » - не обнаруживает;

•  «0» - неэффективное обнаружение.

Из приведенных в таблице 3 тестов только тесты пинг-понг и галопирующий позволяют обнаруживать все виды отказов.

Тест пинг-понг, очевидно, выполнится быстрее теста галопирующий. Время обращения к одной ячейки памяти примем равным 7 нс (одному такту).

*2(2*204802 + 2*20480) = 11,7 с

Однако учитывая время выполнения и обнаруживаемые отказы, возможно предпочтительнее выбрать комбинацию тестов «зп и сч/зп вперед и назад», «дополнительная адресация» и «сканирующий»?

Тесты выполняются в порядке возрастания времени их выполнения:

•        Сканирующий. Во все ячейки записывается фоновый набор все нули. Далее производится последовательное считывание и сравнение с эталоном (проверка). После этого во все ячейки записывается новый фоновый набор все единицы и вновь производится последовательное считывание и сравнение с эталоном (проверка).

Время выполнения: 7*4*20480 = 573440 нс

•        Запись и считывание/запись вперед и назад. Предварительно во все ячейки записывается фоновый набор все нули (запись). Далее производится последовательное считывание и сравнение с эталоном (проверка). После проверки каждой очередной ячейки в нее записывается информация в обратном коде, т.е. все "1" (считывание/запись). После проверки последней ячейки и записи в нее "1" процедура повторяется от старшего адреса к младшему с чтением единиц, сравнением их с эталоном и записью нулей.

Время выполнения: 7*5*20480 = 716800 нс

•        Дополнительная адресация. Во все ячейки записывается фоновый набор все нули (или все "1"). Далее производится считывание с нулевой ячейки с проверкой (сравнение с эталоном) и записью в эту ячейку противоположной информации. Каждое второе обращение выполняется по адресу, код которого является дополнением к предыдущему.

Время выполнения: 7*10*20480 = 1433600 нс

Тест пинг-понг позволяет обнаружить все виды отказов, однако он имеет большое время выполнения (11 секунд). Учитывая время выполнения и обнаруживаемые отказы, возможно было бы предпочтительнее выбрать комбинацию тестов «зп и сч/зп вперед и назад», «дополнительная адресация» и «сканирующий», общее время выполнение которых составляет менее 1 секунды, однако, реализация их требует больших трудовых затрат и учитывая, что тест ОЗУ будет проходить раз в год (холодильники работают годами) при включении электрической розетки холодильника в сеть, то 11 секунд для теста пинг-понг в свете этих факторов совершенно не кретичны.

. Расчет вероятности безотказной работы


Так как предполагается использование устройства в комнатных условиях, когда на устройство не воздействует повышенная влажность, вибрации и тому подобные неблагоприятные условия среды, поправочные коэффициенты при расчёте надёжность следует принять равными единице. Так как функциональная схема не позволяет точно определить количество будущих паек, учитывая, что микроконтроллер имеет 179 выводов, примем что ожидается 300 паек. Расчет суммарной интенсивности отказов приведен в таблице 3.

Таблица 3

Элемент

Количество, N

Интенсивность отказа, *10-6, 1/час

Нагрузка, R

Результат, *10-6

БИС

1

0,300

0,9

0,27

Пайка

300

0,001

1

0,3

Резистор

10

0,09

1,5

1,35

Реле

1

0,74

0,8

0,59

Индикатор

4

0,4

0,9

1,44

Зуммер

1

0,15

0,2

0,03

Итого

3,98


Суммарная интенсивность отказов = 3,98*10-6 1/час.

Среднее время наработки на отказ составляет T0=1/(3,98*10-6) = 251256 ч.

Вероятность безотказной работы за 1000 часов = 0,996.

Заключение


В результате курсового проектирования разработана микропроцессорная система управления холодильником, соответствующая поставленному заданию. Вероятность ее безотказной работы в течение 1000 часов составляет 99,6%. Разработаны структурная и функциональная схемы, схема программы управления, фрагмент кода программы. Дальнейшее проектирование может быть проведено в направлении улучшения пользовательского интерфейса, например, можно добавить отображение фактических температур в камерах холодильника.

Список литературы


1.      #"801191.files/image010.jpg">

Приложение Б

(обязательное)

Функциональная схема микропроцессорной системы


Приложение В

(обязательное)

Схема программы управления микропроцессорной системы

Приложение Г

(обязательное)

Временные диаграммы работы микропроцессорной системы


Значение параметров:= 40 нс;cqps = 0;d(SH) = 2,5*40 = 90 нс;SH = 7 нсd(schA0_n) = 4*40 = 160 нс;d(scshB0_n) = 5*40 = 200 нс;d(scshA0_n+1) = 3*40 = 120 нс;d(scshB0_n+1) = 120 нс.

Приложение Д: Фрагмент кода программы

int mode; //Выбранный режимmFixTM[]={-26,-24,-22,-20,-18,-16}; //Массив температур в морозильной камереmFixTH[]={4, 6, 8, 10, 12, 14}; //Массив температур в холодильной камереFixTM; //Выбранная температура в морозильной камереFixTH; //Выбранная температура в холодильной камереbufInd[4]; //Отображаемые на индикаторах символы

void changeMode() {++;(mode>5)= 0;= mFixTM[mode];= mFixTH[mode];(&bufInd[0], -FixTM);(&bufInd[2], FixTH);

}