SDK Motors

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

Общее Объяснение

Драйвер Мотора

Все порты моторов управляются с помощью так называемого Н-мостового драйвера (H-bridge) – схемой, которая может использоваться для изменения как выходного напряжения, так и его полярности (отрицательной или положительной). Отрицательное напряжение, подаваемое на DC Motor, заставляет его вращаться в обратном направлении, тогда как положительное напряжение приводит к вращению вперёд. Мощность SDK Motor (от -1 до 1) представляет собой коэффициент входного напряжения, подаваемого на порт мотора. Различные уровни напряжения создаются с помощью ШИМ (PWM), быстрого включения и отключения порта для создания пониженного среднего напряжения.

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

Примечание

Драйвер мотора использует входное напряжение; это означает, что при использовании аккумулятора напряжением 13 вольт установка мощности на 1 создаст обратное напряжение в 13 вольт. Аналогично, при использовании аккумулятора напряжением 11 вольт установка мощности на 1 создаст выходное напряжение в 11 вольт.

Энкодер Мотора

Важно

Единой стандартизованной терминологии для квадратурных энкодеров не существует. Здесь мы используем термины «count» и «tick» (тик) для обозначения одного нарастающего или спадающего перехода в квадратурной волне. В некоторых технических документациях (datasheets) вы также можете встретить термин «пульс» («pulses»), который может обозначать от 1 «count» до 4 «counts». Будьте внимательны при изучении технических документаций!

Энкодеры в FTC® используют двухпроводной квадратурный формат для передачи относительных данных о позициях. В квадратурной схеме задействуются два сигнальных провода: A и B. При движении оба провода генерируют квадратные волны, сдвинутые друг относительно друга на 90 градусов по фазе. Это означает, что одна квадратная волна начинается и заканчивается ровно на середине другой. При движении в одном направлении квадратная волна с провода A опережает волну с провода B, а при обратном движении волна с провода B опережает волну с провода A. Оба сигнала объединяются с помощью логической операции исключающее ИЛИ (XOR), так что каждое нарастание и спад результирующего сигнала соответствует одному «tick» - чем выше частота сигнала, тем быстрее вращается энкодер.

REV контроллер считает импульсы и вычисляет скорость используя «кольцевой буфер» из 5 значений, куда каждые 10 мс добавляется новое значение. На основе этих 5 значений рассчитывается текущая скорость.

Предупреждение

Рекомендуется подключать квадратурные энкодеры к портам с механическим декодированием для их корректного считывания. Expansion hub содержит специальное аппаратное обеспечение для считывания квадратурных энкодеров, но поскольку таких портов всего два, два порта подключены «программно», а не аппаратно. Фактически, это означает, что порты 0 и 3, подключенные к специальным аппаратным квадратурным портам, всегда будут считывать данные точно. **Порты 1 и 2 подключены к менее точным «программным» портам, что означает: с энкодерами с высоким CPR (энкодеры, которые выдают более 4000 тиков на оборот (CPR), такие как REV Through Bore Encoder или Talon SRX Encoder), могут пропускать значения и накапливать ошибку.

Пример квадратурной волны с каналами A и B. Волна разбита на четыре части, каждая из которых представляет собой тик.

Пример квадратурной волны, в которой канал A опережает канал B. Каждое деление — это «count» или «tick»

Скрытые Методы

DcMotorEx

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

Примечание

Использование DcMotorEx не имеет недостатков. Чтобы преобразовать DcMotor в DcMotorEx, пользователю нужно просто привести DcMotor, возвращаемый функцией hardwareMap, к типу DcMotorEx.

Советы

  • В отличие от показаний тока, оповещения перегрузки по току (isMotorOverCurrent()) считываются bulk read (в составе групповых данных).

  • Коэффициенты PID/PIDF используют для вывода внутренние единицы измерения — двухбайтовое короткое число от -32767 до 32767, а не пользовательские значения от -1 до 1.

  • Метод getVelocity() по умолчанию возвращает скорость энкодера в тиках в секунду.

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