Не особо. Даже аппаратно реализуется на простейшей логике. Это не говоря о том, что многие МК имеют готовый вход квадратурного энкодера.Duhas писал(а):программно ловить 4 дискреты порой муторно
Контроллер оптических линеек / энкодеров (Step/Dir)
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Чудес не бывает. Бывают фокусы.
-
Duhas
- Мастер
- Сообщения: 1961
- Зарегистрирован: 10 окт 2015, 23:25
- Репутация: 285
- Настоящее имя: Андрей
- Откуда: Красноярск
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
ключевое слово - программно. а про квадратурные входы и логику начинающие обычно не в курсе от слова совсем.
-
sas_75
- Мастер
- Сообщения: 463
- Зарегистрирован: 10 мар 2015, 11:03
- Репутация: 115
- Настоящее имя: Сергей
- Откуда: Владивосток
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Знаю, что для энкодеров есть специальная микросхема LS7184 (правда цена и доставаемость не радуют). Можно на микроконтроллере сделать, а вот на простейшей логике по-быстрому ничего в голову не пришло. Понятно, что без триггеров не обойтись.Сергей Саныч писал(а):Не особо. Даже аппаратно реализуется на простейшей логике. Это не говоря о том, что многие МК имеют готовый вход квадратурного энкодера.Duhas писал(а):программно ловить 4 дискреты порой муторно
Может подкинете схемку в целях саморазвития.
-
sas_75
- Мастер
- Сообщения: 463
- Зарегистрирован: 10 мар 2015, 11:03
- Репутация: 115
- Настоящее имя: Сергей
- Откуда: Владивосток
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Нашел!
Для интересующихся, если упрощенно:
Для интересующихся, если упрощенно:
- Сергей Саныч
- Мастер
- Сообщения: 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)
Просто подключите один канал энкодера к step, а другой к dir и оно будет правильно работать.sas_75 писал(а):Для интересующихся, если упрощенно:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Будет. Но тогда получится 1 step за цикл, а не 4.UAVpilot писал(а):Просто подключите один канал энкодера к step, а другой к dir и оно будет правильно работать.
Чудес не бывает. Бывают фокусы.
- Serg
- Мастер
- Сообщения: 21923
- Зарегистрирован: 17 апр 2012, 14:58
- Репутация: 5183
- Заслуга: c781c134843e0c1a3de9
- Настоящее имя: Сергей
- Откуда: Москва
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
А если эту схему в симуляторе прогнать?..Сергей Саныч писал(а):Будет. Но тогда получится 1 step за цикл, а не 4.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
-
sas_75
- Мастер
- Сообщения: 463
- Зарегистрирован: 10 мар 2015, 11:03
- Репутация: 115
- Настоящее имя: Сергей
- Откуда: Владивосток
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Попробуйте. Я ее "графически" проверил. Можно сигнал DIR послать на вход "D" D-триггера, а STEP на его счетный вход. Тогда положительным фронтом STEP данные будут защелкиваться в триггере, а по отрицательному фронту проверять выход триггера. Данные DIR на выходе триггера будут меняться только при смене направления вращения энкодера.
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Будет работать. Единственно, что не совсем "феншуйно", это RC-цепочки на входах логики, надо бы после них ставить элементы с триггером Шмидта на входе, а среди распространенных ЛЭ XOR, я такие не встречал.UAVpilot писал(а):А если эту схему в симуляторе прогнать?
Чудес не бывает. Бывают фокусы.
-
AlexKota19
- Опытный
- Сообщения: 185
- Зарегистрирован: 16 апр 2017, 14:44
- Репутация: 20
- Настоящее имя: Александр
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Так и делал в начале, в первых примерах из сети, считалось любое изменения уровня на канале 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)
Это я упрощенно нарисовал. По идее на входе стоят триггеры Шмитта, за ними по каскаду антидребезга на RC-цепочке с триггером Шмитта в каждом канале, а уже за ними вот тот кусок который я нарисовал.Сергей Саныч писал(а):Будет работать. Единственно, что не совсем "феншуйно", это RC-цепочки на входах логики, надо бы после них ставить элементы с триггером Шмидта на входе, а среди распространенных ЛЭ XOR, я такие не встречал.UAVpilot писал(а):А если эту схему в симуляторе прогнать?
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Это просто входной регистр. Да, это несколько упрощенный кусочек реальной программы от STM32, но ничего аппаратнозависимого здесь нет. Входы общего назначения есть практически у любых МК.AlexKota19 писал(а):Судя по поиску не понятных вещей "GPIOA->IDR", это STM32
Чудес не бывает. Бывают фокусы.
-
AlexKota19
- Опытный
- Сообщения: 185
- Зарегистрирован: 16 апр 2017, 14:44
- Репутация: 20
- Настоящее имя: Александр
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Если это выходы, тогда становится понятно. Только битовые операции напрягают, приходится подсматривать. Думаю внешние прерывания, если они есть будут лучше.Сергей Саныч писал(а):Это просто входной регистр. Да, это несколько упрощенный кусочек реальной программы от STM32, но ничего аппаратнозависимого здесь нет. Входы общего назначения есть практически у любых МК.
- Сергей Саныч
- Мастер
- Сообщения: 9116
- Зарегистрирован: 30 май 2012, 14:20
- Репутация: 2858
- Откуда: Тюмень
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Это входыAlexKota19 писал(а):Если это выходы
Чудес не бывает. Бывают фокусы.
-
AlexKota19
- Опытный
- Сообщения: 185
- Зарегистрирован: 16 апр 2017, 14:44
- Репутация: 20
- Настоящее имя: Александр
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Разумеется, что-то заработался.Сергей Саныч писал(а):Это входы
-
AlexKota19
- Опытный
- Сообщения: 185
- Зарегистрирован: 16 апр 2017, 14:44
- Репутация: 20
- Настоящее имя: Александр
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Возвращаюсь к блоку линеек, увы не всегда хватает время на хобби
.
Подключил драйвер, значения с линеек он получает, значение от контролера с Mach3 тоже. Программа тоже работает. Подключил драйвер шагового двигателя
Но драйвера шаговых моторов не получает команды. Enable принимает, а вот команды Step и Dir почему-то нет. Вот настройки программы Блоку дал питания 12В, линейку подключил, контролер с Mach3 подключил Step, Dir, Enb с общим плюсом. Драйвер шагового двигателя так же с общим плюсом, его взял с клеммы 5V, а дальше Step на Step (шагового драйвера), Dir и End аналогично. Запускаю тест, как на видео, двигатель стоит даже не шевелиться. Выбирал разные сигналы Step, не помогает.
Сами шаговые драйвера и шаговые моторы работают на прямую.
Возможно, что-то делаю нет так.
Подключил драйвер, значения с линеек он получает, значение от контролера с Mach3 тоже. Программа тоже работает. Подключил драйвер шагового двигателя
Но драйвера шаговых моторов не получает команды. Enable принимает, а вот команды Step и Dir почему-то нет. Вот настройки программы Блоку дал питания 12В, линейку подключил, контролер с Mach3 подключил Step, Dir, Enb с общим плюсом. Драйвер шагового двигателя так же с общим плюсом, его взял с клеммы 5V, а дальше Step на Step (шагового драйвера), Dir и End аналогично. Запускаю тест, как на видео, двигатель стоит даже не шевелиться. Выбирал разные сигналы Step, не помогает.
Сами шаговые драйвера и шаговые моторы работают на прямую.
Возможно, что-то делаю нет так.
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Если подключил драйвер с общим плюсом, то при таких настройках он будет всегда отключен.
-
AlexKota19
- Опытный
- Сообщения: 185
- Зарегистрирован: 16 апр 2017, 14:44
- Репутация: 20
- Настоящее имя: Александр
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Вы про Rising edge, то пробовал разные варианты, Enable поставил всегда в low.michael-yurov писал(а):Если подключил драйвер с общим плюсом, то при таких настройках он будет всегда отключен.
Или намудрил где-то в другом месте?
- michael-yurov
- Почётный участник

- Сообщения: 11730
- Зарегистрирован: 26 июл 2012, 00:10
- Репутация: 4703
- Настоящее имя: Михаил Львович
- Откуда: Новоуральск
- Контактная информация:
Re: Контроллер оптических линеек / энкодеров (Step/Dir)
Нет. Я про это:AlexKota19 писал(а):Вы про Rising edge
AlexKota19 писал(а):Драйвер шагового двигателя так же с общим плюсом, его взял с клеммы 5V, а дальше Step на Step (шагового драйвера), Dir и End аналогично.
Ну так, если ты подал на один контакт +5 в, а на второй - низкий уровень, то вход будет активен, и драйвер отключен.AlexKota19 писал(а):Enable поставил всегда в low.
Сам же подключил с общим плюсом зачем-то. Раз уж так сделал - нужно было это учесть.
А на счет
- мне уже не разобраться, сколько раз ты инвертировал сигнал (на интерфейсной плате, в настройках программы, при подключении с общим плюсом...) Если временные задержки перед сменой сигнала Dir не нолевые, то работать будет при любой настройке.AlexKota19 писал(а):Вы про Rising edge, то пробовал разные варианты