Как правильно составить алгоритм работы м устройства
Перейти к содержимому

Как правильно составить алгоритм работы м устройства

Разработка алгоритмов работы устройства

Разработка алгоритма заключается в пошаговом описании работы модуля и представлении его работы в виде граф-схемы.

Приведем описание пошаговой работы модуля в словесном виде:

Выборка данных снятых со схемы и обработанных с помощью АЦП;

Нахождение точки пересечения сигнала с нулем;

Нахождение точки пересечения фазы с нулем;

Локализация (определение номера) тиристора;

Нахождение максимального значение сигнала;

Сравнение максимального значения с аварийными и предаварийными значениями;

Нарастить счетчик и вернуться в пункту 2.

Граф-схема алгоритма работы модуля реализующая описанный выше алгоритм работы изображена на рисунке 4.3.

Граф-схем алгоритма работы модуля

Рисунок 4.3 Граф-схем алгоритма работы модуля

Прием, передача данных по USART’у, чтение данных с АЦП осуществляются по прерываниям от АЦП и USART’а. Граф схемы алгоритмов обработки прерываний показаны на рисунках 4.4 — 4.6.

Алгоритм обработки прерывания по завершению преобразования АЦП

Рисунок 4.4 Алгоритм обработки прерывания по завершению преобразования АЦП

Профессиональное построение блок-схем для программ

Не спешите скачивать, давайте проведем маленькую лекцию по этим же блок-схемах.

Блок-схема это графическое отображение решения задачи (важно запомнить).

И так, буду объяснять как программист программисту, по моему мнению блок-схемы можно использовать когда алгоритм не реально держать в голове (10-20 if else) вот тогда то и приходит такая мысль как записать это, в тот же блокнот, или на бумаге, что вполне приемлемо и ничего такого здесь нет. В нашем случае давайте использовать блок-схемы.

Обозначения

image
Такой овал обозначает обычно начало и конец, к примеру <?php и ?>.
image
Данный блок обозначает объявление переменных. Если у вас сильно типизированный язык программирования то этот блок обычно всегда есть в ваших программах, лично я использую слабо типизированные что позволяет мне объявить тип и название переменной сразу при присваивании её какому-то значению.
image
Собственно вывод результат на экран или продолжение следующего действия.
image
Ну, и наконец, наше условие ради чего мы здесь и собрались. Может принимать только true or false.

А теперь запускаем yEd
file -> new
По средине будет наша блок-схема, а вот справа отображены наши элементы которые нам будут нужны.
Перетаскивать элементы можно справа на белый лист, что бы провести стрелочку нужно: на элемент, который стоит по средине нажать и отвести мышку от него, при этом в поле edge types можно выбрать тип стрелочки. Вот так у меня получилось реализовать авторизацию пользователя на сайте в помощью блок-схемы:
image

Заняло у меня это 5 минут. Но за то теперь я точно знаю что и как мне нужно будет делать. А когда программа сложная то сделав блок-схему уже можешь сразу писать код и не заглядывая туда, т.к. только что сам написал эту программу, но визуально!
Вообщем блок-схемы это круто!

Разработка алгоритма работы устройства

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

После установки флага "Одна секунда" проверяется бортовое напряжение. Если присутствует его отклонение от установленного, то включается звуковой сигнал. Если отклонения нет, то измеренные значения перекодируются для индикации в двоично-десятичный код.

Далее программа переходит к проверке кнопок. Поскольку кнопки — многофункциональные, то и их проверка несколько усложнена. Вначале проверяется флаг индикации часов. Если индикация часов отсутствует, то кнопка установки курсора "Разряд" не проверяется, а сразу проверяется кнопка "Режим". Если индикация часов включена и нажата кнопка "Разряд", то к регистру курсора прибавляется единица.

Если кнопка "Режим" нажата, то на единицу увеличивается регистр режима. По значению регистра режима из таблицы выбирается режим индикации (рис. 5).

При индикации напряжения ранее перекодируемые значения напряжения переписываются в регистры индикации.

При индикации часов проверяется, был ли ранее введен курсор в поле индикатора. Если значение регистра курсора — ненулевое, то выполняется установка часов. Если при этом нажата кнопка "Установка", то к выбранному разряду прибавляется единица, а регистры индикации заполняются новыми значениями. Если установка отсутствует, то регистры индикации заполняются значениями текущего времени.

Рис. 4. Алгоритм работы автомобильных часов (начало)

Рис. 5. Алгоритм работы автомобильных часов (продолжение)

Однако заполненные регистры индикации еще не готовы к выводу на индикацию — в них необходимо записать значение курсора. Если значение курсора — ненулевое (т.е. он находится в поле индикатора), то он вводится в младший разряд регистра индикации соответствующего знакоместа.

Если курсор в поле индикатора отсутствует, то обнуляется счетчик цикла записи, и первым импульсом выводится значение запятой для N-го разряда. В принципе, запятая в данном устройстве необходима только одна: для выделения десятых долей напряжения, — однако подпрограмма вывода на индикацию универсальна, и потому нет смысла ее изменять. Значения запятых заранее записываются в позиционном коде в регистр запятой (т.е. если необходимо высветить запятую в пятом разряде индикатора, то записывают единицу в пятый разряд регистра). При этом необходимо помнить, что первыми в импульсной последовательности идут значения крайнего справа разряда.

После вывода запятой последовательно выводится значение N-ro регистра, начиная с младшего разряда. Затем прибавляется единица к счетчику циклов и, если его значение не равно девяти, цикл вывода данных на индикатор повторяется со следующим регистром. После вывода значения последнего регистра программа возвращается к ожиданию установки флага "Одна секунда" во время прерывания.

Прерывание организовано обычным образом: по переполнению таймера TMR0. При частоте кварцевого резонатора 32 768 Гц коэффициент деления предделителя составляет 32, что вместе с коэффициентом деления таймера, равным 256, и циклом, равным 4, дает одну секунду (4x32x256 = 32 768).

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.

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

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.

Разработка алгоритма работы устройства

В работе программы микроконтроллера используются три подпрограммы «Прерывания». Прерывания по переполнению таймера 0 необходимы для отсчета интервалов времени 5мс. Это время, равное четверти периода частоты сетевого напряжения, необходимо для привязки включения модуля АЦП на вершине синусоиды. Прерывание по изменению сигнала на входе КВ0 синхронизирует генератор 5мс с частотой сети. Прерывания по переполнению таймера 1 отрабатывают интервалы времени повторного включения автомата для измерения напряжения в режиме ожидания.

Если сетевое напряжение превышает установленное значение, то автомат выключает реле, индикацию и переходит в режим ожидания.

Повторное измерение напряжения будет выполнено через 2мин. Если величина напряжения не пришла в норму, то следующее измерение будет через 10мин. Последний интервал времени можно устанавливать программно до 8,5ч.

После пуска и инициализации микроконтроллера включается счетчик прерываний, построенный на последовательном включении предварительного делителя с К=4 и таймера ТМК0 с К=256. При использовании кварцевого резонатора на частоту 4,096МГц прерывания по переполнению таймера будут происходить через 1мс. После прерывания инкрементируются счетчики 5мс; 0,5с; 1с. После переполнения счетчиков устанавливаются.

Алгоритм работы программы автомата защиты от перепадов сетевого напряжения показан на рис.2.2—2.5

После пуска и инициализации микроконтроллера (рис.2.2) включается счетчик прерываний, построенный на последовательном включении предварительного делителя с К=4 и таймера ТМК0 с К=256. При использовании кварцевого резонатора на частоту 4,096МГц прерывания по переполнению таймера будут происходить через 1мс. После прерывания инкрементируются счетчики 5мс; 0,5с; 1с. После переполнения счетчиков устанавливаются флаги 5мс; 0,5с; 1с. Отметки времени 5мс используются для индикации одного разряда, а 0,5 и 1с для смены индикации в режиме измерения. Далее процессор производит выборку из памяти ранее установленных минимального и максимального значений. Если индикация разрешена, то выбранные из памяти значения максимальной установки выводятся на индикацию. После вывода на индикацию каждого разряда ожидается установка флага 5мс. После индикации третьего разряда выполняется проверка состояния кнопок. Во время ожидания прерывания постоянно проверяются флаги ошибки и выключения индикации. Если они включены, то программа переходит к выключению индикации.

Алгоритм работы программы автомата защиты от перепадов сетевого напряжения

Рис.2.2 Алгоритм работы программы автомата защиты от перепадов сетевого напряжения

Выключается индикация и проверяется флаг индикации. Если флаг включен, то программа возвращается к индикации, но такая ситуация возможна только после того, как будет нажата кнопка «Индикация». Далее проверяется состояние флага ошибки. Если флаг выключен, но установлен флаг включения АЦП, то производится измерение напряжения и проверяются кнопки. Цикл повторяется с проверки флага включения индикации. Выход из этой подпрограммы возможен или на индикацию по состоянию флага индикации, или на включение таймера 1. Этот таймер отрабатывает временной интервал, через который будет выполнено измерение входного напряжения при установленном флаге ошибки. При этом запрещаются прерывания по входу КВ0.

Рассмотрим подробнее алгоритм работы подпрограммы измерения напряжения, приведенный на рис.2.3. Аналого-цифровое преобразование в микроконтроллере выполняется методом последовательного приближения. На время преобразования величина входного напряжения запоминается на конденсаторе устройства выборки-хранения (УВХ). Поэтому после включения выбранного входа необходима задержка для полного заряда конденсатора.

После выполнения задержки включается АЦП-преобразование. Младший разряд преобразования отбрасывается как недостоверный из-за возможного «дрожания» амплитуды измеряемого напряжения. Двоичное значение младшего восьмиразрядного регистра преобразования проверяется на превышение максимального или минимального установленного значения. В случае положительного результата сравнения выключается выход, который управляет реле нагрузки. Иначе подтверждается включение реле и программа возвращается из подпрограммы. Если девятый разряд равен единице, то сравнение младших восьми разрядов не выполняется и программа выключает реле.

Для уменьшения числа ложных срабатываний автомата при возникновении сетевых помех выключение реле происходит по серии непрерывных ошибок. В зависимости от состояния сети это число может колебаться в небольших пределах. Автором выбрано число непрерывных ошибок, равное пяти, что соответствует задержке выключения исполнительного реле 100мс после возникновения первой ошибки. При заполнении счетчика ошибок включается флаг ошибки. Далее выполняется перекодировка ранее измеренного значения входного напряжения из двоичного кода в двоично-десятеричный, и результат переписывается в текущие регистры.

Проверяются флаги индикации 0,5 и 1с. Если ни один флаг не включен, то каждое измеренное значение выводится на индикацию. В этом режиме хорошо наблюдать стабильность напряжения. Однако при колебаниях напряжения будет происходить мигание от одного до трех разрядов, что затруднит чтение показаний индикатора. Для облегчения чтения индикатора введена возможность обновления индикации через 0,5 и 1с. Если один из флагов включен, то текущие измеренные значения напряжения переписываются в регистры индикации. При этом сбрасываются флаги и следующий вывод на индикацию будет после их включения в блоке подпрограммы установки флагов. Рассмотрим работу подпрограммы проверки кнопок (рис.2.4).

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

Выбор разряда никаких особенностей не имеет, кроме того, что направление перемещения запятой происходит от старшего разряда к младшему. Если включен флаг установки включений индикации, то состояние флага индикации изменяется на противоположное. Если индикация была включена, то она выключается, и наоборот. Если при изменении флага индикации будет включен флаг ошибки, то включаются индикация и исполнительное реле, сбрасывается флаг ошибки и разрешаются прерывания по изменению сигнала на входе. Это происходит в момент окончания времени ожидания. Алгоритм работы подпрограммы установки показан на рис.2.5.

Алгоритм работы программы автомата зашиты от перепадов сетевого напряжения. Измерение напряжения

Рис.2.3 Алгоритм работы программы автомата зашиты от перепадов сетевого напряжения. Измерение напряжения

Рис.2.4 Алгоритм работы программы автомата защиты от перепадов сетевого — напряжения. Проверка кнопок

Алгоритм работы программы автомата защиты от перепадов сетевого напряжения

Рис.2.5 Алгоритм работы программы автомата защиты от перепадов сетевого напряжения

Предлагаемая защита основана на прямом измерении амплитудного значения сетевого напряжения в течение положительного полупериода с выводом измеренного значения на индикатор. Основой устройства является микроконтроллер РIС16F873, имеющий встроенный десятиразрядный АЦП. Использование микроконтроллера и индикатора позволило сделать устройство с установкой порогов срабатывания по минимальному и максимальному напряжению в широких пределах.

Потребляемый прибором ток (без учета тока через обмотку реле) с включенной индикацией — 30мА, с выключенной индикацией — 6мА, что составляет 6,6ВА, а с выключенной индикацией 1,32ВА.

Устройство управляется тремя кнопками. Кнопкой «Разряд» выбирают разряд установки. Индикация выбранного разряда осуществляется перемещением запятой по индикатору. Кнопкой «Установка» увеличивают значение цифровых разрядов (0—2) на единицу, а в разряде режима индикации (3) выбирают необходимый режим. Кнопка «Индикация» необходима для включения-выключения индикации.

Алгоритм работы программы устройства защиты от перепадов сетевого напряжения показан на рис.2.2—2.5.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *