26.11.2024

Энкодер схема: DIY энкодер: описание, подключение, схема, характеристики

Содержание

Как подключить энкодер к частотному преобразователю. Схема

Энкодер для частотника по своему внешнему виду похож на переменный резистор или на потенциометр. Те же три вывода, тот же корпус панели. На этом его сходство заканчивается. Внутри у него два переключателя, у которых есть общий вывод задач управления и два своих.

Чтобы энкодер заработал, средний вывод нужно подключить к земле, а два остальных через резисторы к питанию. Съем сигнала управления нужно производить непосредственно с выводов панели энкодера.

Теперь представим, что энкодер идеальный и его контакты не страдают дребезгом. Подключим к выводам энкодера осциллограф и начнем вращать ручку энкодера. Импульсы будут сдвинуты относительно друг друга на 90 градусов. Если крутить ручку мощности (кВт) вправо, влево или назад, то будем иметь последовательности панели управления:

Если осциллограммы как применение последовательности задач логических нулей и единиц, то они будут иметь такой вид:

Возьмем обычный энкодер, у которого есть дребезг контактов. Зона дребезга:

При переключении с логической единицы на логический ноль возникает дребезг. С дребезгом можно бороться двумя способами: аппаратным и программным применением.

Аппаратный способ – это подключение серии конденсаторов частотника, триггеров Шмитта, как указано на схеме панели управления:

Рекомендуется применять метод борьбы с дребезгом – программный. Такой метод описан в библиотеке Ротери. Данная библиотека содержит несколько функций, которые нужны для настройки выводов векторного контроллера на ввод, и подключение подтягивающих мощность (кВт) резисторов. В библиотеке нужно указывать соответствующие команды и задачи. Данной командой включается подтягивающий резистор внутри контроллера панели частотника.

Функция серии Get position vfd возвращает значение энкодера. Данная фукнция нужна для получения количества импульсов, которые считал энкодер. Функция set Position vfd нужна для загрузки значения, с которого энкодер начнет свой счет.

Функция tick должна быть рассмотрена подробнее. Переменные этой функции sig1 и sig2 записывают состояние векторного pin, к которой подключен энкодер. Дальше эти pin записываются в переменную thisState vfd, которая является текущим состоянием энкодера. Если текущее состояние энкодера не равно предыдущему, то вычисляются новые направления счета и количество импульсов мощности сохраняется в переменной Position. Когда энкодер вернется в свое начальное векторное положение, произойдет сдвиг вправо на два разряда, и новое значение управления нужно записать в переменную PositionExt. Данная переменная нужна для сохранения серии результатов задач, которые будут иметь применение в основной программе.

Счет

Проанализировав состояние энкодера при вращении влево и вправо, составляем таблицу:

Его начальное положение 1-1. При повороте вправо произошел щелчок, единица стала логическим нулем. Новое значение this State vfd равно 01. Согласно команды данный результат суммируется со значением переменной Position.

Из-за того, что произошел дребезг, позиция стала 11, после перерасчета порядковый номер стал 7. После того, как дребезг закончился, нужно фиксировать новое положение 01 и к предыдущему нулю добавляется единица. При повороте энкодера произошел один щелчок, и значение переменной Position стало единицей.

Происходит второй щелчок при повороте энкодера направо, и вместо позиции 01 мы имеем позицию 00. После того, как весь дребезг закончится, на выходе управления также имеем значение единицы. При четвертом щелчке, когда позиция с 10 стала 11, мы имеем значение 6. После окончания дребезга остается 6.

В некоторых энкодерах имеет применение кнопка панели. При ее нажатии и отпускании тоже будет дребезг контактов, нужно применить библиотеку Bounce. Функции этой библиотеки нужны для задания pin, к которому будет подключена кнопка, задач времени задержки в миллисекундах. Если произошло нажатие на кнопку, то функция мощности (кВт) возвращает векторное значение true, если нет, то false vfd.

Принципиальная схема подключения энкодера к преобразователю частоты

Данная схема состоит из платы Arduino Uno, инкрементального энкодера, четырехразрядного светодиодного индикатора, ключевых транзисторов и ограничительного резистора. Эта схема называется счетчиком импульсов. Она считает импульсы, которые будет воспроизводить энкодер при его вращении. Энкодер своими выводами подключен к каналам А2 и А3, вывод кнопки подключен к выводу А4, средний вывод подключен к земле, второй вывод тоже к земле.

Рассмотрим скетч, который называется счетчиком импульсов энкодера управления частотника. Вначале подключаем библиотеки для работы таймера, индикатора LS, для работы с энкодером, для кнопки.

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

Если нажимаем на кнопку индикатора, переменная обнулится, на индикаторе будет ноль.

Подключение энкодера промышленного назначения к Arduino

Наша задача суметь управлять скоростью асинхронного двигателя с помощью программы на компьютере. У нас имеется преобразователь частоты (частотник):

Для домашних заданий такая информация не нужна. На фотографии энкодер промышленного назначения для асинхронного двигателя управления мощностью (кВт) станков:

В станкостроении энкодеры широко применяются для преобразователей частоты асинхронных двигателей. Они монтируются как датчики обратной связи по своей скорости. Такие энкодеры имеют большую дискретность от 100 импульсов на оборот до 1 млн импульсов на оборот. У этой марки дискретность равна 500 имп. на оборот.

Энкодеры подразделяются на виды задач по принципу действия на частотные преобразователи. Они бывают абсолютными и инкрементальными. Наш энкодер выполняет обычную функцию – выдает сигнал дифференцирования при отключении мощности питания, и ее подачи снова. Раннее состояние не сохраняется.

Энкодеры абсолютного вида имеют внутреннюю память, которая помнит последние положения. Зачем нужна память, и зачем сохранять эти данные? В заводских условиях станкостроения перед перемещением определенного устройства в первую очередь указывают нулевую точку. Такой процесс называется реферированием, то есть, выход в нуль.

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

Рассмотрим энкодеры синуса и косинуса. Они выдают выходной сигнал косинуса или синуса. Далее, с помощью устройства интерполятора мощности образуют из них импульсы. Сигналы такого вида можно изменять в размерах. Питание энкодера осуществляется от напряжения 5 вольт.

Сигнал «А» — это сигнал импульса прямого типа. Количество импульсов с этого сигнала приходит на каждом обороте. Оно равно 500 (дискретность датчика).

Сигнал «В» — тоже прямой сигнал импульса. С него на каждом обороте поступает число импульсов по дискретности датчика, который смещен от канала «А» на 90 градусов (500).

Сигнал «R» — это сигнал метки «нуль». С одного оборота датчика получается один импульс.

В энкодерах промышленного назначения используется сигнал дифференцирования, для работы с частотным преобразователем (частотником). Название у него сложное, а на самом деле все просто. Все каналы отдельно копируются своей инверсией. Это необходимо для отдавания сигнала на значительные расстояния. Выходной канал энкодера подсоединяется к приемнику специального назначения, сделанному на усилителях операционного вида. Импульс в итоге определяется в совокупности двух сигналов.

Подключение

Подключение простое. Подсоединяем напряжение 5 вольт на выходы энкодера. У нас раскладка: провод коричневого цвета – 0 В, белого цвета — +5 В, розовый, зеленый и красный – А, В, R.

Программа подключения энкодера базируется на прерываниях каналов А и В. Срабатывания прерываний происходят на переднем фронте. Получается ситуация, когда происходит торможение энкодера в момент растрового пересечения и выходной сигнал канала всегда остается положительным. Подсчет импульсов непрерывно ведется счетчиком.

В нашем случае мы не будем применять прерывания, потому что мы работаем с 4-мя датчиками, они эксплуатируются одновременно. Если применять схему прерываний, наверняка возникнет ситуация потери импульсов. У нас эта проблема решается путем установления значка наличия движения. А мы рассматривали эксплуатацию энкодеров промышленного назначения.

Работа счетчика импульсов на основе модуля энкодера

Счетчик работает в связке с модулем семиразрядного индикатора, который и будет отображать количество накрученных энкодером импульсов. При включении значение счетчика равно нулю.

Покрутим ручку энкодера по часовой стрелке. Значение счетчика инкрементируется на единицу при каждом щелчке энкодера. Наибольшее число можно накрутить 999999999. это число должно заполнить все разряды нашего семисегментного индикатора. Если вращать ручку дальше, то счетчик обнулится, начнет снова считать с нуля.

Для примера накрутим 120 импульсов. Теперь скручиваем обратно, вращая ручку против часовой стрелки. Центральная ось энкодера работает как кнопка. Она очищает от нулей свободные разряды индикатора. У кнопки есть небольшой дребезг контактов, поэтому выключение и включение происходит не сразу. Программным путем, дребезг устраняется. Это основа работы с модулем энкодера.

Сопрягаем энкодер и микроконтроллер — chipenable.ru

  Из этой статьи вы узнаете, что такое энкодер, зачем он нужен, и как его подружить с микроконтроллером. Если вы пользовались современной стиральной машиной, микроволновой печью или аудио системой то, скорее всего вы уже имели дело с энкодером, сами того не подозревая. Например, в большинстве современных домашних и автомобильных стерео систем энкодеры используются для регулировки громкости звука.
   Энкодер или датчик угла поворота – это электромеханическое устройство, предназначенное для преобразования углового положения вала или оси в электрические сигналы. Существует два основных типа энкодеров  — инкрементные и абсолютные.
   Инкрементный энкодер при вращении формирует импульсы, число которых пропорционально углу поворота. Подсчет числа этих  импульсов даст нам величину угла поворота вала энкодера относительно его начального положения. Этот тип энкодеров не формирует выходные импульсы, когда его вал находится в покое. Инкрементные энкодеры находят широкое применение в индустриальных средствах управления, бытовой и  музыкальной технике.
Абсолютный энкодер для каждой позиции своего вала выдает уникальный код.  Ему, в отличии от инкрементного энкодера, счетчик не нужен, угол вращения всегда известен. Абсолютный энкодер формирует сигнал и когда вал вращается, и когда он находится в покое. Абсолютный энкодер не теряет информацию о своем положении при потере питания и не требует возврата в начальную позицию. Этот тип энкодеров применяется в промышленно оборудовании — робототехнике, станках, конвейерных линиях.
  Я хотел бы рассказать о сопряжении инкрементного механического энкодера с микроконтроллером.  Для этого я приобрел инкрементный энкодер фирмы Bourns — PEC12-4220F-S0024. Вот расшифровка его названия согласно datasheet: PEC12 – модель, 4 – вертикальное положение выводов, 2 – 24 стопора, 20 – длина вала в мм, S – наличие кнопки, 0024 – 24 импульса за оборот.



   У него 5 выводов. 2 вывода на фотографии слева – выводы кнопки, 3 вывода на фотографии справа – выводы энкодера. Из них — 2 сигнальных и 1 общий. Он посередине. Схема подключения энкодера ничем не отличается от подключения обычных кнопок. Сигнальные выводы энкодера подключаем к любому порту ввода вывода микроконтроллера. Общий вывод энкодера сажаем на землю. Для защиты от дребезга контактов не лишним будет добавить еще пару керамических конденсаторов номиналом в несколько нанофарад. Выводы микроконтроллера в программе конфигурируем как входы и включаем подтягивающие резисторы. Можно использовать внешние.

   Когда ручка энкодера стоит неподвижно – на входах микроконтроллера присутствуют логические единицы. Когда ручку энкодера поворачивают, на выводах микроконтроллера появляются два прямоугольных сигнала сдвинутых друг относительно друга. От направления вращения вала энкодера зависит, какой из сигналов будет опережать другой. На рисунке ниже представлены возможные варианты сигналов для идеального случая.

 

    Внутри энкодера имеются контакты, которые при вращении то замыкаются, то размыкаются. Этот процесс естественно сопровождается дребезгом, поэтому реальные сигналы могут выглядеть вот так.  

 

Сигналы сняты со старого энкодера, включенного без фильтрующих конденсаторов.

   Алгоритм обработки сигналов энкодера выглядит следующим образом. В обработчике прерывания таймера запускается функция опроса энкодера. Она считывает логические уровни, присутствующие на выводах микроконтроллера к которым подключен энкодер и записывает их во временную переменную. Внутри функции есть статическая переменная (переменная, которая сохраняет свое значение при выходе из функции) хранящая последовательность предыдущих состояний. С помощью битовой маски микроконтроллер выделяет из этой переменной последнее состояние и сравнивает его с текущим, чтобы определить произошли ли изменения. Если состояния равны – функция завершает работу, если отличны – значение статической переменной сдвигается влево на 2 разряда и на «освободившееся» место записывается текущее состояние. Таким образом, если вал энкодера вращается, функция будет постоянно сохранять некую повторяющуюся кодовую последовательность. При вращении вправо – это будет 11100001. При вращении влево – 11010010. По этим последовательностям микроконтроллер и будет понимать, в какую сторону происходит вращение.

   Исходник для работы с энкодером можно скачать здесь. Архив содержит два файла: encoder.h и encoder.c. В хедере задаются порт и номера выводов, к которым подключен энкодер, константы LEFT_SPIN и RIGHT_SPIN. Также там описаны прототипы функций. Сишный файл содержит реализацию функций.

void InitEncoder(void) – инициализирует выводы порта.

void PollEncoder(void)
– однократно опрашивает энкодер. Если зафиксировано вращение, записывает в буфер одну из констант, если нет, просто завершает работу.

unsigned char GetStateEncoder(void)
– возвращает содержимое буфера и очищает его.

   Опрос энкодера я обычно произвожу с частотой ~ 4 кГц. Если опрашивать медленней, микроконтроллер будет пропускать импульсы при быстрых поворотах ручки энкодера. Если энкодер используется для установки линейно меняющейся величины, например для установки времени в часах, то в качестве констант LEFT_SPIN и RIGHT_SPIN удобно использовать числа 255 и 1 соответственно. В обработчике сигналов энкодера эти числа просто складываются с устанавливаемой величиной. При сложении с 1 величина увеличивается на 1, при сложении с 255 уменьшается на 1. Конечно это актуально если эта величина однобайтная. Ну а в принципе константы LEFT_SPIN и RIGHT_SPIN можно выбирать произвольно, главное правильно написать обработчик. На этом все.

Исходник для работы с энкодером здесь.

Подключение энкодера к микроконтроллеру | RadioLaba.ru

             #include <p16f628a .INC>

             LIST        p=16F628A    

             __CONFIG    H’3F18′           ;конфигурация микроконтроллера

 

flag          equ         20h              ;перечисление регистров общего назначения

flag1         equ         21h              ;присвоение названий адресам регистров

shet          equ         22h              ;

shet1         equ         23h              ;

W_TEMP        equ         7Eh              ;

STATUS_TEMP   equ         7Fh              ;

 

 

#DEFINE       enc1        PORTB,4          ;присвоение названий линиям ввода-вывода

#DEFINE       enc2        PORTB,5          ;микроконтроллера

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

              org         0000h            ;начать выполнение программы с адреса 0000h

              goto        Start            ;переход на метку Start

          

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Подпрограмма обработки прерываний

 

              org         0004h            ;начать выполнение подпрограммы с адреса 0004h

      

              movwf       W_TEMP           ;сохранение значений ключевых регистров

              swapf       STATUS,W         ;

              clrf        STATUS           ;

              movwf       STATUS_TEMP      ;

                  

              btfsc       enc1             ;опрос состояний выводов энкодера и сохранение

              bsf         flag,0           ;полученных значений в регистр flag

              btfss       enc1             ;сохранение значения вывода enc1 в 0-й бит

              bcf         flag,0           ;сохранение значения вывода enc2 в 1-й бит

              btfsc       enc2             ;

              bsf         flag,1           ;

              btfss       enc2             ;

              bcf         flag,1           ;

 

              btfss       flag,2           ;проверка предыдущего состояния выводов

              goto        vih              ;энкодера (2-й и 3-й биты регистра flag)

              btfss       flag,3           ;если оба значения не равны 1 переходим

              goto        vih              ;на метку vih, для выхода из обработчика

              btfss       flag1,0          ;проверка флага (0-й бит регистра flag1)

              goto        i2               ;инкремента/декремента регистра shet

              incf        shet1,F          ;если флаг не установлен-переходим (метка i2)

              movlw       .3               ;на проверку факта поворота ручки энкодера

              xorwf       shet1,W          ;при установленном флаге инкрементируем

              btfss       STATUS,Z         ;регистр shet1, проверяем на равенство

              goto        vih              ;числу 3, если не равно-переходим на метку

              bcf         flag1,0          ;vih, для выхода из обработчика

              clrf        shet1            ;если shet1 равен 3-очищаем регистр и

                                           ;сбрасываем флаг инкремента/декремента

                                           ;регистра shet

            

i2            btfsc       flag,0           ;определение направления вращения ручки

              goto        i1               ;энкодера, если enc1=1 переходим на метку i1

              btfss       flag,1           ;если enc1=0 и enc2=1 произошел поворот

              goto        vih              ;в положительную сторону (условно)

                                           ;соответственно далее по ходу кода производим  

                                           ;инкремент регистра shet

                                           ;состояние enc1=0 и enc2=0 игнорируется-

                                           ;переходом на метку выхода vih

              

              incf        shet,F           ;инкемент регистра shet, максимальное значение

              movlw       .0               ;ограничивается на уровне 255

              xorwf       shet,W           ;

              btfss       STATUS,Z         ;

              goto        vih2             ;

              movlw       .255             ;

              movwf       shet             ;

              goto        vih2             ;переход на метку vih2

              

i1            btfsc       flag,1           ;определение направления вращения ручки

              goto        vih              ;энкодера, если enc1=1 и enc2=0 произошел

                                           ;поворот в отрицательную сторону (условно)

                                           ;соответственно далее по ходу кода производим

                                           ;декремент регистра shet

                                           ;состояние enc1=1 и enc2=1 игнорируется-

                                           ;переходом на метку выхода vih

 

              decf        shet,F           ;декремент регистра shet, минимальное значение

              movlw       .255             ;ограничивается на уровне 0

              xorwf       shet,W           ;

              btfss       STATUS,Z         ;

              goto        vih2             ;

              clrf        shet             ;

 

vih2          bsf         flag1,0          ;установка флага инкремента/декремента регистра shet

              bsf         flag1,1          ;установка флага регистрации поворота энкодера

                                           ;для дальнейшего опроса в основной программе

vih           rlf         flag,F           ;сдвиг содержимого регистра flag

              rlf         flag,F           ;влево на 2 бита

 

              bcf         INTCON,T0IF      ;сброс флага прерывания по переполнению TMR0

              movlw       .15              ;запись числа 15 в регистр таймера TMR0

              movwf       TMR0             ;равнозначно временной задержке примерно 1мс

                                                                                    

              swapf       STATUS_TEMP,W    ;восстановление содержимого ключевых регистров

              movwf       STATUS           ;

              swapf       W_TEMP,F         ;

              swapf       W_TEMP,W         ;

                                           ;

              retfie                       ;выход из подпрограммы прерывания

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Основная программа

                                

            

Start         movlw       b’00000000′      ;запись нулей в выходные защелки порта B

              movwf       PORTB

 

              movlw       b’00000111′      ;выключение компараторов

              movwf       CMCON

 

              bsf         STATUS,RP0       ;настройка линий ввода\вывода порта B

              movlw       b’00110111′          

              movwf       TRISB

            

                                           ;запись двоичного числа 11010001 в регистр

              movlw       b’11010001′      ;OPTION_REG, тем самым устанавливаем внутренний

              movwf       OPTION_REG       ;источник тактового сигнала для TMR0

              bcf         STATUS,RP0       ;включаем предделитель перед TMR0

                                           ;устанавливаем коэффициент предделителя 1:4

 

              clrf        shet             ;очистка дополнительных регистров

              clrf        shet1            ;

              clrf        flag1            ;

  

              clrf        TMR0             ;очистка регистра таймера TMR0

              bcf         INTCON,T0IF      ;сброс флага прерывания по переполнению TMR0

              bsf         INTCON,T0IE      ;разрешение прерываний по переполнению TMR0

              bsf         INTCON,GIE       ;глобальное разрешение прерываний

      

a1            btfss       flag1,1          ;опрос флага регистрации поворота энкодера

              goto        a1               ;флаг регистрации равен нулю: переход на метку a1

              bcf         flag1,1          ;флаг равен единице: сброс флага регистрации

              movf        shet,W           ;вывод содержимого регистра shet на цифровое

              call        vivod            ;табло

              goto        a1

 

              ……………..            ;подпрограммы вывода содержимого    

              ……………..            ;регистра shet на семисегментные индикаторы

              ……………..            ;

 

              end                          ;конец всей программы

                                           ;</p16f628a>

TIA Portal Подключение энкодера


2020-10-07 Промышленное  


Управление движением и позиционирование при помощи энкодеров является одной из самых распространенных задач в системах автоматизации. Благодаря сигналам с энкодера, мы можем получать точную информацию о положении исполнительного механизма и тем самым контролировать процесс управления.

Энкодеры являются датчиками угловых или линейных перемещений, преобразующие механическое перемещение в электрический сигнал. Помимо положения контролируемого объекта, также можно получать данные о скорости и направлении вращения.

То есть по своей сути энкодер является датчиком обратной связи, без которого задача точного и эффективного  позиционирования становится невозможной.

Инкрементальные и абсолютные энкодеры

По типу энкодеры делятся на  инкрементальные и абсолютные.

Инкрементальные формируют определенную последовательность импульсов в зависимости от угла поворота/перемещения механизма. Количество импульсов на оборот определяется разрешением энкодера.

Особенностью инкрементального энкодера является формирование сигнала о состоянии только движущегося объекта, если объект неподвижен, инкрементальный энкодер не считывает информацию. Для определения начального положения после подачи питания требуется провести инициализацию для поиска так называемой стартовой метки или нуль-метки (Zero), которая задает начало отсчета импульсов в цикле работы, то есть начальное положение (точка отсчета).

Абсолютные — формируют на выходе уникальный цифровой код, соответствующий текущему положению объекта. Каждая метка абсолютного энкодера формирует свой индивидуальный код для текущей позиции, то есть в любой момент времени можно считать информацию о положении (координате) объекта, вне зависимости от того, вращается механизм или находится в состоянии покоя. Даже если при пропадании питания провернуть механизм на определенный угол, то как только питание снова появится, энкодер моментально выдаст новое, фактическое угловое положение вала. В этом их преимущество перед инкрементальными.

Абсолютные энкодеры в свою очередь делятся на однооборотные — считывают число уникальных цифровых кодов за один оборот вращения диска и многооборотные — как и однооборотные измеряют перемещение за один оборот, но также отслеживают количество полных оборотов вала, используя уникальное слово для каждой позиции и количества оборотов.

Основным параметром абсолютных энкодеров является разрядность, или количество бит на один оборот.

Разработка программы в Tia Portal

После этого небольшого вступления перейдем к нашей непосредственной задаче. А именно подключении абсолютного энкодера Leine Linde к контроллеру Siemens S7 300 по протоколу Profibus DP.

Для нашей задачи нам потребуется скачать конфигурационный файл GSD (General Station Data – общее описание станции), можно сказать драйвер, содержащий спецификацию устройства — идентификатор устройства, конфигурационную информацию, регулируемые параметры, тип данных и допустимые предельные значения. Благодаря GSD файлу отпадает необходимость в ручном вводе данных, осуществляется автоматическая проверка ошибок и целостности данных. Скачать GSD файл можно на официальном сайте производителя конкретного оборудования.

Далее необходимо импортировать наш GSD файл в среду разработки Tia Portal. Для этого выбираем в меню Options пункт Manage general station description files (GSD).

Указываем путь к нашему файлу на жестком диске и после завершения установки наш энкодер добавится в каталоге оборудования.

Добавляем энкодер в проект. Из раздела Devices & networks переходим на вкладку Network view и производим соединение контроллера и энкодера по шине Profibus. В данном случае к контроллеру 314С-2 подключены по Profibus два энкодера Leine Linde и HMI панель KTP700 Basic, а по Profinet еще один контроллер Siemens 317F-2.

Для настройки обмена данными между ПЛК и энкодером задействуем стандартную телеграмму Telegram 81. Выберем ее в разделе Device view.

Телеграмма 81 включает в себя следующую структуру данных:

Слева — это данные, передаваемые с ПЛК в энкодер.

  • STW2_ENC — слово управления 2 используется для контроля правильной синхронизации процессов контроллера с процессами в энкодере.
  • G1_STW — слово управления 1 основными функциями энкодера, такими как установка абсолютного положения, парковка, подтверждение ошибки.

Справа — данные, принимаемые ПЛК с энкодера.

  • ZSW2_ENC — слово состояния 2, эквивалентно STW2_ENC.
  • G1_ZSW — слово состояния 1 основными функциями энкодера, эквивалентно G1_STW.
  • G1_XIST1 — фактическое значение положения 1
  • G1_XIST2 — фактическое значение положения 2. В случае возникновения какой-либо ошибки, отображает код ошибки.

Далее на вкладке Device-specific parameters задаем необходимые значения параметров энкодера, после чего сохраним и скомпилируем наш проект.

Загружаем проект в контроллер PLC - Download to Device.

Переходим непосредственно к программной части. Нам понадобится два блока, один из которых будет отвечать за обработку данных энкодера, а второй за управление энкодерами.

Создадим новую функцию и задаем ей имя Profibus_DP_Leine.

Функция Profibus_DP_Leine готова.

Данную функцию будем вызывать в  функциональном блоке. Создаем новый блок Encoder_Leine&Linde, который отвечает непосредственно за управление энкодерами.

Network 1: Энкодер 1 BQ1

Network 2: Энкодер 2 BQ2

Теперь в организационном блоке OB1 можно вызывать этот ФБ.

   ФБ Encoder_Leine&Linde — Скачать

   ФБ Profibus_DP_Leine — Скачать

РадиоКот :: Энкодер из шагового двигателя.

РадиоКот >Статьи >

Энкодер из шагового двигателя.


Использование шаговых двигателей (ШД) в качестве энкодера по-прежнему остается привлекательным решением, т.к. промышленные энкодеры, при всех своих достоинствах, имеют существенные недостатки — цена и сложности при покупке единичных экземпляров. Если контактные энкодеры еще с трудом можно приобрести, то цена бесконтактных энкодеров совершенно неподъемная.

В моем случае исключалось применение контактного энкодера, т.к. не допускались пропуски и генерация паразитного (из-за дребезга) сигнала при вращении. Мне не удалось получить удовлетворительных результатов при испытаниях контактных инкрементального и абсолютного энкодеров. Марки называть не буду.

В итоге, склонился к применению ШД от старого 5-дюймового дисковода. За основу взял https://ru3ga.qrz.ru/UZLY/encod.htm, но большое число элементов совсем не радовало.


В результате, схема была приведена к виду, показанному на Рис.1. Для подавления паразитных колебаний у обоих каналов закорочена одна из полуобмоток, что обеспечило достаточное демпфирование, резко снизило скорость нарастания сигнала при больших скоростях вращения и позволило использовать ШД с внутренним соединением средних выводов обмоток.

Также введен гистерезис порядка 50…100 мВ (зависит от напряжения питания 4…5В).

После изменений работа схемы при напряжении питания 5В меня устроила, но хотелось, чтобы она работала от 3В. Большое число элементов и сравнительно большой потребляемый ток, привели к схеме Рис.2.


Подключение обмоток двигателя осталось таким же, а в качестве формирователя сигнала использована микросхема HEF4069 (можно заменить CD4069, MC14069). Ввод схемы в линейную область сделан на одном инверторе, выход которого соединен с входом. Такое соединение позволяет превратить инвертор в повторитель напряжения, примерно равного половине напряжения питания без использования дополнительного резистивного делителя.

При 3В схема на LM358 отказалась работать из-за недостаточно хороших выходных уровней компаратора.

Качество работы обеих схем при 5В питании получилось примерно одинаковое. При монотонном пошаговом повороте вала двигателя наблюдалась четкая последовательность 2-битного кода Грея. Но! При смене направления вращения первый шаг нарушал эту последовательность.

Например:






Вращение по часовой

Вращение против часовой

00

11

01

10

11

00

10

01


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

Эта особенность поведения ШД (смена состояния в обоих каналах) учитывалась программно. Для примера приведены ассемблерные программы обработки сигналов ШД в качестве энкодера для AVR и MSP430.


На Рис.3 приведены диаграммы сигналов, генерируемых ШД при включении обмоток в соответствии со схемами. Алгоритм обработки сигналов энкодера показан на двух нижних диаграммах Рис.3

-при поступлении прерывания от активного фронта канала А анализируется уровень и флаг требования прерывания канала B. Если флаг установлен, что говорит о смене направления вращения, дополнительно анализируется состояние внутреннего рабочего флага, который сигнализирует о предыдущем направлении вращения и идет соответствующее изменение значения счетчика шагов. Это сделано для исключения неоднозначности определения кодовой последовательности, возникающей при смене направления вращения. Если флаг сброшен, что говорит об отсутствии смены направления вращения, идет простое изменение значения счетчика шагов.

-совершенно аналогично идет обработка прерывания от активного фронта канала В.

В итоге получается обработка каждого шага двигателя.

Шаговый двигатель, в качестве энкодера, был встроен в конструкцию ленточной пилорамы для повышения точности изготовления пиломатериалов.


Файлы:
Прошивки для AVR и MSP430.



Вопросы, как обычно, складываем тут.


Как вам эта статья?

Заработало ли это устройство у вас?


Эти статьи вам тоже могут пригодиться:

Энкодер для регулировки громкости

Добрый день, уважаемые читатели. Под катом Вас ждет обзор цифрового аналога переменного резистора для регулировки громкости в усилителях. Цифровой регулятор громкости за недорого. Так же требуется консультация.

Я ранее в самодельных усилителях использовал цифровые регуляторы громкости, в частности на PGA2311. Задумка интересная, но как всегда хромала китайская реализация.

Есть еще вариант от sure без экранчика, но решил попробовать этот вариант с экраном.

Покупка:

Доставка довольно быстрая.
Упаковка надежная.

Общий вид:


Состоит их двух плат связанных шлейфом, на одной энкодер и подключения на другой экран. В комплекте два кабеля для подключения к источнику и усилителю. Светодиоды индикации торчат высоко, но можно перепаять.

Крупно части:


Длина проводов достаточная (около 20 см) кроме провода питания.

Плата блока питания усилителя

Для однополярного питания! Два выхода с платы БП +напряжение и земля.
Размеры 113х73 мм
Крепежные отверстия 3 мм.
Под конденсаторы диаметром 30, между выводами 10 мм.

Купил заодно про запас.

Технические характеристики:

Напряжение питания: DC 5-12В.

Потребляемый ток: 35mA

Частотный диапазон: 20-20000 Гц.

Входное сопротивление: 10 кОм.

Диапазон регулировки: 0 до -83 дБ.

Размеры: основная плата 34 * 29.5 * 31 мм / экран 31.5 * 20.5 * 10 мм

Масса: 35 г

Экран 3621AS Контроллер

На питании стоит AMS 1117 3.3 и жутко греется.

Вот думаю не этот ли кондер виноват, на фотках продавца его нет.

В основе регулировки громкости лежит чип от mitsubishichips M62429P в sop корпусе:

Заявлено THD = 0.01%

Диапазон регулировки: 0 до -83 дБ с шагом 1 дБ.

Питание: 4,5-5,5 В.

Размеры присоединительные:

Работа энкодера:

Подключаем энкодер к питанию, вход подключаем к источнику, выход — к усилителю.

Энкодер вращается на 360 градусов.

Вращаем против часовой стрелки — уменьшаем громкость, мигает при этом левый светодиод, по часовой стрелке — увеличиваем громкость, мигает при этом правый светодиод. На экране отображается значение от 00 до 83. Нажимаем на энкодер — режим MUTE — тишина. На экране при этом отображается «—«.

По умолчанию, после выключения — 40 единиц.

Работает даже от аккума 18650.

Собирал тестовый стенд из mp3 модуля, этого энкодера, платы усилителя на TPA3116 и микроколонок — все работает исправно, громкость регулирует, шумов посторонних нет. Но энкодеру нужно отдельное питание, что бы не было земляных петель.

В работе:


Режим MUTE

Цифровой энкодер для регулировки громкости по цене сравним с нормальным потенциометром, а функционал богаче.
Пока рекомендовать не могу, не решена проблема с нагревом AMS 1117. Жду Вашего совета.

Спасибо за внимание! Всем удачных конструкций! Задавайте вопросы в комментариях.

Диск кодировщика — HomoFaciens



Новости
Проэкт
Технологии
РобоСпатиум
Способствовать
Предметный указатель
Скачать
Ответы
Игры
Советы по покупкам
Связаться с нами


<<< Диск кодировщика сервоприводов (2) >>>

Видео о кодировщиках дисков


Прозрачный фотоэлектрический датчик

Рисунок 1:
Фотоэлектрические датчики состоят из фототранзистора и светодиода.Пока фототранзистор не подвергается воздействию света, сопротивление его эмиттер-коллектор не менее нескольких килоомов. Когда свет попадает на устройство, сопротивление падает до нескольких Ом. С делителем напряжения, состоящим из фототранзистора и постоянного резистора в несколько киломов, изменяющееся сопротивление линии эмиттер-коллектор преобразуется в переменное напряжение. Входное напряжение обычно составляет 3,3 В (например, для Raspberry Pi) или 5 В (например, для Arduino).
Чтобы включить светодиод, катод инфракрасного диода, помеченный буквой «E», должен быть подключен к отрицательной клемме источника напряжения, а анод, помеченный «+», должен быть подключен к плюсу. постоянного напряжения через резистор (R1), ограничивающий ток.Значение сопротивления зависит от входного напряжения и прямого тока светодиода. Взгляните на техническое описание вашего сенсорного блока, чтобы узнать прямой ток. Обычно это значение находится в диапазоне 20-60 мА. С резистором 180 Ом мы получаем 5 В / 180 Ом = 27 мА при 5 В. Падение напряжения на светодиоде не учитывается при использовании этой простой формулы, поэтому сила тока будет немного ниже.
Излучатель фотодатчика, обычно отмеченный буквой «D», должен быть подключен к отрицательной клемме источника напряжения.Второй вывод, обычно отмеченный знаком «+», должен быть подключен к положительной клемме источника напряжения через R2. Этот последовательный резистор должен быть в диапазоне 2-20 кОм.

Рисунок 2:
Используйте цифровой мультиметр, чтобы проверить правильность работы сенсорного блока. Подключите фотоэлектрический датчик к источнику постоянного напряжения (обычно 3,3 или 5 В). Наберите измерение напряжения и подключите мультиметр к массе и выходу сенсорного блока (контакт «+» на фототранзисторе).Значение напряжения должно быть ниже 0,5 В. Если свет светодиода заблокирован (например, лезвием ножа), показания должны быть близки к входному напряжению.

Диск сенсора

Рисунок 3:
Для обнаружения вращательного движения необходимы два световых датчика. Зубцы и зазоры сенсорного диска должны быть достаточно широкими, чтобы блокировать или пропускать инфракрасный свет обоих светодиодов одновременно. Каждый раз, когда диск вращается, уровень сигнала на одном из сенсорных блоков изменяется за раз.
Если цикл от 0 до 3 пройден один раз, диск датчика вращался на один зуб (или зазор, в зависимости от начальной точки). За полный оборот сенсорного диска этот цикл повторяется четыре раза; состояние на двух выходах изменилось 16 раз, при этом полный поворот делится на 16 шагов, каждый с угловым перемещением 22,5 градуса.
Чем больше зубцов, тем выше разрешение энкодера. 6 зубцов дают 24 шага для полного поворота, поэтому мы получаем примерно 15 градусов на шаг.

Выходные сигналы

Рисунок 4:
Осциллографический график механического энкодера при вращении с постоянной скоростью.
Результирующая кривая представляет собой прямоугольный сигнал. Нижняя кривая смещена вправо на 10 мс. В идеале этот фазовый сдвиг должен составлять четверть периодического времени, что составляет 52/4 = 13 мс. Важно, чтобы был четкий фазовый сдвиг, чтобы края никогда не находились один под другим. Это гарантирует, что только одна из выходных клемм меняет свое состояние за раз.

Управление двигателем

Рисунок 5:
Через мост H микроконтроллер может переключать электродвигатель в любом направлении. С помощью программного обеспечения двигатель можно включить до тех пор, пока сенсорный диск не повернет на один шаг. При этом обычный щеточный двигатель постоянного тока может быть преобразован в шаговый двигатель. Количество и направление шагов задаются через интерфейс USB с компьютера. Если с одной командой передается 16 шагов, двигатель совершает полный оборот без остановки (при условии, что сенсорный диск имеет четыре зубца).
Заданное значение постоянно сравнивается микроконтроллером с фактическим положением сенсорного диска, и всякий раз, когда есть отклонения, двигатель управляется таким образом, чтобы ошибка была минимальной.
Arduino может обрабатывать до 1600 импульсов в секунду. При скорости вращения 6000 об / мин (= 100 оборотов в секунду) сенсорный диск с четырьмя зубьями может сканироваться контуром управления.

Примеры

Рисунок 6:
Линейное движение моих станков с ЧПУ v0.6 и v2.0 выполняется двигателями постоянного тока с дисками кодировщика.
Благодаря стержню с резьбой вращательное движение мотор-редукторов постоянного тока превращается в линейное движение.

Рисунок 7:
Этот датчик от старого принтера. Если вы не можете найти таблицу, вы можете догадаться, какой вывод какой функции принадлежит. На стороне фототранзистора четыре контакта (1-4), на стороне светодиода только два (5 + 6). Заземление стороны светодиода и стороны датчика, скорее всего, совмещено.Это верно для контактов 3 и 6 на этой плате. Таким образом, к этим контактам должен быть подключен минус источника напряжения.
Выходные штыри датчика соединены непосредственно с штырьками штекера (A + B). Это верно для контактов 1 и 4 на стороне датчика.
Последний вывод вилки должен соответствовать положительному напряжению питания. Плюс проходит к контакту 5 через последовательный резистор (R1) и напрямую к контакту 2. Между плюсом и минусом (C1) есть конденсатор.
Протестируйте плату с помощью 3.Сначала 3 В (подключено к контактам штекера, а не напрямую к контактам датчика!). Напряжение на контактах A и B должно быть близко к 0 В. Если свет светодиода блокируется лезвием ножа, регистрируемое напряжение должно быть близко к входному напряжению (3,3 В). Если напряжение на контактах датчика не падает ниже 0,5 В при снятии лезвия, вы можете попробовать управлять датчиком, используя входное напряжение 5 В.

Рисунок 8:
На сенсорном диске принтера около 3000 очень тонких линий.При одном обороте в секунду мы получаем 12000 переходов на входах микроконтроллера каждую секунду. Я написал новый, более эффективный скетч, используя прерывания для управления этим двигателем. Тем не менее, скорость вращения двигателя принтера пришлось снизить с помощью широтно-импульсной модуляции, чтобы избежать пропуска импульсов.

Рисунок 9:
Цифровой сервопривод, сделанный из привода, используемого для открытия и закрытия лотка старого оптического привода.
Как упоминалось ранее, угловое разрешение можно увеличить, используя сенсорный диск с большим количеством зубцов.Вы также можете прикрепить диск датчика к шестерне трансмиссии вместо использования выходного вала. Шестерня с датчиком поворачивается со средним углом 22,5 градуса за шаг при использовании диска с 4 зубьями. При передаче 13: 1 от колеса датчика на выходной вал мы получаем всего 1,7 градуса на шаг. Обратите внимание, что всегда есть разрешение, вызванное передачей, которая снижает эту академическую ценность.

Рисунок 10:
Если вам нужен действительно мощный сервопривод, вы можете использовать двигатель стеклоочистителя.Мост H имеет набор микросхем BTS7960, который рассчитан на постоянный ток до 43 А (с радиатором).


Рисунок 11:
Светоизлучающие и чувствительные области пропускающих фотодатчиков обычно ограничены щелью шириной всего 1 мм в центре устройства.

Рисунок 12:
Чтобы получить более компактное расположение энкодера, ширину зуба можно уменьшить до удвоения ширины щели в центре фотодатчика.Второй датчик может быть установлен в любом месте на колесе, если это целое число зуба и ширины зазора плюс или минус половина ширины зуба от первого.
С прорезью 1 мм результирующая ширина зуба составляет 2 мм. Для сенсорного диска с 30 зубьями мы получаем радиус 30 x 2 x 2 / (π x 2) = 19 мм, диаметр 38 мм.
Один зуб и один зазор имеют ширину 360 ° / (30 x 2) = 6 °. Угол между двумя датчиками на чертеже составляет 15 x (6 ° + 6 °) — 3 ° = 177 °.

Загрузки

Некоторые из примеров схем в видео доступны как пакет для загрузки.Оставьте комментарий или напишите мне, если вам что-то не хватает в этом пакете.

Рисунок 11:
Цепь цифрового сервопривода электродвигателя стеклоочистителя.

<<< Диск кодировщика сервоприводов (2) >>>


Новости
Проэкт
Технологии
РобоСпатиум
Способствовать
Предметный указатель
Архивы
Скачать
Ответы
Игры
Ссылки
Советы по покупкам
Связаться с нами
Отпечаток


Цифровая комбинационная логика, часть III

Кодеры

Кодер — это комбинационная схема, которая выполняет обратную операцию декодеру.Если выходной код устройства имеет меньше битов, чем входной код, устройство обычно называется кодировщиком. например 2 n -кодеры с приоритетом.

Самый простой кодировщик — это двоичный кодировщик 2 n -to-n, где он имеет только один из 2 n входов = 1, а на выходе — n-битное двоичное число, соответствующее активному входу.

Пример — восьмерично-двоичный кодировщик

Octal-to-Binary принимает 8 входов и обеспечивает 3 выхода, тем самым делая противоположное тому, что делает декодер 3-в-8.В любой момент времени только одна входная строка имеет значение 1. На рисунке ниже показана таблица истинности восьмерично-двоичного кодировщика.

Таблица истинности

I0

I1

I2

I3

I4

I5

I6

I7

Y2

У1

Y0

1

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

1

0

0

1

0

0

0

0

0

0

1

0

0

0

0

1

0

0

0

0

0

1

1

0

0

0

0

1

0

0

0

1

0

0

0

0

0

0

0

1

0

0

1

0

1

0

0

0

0

0

0

1

0

1

1

0

0

0

0

0

0

0

0

1

1

1

1

Для двоичного энкодера 8 к 3 со входами I0-I7 логические выражения выходов Y0-Y2 следующие:

Y0 = I1 + I3 + I5 + I7

Y1 = I2 + I3 + I6 + I7

Y2 = I4 + I5 + I6 + I7

Основываясь на приведенных выше уравнениях, мы можем нарисовать схему, как показано ниже

Схема

Пример — преобразование десятичного в двоичное

Преобразование десятичного в двоичное принимает 10 входов и обеспечивает 4 выхода, тем самым делая противоположное тому, что делает декодер 4-в-10.В любой момент времени только одна входная строка имеет значение 1. На рисунке ниже показана таблица истинности кодировщика от десятичного к двоичному.

Таблица истинности

I0

I1

I2

I3

I4

I5

I6

I7

I8

I9

У3

Y2

У1

Y0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

0

0

0

0

0

0

0

0

0

1

0

0

1

0

0

0

0

0

0

0

0

0

1

0

0

0

0

1

0

0

0

0

0

0

0

0

1

1

0

0

0

0

1

0

0

0

0

0

0

1

0

0

0

0

0

0

0

1

0

0

0

0

0

1

0

1

0

0

0

0

0

0

1

0

0

0

0

1

1

0

0

0

0

0

0

0

0

1

0

0

0

1

1

1

0

0

0

0

0

0

0

0

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

1

Из приведенной выше таблицы истинности мы можем вывести функции Y3, Y2, Y1 и Y0, как указано ниже.

Y3 = I8 + I9

Y2 = I4 + I5 + I6 + I7

Y1 = I2 + I3 + I6 + I7

Y0 = I1 + I3 + I5 + I7 + I9

Кодер приоритета

Если мы внимательно посмотрим на схемы кодировщика, которые у нас есть, мы увидим следующие ограничения.Если одновременно активны более двух входов, результат будет непредсказуемым или, скорее, это не то, что мы ожидаем.

Эта неоднозначность разрешается, если установлен приоритет так, что кодируется только один вход, независимо от того, сколько входов активно в данный момент времени.

Кодер приоритета включает функцию приоритета.Работа кодера приоритета такова, что если два или более входа активны одновременно, вход с наивысшим приоритетом будет иметь приоритет.

Пример — кодировщик приоритета 4to3

Таблица истинности кодировщика приоритета с 4 входами показана ниже. Вход D3 имеет наивысший приоритет, D2 имеет следующий наивысший приоритет, D0 имеет самый низкий приоритет.Это означает, что выходы Y2 и Y1 равны 0, только когда ни один из входов D1, D2, D3 не имеет высокого уровня, а только D0 имеет высокий уровень.

Кодер от 4 до 3 состоит из четырех входов и трех выходов, таблица истинности и символы которых показаны ниже.

Таблица истинности

Д3

Д2

Д1

D0

Y2

У1

Y0

0

0

0

0

0

0

0

0

0

0

1

0

0

1

0

0

1

х

0

1

0

0

1

х

х

0

1

1

1

х

х

х

1

0

0

Теперь, когда у нас есть таблица истинности, мы можем нарисовать Kmaps, как показано ниже.

км

Из Kmap мы можем нарисовать схему, как показано ниже. Для Y2 мы подключаемся напрямую к D3.

Мы можем применить ту же логику для получения кодировщиков с более высоким приоритетом.

Кодировать двоичный код проверки на четность с низкой плотностью (LDPC)

Матрица проверки на четность, заданная как разреженная ( N
K ) -by- N двоичная матрица. N — длина выходного кодового слова LDPC и должна
находиться в диапазоне (0, 2 31 ). К это
длина незакодированного сообщения и не должна превышать
. Последний ( N K )
столбцы в матрице проверки на четность должны быть обратимой матрицей в
Поле Галуа порядка 2, gf (2).

Вы также можете указать матрицу проверки на четность как двухколоночную матрицу не разреженных индексов,
I , который определяет индексы строки и столбца
1 с в матрице проверки на четность, что
разреженный (I (:, 1), I (:, 2), 1) .

Этот параметр принимает числовые типы данных. Когда вы устанавливаете этот параметр в разреженный двоичный файл
матрица, этот параметр также принимает данные Boolean
тип.

По умолчанию используется функция dvbs2ldpc для
настроить разреженную матрицу проверки на четность для кодирования LDPC с половинной скоростью, как
указан в стандарте DVB-S.2.

Примечание

  • Когда последний ( N
    K ) столбцы матрицы проверки на четность
    сформировать треугольную матрицу, прямая или обратная подстановка
    выполняется для решения уравнения проверки на четность.

  • Когда последний ( N
    K ) столбцы матрицы проверки на четность делают
    не образуют треугольную матрицу, обращение матрицы
    выполняется для решения уравнения проверки на четность. Если большой
    матрица должна быть инвертирована, инициализации или обновления требуют
    больше времени.

Пример: dvbs2ldpc (R, 'индексы') ​​ настраивает матрицу индексов для
Стандарт DVB-S.2, где R — кодовая скорость, а
'индексы' определяет выходной формат
dvbs2ldpc как двухколоночная матрица двойной точности
который определяет индексы строки и столбца 1 s в
матрица проверки на четность.

Типы данных: double | Логическое

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *