Введение
Актуальность данной работы обусловлена тем, что инкрементальные энкодеры являются одним из самых распространённых датчиков в современных сложных технических системах. Они нашли широкоепримененине в промышленном оборудовании в ситуациях, когда необходима точная информация об объекте, который вращается или перемещается. С помощью энкодера можно цифровым способом узнать точную позицию детали или угол её поворота.
Предмет исследования – плата ArduinoNano, программное обеспечение, модуль поворотного энкодера.
Целью данного проекта является собрать макет модуляэнкодера и провести комплексное исследование модуля поворотного энкодера, разработать программу управления на базе Arduino.
Задачи:
изучить принцип работы модуля поворотного энкодера;
исследовать особенности аппаратного и программного обеспеченияArduinoNano.
Методы исследования: анализ литературы по заданной теме, моделирование управления энкодером, формализация.
В данной работе будут отражены особенности комплектующих для постройки робота, а также программного обеспечения.
1.1 Инкрементальный энкодер
Э
нкодер (от англ. encode – преобразовывать) – это устройство для преобразования угловых положений или линейных перемещений в цифровой сигнал, т.е. энкодер – это датчик угла или линейного перемещения, соответственно существуют крутильные и линейные энкодеры. [1.1]
1.1 Пример инкрементального энкодера
Принцип работы энкодера заключается в преобразовании механического перемещения в электрические сигналы, у обычного инкрементального энкодера, который будет рассматриваться в данном проекте, этот сигнал представляет собой два прямоугольных импульса (при равномерном вращении), сдвинутых по фазе на 90 градусов. Сигналы с этих двух каналов позволяют определить направление вращения энкодера и величину углового перемещения. Направление вращения определяется опережением или отставанием импульсов одного из каналов относительно второго канала. Величина перемещения определяется по количеству импульсов на этих двух каналах. [1.2]
1.2 Сигнал, снятый с энкодера
Для обработки выходного сигнала применяются специализированные счётчики импульсов, либо отдельно стоящие, либо интегрированные в микропроцессоры, микроконтроллеры или ПЛК (в нашем случае это будет плата ArduinoNano). В зависимости от способа обработки сигнала с энкодера можно получать информацию о положении или о скорости. Такая гибкость позволяет широко применять энкодеры в современных системах автоматического управления в качестве датчиков обратной связи по обоим этим величинам.
1.2 Преимущества и недостатки инкрементального энкодера
К плюсам можно отнести:
Дешевизну и простоту в монтаже и применении.
Минимальное количество ошибок во время подсчета импульсов, либо полное их отсутствие.
Универсальность использования.
Возможность определения направления вращения замеряемого объекта.
К недостаткам можно отнести:
Возможные ошибки при запуске системы и наличие ошибок во время работы. Особенно это будет проявляться в случае неверно выбранного типа энкодера и его монтажа.
Наличие некоторых ограничений в плане обеспечения разрешающей способности – при повышении степени точности определения потребуется увеличивать и число рабочих каналов.
Необходимость преобразования двоичного кода Грея в некоторых типах датчиков.
2.1 Программно-аппаратное обеспечение ArduinoNano
Arduino — торговая марка аппаратно-программных средств для построения и прототипирования простых систем, моделей и экспериментов в области электроники, автоматики, автоматизации процессов и робототехники.
Программная часть состоит из бесплатной программной оболочки (IDE) для написания программ, их компиляции и программирования аппаратуры. Аппаратная часть представляет собой набор смонтированных печатных плат, продающихся как официальным производителем, так и сторонними производителями. Полностью открытая архитектура системы позволяет свободно копировать[2] или дополнять линейку продукции Arduino.
2.2 Плата ArduinoNano
ArduinoNano [2.1] - это функциональный аналог ArduinoUno, но размещённый на миниатюрной плате.
Отличие заключается в отсутствии собственного гнезда для внешнего питания, использованием чипа FTDI FT232RL для USB-Serial преобразования и применением mini-USB кабеля для взаимодействия вместо стандартного.
Платформа имеет штырьковые контакты, что позволяет легко устанавливать её на breadboard. Используйте ArduinoNano там, где важна компактность, а возможностей Arduino Mini недостаточно.
2.1 Пример плата ArduinoNano
Характеристики:
- Микроконтроллер: ATmega328;
- Тактовая частота: 16 МГц;
- Напряжение логических уровней: 5 В;
- Входное напряжение питания: 7 - 12 В
- Портов ввода-вывода общего назначения: 22;
- Портов с поддержкой ШИМ: 6;
- Портов, подключённых к АЦП: 8;
- Flash-память: 32 КБ;
- Габариты: 18×45 мм.
2.3 Сильные и слабые стороны ArduinoNano.
К плюсам можно отнести:
Цена. ArduinoNano возможно купить по относительно низкой цене (200 ~ 300 руб.).
Кроссплатформенность. Программное обеспечение Arduino осуществляет работу на большинстве известных программ Windows, Macintosh OS X, Linux, являясь открытым приложением, работающим на Java.
Простая среда программирования. Программная оболочка является достаточно простой в применении для новичков, но весьма гибкой для большинства продвинутых пользователей.
Открытые спецификации и схемы оборудования. Arduino основан на микроконтроллерах Atmel ATMEGA8 и ATMEGA168. Схемы модулей публикуются под лицензией Creative Commons, из-за этого опытные схемотехники могут создавать свои собственные версии модуля.
К минусам можно отнести:
Частота. Достаточно низкая частота имеющегося процессора.
Память. Малое количество флэш-памяти для создания программ.
3 Необходимые комплектующие.
Плата ArduinoNano
Программная среда Arduino и лаборатория
Энкодер с RC-фильтром
Программная среда QT Creator
Мотор-редуктор с колесом.
Дополнительные файлы для синхронной работы программ, написанных на QTCreatorи ArduinoIDE
Сборка макета:
Соединим энкодер с мотором при помощи изогнутой металлической пластины и термотрубки. Далее при помощи соединительных проводов подключим энкодер к плате ArduinoNano как показано на рисунке 3, по которым будет осуществляться передача данных. Сама плата ArduinoUno подключается через USB провод к одному из портов персонального компьютера для обмена данными с помощью программ, написанными в QT Creator и программной среде Arduino.
3 Пример плата ArduinoNano
4 Программная часть проекта
Для работы с платой Arduino и передачи с неё данных используется программа, написанная в программной среде Arduino, которая выглядит следующим образом:
float s = 0;
float s1 = 0;
float v = 0;
volatile int counter = 0; // счётчик
volatile bool encFlag = 0; // флагповорота
void setup() {
Serial.begin(9600);
attachInterrupt(0, encIsr, CHANGE);
attachInterrupt(1, encIsr, CHANGE);
}
void loop() {
s1=s;
s = (counter*6.8 *3.14 / 20);
v = (s - s1) * 10;
Serial.println(v);
delay(100);
}
volatile byte reset = 0, last = 0;
void encIsr() {
byte state = (PIND & 0b1100) >> 2;
if (reset && state == 0b11) {
int prevCount = counter;
if (last == 0b10) counter--;
else if (last == 0b01) counter++;
if (prevCount != counter) encFlag = 1;
reset = 0;
}
if (!state) reset = 1;
last = state;
}
Данная программа считывает сигналы с энкодера и определяет направление его поворота, после чего рассчитывает и выводить текущую скорость колеса.
Комментарии к программе:
float s = 0;- пройденное расстояние за все время
float s1; - пройденное расстояние за 0.1 секунду до настоящего времени
float v = 0;- расчётная скорость колеса
volatileintcounter = 0; - счётчиктиковэнкодера
volatileboolencFlag = 0; - флаг поворота
voidsetup() {} – Функция, которая вызывается только один раз, когда стартует скетч программы. Используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д.
В функции setup() задаются:
Serial.begin(9600); - Функция, задающая в скобках скорость обмена данными через последовательный порт.
attachInterrupt(0, encIsr, CHANGE);
attachInterrupt(1, encIsr, CHANGE);- Задает функцию обработки внешнего прерывания, то есть функция, которая будет вызвана по внешнему прерыванию.attachInterrupt (pin, function, mode), гдеpin - номер цифрового порта; function - функция, вызываемая прерыванием; mode - задает режим обработки прерывания, в данном случае это CHANGE - функция прерывание вызывается при смене значения на порту, с LOW на HIGH и наоборот.
voidloop() {} – Функция, в которой введённые команды будут выполняться последовательно всё время (циклично), пока включена плата Arduino.
В функции loop() задаются:
s1=s; - считывание пройдённого расстояния за 0.1 секунду до настоящего времени
s = (counter*6.8 *3.14 / 20); - вычисление пройдённого расстояния за все время
v = (s - s1) * 10; - расчет скорости в секунду
Serial.println(v); - выводим значение скорости в поток
delay(100); - обновляем цикл с периодичностью в 0.1 секунду
voidencIsr() – функция определяет состояние каналов энкодера и, в случае их изменения, определяет тип поворота, после чего возвращает значения каналов в исходные
Для работы с платой Arduino на компьютере через консоль используется программа, написанная в программной среде QT Creator, которая выглядит следующим образом:
#include<serial.h>
#include<iostream>
usingnamespacestd;
intmain()
{
constchar*device="\\\\.\\COM3";
uint32_tbaud_rate=9600;
Serialserial_port;
if(!serial_port.open(device,baud_rate)){
cout<<"Error"<<endl;
return1;
}
do{
stringreceived;
received=serial_port.read_line();
floatrec_float=stof(received);
cout<<"Speedis"<<rec_float<<"cmpersecond"<<endl;
}
while(true);
return(0);
}
Данная программа связывается с последовательным портом, к которому подключена плата ArduinoUno, получает из него значения типа string и преобразует их в вещественное число, после чего выводит его в консоль пользователя.
Для корректной работы в программе QT Creator необходимо установить доп. файлы.
Комментарии к программе:
#include<serial.h>
#include<iostream>
#include<unistd.h> - Используемыебиблиотекив проекте для работы с консолью и передачи данных.
usingnamespacestd; - Используемое пространство имён.
intmain(){} – Тело программы, в котором выполняются:
constchar *device = "\\\\.\\COM5"; - Указание соответствующего порта, к которому подключена плата Arduino.
uint32_tbaud_rate = 9600; - Параметр скорости работы с портом.
Serialserial_port; - СозданиеобъектаSerial.
if(!serial_port.open(device,baud_rate)) {
cout<<"Error"<<endl;
return 1;} - Данныйусловныйоператорвыводитнадписьошибки, еслиподкючениекпортуоказалосьнеудачным.
do {} while (True) – Цикл, который будет выполняться бесконечно и в теле которого происходят основные действия, а именно:
stringreceived; - создаем переменную для хранения полученных с порта данных
received = serial_port.read_line(); - передаем ей значение из порта
floatrec_float = stof(received); - преобразуем полученное значение в вещественное число
cout<<"Speedis "<<rec_float<<" cmpersecond"<<endl; - Выводзначениявконсольпользователю.
Заключение
Энкодер – это электронный датчик, который крепится на какой-либо вращающейся детали. Он позволяет с необходимой точностью измерять разные параметры: скорость вращения, расстояние (длину), направление вращения, угловые положения по отношению к нулевой метке. Энкодер является датчиком обратной связи, на выходе которого цифровой сигнал меняется в зависимости от его вращения или от угла его поворота. Этот сигнал обрабатывается в счетчике или контроллере, который выдает команды на устройство индикации или привод. Было проведено комплексное исследование особенностей энкодера, программного и аппаратного обеспечения Arduino. Выявлены положительные характеристики. Проведена сборка макета .Энкодер соединили с мотором при помощи изогнутой металлической пластины и термотрубки. Далее при помощи соединительных проводов подключили энкодер к плате ArduinoNano , по которым будет осуществляться передача данных. Сама плата ArduinoUno подключается через USB провод к одному из портов персонального компьютера для обмена данными с помощью программ, написанными в QT Creator и программной среде Arduino.Для работы с платой Arduino и передачи с неё данных разработана программа, написанная в программной среде Arduino. Данная программа считывает сигналы с энкодера и определяет направление его поворота, после чего рассчитывает и выводить текущую скорость колеса.
Для работы с платой Arduino на компьютере через консоль используется программа, написанная в программной среде QT Creator.
Данная программа связывается с последовательным портом, к которому подключена плата ArduinoUno, получает из него значения типа string и преобразует их в вещественное число, после чего выводит его в консоль пользователя.
Для корректной работы в программе QT Creator необходимо установить доп. файлы.
Используемая литература
https://tehprivod.su/poleznaya-informatsiya/naznachenie-i-vidy-enkoderov.html
https://innodrive.ru/articles/inkrementalnyj-ehnkoder/
https://arduino.ru/Hardware/ArduinoBoardNano
https://alexgyver.ru/encoder/