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

Использование прочих датчиков и энкодеров и пользовательских блоков к ним
Ответить
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#1

Сообщение eugeneb » 30.11.2017{, 10:24}

Обнаружил, что в 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
СпойлерПоказать
Изображение
Вложения
8481637.png
Последний раз редактировалось eugeneb 05.02.2018{, 20:58}, всего редактировалось 6 раз.

Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03.02.2017{, 12:23}
Репутация: 56

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

#2

Сообщение AVGN » 30.11.2017{, 11:47}

eugeneb, есть возможность чиркнуть пару строчек? -пример применения на практике вашего труда.
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#3

Сообщение eugeneb » 30.11.2017{, 16:25}

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

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

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

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#4

Сообщение eugeneb » 04.12.2017{, 15:36}

Обещанная инфа.

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

Добавлено (04.12.2017, 15:36)
---------------------------------------------
Обновил версию до v0.3
Добавлен выход DIR.
Вложения
3715266.png
5620236.png
4240364.png
2561651.jpg
Последний раз редактировалось eugeneb 01.12.2017{, 09:15}, всего редактировалось 1 раз.

vovka1973
Майор
Сообщения: 1060
Зарегистрирован: 14.02.2016{, 14:16}
Репутация: 42
Откуда: kazahstan

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

#5

Сообщение vovka1973 » 10.12.2017{, 09:00}

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

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#6

Сообщение eugeneb » 11.12.2017{, 15:59}

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

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

А, если вы спросили про сигнал DIR - то это просто текущее мгновенное направление вращения.
Последний раз редактировалось eugeneb 12.03.2018{, 22:22}, всего редактировалось 1 раз.

vovka1973
Майор
Сообщения: 1060
Зарегистрирован: 14.02.2016{, 14:16}
Репутация: 42
Откуда: kazahstan

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

#7

Сообщение vovka1973 » 07.03.2018{, 18:07}

eugeneb писал(а):
11.12.2017{, 15:59}
Он полностью аппаратный. Не затрагивает ни программу пользователя, ни прерывания контроллера.
а как на ноль сбрасывать ? в блоке енкодер есть вход ,а здесь как реализовать?
Изображение

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#8

Сообщение eugeneb » 10.03.2018{, 19:26}

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

vovka1973
Майор
Сообщения: 1060
Зарегистрирован: 14.02.2016{, 14:16}
Репутация: 42
Откуда: kazahstan

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

#9

Сообщение vovka1973 » 10.03.2018{, 20:08}

eugeneb писал(а):
10.03.2018{, 19:26}
Вы про другие (программные) блоки говорите. В этом - никак. Таково аппаратное
ограничение Атмел.
Только сбросив весь контроллер.
тогда я наверно не понял зачем он нужен ,я хотел скоростной счетчик импульсов сделать
Изображение

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#10

Сообщение eugeneb » 12.03.2018{, 22:21}

vovka1973 писал(а):
10.03.2018{, 20:08}
я хотел скоростной счетчик импульсов сделать
Он квадратурные импульсы считает (пары импульсов, сдвинутых на 90 градусов), не одиночные.
А насчёт одиночных - есть тут одна идейка... может сделаю позже.

vovka1973
Майор
Сообщения: 1060
Зарегистрирован: 14.02.2016{, 14:16}
Репутация: 42
Откуда: kazahstan

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

#11

Сообщение vovka1973 » 14.03.2018{, 16:20}

eugeneb писал(а):
12.03.2018{, 22:21}
Он квадратурные импульсы считает (пары импульсов, сдвинутых на 90 градусов)
так я и хочу енкодер подключать
E6B2-CWZ6C
Изображение

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#12

Сообщение eugeneb » 15.03.2018{, 16:14}

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

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

vovka1973
Майор
Сообщения: 1060
Зарегистрирован: 14.02.2016{, 14:16}
Репутация: 42
Откуда: kazahstan

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

#13

Сообщение vovka1973 » 15.03.2018{, 16:49}

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

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#14

Сообщение eugeneb » 15.03.2018{, 21:53}

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

vovka1973
Майор
Сообщения: 1060
Зарегистрирован: 14.02.2016{, 14:16}
Репутация: 42
Откуда: kazahstan

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

#15

Сообщение vovka1973 » 16.03.2018{, 15:36}

eugeneb писал(а):
15.03.2018{, 21:53}
Это задача "конечный автомат".
нет мне это не подходит. у меня есть там меню уставки реле времени и никаких конечников ,программа написана с энкодером просто подумал что твой блок будет лучше считать так как использует дуе
Изображение

Аватара пользователя
eugeneb
Лейтенант
Сообщения: 481
Зарегистрирован: 15.08.2016{, 11:20}
Репутация: 21
Откуда: Нижний Новгород
Имя: Евгений

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

#16

Сообщение eugeneb » 16.03.2018{, 19:53}

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

Ответить

Вернуться в «Прочие датчики и энкодеры»