Контроллер оптических линеек / энкодеров (Step/Dir)

Контроллеры, драйверы, датчики, управляющие устройства.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение Сергей Саныч »

Duhas писал(а):программно ловить 4 дискреты порой муторно
Не особо. Даже аппаратно реализуется на простейшей логике. Это не говоря о том, что многие МК имеют готовый вход квадратурного энкодера.
Чудес не бывает. Бывают фокусы.
Duhas
Мастер
Сообщения: 1961
Зарегистрирован: 10 окт 2015, 23:25
Репутация: 285
Настоящее имя: Андрей
Откуда: Красноярск
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение Duhas »

ключевое слово - программно. а про квадратурные входы и логику начинающие обычно не в курсе от слова совсем.
sas_75
Мастер
Сообщения: 463
Зарегистрирован: 10 мар 2015, 11:03
Репутация: 115
Настоящее имя: Сергей
Откуда: Владивосток
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение sas_75 »

Сергей Саныч писал(а):
Duhas писал(а):программно ловить 4 дискреты порой муторно
Не особо. Даже аппаратно реализуется на простейшей логике. Это не говоря о том, что многие МК имеют готовый вход квадратурного энкодера.
Знаю, что для энкодеров есть специальная микросхема LS7184 (правда цена и доставаемость не радуют). Можно на микроконтроллере сделать, а вот на простейшей логике по-быстрому ничего в голову не пришло. Понятно, что без триггеров не обойтись.
Может подкинете схемку в целях саморазвития.
sas_75
Мастер
Сообщения: 463
Зарегистрирован: 10 мар 2015, 11:03
Репутация: 115
Настоящее имя: Сергей
Откуда: Владивосток
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение sas_75 »

Нашел!

Для интересующихся, если упрощенно:
Вложения
энкодер1.JPG (3032 просмотра) <a class='original' href='./download/file.php?id=129779&mode=view' target=_blank>Загрузить оригинал (53.45 КБ)</a>
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение Сергей Саныч »

Вот вариант программной обработки. Всего четыре строчки на Си (можно и в две впихнуть) плюс массив констант на 16 байт.

Код: Выделить всё

// Обработка энкодера. Подключен к входам 0 и 1 GPIOA
volatile int32_t enccnt; // Счетчик энкодера (внешняя переменная)
static uint8_t encdata;

const int8_t select[] = {0, 1, -1, 0, -1, 0, 0, 1, 1, 0, 0, -1, 0, -1, 1, 0};
....
// Собственно, прием данных энкодера
// enccnt инкрементируется или декрементируется при каждом допустимом изменении состояния энкодера.
// Вызываем по таймеру с достаточно высокой частотой, либо опросом в цикле
      encdata |= GPIOA->IDR & 0b11; // Прием данных энкодера в биты 0 и 1. Предыдущее состояние - в битах 2 и 3
      encdata &= 0x0f; // Зачистка лишнего
      enccnt += select[encdata]; // Подсчет с учетом текущего и предыдущего состояния энкодера
      encdata <<= 2; // Текущее - в предыдущее
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение Serg »

sas_75 писал(а):Для интересующихся, если упрощенно:
Просто подключите один канал энкодера к step, а другой к dir и оно будет правильно работать.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение Сергей Саныч »

UAVpilot писал(а):Просто подключите один канал энкодера к step, а другой к dir и оно будет правильно работать.
Будет. Но тогда получится 1 step за цикл, а не 4.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение Serg »

Сергей Саныч писал(а):Будет. Но тогда получится 1 step за цикл, а не 4.
А если эту схему в симуляторе прогнать?.. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
sas_75
Мастер
Сообщения: 463
Зарегистрирован: 10 мар 2015, 11:03
Репутация: 115
Настоящее имя: Сергей
Откуда: Владивосток
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение sas_75 »

Попробуйте. Я ее "графически" проверил. Можно сигнал DIR послать на вход "D" D-триггера, а STEP на его счетный вход. Тогда положительным фронтом STEP данные будут защелкиваться в триггере, а по отрицательному фронту проверять выход триггера. Данные DIR на выходе триггера будут меняться только при смене направления вращения энкодера.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение Сергей Саныч »

UAVpilot писал(а):А если эту схему в симуляторе прогнать?
Будет работать. Единственно, что не совсем "феншуйно", это RC-цепочки на входах логики, надо бы после них ставить элементы с триггером Шмидта на входе, а среди распространенных ЛЭ XOR, я такие не встречал.
Чудес не бывает. Бывают фокусы.
AlexKota19
Опытный
Сообщения: 185
Зарегистрирован: 16 апр 2017, 14:44
Репутация: 20
Настоящее имя: Александр
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение AlexKota19 »

Сергей Саныч писал(а):Но обычно делается, как расписал Михаил - считаются оба фронта обоих каналов. Четырехкратное увеличение разрешения того стоит.
Так и делал в начале, в первых примерах из сети, считалось любое изменения уровня на канале A и B. Но меня насторожило 2 момента, 1-вый не соответствие кол-ва импульсов, 2-ое лишние телодвижения.
Сергей Саныч писал(а):Это не говоря о том, что многие МК имеют готовый вход квадратурного энкодера.
Он есть в Arduino Mega? Ни чего такого не нашел, но может не так искал.
Использую внешние прерывания.
Duhas писал(а):ключевое слово - программно. а про квадратурные входы и логику начинающие обычно не в курсе от слова совсем.
Угу, но все были ими, меня заинтересовали энкодеры/линейки поэтому решил разобраться.
Поэтому не все понимаю, о чем речь, аппаратная реализация - не потяну, а программная, хоть как-то но понимаю.
Сергей Саныч писал(а):Вот вариант программной обработки.
Судя по поиску не понятных вещей "GPIOA->IDR", это STM32. Ни когда не работал.

По плате, плату подключил, подключил все общим плюсом. Она понимает сигналы от платы DXB-55, энкодер видит, но запуск теста с значениями в окнах из потолка, пока ни чего кроме ошибки в драйвере (срыв вала, не успевает сделать и шага) шагового ни чего не дал. С этим разберусь, как говориться нюанс.

Завтра, если доберусь, буду изучать PID и другие настройки.
sas_75
Мастер
Сообщения: 463
Зарегистрирован: 10 мар 2015, 11:03
Репутация: 115
Настоящее имя: Сергей
Откуда: Владивосток
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение sas_75 »

Сергей Саныч писал(а):
UAVpilot писал(а):А если эту схему в симуляторе прогнать?
Будет работать. Единственно, что не совсем "феншуйно", это RC-цепочки на входах логики, надо бы после них ставить элементы с триггером Шмидта на входе, а среди распространенных ЛЭ XOR, я такие не встречал.
Это я упрощенно нарисовал. По идее на входе стоят триггеры Шмитта, за ними по каскаду антидребезга на RC-цепочке с триггером Шмитта в каждом канале, а уже за ними вот тот кусок который я нарисовал.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение Сергей Саныч »

AlexKota19 писал(а):Судя по поиску не понятных вещей "GPIOA->IDR", это STM32
Это просто входной регистр. Да, это несколько упрощенный кусочек реальной программы от STM32, но ничего аппаратнозависимого здесь нет. Входы общего назначения есть практически у любых МК.
Чудес не бывает. Бывают фокусы.
AlexKota19
Опытный
Сообщения: 185
Зарегистрирован: 16 апр 2017, 14:44
Репутация: 20
Настоящее имя: Александр
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение AlexKota19 »

Сергей Саныч писал(а):Это просто входной регистр. Да, это несколько упрощенный кусочек реальной программы от STM32, но ничего аппаратнозависимого здесь нет. Входы общего назначения есть практически у любых МК.
Если это выходы, тогда становится понятно. Только битовые операции напрягают, приходится подсматривать. Думаю внешние прерывания, если они есть будут лучше.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение Сергей Саныч »

AlexKota19 писал(а):Если это выходы
Это входы :)
Чудес не бывает. Бывают фокусы.
AlexKota19
Опытный
Сообщения: 185
Зарегистрирован: 16 апр 2017, 14:44
Репутация: 20
Настоящее имя: Александр
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение AlexKota19 »

Сергей Саныч писал(а):Это входы
Разумеется, что-то заработался. :)
AlexKota19
Опытный
Сообщения: 185
Зарегистрирован: 16 апр 2017, 14:44
Репутация: 20
Настоящее имя: Александр
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение AlexKota19 »

Возвращаюсь к блоку линеек, увы не всегда хватает время на хобби :wik: .
Подключил драйвер, значения с линеек он получает, значение от контролера с Mach3 тоже. Программа тоже работает. Подключил драйвер шагового двигателя

Но драйвера шаговых моторов не получает команды. Enable принимает, а вот команды Step и Dir почему-то нет. Вот настройки программы
Фото программы 1 (2894 просмотра) <a class='original' href='./download/file.php?id=130055&mode=view' target=_blank>Загрузить оригинал (235.78 КБ)</a>
Фото программы 1
Фото программы 2 (2894 просмотра) <a class='original' href='./download/file.php?id=130056&mode=view' target=_blank>Загрузить оригинал (242.6 КБ)</a>
Фото программы 2
Блоку дал питания 12В, линейку подключил, контролер с Mach3 подключил Step, Dir, Enb с общим плюсом. Драйвер шагового двигателя так же с общим плюсом, его взял с клеммы 5V, а дальше Step на Step (шагового драйвера), Dir и End аналогично. Запускаю тест, как на видео, двигатель стоит даже не шевелиться. Выбирал разные сигналы Step, не помогает.

Сами шаговые драйвера и шаговые моторы работают на прямую.

Возможно, что-то делаю нет так.
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение michael-yurov »

Если подключил драйвер с общим плюсом, то при таких настройках он будет всегда отключен.
AlexKota19
Опытный
Сообщения: 185
Зарегистрирован: 16 апр 2017, 14:44
Репутация: 20
Настоящее имя: Александр
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение AlexKota19 »

michael-yurov писал(а):Если подключил драйвер с общим плюсом, то при таких настройках он будет всегда отключен.
Вы про Rising edge, то пробовал разные варианты, Enable поставил всегда в low.

Или намудрил где-то в другом месте?
Аватара пользователя
michael-yurov
Почётный участник
Почётный участник
Сообщения: 11730
Зарегистрирован: 26 июл 2012, 00:10
Репутация: 4703
Настоящее имя: Михаил Львович
Откуда: Новоуральск
Контактная информация:

Re: Контроллер оптических линеек / энкодеров (Step/Dir)

Сообщение michael-yurov »

AlexKota19 писал(а):Вы про Rising edge
Нет. Я про это:
AlexKota19 писал(а):Драйвер шагового двигателя так же с общим плюсом, его взял с клеммы 5V, а дальше Step на Step (шагового драйвера), Dir и End аналогично.
AlexKota19 писал(а):Enable поставил всегда в low.
Ну так, если ты подал на один контакт +5 в, а на второй - низкий уровень, то вход будет активен, и драйвер отключен.

Сам же подключил с общим плюсом зачем-то. Раз уж так сделал - нужно было это учесть.

А на счет
AlexKota19 писал(а):Вы про Rising edge, то пробовал разные варианты
- мне уже не разобраться, сколько раз ты инвертировал сигнал (на интерфейсной плате, в настройках программы, при подключении с общим плюсом...) Если временные задержки перед сменой сигнала Dir не нолевые, то работать будет при любой настройке.
Ответить

Вернуться в «Электроника»