Как подключить энкодер к частотному преобразователю. Схема
Энкодер для частотника по своему внешнему виду похож на переменный резистор или на потенциометр. Те же три вывода, тот же корпус панели. На этом его сходство заканчивается. Внутри у него два переключателя, у которых есть общий вывод задач управления и два своих.
Чтобы энкодер заработал, средний вывод нужно подключить к земле, а два остальных через резисторы к питанию. Съем сигнала управления нужно производить непосредственно с выводов панели энкодера.
Теперь представим, что энкодер идеальный и его контакты не страдают дребезгом. Подключим к выводам энкодера осциллограф и начнем вращать ручку энкодера. Импульсы будут сдвинуты относительно друг друга на 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. Жду Вашего совета.
Спасибо за внимание! Всем удачных конструкций! Задавайте вопросы в комментариях.
Новости <<< Диск кодировщика сервоприводов (2) >>> Видео о кодировщиках дисков
Прозрачный фотоэлектрический датчик Рисунок 1: Рисунок 2: Диск сенсора Рисунок 3: Выходные сигналы Рисунок 4: Управление двигателем Рисунок 5: Примеры Рисунок 6: Рисунок 7: Рисунок 8: Рисунок 9: Рисунок 10:
Рисунок 11: Рисунок 12: ЗагрузкиНекоторые из примеров схем в видео доступны как пакет для загрузки.Оставьте комментарий или напишите мне, если вам что-то не хватает в этом пакете. Рисунок 11: <<< Диск кодировщика сервоприводов (2) >>> Новости |
Кодеры | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Кодер — это комбинационная схема, которая выполняет обратную операцию декодеру.Если выходной код устройства имеет меньше битов, чем входной код, устройство обычно называется кодировщиком. например 2 n -кодеры с приоритетом. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Самый простой кодировщик — это двоичный кодировщик 2 n -to-n, где он имеет только один из 2 n входов = 1, а на выходе — n-битное двоичное число, соответствующее активному входу. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Пример — восьмерично-двоичный кодировщик | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Octal-to-Binary принимает 8 входов и обеспечивает 3 выхода, тем самым делая противоположное тому, что делает декодер 3-в-8.В любой момент времени только одна входная строка имеет значение 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. На рисунке ниже показана таблица истинности кодировщика от десятичного к двоичному. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Таблица истинности | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Из приведенной выше таблицы истинности мы можем вывести функции 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 состоит из четырех входов и трех выходов, таблица истинности и символы которых показаны ниже. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Таблица истинности | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Теперь, когда у нас есть таблица истинности, мы можем нарисовать 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
| Логическое
.