E-mail: avrdoc@yandex.ru |
|
|
Шаг | Желтый | Красный/Белый | Желтый/белый | Красный | Шестнадцатеричное число |
1 | 1 | 0 | 0 | 1 | 9 |
2 | 1 | 1 | 0 | 0 | С |
3 | 0 | 1 | 1 | 0 | 6 |
4 | 0 | 0 | 1 | 1 | 3 |
Описание программы (avr360.zip)
Для генерации прерываний каждые 100 uS программа использует шестнадцатиразрядный таймер с функцией захвата. При обработке прерывания в PORTB выводится новое значение шага. Значения шагов хранятся во Flash памяти. При запуске программы они копируются в ОЗУ. Этим достигается более быстрый доступ и максимальная производительность по скорости.
В данном варианте подпрограмма обработки прерывания занимает семь циклов. Плюс четыре цикла на вход в подпрограмму и четыре цикла на выход. Всего 15 циклов. Управление шаговым двигателем требует не более 2 uS. Если прерывания осуществляются через каждые 100 uS, то на работу с шаговым двигателем тратится только 2% вычислительной мощности процессора.
В этом примере значения для шагового двигателя хранятся в ОЗУ по адресу 0100 (hex). Старший байт адреса ОЗУ – константа и, только первые четыре бита младшего байта используются для доступа к адресной информации. Смотрите рисунок 2.
Младший полубайт (четыре бита) переменных представляет собой реальное значение, используемое для управления двигателем, а в старшем полубайте находится адрес следующего значения.
Рисунок 2. Адреса и значения для шагового двигателя.
Благодаря использованию данного метода может быть достигнута максимальная скорость в комбинации с минимумом процессорных ресурсов.
Ресурсы
Таблица 2. Использование памяти и процессора
Функция | Размер кода | Циклы | Использование регистров | Прерывания | Описание |
Main | 38 слов | - | R16,XL,XH,ZL,ZH | - | Программа инициализации и пример |
OC1A | 10 слов | 13 + возврат | R16,XL,XH | Timer1 Output Compare | Вывод значения шагового двигателя и расчет следующего значения |
Всего | 48 слов | - | - | | |
Таблица 3. Использование периферийных устройств.
Периферия | Описание | Разрешенные прерывания |
4 вывода I/O | Выводы управления шаговым двигателем | |
Timer 1 | Генерирует прерывания от таймера для выработки частоты шагового двигателя | Timer 1 Output Compare A |