Сдвоенный энкодер — различия между версиями
=DeaD= (обсуждение | вклад) |
(алгоритмы измерения) |
||
Строка 10: | Строка 10: | ||
Иногда в таком энкодере вводят дополнительный канал включающийся 1 раз за полный поворот, чтобы обеспечить еще большую защиту от ошибок подсчета даже при длительной эксплуатации и обеспечить определение точного положения вала при хотя-бы одном произведенном полном обороте. | Иногда в таком энкодере вводят дополнительный канал включающийся 1 раз за полный поворот, чтобы обеспечить еще большую защиту от ошибок подсчета даже при длительной эксплуатации и обеспечить определение точного положения вала при хотя-бы одном произведенном полном обороте. | ||
+ | |||
+ | |||
+ | '''Дополнение:''' | ||
+ | |||
+ | Сигнал с энкодера | ||
+ | Состояния выходов A и B: | ||
+ | {| style="white-space: nowrap;" cellspacing="20" | ||
+ | | | ||
+ | {| class="wikitable" width="180" | ||
+ | |+ Gray coding for<br/>Вращение по часовой стрелке | ||
+ | !Фаза !!A !!B | ||
+ | |- | ||
+ | |1||0||0 | ||
+ | |- | ||
+ | |2||0||1 | ||
+ | |- | ||
+ | |3||1||1 | ||
+ | |- | ||
+ | |4||1||0 | ||
+ | |} | ||
+ | | | ||
+ | {| class="wikitable" width="180" | ||
+ | |+ Gray coding for<br/>вращение против часовой стрелки | ||
+ | !Фаза !!A !!B | ||
+ | |- | ||
+ | |1||1||0 | ||
+ | |- | ||
+ | |2||1||1 | ||
+ | |- | ||
+ | |3||0||1 | ||
+ | |- | ||
+ | |4||0||0 | ||
+ | |} | ||
+ | |} | ||
+ | [[Image:Quadrature Diagram.svg|thumb|300px|right|Сигнал с квадратурного энкодера (вращение по часовой стрелке).]] | ||
+ | |||
+ | |||
+ | == Измерение сигнала с энкодера == | ||
+ | Первым делом нужно подключить энкодер к контроллеру. | ||
+ | |||
+ | [[Image:Encoder_connector.jpg|Выходы энкодера]] | ||
+ | |||
+ | Обычно энкодер имеет выходы A,B, питание, земля, и (возможно) сигнал полного оборота. | ||
+ | |||
+ | Сигнал полного оборота появляется один раз за один оборот, и может использоваться для подсчёта количества оборотов, или расчёта точного положение относительно начала оборота. | ||
+ | |||
+ | |||
+ | Для определения положения вала энкодера, используют счётчики сигналов A,B. | ||
+ | |||
+ | Как правило счётчик увеличивается если направление по часовой стрелке и уменьшается если направление против часовой стрелки. | ||
+ | |||
+ | |||
+ | Существует три способа измерения данных с выхода энкодера. | ||
+ | |||
+ | Они отличаются точностью измерения и нагрузкой на контроллер. | ||
+ | |||
+ | = Однократная точность = | ||
+ | Один из каналов энкодера (пусть будет A) подключается к внешнему прерыванию контроллера, второй канал (B) подключается на обычный цифровой вход. | ||
+ | |||
+ | Настаивается прерывание по фронту канала А. | ||
+ | |||
+ | Измерение проводят только по фронту канала A, | ||
+ | |||
+ | при этом сравнивается состояние вывода B, если на канале B низкий уровень то вращение против часовой стрелки. | ||
+ | |||
+ | Если на канале B высокий уровень то вращение по часовой стрелки. | ||
+ | |||
+ | [[Image:Quadrature_encoding_x1.jpg|Однократная точность]] | ||
+ | |||
+ | Такой способ измерения использует только четверть данных с энкодера, зато минимизирует нагрузку на контроллер, достаточно проверить состояние канала B. | ||
+ | |||
+ | = Двукратная точность = | ||
+ | |||
+ | Один из каналов энкодера (пусть будет A) подключается к внешнему прерыванию контроллера, второй канал (B) подключается на обычный цифровой вход. | ||
+ | |||
+ | Настаивается прерывание по фронту и спаду канала А. | ||
+ | |||
+ | Измерение проводят только по фронту и спаду канала A, | ||
+ | |||
+ | при этом сравнивается состояние вывода B и учитывается какое именно прерывание произошло по фронту или по спаду, | ||
+ | |||
+ | Если на канале B низкий уровень и прерывание на А по фронту, или если на канале B высокий уровень и прерывание на А по спаду, то вращение против часовой стрелке. | ||
+ | |||
+ | Если на канале B высокий уровень и прерывание на А по фронту, или если на канале B низкий уровень и прерывание на А по спаду, то вращение по часовой стрелке. | ||
+ | |||
+ | [[Image:Quadrature_encoding_x2.jpg|Двукратная точность]] | ||
+ | |||
+ | Такой способ измерения использует половину данных с энкодера, и требует чтобы контроллер помнил состояние А до возникновения прерывания. | ||
+ | |||
+ | = Четырёхкратная (максимальная) точность = | ||
+ | Оба канала подключаются к внешним выводам контроллера и настраиваются прерывания по фронту и спаду на оба канала. | ||
+ | |||
+ | [[Image:Quadrature_encoding_x4.jpg|Максимальная точность]] | ||
+ | |||
+ | Такой способ измерения использует все данные с энкодера, и требует чтобы контроллер помнил состояние А и B с момента предыдущего прерывания. |
Версия 10:35, 1 июля 2011
Англ. - Quadrature encoder или Q-encoder
Разновидность инкрементального энкодера, которая состоит из двух датчиков срабатывающих со смещением в полшага, что позволяет практически полностью гарантировать отсутствие ложных срабатываний на границе одного из энкодеров. Кроме того, этот вариант позволяет контролировать не только длину, но и направление перемещения.
Т.е. если первый из энкодеров меняет своё состояние с A на B и при этом второй энкодер в состоянии C, тогда направление вычисляется функцией dir=A xor C или если короче dir=A^C.
Иногда в таком энкодере вводят дополнительный канал включающийся 1 раз за полный поворот, чтобы обеспечить еще большую защиту от ошибок подсчета даже при длительной эксплуатации и обеспечить определение точного положения вала при хотя-бы одном произведенном полном обороте.
Дополнение:
Сигнал с энкодера Состояния выходов A и B:
|
|
Содержание
Измерение сигнала с энкодера
Первым делом нужно подключить энкодер к контроллеру.
Обычно энкодер имеет выходы A,B, питание, земля, и (возможно) сигнал полного оборота.
Сигнал полного оборота появляется один раз за один оборот, и может использоваться для подсчёта количества оборотов, или расчёта точного положение относительно начала оборота.
Для определения положения вала энкодера, используют счётчики сигналов A,B.
Как правило счётчик увеличивается если направление по часовой стрелке и уменьшается если направление против часовой стрелки.
Существует три способа измерения данных с выхода энкодера.
Они отличаются точностью измерения и нагрузкой на контроллер.
Однократная точность
Один из каналов энкодера (пусть будет A) подключается к внешнему прерыванию контроллера, второй канал (B) подключается на обычный цифровой вход.
Настаивается прерывание по фронту канала А.
Измерение проводят только по фронту канала A,
при этом сравнивается состояние вывода B, если на канале B низкий уровень то вращение против часовой стрелки.
Если на канале B высокий уровень то вращение по часовой стрелки.
Такой способ измерения использует только четверть данных с энкодера, зато минимизирует нагрузку на контроллер, достаточно проверить состояние канала B.
Двукратная точность
Один из каналов энкодера (пусть будет A) подключается к внешнему прерыванию контроллера, второй канал (B) подключается на обычный цифровой вход.
Настаивается прерывание по фронту и спаду канала А.
Измерение проводят только по фронту и спаду канала A,
при этом сравнивается состояние вывода B и учитывается какое именно прерывание произошло по фронту или по спаду,
Если на канале B низкий уровень и прерывание на А по фронту, или если на канале B высокий уровень и прерывание на А по спаду, то вращение против часовой стрелке.
Если на канале B высокий уровень и прерывание на А по фронту, или если на канале B низкий уровень и прерывание на А по спаду, то вращение по часовой стрелке.
Такой способ измерения использует половину данных с энкодера, и требует чтобы контроллер помнил состояние А до возникновения прерывания.
Четырёхкратная (максимальная) точность
Оба канала подключаются к внешним выводам контроллера и настраиваются прерывания по фронту и спаду на оба канала.
Такой способ измерения использует все данные с энкодера, и требует чтобы контроллер помнил состояние А и B с момента предыдущего прерывания.