Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РПЗ.docx
Скачиваний:
155
Добавлен:
23.03.2016
Размер:
9 Мб
Скачать
☆

3.3.2 Основная программа микроконтроллера.

При запуске микроконтроллера сначала выполняется подпрограмма контроля функционирования, и только потом настраиваются выводы и таймеры (Рис 3.3.3):

Рис 3.3.3

После завершения всех настроек запускается бесконечный цикл, который работает непрерывно, во время приёма сигналов от ПК, и отправки управляющих сигналов драйверам (Рис 3.3.4):

Рис 3.3.4

Прерывания в этой части программы не используются, поскольку в МК предусмотрены только 2 вектора прерываний по низкому уровню на выводах. (а нам требуется как минимум 3). Ещё одна причина, почему не используются прерывания: в случае их использования время простоя будет не столь большим, чтобы выполнить какие-либо другие операции, к тому же дополнительные операции отсутствуют, в конце концов бОльшую часть времени (во время выполнения подпрограммы ветвления) флаг прерывания будет сброшен.

Как было ранее решено, для инкремента микро-шага ШД, ПК посылает импульс (длительностью около 0,1 мс) на ножку MxLi. Для примера взят X-двигатель, общее обозначение: Mx. Также ПК может задать направление вращение подав логический ноль, либо логическую единицу на ножку MxLn. Для принятия импульса используется флаг Rf, чтобы определить его передний фронт.

Итак, если посмотреть на рис 3.3.4, то можно увидеть 3 одинаковых алгоритма, следующие друг за другом. Каждый из этих алгоритмов опрашивают соответствующие своему двигателю выводы, на предмет наличия переднего фронта на ножке Li. Если это событие происходит: запускается подпрограмма ветвления для текущего двигателя.

Программа ветвления: это алгоритм, по которому выбирается один из 16-ти комбинаций управляющих сигналов для требуемого такта и текущего двигателя. Он начинается с инкремента или декримента (в зависимости от соответствующего входного сигнала от ПК) регистра, который хранит номер текущего такта. Далее начинается выбор алгоритма тактN. В Assembler нет оператора case, да и в С этот оператор не оптимизирован, для нашей задачи МК потребовалось бы около 100 тактов для выбора соответствующего алгоритма. Поэтому я написал собственный алгоритм выбора по дереву путей, посредством которого требуется всего 16 тактов для выполнения той же задачи.

В конце запускается один из 16-ти алгоритмов установки управляющих сигналов (Подпрограммы такт0..такт15). В которых устанавливаются требуемые логические сигналы и уровни ШИМ ранее заданные в процессе настройки. Кроме того в начале каждого алгоритма тактN посылается форсирующий импульс: уровень ШИМ кратковременно устанавливается на 100%. Длительность этих импульсов для каждого такта затабулированны, смотрите выводы из математической модели.

3.3.3 Настройка уровней шим для соответствующих уровней токов.

Эта часть программы предназначена для настройки тех величин, которые не могут быть выведены из теоретической модели, их значения можно найти только практическим путём. К ним относятся уровни ШИМ для табличных значений токов: Inom*0.38=1,06А, Inom*0.707=1,98А, Inom*0.92=2,59 А, Inom*1=2,8 А.

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

Настройка осуществляется для каждого двигателя, поскольку в общем случае они могут быть различными. В целом нужно настроить 4 тока для 3-х двигателей, итого 14 значений. И для этого на модуле управления предусмотрена кнопка и 2 светодиода. После нажатия на кнопку, выполнение основной программы останавливается, запускается следующий обработчик прерываний (Рис 3.3.5):

Рис 3.3.5

Из рисунка видно, в корневом алгоритме настраиваются по очереди токи всех 3-х двигателей. 1-й светодиод сигнализирует о номере текущего двигателя, если он потух, значит контроллер ждёт подачи команд. 2-й светодиод сигнализирует о номере текущего тока. Здесь часто используется мигание соответствующего светодиода, для информировании пользователя о текущем токе или двигателе. Также используется различная длительность нажатия кнопки, таким образом расширяя её функциональную вариативность.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]