HRP-N3 - серия источников питания с максимальной пиковой мощностью в 350% от MEAN WELL

На обработку сигнала квадратурного энкодера AVR тратит меньше 1 мкс

Журнал РАДИОЛОЦМАН, октябрь 2015

Ioan Ciascai

EDN

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Считывание сигналов квадратурного энкодера на больших скоростях (например, 1 МГц или 1 м/с с разрешением 1 мкм) часто требует использования специальных аппаратных решений. В данной статье показана простая схема, позволяющая выполнять эту функцию с использованием лишь AVR микроконтроллера ATtiny2313A. Разумеется, дополнительно можно через последовательный интерфейс связать микроконтроллер с другими устройствами, или отображать измеренную позицию на ЖК индикаторе, подключенном к порту PB. Кроме того, для индикации ошибок можно добавить один или несколько светодиодов.

На обработку сигнала квадратурного энкодера AVR тратит меньше 1 мкс
Рисунок 1. Считывание квадратурных сигналов с помощью ATtiny2313A.
Индексный сигнал Z необязателен.

При таком подходе первостепенное значение приобретает подпрограмма обработки прерываний. Сигналы A и B она считывает менее чем за 1 мкс. Дифференциальные сигналы AP/AN и BP/BN обрабатываются приемниками SN75157, необходимость в которых отпадет, если выходные сигналы вашего энкодера будут иметь логические уровни.

Процессор сконфигурирован для генерации прерываний по изменению состояния выводов порта PD. В таблице векторов это прерывание занимает последнее место и, следовательно, позволяет обойтись без команды перехода, в результате чего время обслуживания прерывания сокращается на 2-3 такта (100-150 нс).

Операция «исключающее ИЛИ» между предшествующим и текущим сигналами (AOLD ⊕ BNEW или ANEW ⊕ BOLD) позволяет определить, инкрементировалась или декрементировалась текущая позиция вала относительно предыдущей. Здесь AOLD и BOLD – сигналы на выходах A и B до изменения состояния, а ANEW и BNEW – значения после прерывания. Обработчик прерываний находится в файле PCIsubroutine1.txt.

Время выполнения программы обработки прерывания составляет 800-850 нс (16-17 тактов). Чтобы свести это время к минимуму, некоторые регистры были зарезервированы под обработчик прерываний, и не должны использоваться основной программой:

  • R10 для хранения значения SREG и проверки активизации нового прерывания;
  • R11 и R12 для нового и старого состояний;
  • R24 и R25 для хранения текущего положения вала энкодера.

Для вычисления текущего положения требуется всего один машинный такт. Недостатком является то, что количество позиций не может быть больше 65536. Можно, конечно, отвести под позицию энкодера 3 или 4 байта, но тогда из-за добавления нескольких инструкций время выполнения подпрограммы увеличится до 18-19 тактов. (Используйте регистровые пары R24, R26, R28 или R30).

Перед тем, как выйти из текущей подпрограммы обслуживания, обработчик прерываний проверяет наличие нового прерывания. О наступлении такого события сигнализирует бит T в регистре SREG. Выполнение этой проверки увеличивает время выполнения на три цикла. Мы проверили работу подпрограммы, используя датчик RB6029 (4000 импульсов на оборот) на максимальной скорости, и не зафиксировали ни одной ошибки.

Прежде чем разрешить прерывания, значение PCIE2 необходимо поместить в регистр R12 (прочтите регистр PIND до включения прерывания PCINT2 и установки флага I в регистре SREG).

Если вы хотите использовать еще и индексный сигнал Z, то для хранения позиции потребуются три регистра, поскольку количество значений достигнет 1,024,000 (4,000 остчетов на оборот, 256 оборотов). Данные, которые должен считывать обработчик, как это можно увидеть в PCIsubroutine2.txt, имеют более сложную структуру. Если текущая позиция инкрементируется при активном индексном выходе Z, длина подпрограммы составит 19 или 20 циклов.

Если индекс Z активен, мы очищаем регистры угловой позиции, инкрементируем счетчик числа оборотов и проверяем, не равнялось ли предыдущее значение углового положения числу 3999. В этой подпрограмме определяются три ошибки, одна из которых свидетельствует о наложении прерываний, а две других связаны с индексной меткой Z (проверка корректности предыдущего углового положения). Регистры счетчиков ошибок rerr1, rerr2 и rerr3 должны быть назначены пользователем. Для инициализации системы запустите подпрограмму InitIndexZ.txt, которая ожидает активности сигнала Z.

Материалы по теме

  1. Datasheet Atmel ATtiny2313A
  2. Datasheet Texas Instruments SN75157
  3. Datasheet ifm RB6029

Загрузки

Программа на ассемблере для микроконтроллера ATtiny2313A

Перевод: AlexAAN по заказу РадиоЛоцман

На английском языке: AVR takes under 1µs to process quadrature encoder

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя