Блок управления двигателем на МКРефераты >> Программирование и компьютеры >> Блок управления двигателем на МК
На контакты разъема Х4 выведены линии от порта Р1.
Разъем Х8 используется для подключения блока трансформатора.
3.2. Плата макета.
Оптопара 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 будут противоположны, но равны по значению. Это обеспечивает измерение напряжения в реверсном режиме работы двигателя.
4. Описание алгоритма программы.
Блок схема алгоритма представлена в графической части лист 2.
Главная программа зациклена и представляет собой блок процедуры индикации. Программы измерения частоты вращения двигателя и обработки нажатия клавиш выполняются прерывая основную программу индикации прерываниями от измерителя частоты и клавиатуры соответственно. После выполнения программ обработки прерываний программа индикации продолжает работу с места ее прерывания.
Подпрограмма (ПП) обработки прерывания от измерителя (INT1) вначале выполнения проверяет повторное вхождение в ПП. При первом вхождении осуществляется запуск измерителя и выход. При повторном вхождении измеренное значение длительности периода импульса от датчика запоминается, сравнивается с заданным значением. Если измеренное значение меньше заданного тогда значит частота вращения снизилась и происходит включение двигателя, иначе двигатель отключается. После чего анализируется режим индикации: обороты двигателя или индикация нагрузки приложенной к двигателю с помощью генератора. В зависимости от сделанного выбора измеренное значение частоты вращения или нагрузки преобразовывается в позиционно-десятичное значение и выдается в индикатор. Затем происходит выход из ПП.
В ПП обработки прерывания от клавиатуры (KLAV) определяется нажатие функциональной клавиши. Если клавиша не функциональная то выполняется сдвиг индикационных ячеек влево и запись кода нажатой клавиши в последнею индикационную ячейку, далее выход. Если же клавиша функциональная производится определение какая именно нажата для этого служат четыре блока решения, если функциональность клавиши не определится то значит нажата клавиша «реверса» при нажатии которой осуществляется реверс направления вращения якоря двигателя и выход. Далее перечислены действия по нажатию функциональных клавиш, после выполнения которых ПП завершается:
- клавиша «удалить» - сдвиг индикационных ячеек в право и запись в старшую ячейку нуля;
- клавиша «старт» - преобразования введенного числа оборотов в секунду в длительность периода импульсов с датчика;
- клавиша «стоп» - остановка двигателя;
- клавиша «режим» - переключение режима индикации частоты вращения / подаваемой нагрузки.
5. Описание программы.
В программе используются символические имена присвоенные ячейкам ОЗУ:
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» если перенос был. Проверка окончания деления путем проверки восстановленного значения флага переноса при сдвиге частного. После окончания деления результат деления находится в ячейках результата.