Разработка устройства управления мощностью двигателя
Содержание
Введение
1. Анализ задачи
1.1 Функциональная спецификация системы
1.2 Описание интерфейса между системой и пользователем
2. Предварительное проектирование системы
2.1 Разбиение системы на модули
2.2 Соотношение между аппаратными и программными средствами
2.3 Построение структурной схемы аппаратной части системы
3. Проектирование аппаратных средств системы
4. Проектирование программного обеспечения
Заключение
Список использованных источников
Приложения
Введение
Всё возрастающее применение 8-разрядных микроконтроллеров
(МК) семейства HC11 фирмы MOTOROLA во встраиваемых системах управления делает
актуальной разработку относительно недорогих систем отладки, доступных широкому
классу разработчиков.
Разработка нового отладочного средства должна производиться с
учетом уже имеющегося парка отладочных средств и занимать определенную нишу в
потребностях разработчика.
В общем случае, при создании нового электронного устройства,
управляющим элементом которого предполагается использовать микроконтроллер, перед
разработчиком встает ряд задач:
) выбор типа МК (на основании количества необходимых
линий управления, вычислительной мощности, объема памяти, требований к наличию
периферийных устройств, габаритов, энергетических характеристик и прочего);
2) ознакомление со структурой, системой команд и
особенностями функционирования выбранного МК;
) написание и отладка программного обеспечения для МК.
В данном курсовом проекте необходимо разработать
ШИМ-регулятор мощности двигателя постоянного тока типа ДПМ для микродрели на
базе микроконтроллера MC68HC11. Требования, предъявляемые к проектируемой
системе, определяются требованиями потребителей или пользователей, на которых
рассчитывается проектируемое устройство.
Требования пользователя могут быть получены во время встречи
с пользователем с целью выявления его нужд и определения того, какие действия
должна выполнять система.
На первом этапе необходимо получить информацию, касающуюся
того, что система должна делать. Для этого необходимо ответить на следующие
вопросы:
. Каковы общие требования к системе?
2. Каким образом задавать значение требуемой мощности?
. Каким образом ускорить переход к требуемой мощности?
. Каковы требования к сложности и удобству управления?
. Что необходимо предусмотреть для аварийной ситуации?
. Каким образом пользователь узнаёт текущее значение
мощности?
. Что нужно предусмотреть для нормальной работы
микродрели при возобновлении состояния после аварийного останова?
Из ответов на эти вопросы можно сделать вывод относительно
того, что будут представлять собой требования пользователей.
Исходя из заданных данных на курсовой проект, можно выделить
следующие функциональные действия, которые должно выполнять наше устройство:
. Обеспечивать задание мощности двигателя путём выбора
из фиксированного набора значений;
2. Обеспечивать задание мощности двигателя с помощью
двух кнопок и семисегментного индикатора;
. Обеспечивать режим автоповтора;
. Быть несложным в управлении, обеспечивать
максимальное удобство пользователю;
. Аварийный останов;
. Индикация состояния микродрели;
. Плавный разгон двигателя.
1. Анализ
задачи
1.1
Функциональная спецификация системы
Функциональная спецификация включает два основных компонента:
) список функций выполняемых системой;
) описание интерфейса между системой и пользователем.
Так как система проектируется на основе информации,
содержащейся как в требованиях пользователей, так и в функциональной
спецификации, важно, чтобы функции, которые должны отображать требуемое
поведение системы, были описаны достаточно подробно. Проанализируем требования,
которые пользователь предъявляет к устройству, и определим, какие основные
действия должна выполнять система. Таким образом, функциональная спецификация
должна давать ответы на следующие вопросы:
. Какие средства необходимо предусмотреть для
управления системой?
2. Какие средства необходимо предусмотреть для
определения пользователем текущей мощности?
. Какие средства необходимо предусмотреть для
автоповтора?
. Какие средства необходимо предусмотреть для плавного
разгона?
. Какие средства необходимо предусмотреть для
обеспечения аварийного останова?
. Какие средства необходимо предусмотреть для
управления двигателем постоянного тока?
Ответив на эти вопросы, можно приступить к составлению
функциональной спецификации.
Требования пользователя:
. Дрель предназначена для сверления отверстий в
печатных платах.
2. Ряд значений мощности: 0, 1, 2, 3, 4, 5, 6, 7, 8.
Функциональная спецификация:
. Посредством двух кнопок обеспечиваем выбор одной из
8 значений мощности двигателя. Одна кнопка, при однократном её нажатии,
отвечает за увеличение значения мощности на единицу, другая, соответственно, за
её уменьшение. Обеспечивается невозможность выхода за пределы значения
мощности.
2. Номер выбранной мощности индицируется на
семисегментном индикаторе. При включении на индикаторе показывается
"0". Для удобства вывода значений на индикатор используем
семисегментный дешифратор.
. Для включения режима автоповтора используем
удержание какой-либо кнопки. При переходе на требуемую мощность обеспечивается
плавный разгон.
. При включении питания восстанавливается скорость
двигателя, с которой он работал до отключения питания, и разгон производится
так же плавно. Это достигается путём постепенного увеличения мощности до
требуемого уровня.
. Нажатием кнопки останова мгновенно отключается
питание двигателя. Чтобы вновь включить двигатель, нужно снова нажать кнопку
останова.
. Посредством ШИМ, который реализуется с помощью
таймера и прерываний.
Если распределить эту информацию по категориям ВХОДЫ, ВЫХОДЫ
и ФУНКЦИИ, функциональную спецификацию микродрели можно представить в следующем
виде:
. ВХОДЫ.
.1. Кнопка уменьшения мощности.
1.2. Кнопка увеличения мощности.
.3. Кнопка останова
2. ВЫХОДЫ.
.1. Семисегментный индикатор.
2.2. Управление мощностью дрели.
3. ФУНКЦИИ.
3.2. Индикатор индицирует выбранную мощность.
1.2 Описание
интерфейса между системой и пользователем
Важным вопросом при разработке функциональной спецификации является
взаимодействие между пользователем и системой. В системе регулировки мощности
взаимодействие между системой и пользователем осуществляется с помощью кнопок и
семисегментного индикатора (Рисунок 1.1).
Рисунок 1 - Интерфейс между системой и пользователем
Учет человеческих факторов при проектировании должен приводить к
простоте системы и легкости ее использования. Эти цели достигаются посредством
проектирования надлежащего системного интерфейса. На основании списка функций
выполняемых системой определим интерфейс между системой и пользователем.
устройство управление мощность двигатель
Для переключения уровней мощностей предусмотрены две кнопки:
"Ув. мощности" и "Ум. мощности". Для аварийного останова -
кнопка "Останов".
Управление системой производится следующим образом. При
включении микродрели в сеть питания происходит инициализация (мощность = 0).
При нажатии кнопки "Ув. мощности" микродрель начинает работать
(уровень мощности равен 1, или при автоповторе соответствующая). Если перед
работой нужно установить определённый уровень мощности (не 1-ый), нажимается
кнопка "Останов"; кнопками "Ув. мощности" и "Ум.
мощности" задается мощность и затем повторным нажатием кнопки
"Останов" микродрель, плавно разгоняясь, начинает работать на
заданной мощности. Если во время работы нужно быстро перейти к какой-либо
скорости - удерживаем соответствующую клавишу, что вызывает автоповтор. Для
паузы в работе или при аварийной ситуации нажимаем кнопку "Останов".
Для возобновления работы нажимаем эту кнопку повторно.
На семисегментном индикаторе отображается соответствующее
значение мощности.
2.
Предварительное проектирование системы
2.1 Разбиение
системы на модули
Используя предварительные данные, разобьем нашу проектируемую
систему на отдельные модули.
. Системный исполнительный модуль обеспечивает
последовательное исполнение системой функций необходимых для нормального
функционирования нашей системы. Исполнительный модуль содержит программные
средства, необходимые для реализации исполнительной процедуры. Исполнительный
модуль представляет собой программное обеспечение системы.
2. Модуль инициализации. После включения питания
устройства происходит начальная инициализация устройства.
. Модуль мощности уменьшает, увеличивает или задаёт
автоповтор мощности в зависимости от нажатой кнопки.
. Модуль аварийного останова выключает микродрель при
нажатии кнопки останова.
. Входной модуль осуществляет считывание текущего
состояния кнопок и его запоминание (хранение).
. Выходной модуль. Управление мощностью нашего
двигателя.
. Модуль ШИМа управляет переключением частоты ШИМа.
. Модуль индикации: управляет выводом на
семисегментный индикатор текущего значения мощности.
Полученная таким образом модульная структура системы показана
на рисунке 2.
Рисунок 2 - Модульная структура системы
Каждый модуль состоит из набора функций, принадлежащих этому
модулю. Способ распределения функций по конкретным модулям зависит от личного
предпочтения разработчика. Если модуль содержит слишком много функций, он может
быть разделен на несколько модулей. С целью упрощения несколько модулей, каждый
из которых содержит небольшое число функций, могут быть объединены в один
модуль. Модульная структура позволяет легко добавлять функции к системе, а
также изменять или удалять часть системы в любой момент цикла ее
проектирования.
Рассмотрим, как распределяются функции по модулям системы
управления мощности двигателя постоянного тока.
1. Исполнительный модуль состоит из единственной управляющей
функции.
2. Входной модуль включает:
считывание состояния кнопок Ув. /Ум. мощности
считывание состояния кнопки аварийного останова
. Выходной модуль включает:
подача управляющего сигнала на двигатель постоянного тока
вывод на семисегментный индикатор
. Модуль мощности включает единственную функцию задания
мощности в соответствии с нажатием кнопок.
. Модуль инициализации включает:
инициализацию системы при начальном включении (включение
питания);
. Модуль ШИМа управляет формированием импульсов.
. Модуль аварийного останова включает:
прекращение работы двигателя при нажатии на кнопку аварийного
останова
возобновление работы двигателя
. Модуль индикации управляет выводом на семисегментный
индикатор
Полная функционально-модульная структура устройства управления
мощностью двигателем, включающая функции для каждого модуля, показана на
рисунке 3.
Рисунок 3 - Функционально-модульная структура устройства
управления
2.2
Соотношение между аппаратными и программными средствами
Связь между аппаратными и программными модулями системы
устройства управления микродрели представлена на рисунке 4.
Связь между программными модулями и модулем микроконтроллера
показана жирной стрелкой, так как программные модули реализуются как процедуры микроконтроллера.
Поскольку входная информация передается через модуль интерфейса ввода под
управлением программного входного модуля, связь между этими модулями показана
пунктирной линией. Подобным же образом показана связь между программным
выходным модулем и модулем интерфейса вывода.
Рисунок 4 - Связь между аппаратными и программными модулями
Модуль ШИМа имеет аппаратную и программную часть. Программная
часть осуществляет управление ШИМом и задаёт его работу. Входной и выходной
модули необходимо поместить в программную часть. Они непосредственно считывают
(или записывают) из портов (в порты) ввода (вывода) данные и анализируют их.
Модули инициализации проще всего выполнить при помощи программного обеспечения.
Все остальные модули отнесем к аппаратной части.
2.3
Построение структурной схемы аппаратной части системы
На основе функций, выполняемых системой, построим структурную
схему аппаратной части системы. Процессорный модуль является ядром системы. В
нем происходит обработка входной информации и генерация управляющих воздействий
на все компоненты системы. В ПЗУ хранится исполняемая программа и подпрограммы
для обработки прерываний. А в ОЗУ содержаться временные переменные. Также в
отдельный блок можно выделить модуль генератора тактовых импульсов. Обмен
данными между блоком центрального процессора и остальными блоками устройства
управления осуществляется через порты.
Для подключения внешних устройств у микроконтроллера
предусмотрено пять 8-ми разрядных портов.
В нашем случае, периферийными устройствами будут служить:
кнопки, двигатель постоянного тока, семисегментный индикатор. Эти устройства
подключаются к устройству ввода - вывода.
Структурная электрическая схема устройства приведена на
чертеже БГУИ. ХХХХХХ.001 Э1.
3.
Проектирование аппаратных средств системы
Основой аппаратной части является микроконтроллер МС68НС11А8.
В нашем случае микроконтроллер будет работать в
однокристальном режиме, поэтому на вход MODA нужно подать логический
'0', а на вход MODB логическую ‘1’.
Микроконтроллер адресует до 64 Кбайт памяти (адреса $0000-SFFFF), которые делятся на 16
страниц по 4 Кбайта. Полный объем памяти доступен в расширенном режиме, когда к
выводам портов В и С подключается внешняя память. В нашем случае используется
однокристальный режим работы, поэтому доступна только внутренняя память
микроконтроллера: ПЗУ, РПЗУ, ОЗУ, а порты В и С служат для обмена данными с
внешними устройствами. Две последние страницы адресного пространства (адреса $EOOO-$FFFF) занимает внутреннее масочное
ПЗУ, содержимое которого программируется в процессе изготовления
микроконтроллера по заказу пользователя. В ПЗУ будет содержаться наша
программа. РПЗУ размещена по адресам SB600-5B7FF и в данном курсовом проекте не используется ОЗУ
при начальной установке микроконтроллера (процедура RESET) занимает адресное
пространство $OOOO-$OOFF. Распределение адресного пространства памяти микроконтроллера
показано на рисунке 5.
Рисунок 5 - Карта распределения адресного пространства
Служебные регистры определяют конфигурацию и режимы работы
микроконтроллера. Содержимое регистра INIT
(рисунок 6) определяет старшие четыре разряда адреса (номер страницы)
размещения ОЗУ (биты RAM3-RAM0) и блока внутренних регистров (биты REG3-REG0). При начальной установке микроконтроллера биты данного регистра
принимают значения RAM3-RAM0 = 0000 (обращение к странице 0), REG3-REG0 = 0001 (обращение к странице 1). В
данном курсовом проекте значения, установленные после начальной установки
изменяться не будут.
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
RA
|
RA
|
RA
|
RA
|
RE
|
RE
|
RE
|
Рисунок 6 - Служебный регистр INIT (адрес $103D)
Регистр CONFIG определяет конфигурацию микроконтроллера,
разрешая или запрещая использование внутренних ПЗУ, РПЗУ и блока контроля
функционирования Регистр OPTION определяет функционирование отдельных блоков
микроконтроллера. Содержимое регистров HPRIO, INIT, OPTION записывается
непосредственно после начальной установки микроконтроллера и затем может быть
только считано. Исключение составляют только разряды PSEL3-PSEL0 в регистре HPRIO и разряды ADPU, CSEL в регистре OPTION, которые могут
изменяться в процессе работы микроконтроллера путем записи в эти регистры.
Содержимое регистра ONFIG программируется таким же образом, как и содержимое внутреннего
РПЗУ, и может изменяться только в процессе программирования. Этим
обеспечивается его сохранение при отключении питания. Синхронизация
микроконтроллера формируется следующей схемой (рисунок 7).
Рисунок 7 - Схема синхронизации микроконтроллера.
Резистор R1 имеет номинал 10 МОм, конденсаторы С1, С2 - номинал 24 пФ. ZQ - кварцевый резонатор
(частота 8 МГц). Схема синхронизации подключается к выводам XTAL и EXTAL микроконтроллера.
Длительность такта микроконтроллера Тс = 1/Ft определяется генератором
тактовых импульсов (ГТИ). Частота следования тактовых импульсов Ft задается кварцевым
резонатором. При этом частота F, в 4 раза меньше частоты внешнего резонатора или генератора Ft = Fg/4. Импульсы с частотой Ft поступают на выход Е микроконтроллера
и используются для синхронизации работы других устройств системы.
Так как микроконтроллер работает в рабочем режиме (однокристальном
или расширенном), то в процессе начальной установки при включении питания или
поступлении сигнала RESET# = 0 в программный счетчик PC загружаются два байта: старший байт РСН
из ячейки памяти с адресом $FFFE, младший
байт PCL - SFFFF. Эти байты являются адресом первой команды, выполняемой
микроконтроллером после начальной установки. Так как микроконтроллер работает в
однокристальном режиме, данные байты выбираются из внутреннего. При включении
питания требуется время 4064Тс для запуска ГТИ и начального
состояния регистров, после чего начинается нормальная работа микроконтроллера.
Для начальной установки по сигналу RESET#
его длительность должна быть не меньше 4ТС. В курсовом проекте для
обмена данными с внешними устройствами используются параллельные порты В, С и
D, а также вход . Порты A и Е не используются.
К входу подключена кнопка аварийного останова,
посредством которой подаётся немаскируемый сигнал прерывания.
Порт В (регистр PORTB, адрес $1004) используется как 8-разрядный
порт вывода данных. Т.к. в регистре управления PIOC установлено значение
разряда HNDS = 1, то порт В работает в режиме нестробированного вывода, при
котором не происходит формирование стробирующего сигнала на выходе STRB. На
выходы PB0-PB3 подключен семисегментный дешифратор CD4543B фирмы Texas
Instruments, который преобразует двоично-десятичный
код для отображения на семисегментном индикаторе. Из входов микросхемы, помимо
входов данных, особое внимание заслуживают три: LD, BL и Ph. BL - вход, при подаче логической единицы на
который на выходах дешифратора образуется комбинация из всех нулей, что
соответствует очистке семисегментного индикатора. При подаче на вход LD '1' на
выходах дешифратора формируется комбинация для отображения на индикаторе,
соответствующая текущей комбинации, которая подаётся на входы данных. При
подаче ‘0’ на вход LD в независимости от входной комбинации на
входах данных, на индикаторе отображается последняя комбинация, при которой на
LD был подан '1'. Вход Ph отвечает за
вывод комбнации на выходы дешифратора. При подаче на этот вход '1' комбинация
инвертированная.
При подаче неверной комбинации (от 10 до 15) семисегментный
индикатор также очищается.
Дешифратор подключён к индикатору через токоограничительные
резисторы. Семисегментный индикатор подключается с помощью схемы,
представленной на рисунке 8.
Рисунок 8 - Схема подключения семисегментного индикатора
В данном проекте порт С служит для ввода данных - проверка
состояний кнопок уменьшения, увеличения мощности.
Двунаправленный порт D (регистр PORTD, адрес $1008) имеет шесть
выводов PD5-PD0, которые служат входами или выходами данных в зависимости от
установки значения битов в регистре направления DDRD (адрес $1009). В данной
работе, все шесть выводов настроены на вывод данных. На выход PD0 подключён
двигатель постоянного тока. Схема его подключения представлена на рисунке 9.
Рисунок 9 - Схема подключения двигателя постоянного тока
В данной работе был выбран двигатель постоянного тока типа
ДПМ-25-02. Двигатель управляется с помощью малогабаритного полевого транзистора
IRFD024 фирмы International Rectifier. Для управления этим транзистором не
требуется драйвер, так как он надежно открывается напряжением логической 1,
равным 5 В, и нагрузочная способность порта микроконтроллера достаточна для
этой цели. Резистор R2 обеспечивает закрытое состояние транзистора, когда после
включения питания микроконтроллер находится в сброшенном состоянии. При
отсутствии этого резистора в моменты включения питания двигатель может делать
кратковременные рывки. Резистор R1 нужен для ограничения тока перезарядки
затвора полевого транзистора в моменты смены логических уровней. Помимо
ограничения допустимого тока, резистор R1 также влияет на скорость нарастания
напряжения на двигателе. Если поставить на его место резистор меньшего
номинала, то от резких импульсов тока управления начнет страдать
микроконтроллер, давая сбои и зависая. Если ставить резистор с большим
сопротивлением, скорость нарастания напряжения на двигателе может настолько снизиться,
что транзистор перестанет успевать за частотой переключения ШИМа.
Диоды VD2, VD4 служат для подавления резких выбросов напряжения в
моменты переключения транзистора. В отсутствие диодов эти импульсы приводят к
сбоям в работе микроконтроллера. Быстрый диод VD3 необходим для гашения
возможной ЭДС самоиндукции обмотки двигателя. Стабилитрон VD1 защищает шину питания от импульсов
высокого напряжения, с которыми не успевает справляться стабилизатор. Т.к. у
нас используется двигатель ДПМ на напряжение питания 27 В, то питать прибор
следует от источника постоянного нестабилизированного напряжения около 30 В.
Больше 35 В не рекомендуется, так как будет превышено максимально допустимое
входное напряжение стабилизатора КР1157ЕН5Б и конденсатора C2. Для защиты полевого
транзистора от перегрева и выхода из строя из-за более длительной блокировки
вала или коротком замыкании обмотки двигателя служит предохранитель FU1.
В контроллере имеется встроенный таймер. Он реализован на базе
16-разрядного счетчика TCNT (адрес
старшего байта $100Е, адрес младшего байта $100F). Этот счетчик запускается при начальной установке
микроконтроллера, и после запуска его состояние может быть только считано,
например командами LDD, LDX, LDY.
Функционирование таймера определяется 8-разрядными регистрами
управления. В данном курсовом проекте таймер используется для периодической
генерации запросов прерывания. Для разрешения генерации прерывания реального
времени устанавливаем бит RTII регистра TMSK2 (адрес $1024) в 1.
Для прерываний используется специальный флаг RTIF в регистре TFLG2 (адрес $1025). Этот флаг принимает значение RTIF = 1 через заданное время Т = 8192TCKt, где величина коэффициента Кt определяется разрядами RTR1-RTR0 в регистре PACTL (адрес
$1026). Сброс признака RTIF в состояние
0 производится путем записи соответствующего значения в регистр TFLG2.
В данном курсовом проекте разряды RTR1-RTR0 равны '0'. Разряд разрешения запроса
прерывания RTII в регистре TMSK2 имеет значение RTII = 1. Т.к. к
микроконтроллеру подключён кварцевый резонатор с частотой 8 МГц, период работы
схемы генерации прерываний реального времени равен 4.10 мс.
Регистры TMSK2, TFLG2 и PACTL представлены на рисунке 10.
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
|
TOI
|
RTII
|
PAOVI
|
PAII
|
0
|
0
|
PR1
|
PR0
|
TMSK2
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
|
DDRA7
|
PAEN
|
PAMOD
|
PEDGE
|
0
|
0
|
RTR1
|
RTR0
|
PACTL
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
|
TOF
|
RTIF
|
PAOVF
|
0
|
0
|
0
|
0
|
TFLG2
|
Рисунок 10 - Регистры TMSK2, TFLG2 и PACTL
При подаче на РC0 или РC1 логический уровень сигнала ‘0’ соответственно
увеличивается или уменьшается уровень мощности. При подаче '0' на вход вызывается подпрограмма прерывания по
внешнему сигналу.
Разряд РD0 порта D
посредством ШИМа управляют мощностью двигателя. Допустим требуемый уровень
мощности "6”, тогда подаём на этот разряд '1' шесть тактов из восьми.
Оставшиеся два такта подаем уровень '0'. Один такт равен 4,10 мс. Т.е. частота
на выходе ШИМа = 243 Гц, что достаточно для нормальной работы двигателя.
Разряды PB0. PB3 порта B представляют собой двоично-десятичный код 8-4-2-1.
Электрическая принципиальная схема устройства управления мощностью
двигателя представлена на чертеже БГУИ. ХХХХХХ.002 Э3.
4.
Проектирование программного обеспечения
С точки зрения программиста разработанная система управления
состоит из программно доступных регистров микроконтроллера, трёх портов В, C и D и входа . Вся работа системы заключается в
определении состояния входных портов, выполнения определённых вычислений и
выводе данных из микроконтроллера Motorola
(ввод данных в порты).
Блок-схема алгоритма работы программы приведена на чертеже БГУИ.
ХХХХХХ.003 Э8 приложения Б.
Кнопка "Ув. мощности" подсоединена к разряду РС0 порта
С. Когда она нажата в данный разряд поступает логическая '0'. После чего
проверяется на нажатие кнопка "Ум. мощности" дабы по одновременному
нажатию двух кнопок мощность не менялась. Кнопка "Ум. мощности"
подсоединена к разряду PC1 порта С.
В процессе работы системы порт С постоянно опрашивается и значение
текущей мощности в виде двоично-десятичного кода подаётся на разряды PB0-PB3 порта B, к которым через семисегментный дешифратор подключён
семисегментный индикатор.
К разряду PD0 порта D подключён
двигатель постоянного тока. Активный уровень - логическая '1'. Управления
мощностью двигателя реализуется посредством ШИМ. Для установления длительности
импульсов используется встроенный таймер и прерывания реального времени с
периодом 4,10 мс.
Ко входу подключена кнопка "Останов",
при нажатии на которую на вход подаётся '0'. Вызывается немаскируемое
прерывание, в котором запрещается прерывания реального времени и мощность
устанавливается в ноль.
Полный листинг программы приведен в приложении А. В таблице 1
приведена карта памяти для устройства управления мощностью двигателя.
Таблица 1 - Карта памяти
ОЗУ $0000 - $001F $0020 - $00FF
|
Стек Переменные
|
Регистры и
Порты $1002 $1003 $1004 $1008 $1025 $1024
$1026 $1007 $1009
|
PIOC
PORTC PORTB PORTD TFLG2 TMSK2 PACTL DDRC DDRD
|
ПЗУ $E000 - $E082 $E085 - $E0A7
$E0A8 - $E0DA $FFF0 - $FFFE
|
Основная программа Пользовательские
подпрограммы Подпрограмма обработки прерывания Вектора обработки прерываний
|
Заключение
В ходе выполнения курсового проекта было разработано
устройство управления мощностью двигателя согласно заданию.
В пояснительной записке описаны структурная и принципиальная
схема устройства, разработано программное обеспечение. А так же описан алгоритм
функционирования устройства управления мощностью двигателя постоянного тока
посредством ШИМ. По разработанному алгоритму составлена программа.
Список
использованных источников
1. Методическое
пособие по микроконтроллеру семейства М68НС11
2. Микропроцессорная
техника: Учеб. пособие по курсовому проектированию по дисциплине для студ.
спец.40 02 02 "Электронные вычислительные средства" дневной формы
обуч. / А.А. Петровский, М.В. Качинский, А.Б. Давыдов и др. - Мн.: БГУИР, 2005.
- 51 с.: ил. ISBN 985-444-837-1
. Однокристальная
микроЭВМ MC68HC11A8. Техническое описание.
Приложения
Приложение А
Листинг программы:
0001
0000 RAM EQU $0000
1000
REG EQU $1000
e000
ROM EQU $E000
1000
TCNT EQU REG+$OE
*----timer
1023
TFLG1 EQU REG+$23
1022
TMSK1 EQU REG+$22
1025
TFLG2 EQU REG+$25
1024
TMSK2 EQU REG+$24
1026
PACTL EQU REG+$26
0011
*----ports
1004
portb EQU $1004 *регистр данных порта B
1003
portc EQU $1003 *регистр данных порта C
1008
portd EQU $1008 *регистр данных порта D
1002
pioc EQU $1002 *регистр управления портов B и C
1007
ddrc EQU $1007 *регистр определения напр.выв.п.С
1009
ddrd EQU $1009 *регистр определения напр.выв.п.D
*----Маски
0001
minus EQU $01 *м. для выделения бита Уменьшение мощности с порта С[0]
0002
plus EQU $02 *м. для выделения бита Увеличение мощности с порта С[1]
0040
rtif EQU $40 *м. для снятия маски прерывания rtif в рег.tflg2
0010
hnds EQU $10 *м. для установки бита HNDS в регистре PIOС (порт B
-нестробированный вывод, порт С - двунаправленный обмен)
0023
*----RAM
001f
ORG RAM+$1F
001f
STACK RMB 1
0020
08 cnttime FCB $08
0021
01 flag FCB $01
0022
00 power FCB 0
0023
00 razgon FCB 0
0024
00 pwm_skv FCB 0
*----interrupt
fff0
ORG ROM+$1FF0
fff0 e0
a8 VRTI FDB OBRRTI
fff2 e0
bb VIRQ FDB OBRIRQ
fffe
ORG ROM+$1FFE
fffe e0
00 VRST FDB START
*----ROM
e000
ORG ROM
e000 8e 00
1f START: LDS #STACK *Занесение в рег.SP
нач адреса стека
e005 b7 10
26 STAA PACTL *период работы схемы
4,10 мс (Е=2 МГц)
e008 86
00 LDAA #00
e00a b7 10
24 STAA TMSK2 *запрет прерывания реального времени
e00d b6 10
02 LDAA pioc
e010 8a 10
ORAA #hnds
e012 b7 10
02 STAA pioc
e015 86
00 LDAA #$00 *ИНИЦИАЛИЗАЦИЯ ВСЕГО
e017 b7 10
07 STAA ddrc *ПОРТА С НА ВВОД
e01a 86
ff LDAA #$ff *
e01c b7 10
09 STAA ddrd *все выводы порта
D - вывод данных
e01f 86
00 LDAA #0
e021 b7 10
04 STAA portb *семисегментный индикатор показывает
0
e024 b7 10
08 STAA portd *мощность=0,
*----основная программа
e027 96
22 ost: LDAA power *
e029 97
23 STAA razgon *
e02b 86
08 incr: LDAA #$08
e02d 97
20 STAA cnttime *счётчик
циклов = 8
e02f 86
00 LDAA #$00 *
e031 b7 10
24 STAA TMSK2 *запрет прерывания реального времени
e034 b6 10
03 LDAA portc *считываем порт С
e037 94
02 ANDA plus *выделение бита, соответствующего кнопке
"Ув. мощн."
e039 26
09 BNE decr *кнопка не нажата, проверяем кнопку
"Ум. мощн."
e03b 96
22 LDAA power *иначе
e03d 81
08 CMPA #8 *проверяем на выход за пределы
возможного ур-ня мощн. (>8)
e03f 27
03 BEQ decr *если 8 ур-нь - переходим к проверке
кнопки Ум. мощн.
e041 7c 00
22 INC power *если был <8, то увеличиваем переменную
мощности
0076
e044 b6 10
03 decr: LDAA portc
0078 e047 94
01 ANDA minus *выделение бита, соответствующего кнопке
"Ум. мощн."
e049 26
09 BNE indi *кнопка не нажата, выводим текущую
мощность на индикатор
e04b 96
22 LDAA power *иначе
e04d 81
00 CMPA #0 *проверяем на выход за пределы
возможного ур-ня мощн. (<0)
e04f 27
03 BEQ indi *если 0 ур-нь, показываем на индикаторе
e051 7a 00
22 DEC power *иначе уменьшаем переменную мощности
e054 96
22 indi: LDAA power *
e056 b7 10
08 STAA portd *Вывод переменной мощности на индикатор
e059 bd e0
85 JSR pow *переход к подпрограмме формир. вектора
мощн.
e05c 7d 00
21 TST flag *порверяем флаг работы
e05f 27
c6 BEQ ost *если он равен 0, запрещаем прерывания
реального времени
e061 7d 00
23 TST razgon *проверяем значение мощности до
прерывания
e064 27
12 BEQ razr *если равна нулю - переходим к
установлению текущего ур-ня мощн.
e066 7f 00
24 CLR pwm_skv *если не равна - очищаем вектор
мощности
0096 e069 7d
00 23 razg: TST razgon
e06c 27
0a BEQ razr
e06e 86
40 LDAA #rtif *
0099 e070 b7 10
24 STAA TMSK2 *разрешение
прерывания реального времени
e073 bd e0
96 JSR plavn *переходим
к подпрограмме плавного разгона
e076 20
f1 BRA razg *возвращаемся к проверке значения
мощности
e078 86
40 razr: LDAA #rtif *
e07a b7 10
24 STAA TMSK2 *разрешение прерывания реального времени
0105 e07d 7d
00 20 prov: TST cnttime *
0106 e080 27
a9 BEQ incr *цикл закончился - переход к осн. прог.
e082 7e e0
7d JMP prov *цикл не закончился - переход в начало
цикла
*----Подпрограмма формирования вектора мощности
e088 96
22 LDAA power *загружаем в регистр А переменную
мощности
e08a 27
09 BEQ zero *если она равна нулю - выход. Вектор = 0
e08c 78 00
24 vector: LSL pwm_skv *иначе вектор сдвигаем влево
e08f 7c 00
24 INC pwm_skv *увеличиваем на 1
e092
4a DECA *количество итераций = переменной
мощности
e093 26
f7 BNE vector *если счётчик цикла не равен 0,
повторяем цикл
e095
39 zero: RTS *иначе выход из подпрограммы
*----Подпрограмма плавного разгона
e096 78 00
24 plavn: LSL pwm_skv *формируем вектор мощности
e099 7c 00
24 INC pwm_skv *постепенно увеличивая его до
требуемого ур-ня
e09c 7a 00
23 DEC razgon *уменьшаем переменную разгона
0125 e09f 7d
00 20 prov2: TST cnttime *
0126 e0a2 27
03 BEQ exit0 *цикл закончился - переход к осн. прог.
e0a4 7e e0
9f JMP prov2 *цикл не закончился - переход в начало
цикла
e0a7
39 exit0: RTS
*----Подпрограмма обработки прерывания RTIF
e0a8 86
01 OBRRTI: LDAA #%00000001
e0aa 94
24 ANDA pwm_skv *выделяем младший бит Вектора
e0ac b7 10
08 STAA portd *загружаем его в порт D[0]
e0af 76 00
24 ROR pwm_skv *циклически сдвигаем вектор вправо
e0b2 7a 00
20 DEC cnttime *уменьшаем счётчик циклов
e0b5 86
40 LDAA #rtif *
e0b7 b7 10
25 STAA TFLG2 *сброс флага RTIF
e0ba
3b RTI
*----Подпорграмма обработки прерывания IRQ#
e0bb 7d 00
21 OBRIRQ: TST flag *проверяем флаг работы двигателя
e0be 26
0b BNE zapret *если он не равен нулю (равен 1),
останавливаем двигатель
e0c0 86
01 LDAA #1 *иначе
e0c2 97
21 STAA flag *устанавливаем флаг в 1
e0c4 86
40 LDAA #rtif *
e0c6 b7 10
24 STAA TMSK2 *разрешаем прерывание реального времени
e0c9 20
0f BRA exit *выходим из прерывания
e0cb 7f 00
21 zapret: CLR flag *сбрасываем флаг в 0
e0ce 86
00 LDAA #$00 *и
e0d0 b7 10
24 STAA TMSK2 *запрещаем прерывание реального времени
0155 e0d3 b7
10 08 STAA portd *мощность=0
0156 e0d6 96
22 LDAA power *сохраняем текущий ур-нь мощности
e0d8 97
23 STAA razgon *для плавного разгона
e0da
3b exit: RTI *выходим из прерывания