Контроллер "Вертор СТАНДАРТ V1.0"
1. Назначение устройства.
Программируемый контроллер Вертор СТАНДАРТ ПЭМ 10.3156 (Рис. 1.1) является одним из ключевых элементов системы управляющей электроники «Эвольвектор ВЕРТОР» (далее ВЕРТОР). Он предназначен для создания систем управления различного назначения в рамках основного и дополнительного школьного образования. Рассчитан на применение совместно с электронными модулями, входящими в систему ВЕРТОР (подробная информация о системе представлена в соответствующем разделе сайта https://academy.evolvector.ru).
|
Рис. 1.1 |
Контроллер может использоваться для создания системы управления учебными автоматическими и робототехническими моделями или электронными устройствами. В рамках стандартных функциональных возможностей контроллер может принимать сигналы от входящих в систему датчиков, обрабатывать их и формировать управляющие сигналы для исполнительных устройств согласно заложенной программе.
2. Конструкция контроллера и назначение выводов (контактов).
Контроллер выполнен в виде печатной платы, которая оснащена следующими элементами:
-
разъемами типа XH-2.54-4P для подключения совместимых электронных модулей;
-
разъемами питания под штекер размером 5,0х2,1 и для подачи электроэнергии от заряжаемого модуля;
-
клеммниками для подсоединения электрических двигателей, соответствующих требованиям номинального напряжения и мощности;
-
штыревыми контактами для подключения стандартных RC серводвигателей;
-
разъемом, через который возможно подключение Bluetooth модуля и организация канала передачи данных между контроллером и одноплатными компьютерами типа распберри пай;
-
регулятором напряжения для питания электродвигателей и сервоприводов;
-
разъемом USB тип В для подключения контроллера к персональному компьютеру и загрузки в него программ управления (скетчей);
-
тактовыми кнопками, для которых можно назначить пользовательские функции при реализации проектов и тем самым обойтись без подключения внешних тактовых кнопок;
-
выключателем питания для клеммников электродвигателй и контактов сервоприводов;
-
кнопкой принудительной перезагрузки контроллера в случае его сбоя или не корректной работы.
Перечисленные элементы показаны на Рис. 2.1.
|
Рис. 2.1 |
На рис. 2.2 представлен внешний вид контроллера с указанием габаритных размеров, а также расположение и размеры крепежных отверстий.
|
Рис. 2.2 |
Смонтированные на контроллере четырехконтактные разъемы типа XH-2.54-4P промаркированы и имеют разные возможности по подключению к ним периферийных устройств (электронных модулей). Общей чертой всех разъемов является наличие выводов питания (VCC) и «земли» (GND), которые расположены по краям разъема. В части же сигнальных контактов, размещенных в центре разъема существуют отличия.
Расположение и форма крепежных отверстий на плате контроллера совместимы с таковыми на одноплатном компьютере Raspberry Pi, что дает возможность крепить эти устройства с помощью стоек одно над другим. Помимо этого по расстоянию между крепежными отверстиями (кратно 16 мм) контроллер совместим с конструкторами Эвольвектор, LEGO, MakeBlock, и может прикручиваться к их деталям с помощью стоек.
Разъемы С1-С8 являются разъемами общего назначения и размещены в два ряда по бокам платы контроллера. У части из них (разъемы С1, С2, С5 и С7) присутствует один цифровой (промаркирован просто числовым номером) и один аналоговый (промаркирован буквой А с номером) контакты. К таким возможно подключение датчиков, выдающих аналоговый сигнал. Несколько разъемов (С3, С4, С8) имеют исключительно цифровые управляющие контакты, поэтому могут работать исключительно с цифровыми датчиками. Разъем С6 уникален тем, что оба его сигнальных контакта являются аналоговыми и позволяют работать как с аналоговым, так и с цифровым модулем. Обращение к контактам разъемов С1-С8 при написании скетчей выполняется согласно маркировке на плате.
Группа разъемов С9-С14 размещена в торцевой части платы и предназначена для подключения устройств, работающих по протоколу передачи данных I2C.
Цифровые контакты, перед номером которых стоит знак тильда («~»), поддерживают широтно-импульсную модуляцию, то есть на них может быть сформирован псевдо аналоговый сигнал.
3. Принцип работы контроллера.
Контроллер ВЕРТОР СТАНДАРТ V1.0 построен на платформе Arduino Leonardo. Он представляет собой плату с контактами для подключения различных внешних устройств. Контакты сгруппированы в разъемы в виде гнезд XH-2.54-4P, в каждом из которых по 4 контакта: питание, «земля», и 2 контакта для приема или передачи сигналов. Через указанные контакты принимаются сигналы от датчиков и формируются управляющие сигналы для исполнительных устройств.
Наличие четырехконтактных разъемов является преимуществом по сравнению со стандартной платой Arduino Leonardo, которая оснащена колодками с отдельными контактами. Оно выражается в том, что совместимые электронные модули удобно и быстро подключаются с помощью стандартного кабеля, исключающего неправильное соединение контактов. При этом не требуется макетная плата и кабель надежно соединяет контакты модулей с контактами контроллера. Сами модули имеют отверстия, посредством которых жестко закрепляются с помощью стоек и винтов на элементах конструкций роботов или в любом другом устройстве.
Еще одной особенностью контроллера ВЕРТОР СТАНДАРТ является поддержка заметно большего количества одновременно подключаемых устройств по сравнению с классическими платами Arduino Leonardo. Это возможно благодаря микросхеме расширения портов РСА9685, установленной на плате контроллера. В результате обеспечивается возможность подключения сразу до 14-ти электронных модулей (с суммарным током не более 0,5 А), до 8-ми серводвигателей небольшой мощности (контакты имеют маркировку S8-S15) и 4-х обычных коллекторных моторов (контакты для их подключения имеют маркировки РМ0-РМ7). Суммарный ток одновременно подключенных приводов не может превышать 2,5 А.
Для организации питания перечисленных моторов и серводвигателей в контроллере предусмотрен преобразователь напряжения, допускающий суммарный ток потребления подключенными моторами до 2,5 А.
То, как принимаются входные сигналы, обрабатываются и генерируются управляющие сигналы, определяется программой (скетчем), загруженной в контроллер. Для загрузки программы необходим только персональный компьютер с разъемом USB и с установленным на него программным обеспечением Arduino IDE. Дополнительные программаторы для программирования контроллера не требуются. С инструкцией по подключению контроллера к компьютеру можно ознакомиться в соответствующем разделе сайта Академии Эвольвектор.
Полный функционал контроллера по управлению двигателями реализуется с помощью следующего набора библиотек:
Chronos
DualWheelTruck
I2CTransport
Manipulator
PCA9685
PidRegulator
TimerOne
Указанные библиотеки доступны для скачивания в разделе "Скачать" на сайте Академии Эвольвектор.
Для возможности использования в скетчах их необходимо скачать и поместить в папку libraries, находящуюся в директории с установленной средой программирования Arduino IDE. Если в процессе перемещения библиотек в указанную папку будет выдано предупреждение, содержащее сообщение о том, что такие файлы и папки уже содержатся по указанному пути, то необходимо выполнить их замену.
После размещения библиотек легко проверить корректность их установки. Для этого следует выполнить запуск Arduino IDE, нажать левой кнопкой мыши по пункту «Скетч», после чего выбрать пункт меню «Подключить библиотеку», и если в выпавшем списке содержатся только что загруженные библиотеки (рис. 3.1), то библиотеки размещены верно.
|
Рис. 3.1 |
Порядок использования указанных библиотек сводится к следующим действиям:
- В начале скетча производится подключение файлов библиотек.
- Выполняется инициализация каналов передачи данных и объектов, управление которыми будет осуществляться с помощью библиотек.
- В «теле» скетча вызываются конкретные библиотечные функции, через которые выполняется управление подключенными к контроллеру двигателями или сервомоторами.
С командами, которые обеспечивают выполнение указанных действий, можно ознакомиться с помощью примера скетча SingleMotorTest, находящегося в библиотеке DualWeelTruck (его вызов показан на Рис. 3.2)
|
Рисунок 3.2 |
Подключение библиотек выполняется с помощью следующих строк кода:
#include <Wire.h> // Библиотеки I2C
#include <I2C.h> // Библиотеки I2C
#include <I2CTransport.h> // Библиотеки I2C
#include <PCA9685.h> // библиотека для работы с микросхемой PCA9685
#include <DualWheelTruck.h> //библиотека управления двигателем постоянного тока (ДПТ)
Инициализация канала передачи данных и микросхемы управления двигателями:
I2C myI2C = I2C(); //подготовка интерфейса I2C к работе
I2CTransport transport = I2CTransport(); //подготовка интерфейса I2C к работе
PCA9685* pwmController = new PCA9685(0x40); // инициализация микросхемы РСА9685
Создание объектов в виде моторов выполняется с помощью команды DCMotor(а,b,c,d,e,i), где:
а - указатель на устройство, обеспечивающее ШИМ (имеет значение pwmController);
b - номер контакта клеммника, к которому подключен первый провод электродвигателя (может принимать значение от 0 до 7);
c - номер контакта клеммника, к которому подключен второй провод электродвигателя (может принимать значение от 0 до 7);
d - задание максимально допустимого уровень скорости вращения для данного двигателя, выраженная в процентах (рекомендуется указывать от 40 до 100%);
e - полярность подключения двигателя, которая необходима, когда требуется поменять направление вращения вала двигателя без переподключения проводов двигателя к клеммной колодке (принимает значения true или false);
i - число, которое характеризует степень инерционности вращающихся деталей двигателя или колесной модели вцелом (указывается значение от 0 до 8).
Например для колесного шасси с двумя приводными двигателями инициализация моторов в программе будет выглядеть следующим образом.
Для левого мотора, подключаемого к контактам клеммника 0 и 1, скоростью 50% от максимальной, прямой полярностью и средней инерционностью:
DCMotor motor_left = DCMotor(pwmController, 0, 1, 50, true, 5)
Для правого мотора, подключаемого к контактам 6 и 7 и такими же параметрами скорости и инерционности:
DCMotor motor_right = DCMotor(pwmController, 6, 7, 50, true, 5)
В функции void setup должен выполняться следующий набор действий:
I2CTransport::setClient(&myI2C); //Настройка линии I2C на передачу данных
I2CTransport::begin(); //Вызов функции инициализации линии I2C
pwmController->begin(); //Запуск на работу микросхемы PCA9685
Chronos::delay(3000); //Функция, обеспечивающая задержку на 3 с, чтобы завершились все инициализации.
Для непосредственного управления моторами в скетче используются следующие функции:
motor_left.forward(100); |
//Команда задает вращение вала двигателя вперед относительно заданного при инициализации направления. В скобках указан уровень напряжения, подаваемого на мотор. Значение этого уровня может задаваться в пределах от 0 до 255. Соответственно значение 100 соответствует уровню 39 % от максимально возможного напряжения. |
motor_left.backward(100); | // Команда задает вращение вала двигателя назад с уровнем напряжения 100 из 255 (составляющем 39% от максимального) |
motor_left.stop(false); | //Функция, выполняющая остановку мотора. |
Библиотека также поддерживает работу с энкодерами, установленными на выходной вал мотор-редукторов. Энкодеры позволяют поворачивать выходной вал мотор-редуктора на заданный угол, либо выполнять взаимное регулирование моторов по скорости.
Следует обратить особое внимание, что функции библиотеки по управлению моторами с энкодерами реализованы только для шасси с кинематической схемой, показанной на Рис. 3.3.
|
Рис. 3.3 |
Для демонстрации функций работы с энкодерами в библиотеке DualWheelTruck предусмотрен пример скетча 2WD_test. Открыть его можно, выбрав соответствующий пункт меню, как показано на Рис. 3.4.
|
Рис. 3.4 |
Управление моторами с энкодерами похоже на управление моторами без энкодеров, но есть и ряд принципиальных отличий. Подключение библиотек и инициализация канала передачи данных вместе с микросхемой PCA9685 производятся также. А дальше создаются не объекты отдельных моторов, а объект шасси. Шасси должно иметь принципиальную конструкцию такую, как показано на Рис. 3.3.
Создание объекта шасси, оснащенного двумя мотор-редукторами с энкодерами производится с помощью функции DualWheelTruck(а,b,c,d), где:
а - адрес микросхемы PCA9685 (имеет значение 0x40);
b - радиус колеса (половина диаметра) в мм;
c - расстояние между колесами в мм;
d - частота ШИМ для управления двигателями (если в проекте используются сервоприводы, то задаваемое значение ШИМ должно быть равно 50Гц).
Создание объекта для шасси, у которого радиус колеса составляет 35 мм, межколесное расстояние 170 мм, а частота ШИМ 100 Гц, будет выглядеть следующим образом:
DualWheelTruck truck = DualWheelTruck(0x40, 35, 170, 100);
Для настройки подключенных моторов (правого и левого) используются функции truck.attachLeftMotor(a,b,c,d,e) и truck.attachRightMotor(a,b,c,d,e), у которых в качестве аргументов выступают:
a - номер контакта клеммника, к которому подключен первый провод электродвигателя (может принимать значение от 0 до 7);
b - номер контакта клеммника, к которому подключен второй провод электродвигателя (может принимать значение от 0 до 7);
c - число, которое характеризует степень инерционности вращающихся деталей двигателя или колесной модели вцелом (указывается значение от 0 до 8);
d - задание максимально допустимого уровень скорости вращения для данного двигателя, выраженная в процентах (рекомендуется указывать от 40 до 100%);
e - полярность подключения двигателя, которая необходима, когда требуется поменять направление вращения вала двигателя без переподключения проводов двигателя к клеммной колодке (принимает значения true или false).
Например вызов функции о инициализации левого мотора, подключенного к контактам с номерами 0 и 1, с уровнем инерционности 3, уровнем скорости 60%, а также имеющим обратную полярность, будет выглядеть следующим образом:
truck.attachLeftMotor(0, 1, 3, 60, false);
Помимо моторов настройки требуют и устанавливаемые на них энкодеры. Ниже приводится функция инициализации энкодера для случая размещения энкодера на выходном валу мотор-редуктора:
truck.attachLeftOpticalEncoder(LEFT_ENCODER_PIN, 24);
Здесь LEFT_ENCODER_PIN — это номер контакта, к которому подключается сигнальный провод от модуля энкодера, а число 24 — количество черных и белых секторов на диске энкодера.
Для регулирования моторов с энкодерами в целях обеспечения более точного прямолинейного движения или поворота шасси в библиотеке применяется пропорционально-интегрально-дифференциальный регулятор. Он требует также инициализации и настройки. Выполняется это с помощью нижеприведенных функций, аргументами которой выступают коэффициенты, влияющие на характер работы регулятора. У них есть базовые значение, относительно которых можно производить более тонкую настройку ПИД-регулятора.
Для прямолинейного движения модели:
truck.setSpeedAlignmentPidFactors(Kp, Ki, Kd)
В качестве аргументов здесь используются:
Kp - коэффициент пропорциональной составляющей (базовое значение 30);
Ki - коэффициент интегральной составляющей (базовое значение 0,1);
Kd - коэфф дифференциальной составляющей (базовое значение 10);
Для поворота модели:
truck.setSpeedDifferencePidFactors (Kp, Ki, Kd)
В качестве аргументов здесь используются:
Kp - коэф пропорциональной составляющей (базовое значение 10);
Ki - коэф интегральной составляющей (базовое значение 0,1);
Kd - коэф дифференциальной составляющей (базовое значение 5);
Для непосредственного управления двигателями независимо друг от друга применяются следующие функции:
truck.isBusy() | //функция возвращает логический 1, если в момент вызова функции хотя бы один двигатель вращается, и логическую 0, если валы обоих двигателей находится в покое; |
truck.rightMotorForward(speed, distance) | //вращение правого колеса вперед со скоростью speed и на расстояние, равное distance; |
truck.rightMotorBackward(speed, distance); | //вращение правого колеса назад со скоростью speed и на расстояние, равное distance; |
truck.rightMotorStop(true); | //остановить вращение правого колеса |
Аналогично для левого мотор-редуктора:
truck.rightMotorForward(speed, distance);
truck.rightMotorBackward(speed, distance);
truck.rightMotorStop(true);
Также в библиотеке предусмотрены функции, которые применяются для управления платформой целиком:
truck.moveForward(speed, distance);
truck.moveBackward(speed, distance);
truck.turnLeft(speed, radius, angle);
truck.turnRight(speed, radius, angle);
Контроллер ВЕРТОР СТАНДАРТ поддерживает работу не только с электродвигателями, но и со стандартными хобби-сервоприводами. Для управления серводвигателями предусмотрена отдельная библиотека. Ознакомиться с библиотечными функциями и принципами их использования можно в примере TestOneServo. Вызов примера показан на Рис. 3.5.
|
Рис. 3.5 |
По аналогии с мотор-редукторами скетч должен начинаться с подключения библиотеки и инициализации серводвигателей.
#include "I2CServo.h"
PCA9685 pwm = PCA9685(0x40); //передача в функцию указателя на адрес микросхемы РСА9685
Инициализация объекта серводвигателя выполняется посредством функции I2CServo(а,b,c,d,e,i,f), где:
а - указатель на устройство, обеспечивающее ШИМ (имеет значение &pwm);
b - номер контакта, к которому подключается сигнальный провод сервопривода (может принимать значения от 8 до 15);
c - минимальный угол поворота вала сервопривода (указывается продолжительность управляющего импульса миллисекундах, соответствующая минимальному углу);
d - максимальный угол поворота вала сервопривода (указывается продолжительность управляющего импульса миллисекундах, соответствующая минимальному углу);
e - минимальная скорость вращения вала сервопривода (задается в градусах в секунду и устанавливается исходя из желаемой минимальной скорости вращения);
i - максимальная скорость вращения вала сервопривода (задается в градусах в секунду и берется из паспортных характеристик серводвигателя);
f - ускорение, с которым может поворачиваться вал сервопривода (принимает значение от 0 до 255).
Таким образом, например создание объекта сервопривода с именем servo_1 будет выглядеть так:
I2CServo servo_1 = I2CServo(&pwm, 8, 540, 2400, 30, 400, 255);
Далее производится запуск микросхемы, настройка частот управляющих сигналов и задание параметра таймера:
pwm.begin(); | //запуск микросхемы PCA9685 |
pwm.setPWMFreq(50); | // настройка частоты работы микросхемы PCA9685 |
servo_1.begin(15); | //передача в функцию значения внутреннего таймера (необходимо для обеспечения работы сервопривода) |
pwm.setRelPWM(0, 0); | //настройка скважности импульсов на выводах микросхемы PCA9685 |
Функция servo.smoothRotate(a, b) используется для обеспечения плавного поворота вала сервопривода от угла a до угла b.
Функция servo.rotate(a) может быть применена для поворота с максимально возможной скоростью от текущего угла поворота выходного вала до угла a.
На плате контроллера присутствуют встроенные тактовые кнопки, которым можно назначать пользовательские функции. Кнопки подключены к выводам MISO и SS платы микроконтроллера. Для того, чтобы их можно было задействовать, необходимо выполнить инициализацию следующим образом:
#define BT1 MISO //инициализация линии кнопки BT1
#define BT2 SS //инициализация линии кнопки BT2
void setup ()
{
pinMode(BT1, INPUT_PULLUP); //настройка линии с кнопкой BT1 на ввод данных
pinMode(BT2, INPUT_PULLUP); //настройка линии с кнопкой BT2 на ввод данных
}
И далее по «телу» программы можно обычным способом считывать состояние кнопки и задавать любое необходимое действие, выполняемое по их нажатию.
4. Технические характеристики контроллера.
Наименование характеристики |
Значение |
Размеры контроллера |
58х90 мм |
Количество разъемов XH-2.54-4P общего назначения |
8 |
Количество разъемов XH-2.54-4P с протоколом i2c |
6 |
Максимальное количество подключаемых электродвигателей |
4 |
Максимальное количество подключаемых серводвигателей |
8 |
Размеры разъема питания |
5,0х2,1 мм |
USB разъем |
Тип В |
Наличие выключателя питания |
Да |
Допустимый диапазон входного напряжения питания |
7,5...12 В |
Диапазон регулировки напряжения питания электродвигателей и сервоприводов при любом входном напряжении питания от 7,5 до 12 В |
4,9...6,8 В |
Номинальное рабочее напряжение микроконтроллера и на разъемах общего назначения и разъемах i2c |
5 В |
Максимальный суммарный ток потребления модулей, подключенных к контроллеру |
До 0,5 А |
Максимальный суммарный ток потребления электроприводов, подключенных к контроллеру |
До 2,5 А |
Максимальный суммарный ток потребления модулей, подключенных к разъемам общего назначения и разъемам i2c | До 0,4 А |
Тактовая частота микроконтроллера |
16 МГц |
Оперативная память |
2 кБ |
Встроенная Флеш-память |
32 Кб (ATmega32u4) из которых 4 Кб используются для загрузчика |
Программное обеспечение для программирования контроллера |
Arduino IDE |
Программируемый контроллер Вертор СТАНДАРТ ПЭМ10.3156 доступен для приобретения в магаз
Написать отзыв
Ваше Имя:Ваш отзыв: Внимание: HTML не поддерживается! Используйте обычный текст.
Оценка: Плохо Хорошо
Введите код, указанный на картинке: