Страница 16 из 25

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

Добавлено: 19 янв 2018, 05:05
Сергей Саныч
Duhas писал(а):программно ловить 4 дискреты порой муторно
Не особо. Даже аппаратно реализуется на простейшей логике. Это не говоря о том, что многие МК имеют готовый вход квадратурного энкодера.

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

Добавлено: 19 янв 2018, 05:08
Duhas
ключевое слово - программно. а про квадратурные входы и логику начинающие обычно не в курсе от слова совсем.

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

Добавлено: 19 янв 2018, 05:59
sas_75
Сергей Саныч писал(а):
Duhas писал(а):программно ловить 4 дискреты порой муторно
Не особо. Даже аппаратно реализуется на простейшей логике. Это не говоря о том, что многие МК имеют готовый вход квадратурного энкодера.
Знаю, что для энкодеров есть специальная микросхема LS7184 (правда цена и доставаемость не радуют). Можно на микроконтроллере сделать, а вот на простейшей логике по-быстрому ничего в голову не пришло. Понятно, что без триггеров не обойтись.
Может подкинете схемку в целях саморазвития.

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

Добавлено: 19 янв 2018, 07:20
sas_75
Нашел!

Для интересующихся, если упрощенно:

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

Добавлено: 19 янв 2018, 10:00
Сергей Саныч
Вот вариант программной обработки. Всего четыре строчки на Си (можно и в две впихнуть) плюс массив констант на 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; // Текущее - в предыдущее

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

Добавлено: 19 янв 2018, 11:25
Serg
sas_75 писал(а):Для интересующихся, если упрощенно:
Просто подключите один канал энкодера к step, а другой к dir и оно будет правильно работать.

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

Добавлено: 19 янв 2018, 11:40
Сергей Саныч
UAVpilot писал(а):Просто подключите один канал энкодера к step, а другой к dir и оно будет правильно работать.
Будет. Но тогда получится 1 step за цикл, а не 4.

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

Добавлено: 19 янв 2018, 11:56
Serg
Сергей Саныч писал(а):Будет. Но тогда получится 1 step за цикл, а не 4.
А если эту схему в симуляторе прогнать?.. :)

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

Добавлено: 19 янв 2018, 13:20
sas_75
Попробуйте. Я ее "графически" проверил. Можно сигнал DIR послать на вход "D" D-триггера, а STEP на его счетный вход. Тогда положительным фронтом STEP данные будут защелкиваться в триггере, а по отрицательному фронту проверять выход триггера. Данные DIR на выходе триггера будут меняться только при смене направления вращения энкодера.

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

Добавлено: 19 янв 2018, 13:37
Сергей Саныч
UAVpilot писал(а):А если эту схему в симуляторе прогнать?
Будет работать. Единственно, что не совсем "феншуйно", это RC-цепочки на входах логики, надо бы после них ставить элементы с триггером Шмидта на входе, а среди распространенных ЛЭ XOR, я такие не встречал.

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

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

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

Завтра, если доберусь, буду изучать PID и другие настройки.

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

Добавлено: 19 янв 2018, 13:52
sas_75
Сергей Саныч писал(а):
UAVpilot писал(а):А если эту схему в симуляторе прогнать?
Будет работать. Единственно, что не совсем "феншуйно", это RC-цепочки на входах логики, надо бы после них ставить элементы с триггером Шмидта на входе, а среди распространенных ЛЭ XOR, я такие не встречал.
Это я упрощенно нарисовал. По идее на входе стоят триггеры Шмитта, за ними по каскаду антидребезга на RC-цепочке с триггером Шмитта в каждом канале, а уже за ними вот тот кусок который я нарисовал.

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

Добавлено: 19 янв 2018, 14:01
Сергей Саныч
AlexKota19 писал(а):Судя по поиску не понятных вещей "GPIOA->IDR", это STM32
Это просто входной регистр. Да, это несколько упрощенный кусочек реальной программы от STM32, но ничего аппаратнозависимого здесь нет. Входы общего назначения есть практически у любых МК.

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

Добавлено: 19 янв 2018, 14:38
AlexKota19
Сергей Саныч писал(а):Это просто входной регистр. Да, это несколько упрощенный кусочек реальной программы от STM32, но ничего аппаратнозависимого здесь нет. Входы общего назначения есть практически у любых МК.
Если это выходы, тогда становится понятно. Только битовые операции напрягают, приходится подсматривать. Думаю внешние прерывания, если они есть будут лучше.

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

Добавлено: 19 янв 2018, 14:42
Сергей Саныч
AlexKota19 писал(а):Если это выходы
Это входы :)

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

Добавлено: 19 янв 2018, 14:49
AlexKota19
Сергей Саныч писал(а):Это входы
Разумеется, что-то заработался. :)

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

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

Но драйвера шаговых моторов не получает команды. Enable принимает, а вот команды Step и Dir почему-то нет. Вот настройки программы
Фото программы 1 (2951 просмотр) <a class='original' href='./download/file.php?id=130055&mode=view' target=_blank>Загрузить оригинал (235.78 КБ)</a>
Фото программы 1
Фото программы 2 (2951 просмотр) <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, не помогает.

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

Возможно, что-то делаю нет так.

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

Добавлено: 22 янв 2018, 21:07
michael-yurov
Если подключил драйвер с общим плюсом, то при таких настройках он будет всегда отключен.

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

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

Или намудрил где-то в другом месте?

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

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

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

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