Для увеличения стабильности предусматривается диск на котором расположено максимальное число прорезей. В этом случае одному обороту вала двигателя будет соответствовать большое количество импульсов от датчика. Но и в этом случае для точного измерения частоты вращения требуется значительное время. Проведенные опыты действительно показали значительное отклонение частоты вращения от установленной.
Высшую стабильность удержания частоты вращения обеспечивает способ измерения периода импульсов от датчика. МК имеет в своей архитектуре соответствующую аппаратную и программную поддержку.
Схема электрическая принципиальная представлена в графической части лист1.
Порты Р0 и Р2 МК используются в режиме внешней памяти. Младшие разряды адреса ячейки памяти запоминаются в регистре адреса (DD9) импульсом ALE.
Блок переадресовки выполнен на элементах DD6 и DD7 и выполняет функцию переключения адресов в соответствии с таблицей 3.1.
Таблица 3.1
Исходный адрес | Рабочий адрес | ||
ПЗУ | ОЗУ | ПЗУ | ОЗУ |
0000Н | 8000Н | 8000Н | 0000Н |
По сигналу RESET=0 RS – триггер на элементах DD7.3 – DD7.4 установлен в единичное состояние (на выводе 13 DD7.4 уровень логического нуля) и производится выбор ПЗУ (DD12). После отпускания кнопки сброса (SA1) триггер сохраняет свое состояние и импульсом PSEN считывается 1-й байт команды перехода из ПЗУ. Триггер удерживается в единичном состоянии сигналом с выхода DD6.1 (А15=0 => А15=1), несмотря на наличие импульса PSEN на входе 1 элемента DD7.2.
В следующих двух обращениях считывается из ПЗУ адрес перехода 8000Н и выполняется команда SJMP 8000H.
При чтении из ячейки 8000Н первого байта команды МК выдает адрес, в котором А15=0, следовательно на выходе DD6.1 формируется низкий уровень. Импульсом PSEN формируется положительный импульс на выходе DD7.2 и триггер переключается. Так как А15=1, то на выходе DD6.1 присутствует низкий уровень, следовательно на выходе DD6.2 – высокий и несмотря на то, что триггер переключился выбор ОЗУ не производится. Выбор ОЗУ будет производится если А15=0 и считывание команд производится импульсом PSEN.
Порты Р4 и Р5 используются для подключения клавиатуры и дисплея. В плате используется клавиатура формата 4х4 и четырех разрядный дисплей динамического типа. Разряды Р4.3 – Р4.0 являются разрядами сканирования клавиатуры и одновременно разрядами выбора индикатора. Сигналы выбора индикатора («бегущий ноль») подаются на входы усилителей (DD10). Низкий уровень с выхода DD10 производит выключение транзистора, через который подается на общий анод выбранного индикатора напряжение +5В.
Сигналы сегментов с выходов порта Р5 через токовые усилители DD4 поступают на шину сегментов С0 – С7 индикаторов. Резисторы R17 – R24 определяют значения амплитуды импульса тока, протекающего через сегменты.
Разряды Р4.7 – Р4.4 являются входами сигналов опроса клавиатуры.
С помощью элементов DD11.1 – DD11.2 формируется сигнал запроса прерывания от клавиатуры, поступающий на вход INT0 МК.
ИМС DD5 является преобразователем уровней для последовательного канала.
Элементы источника питания:
VD3 – диод выпрямителя;
С5 – С8 – сглаживающий фильтр;
DD3 – стабилизатор напряжения.
Трансформатор блока питания вынесен в отдельный блок, совмещенный вилкой питания.
Соединение с «внешним миром» производится с помощью разъемов.
Разъем Х7 предназначен для соединения с СОМ – портами компьютера.
На контакты разъемов Х1 выведены входы порта Р6 и входы эталонных питания и земли.
На контакты разъема Х5 выведены линии от порта Р3.
На контакты разъема Х4 выведены линии от порта Р1.
Разъем Х8 используется для подключения блока трансформатора.
Оптопара VD1 VD2 является датчиком частоты вращения якоря двигателя. Фотодиод VD1 формирует токовые импульсы при прохождении шторки освещением от светодиода VD2. Импульс с VD1 открывает транзистор VT1 тем самым формируя импульс на его коллекторе.
Управление двигателем происходит при помощи DD1 (ИМС управления реверсивными коллекторными двигателями). Режимы работы представлены в таблице 3.2.
Таблица 3.2
Режим работы | IN1 | IN2 | OUT1 | OUT2 |
Тормоз | 1 | 1 | L | L |
Движ/Рев | 0 | 1 | L | H |
Рев/Движ | 1 | 0 | H | L |
Стоп | 0 | 0 | ¥ | ¥ |
На входы DD1 поступают логические уровни «0» «1», что выбирает режим работы двигателя, подключенного к выходам DD1. С1 – С4 – сглаживающие фильтры.
Переменным резистором R8, соединенным последовательно с генератором, подается нагрузка на двигатель. Резисторы R5 R9 (R5=R9) соединены общим проводом, а с других концов снимается аналоговое значение напряжения для определения нагрузки. В зависимости от направления вращения генератора ток в цепи будет протекать в двух направлениях, следовательно, значение потенциалов напряжения на R5 R9 будут противоположны, но равны по значению. Это обеспечивает измерение напряжения в реверсном режиме работы двигателя.
Блок схема алгоритма представлена в графической части лист 2.
Главная программа зациклена и представляет собой блок процедуры индикации. Программы измерения частоты вращения двигателя и обработки нажатия клавиш выполняются прерывая основную программу индикации прерываниями от измерителя частоты и клавиатуры соответственно. После выполнения программ обработки прерываний программа индикации продолжает работу с места ее прерывания.
Подпрограмма (ПП) обработки прерывания от измерителя (INT1) вначале выполнения проверяет повторное вхождение в ПП. При первом вхождении осуществляется запуск измерителя и выход. При повторном вхождении измеренное значение длительности периода импульса от датчика запоминается, сравнивается с заданным значением. Если измеренное значение меньше заданного тогда значит частота вращения снизилась и происходит включение двигателя, иначе двигатель отключается. После чего анализируется режим индикации: обороты двигателя или индикация нагрузки приложенной к двигателю с помощью генератора. В зависимости от сделанного выбора измеренное значение частоты вращения или нагрузки преобразовывается в позиционно-десятичное значение и выдается в индикатор. Затем происходит выход из ПП.
В ПП обработки прерывания от клавиатуры (KLAV) определяется нажатие функциональной клавиши. Если клавиша не функциональная то выполняется сдвиг индикационных ячеек влево и запись кода нажатой клавиши в последнею индикационную ячейку, далее выход. Если же клавиша функциональная производится определение какая именно нажата для этого служат четыре блока решения, если функциональность клавиши не определится то значит нажата клавиша «реверса» при нажатии которой осуществляется реверс направления вращения якоря двигателя и выход. Далее перечислены действия по нажатию функциональных клавиш, после выполнения которых ПП завершается:
- клавиша «удалить» - сдвиг индикационных ячеек в право и запись в старшую ячейку нуля;
- клавиша «старт» - преобразования введенного числа оборотов в секунду в длительность периода импульсов с датчика;
- клавиша «стоп» - остановка двигателя;
- клавиша «режим» - переключение режима индикации частоты вращения / подаваемой нагрузки.
В программе используются символические имена присвоенные ячейкам ОЗУ:
st1 data 52h
номер сдвига индикационной ячейки n_sd data 53h
введенная частота вращения якоря двигателя obor data 54h
делимое 1-й байт chi_3 data 55h
делимое 2-й байт chi_2 data 56h
делимое 3-й байт chi_1 data 57h
делитель 1-й байт zn_h data 59h
делитель 2-й байт zn_l data 5ah
частное 1-й байт rez_h data 5bh
частное 2-й байт rez_l data 5ch
результат деления 16/8 rezul data 5dh
измеренная длительность импульса мл. байт dli_i_l data 5eh
измеренная длительность импульса ст. байт dli_i_h data 5fh
заданная длительность импульса мл. байт dli_l data 60h
заданная длительность импульса ст. байт dli_h data 61h
временная ячейка temp data 62h
счетчик паузы выдачи измеренного значения indik data 63h
Используемые биты флагов перечислены ниже:
повторный вход в п.п. измерения периода импульса flag bit 00h
индикация нажатия функциональной клавиши f_ind bit 01h
функциональная клавиша «реверс» f_rev bit 02h
направление вращения f_nap bit 03h
вкл./выкл. двигатель f_rab bit 04h
индикация обороты/нагрузка f_rez bit 05h
функциональная клавиша «режим» f_rezind bit 06h
Деление 24-х битного числа на 16-и битное результат 16 бит, реализовано в подпрограмме div24. Деление многобайтного числа на многобайтное реализуется по принципу вычитания делителя из делимого со сдвигом последнего влево, с возможностью восстановления делимого. Перед процедурой деления в ячейки делителя записывается число в диапазоне 0-0fffh. В начале деления происходит: сдвиг делителя на четыре разряда влево это необходимо для деления 24/16, запись в частное 10h для определения окончания деления, запись в ячейки делимого число 1000000. В начале цикла деления производится сдвиг делимого влево на один разряд, а так же сдвиг влево частного и запись в стек значений флагов переносов. Далее из старшей части делимого вычитаем делитель, в зависимости от знака переноса в частное записывается «0» или «1» и сохранение делимого. Проверка переноса при сдвиге делимого и запись в частное «1» если перенос был. Проверка окончания деления путем проверки восстановленного значения флага переноса при сдвиге частного. После окончания деления результат деления находится в ячейках результата.