Страница 1 из 1

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 30 ноя 2017, 10:24
eugeneb
Обнаружил, что в Arduino Due можно организовать аппаратный квадратурный декодер со счётчиком.
Наваял пользовательский блок.
http://forum.flprog.ru/viewtopic.php?f=77&t=2932

Параметров нет. Просто читаешь значение счётчика.

Из описания блока:
=============================================
Блок квадратурного счётчика. Только для Arduino Due!
Конфигурирует аппаратные таймеры как квадратурный счётчик - реверсивный 32-разрядный беззнаковый.

Физические квадратурные сигналы от энкодера A и B подаются на входы 2 и 13 Arduino Due.
Номера входов заданы аппаратно и изменить их нельзя.

Счётчик считает число фронтов и спадов обоих квадратурных сигналов - четыре на период.
То есть, если у вашего энкодера три периода на оборот(CPR=3), то счётчик насчитает 12 за оборот(PPR=12).

Текущее подсчитанное значение выдаётся по двум выходам.
На выходе QU значение Unsigned Long Integer 0 до 4294967295.
На выходе QS значение Long Integer от -2 147 483 647 до 2 147 483 647.
Начальное значение на обоих выходах - 0. Изменить нельзя.
Также выход DIR (Boolean) показывает текущее направление вращения.

Материалы для ознакомления:
http://forum.arduino.cc/index.php?topic=140205.75 
http://www.atmel.com/Images....483.pdf

[spoiler]Изображение[/spoiler]

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 30 ноя 2017, 11:47
AVGN
eugeneb, есть возможность чиркнуть пару строчек? -пример применения на практике вашего труда.

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 30 ноя 2017, 16:25
eugeneb
Практики пока нет, только лабораторные опыты. Общую идею использования блока в FLProg можно понять из прикрепления в предыдущем посте. Завтра с работы смогу показать получаемые цифирки. 

Пока неясна помехоустойчивость этой фичи. Но с ручным энкодером уже можно применять.

Завтра дам больше информации.

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 04 дек 2017, 15:36
eugeneb
Обещанная инфа.

Играюсь вот с таким мотором:
[spoiler=Спойлер][/spoiler]Это 12-вольтовый ДПТ с магнитным энкодером (CPR=3). Платка внизу - это простейший H-мост. Никакого контроля тока. (Что уже не позволяет организовать качественное управление. Но, другого пока нет).
Пытаюсь сделать сервопетлю на Ардуино. Взял Due, потому что в ней у процессора частота 84МГц.
Сразу встал вопрос о квадратурном декодере для обратной связи. Сочинил программный:
[spoiler=Спойлер][/spoiler]Получилось очень плохо. Он ловит все помехи и показания счётчиков UP и DOWN очень быстро начинают расходиться.
И тут я случайно обнаружил, что у Due таймеры имеют режим квадратурного декодирования. Так и родился этот пользовательский блок. Вот он в проекте FLProg:
[spoiler=Спойлер][/spoiler]
Вот вывод блока:
[spoiler=Спойлер][/spoiler]
Слева знаковый выход, справа - беззнаковый. Вал кручу вручную.

Добавлено (04.12.2017, 15:36)
---------------------------------------------
Обновил версию до v0.3
Добавлен выход DIR.

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 10 дек 2017, 09:00
vovka1973
eugeneb писал(а):Обновил версию до v0.3Добавлен выход DIR.
объясните для чего он и что дает ,ведь есть блок енкодер ,просто чтоб не было помех использую опторазвязку

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 11 дек 2017, 15:59
eugeneb
Он полностью аппаратный. Не затрагивает ни программу пользователя, ни прерывания контроллера.
Соответственно ожидается большое быстродействие. Думаю должны быть сотни килогерц. А может и мегагерцы. Мне проверить пока не на чем.

А опторазвязка действительно снижает уровень помех за счёт того, что пользуется токовым сигналом (низкоомный вход) и за счёт тормознутости оптронов (естественный ФНЧ). 

А, если вы спросили про сигнал DIR - то это просто текущее мгновенное направление вращения.

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 07 мар 2018, 18:07
vovka1973
eugeneb писал(а): 11 дек 2017, 15:59Он полностью аппаратный. Не затрагивает ни программу пользователя, ни прерывания контроллера.
а как на ноль сбрасывать ? в блоке енкодер есть вход ,а здесь как реализовать?

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 10 мар 2018, 19:26
eugeneb
vovka1973 писал(а): 07 мар 2018, 18:07а как на ноль сбрасывать ? в блоке енкодер есть вход ,а здесь как реализовать?
Вы про другие (программные) блоки говорите. В этом - никак. Таково аппаратное
ограничение Атмел.
Только сбросив весь контроллер.

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 10 мар 2018, 20:08
vovka1973
eugeneb писал(а): 10 мар 2018, 19:26Вы про другие (программные) блоки говорите. В этом - никак. Таково аппаратное
ограничение Атмел.
Только сбросив весь контроллер.
тогда я наверно не понял зачем он нужен ,я хотел скоростной счетчик импульсов сделать

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 12 мар 2018, 22:21
eugeneb
vovka1973 писал(а): 10 мар 2018, 20:08я хотел скоростной счетчик импульсов сделать
Он квадратурные импульсы считает (пары импульсов, сдвинутых на 90 градусов), не одиночные.
А насчёт одиночных - есть тут одна идейка... может сделаю позже.

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 14 мар 2018, 16:20
vovka1973
eugeneb писал(а): 12 мар 2018, 22:21Он квадратурные импульсы считает (пары импульсов, сдвинутых на 90 градусов)
так я и хочу енкодер подключать
E6B2-CWZ6C

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 15 мар 2018, 16:14
eugeneb
vovka1973 писал(а): 14 мар 2018, 16:20E6B2-CWZ6C
Такой замечательно подойдёт.
А то что нет сброса в ноль, так это не проблема. Это просто
математический трюк. Заведите переменную, которая будет содержать
в себе значение, которое надо считать нулём. И разница между текущим значением счётчика и
этой переменной покажет истинное значение энкодера. "Ноль" можно сдвигать ("сбрасывать") меняя
значение в этой переменной. То есть сброс в ноль выглядит как запись текущего значения счётчика в эту переменную.

Постановкой задачи не поделитесь?

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 15 мар 2018, 16:49
vovka1973
eugeneb писал(а): 15 мар 2018, 16:14Постановкой задачи не поделитесь?
да задача простая считать метраж металлопрофиля и при достижения определенного значения резать и продолжать дальше по циклу.

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 15 мар 2018, 21:53
eugeneb
Это задача "конечный автомат".
Вот здесь обсуждались варианты программмирования таких автоматов:
http://forum.flprog.ru/viewtopic.php?f=20&t=2962

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 16 мар 2018, 15:36
vovka1973
eugeneb писал(а): 15 мар 2018, 21:53Это задача "конечный автомат".
нет мне это не подходит. у меня есть там меню уставки реле времени и никаких конечников ,программа написана с энкодером просто подумал что твой блок будет лучше считать так как использует дуе

Аппаратный квадратурный счётчик в Arduino Due

Добавлено: 16 мар 2018, 19:53
eugeneb
Главное отличие этого счётчика от других на этом форуме то, что он аппаратный и поэтому
ожидается большое быстродействие. Но какое - мне измерить не удалось из-за отсутствия квадратурного генератора. Ещё в нём есть возможность задействовать аппаратную-же
противопомеховую фильтрацию. Но это пока в блоке не реализовано.