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

Использование прочих датчиков и энкодеров и пользовательских блоков к ним
Ответить
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

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

Сообщение 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]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось eugeneb 05 фев 2018, 20:58, всего редактировалось 6 раз.
С уважением,
Евгений Бобков
Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03 фев 2017, 12:23

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

Сообщение AVGN »

eugeneb, есть возможность чиркнуть пару строчек? -пример применения на практике вашего труда.
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

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

Сообщение eugeneb »

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

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

Завтра дам больше информации.
С уважением,
Евгений Бобков
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

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

Сообщение 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.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось eugeneb 01 дек 2017, 09:15, всего редактировалось 1 раз.
С уважением,
Евгений Бобков
vovka1973
Подполковник
Сообщения: 1202
Зарегистрирован: 14 фев 2016, 14:16
Откуда: kazahstan
Благодарил (а): 32 раза
Поблагодарили: 6 раз

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

Сообщение vovka1973 »

eugeneb писал(а):Обновил версию до v0.3Добавлен выход DIR.
объясните для чего он и что дает ,ведь есть блок енкодер ,просто чтоб не было помех использую опторазвязку
Изображение
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

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

Сообщение eugeneb »

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

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

А, если вы спросили про сигнал DIR - то это просто текущее мгновенное направление вращения.
Последний раз редактировалось eugeneb 12 мар 2018, 22:22, всего редактировалось 1 раз.
С уважением,
Евгений Бобков
vovka1973
Подполковник
Сообщения: 1202
Зарегистрирован: 14 фев 2016, 14:16
Откуда: kazahstan
Благодарил (а): 32 раза
Поблагодарили: 6 раз

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

Сообщение vovka1973 »

eugeneb писал(а): 11 дек 2017, 15:59Он полностью аппаратный. Не затрагивает ни программу пользователя, ни прерывания контроллера.
а как на ноль сбрасывать ? в блоке енкодер есть вход ,а здесь как реализовать?
Изображение
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

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

Сообщение eugeneb »

vovka1973 писал(а): 07 мар 2018, 18:07а как на ноль сбрасывать ? в блоке енкодер есть вход ,а здесь как реализовать?
Вы про другие (программные) блоки говорите. В этом - никак. Таково аппаратное
ограничение Атмел.
Только сбросив весь контроллер.
С уважением,
Евгений Бобков
vovka1973
Подполковник
Сообщения: 1202
Зарегистрирован: 14 фев 2016, 14:16
Откуда: kazahstan
Благодарил (а): 32 раза
Поблагодарили: 6 раз

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

Сообщение vovka1973 »

eugeneb писал(а): 10 мар 2018, 19:26Вы про другие (программные) блоки говорите. В этом - никак. Таково аппаратное
ограничение Атмел.
Только сбросив весь контроллер.
тогда я наверно не понял зачем он нужен ,я хотел скоростной счетчик импульсов сделать
Изображение
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

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

Сообщение eugeneb »

vovka1973 писал(а): 10 мар 2018, 20:08я хотел скоростной счетчик импульсов сделать
Он квадратурные импульсы считает (пары импульсов, сдвинутых на 90 градусов), не одиночные.
А насчёт одиночных - есть тут одна идейка... может сделаю позже.
С уважением,
Евгений Бобков
vovka1973
Подполковник
Сообщения: 1202
Зарегистрирован: 14 фев 2016, 14:16
Откуда: kazahstan
Благодарил (а): 32 раза
Поблагодарили: 6 раз

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

Сообщение vovka1973 »

eugeneb писал(а): 12 мар 2018, 22:21Он квадратурные импульсы считает (пары импульсов, сдвинутых на 90 градусов)
так я и хочу енкодер подключать
E6B2-CWZ6C
Изображение
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

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

Сообщение eugeneb »

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

Постановкой задачи не поделитесь?
С уважением,
Евгений Бобков
vovka1973
Подполковник
Сообщения: 1202
Зарегистрирован: 14 фев 2016, 14:16
Откуда: kazahstan
Благодарил (а): 32 раза
Поблагодарили: 6 раз

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

Сообщение vovka1973 »

eugeneb писал(а): 15 мар 2018, 16:14Постановкой задачи не поделитесь?
да задача простая считать метраж металлопрофиля и при достижения определенного значения резать и продолжать дальше по циклу.
Изображение
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

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

Сообщение eugeneb »

Это задача "конечный автомат".
Вот здесь обсуждались варианты программмирования таких автоматов:
http://forum.flprog.ru/viewtopic.php?f=20&t=2962
С уважением,
Евгений Бобков
vovka1973
Подполковник
Сообщения: 1202
Зарегистрирован: 14 фев 2016, 14:16
Откуда: kazahstan
Благодарил (а): 32 раза
Поблагодарили: 6 раз

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

Сообщение vovka1973 »

eugeneb писал(а): 15 мар 2018, 21:53Это задача "конечный автомат".
нет мне это не подходит. у меня есть там меню уставки реле времени и никаких конечников ,программа написана с энкодером просто подумал что твой блок будет лучше считать так как использует дуе
Изображение
Аватара пользователя
eugeneb
Лейтенант
Сообщения: 486
Зарегистрирован: 15 авг 2016, 11:20
Откуда: Нижний Новгород
Имя: Евгений
Благодарил (а): 1 раз

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

Сообщение eugeneb »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя