Среда, 25 Март 2015 12:16

Пятая лекция. Функции работы с мотором.

Автор
Оцените материал
(1 Голосовать)

   Двигатели управляются указанием уровня мощности. Уровни мощности в диапазоне от -100 до +100. Отрицательные значения указывают на обратное направление, а положительные значения указывают прямое направление. Для перемещения двигателя "A" вперед на 50% от полной мощности, можно использовать следующий код:

-----------------------------

motor[motorA] = 50;

-----------------------------

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

«Замкнутый цикл» алгоритма управления использует обратную связь от двигателей для регулировки силы воздействия, чтобы обеспечить постоянную скорость. Закрытый контур управления непрерывно регулирует двигатель для поддержания заданной скорости вращения двигателя, что составляет 50% от максимальной регулируемой скоростью. Регулируемое управление двигателем включается и отключается переменной массива nMotorPIDSpeedCtrl [].

-----------------------------

nMotorPIDSpeedCtrl[motorA] = mtrNoReg;

nMotorPIDSpeedCtrl[motorA] = mtrSpeedReg;

-----------------------------

     С полностью заряженной батареей, программное обеспечение регулирует скорость в среднем на 75% мощности для достижения регулируемой скоростью 750 отсчетов в секунду. Но с частично заряженными аккумуляторами, они могут не получить полное питание.

     По умолчанию максимальный уровень скорости составляет 1000 отсчетов в секунду. Это значение было выбрано потому, что это то же самое значение, используемое стандартное NXT-G прошивкой. Максимальная скорость, которую можно установить с помощью следующих переменных:

----------------------------------

nMaxRegulatedSpeed = 750;

----------------------------------

Значения датчика

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

----------------------------------

while (nMotorEncoder[motorA] < 1000)
{
motor[motorA] = 50;

}

----------------------------------

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


Переход к конкретным значением датчика

     Вы можете перемещать двигатель на определенный оборот функцией nMotorEncoderTarget []. Если вы укажете положительное значение двигатель будет замедляться до остановки на данной позиции.Отрицательное значение оставят двигатель в плавающем режиме,до тех пор пока показание датчика не достигнет указанное положение.

nMotorEncoderTarget [] Не включается двигатель. Он только устанавливает позицию "стоп". Вы должны запустить двигатель.

-------------------------------------

nMotorEncoder[motorB] = 0; //установка инкодера в ноль

nMotorEncoderTarget[motorB] = 360; //установка позиции стоп инкодера

motor[motorB] = 75;

motor[motorC] = 75;

while(nMotorRunState[motorB] != runStateIdle)

{

//код задачи

}

motor[motorB] = 0;

motor[motorC] = 0;

--------------------------------------
Синхронизация двух моторов

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

--------------------------------------

nSyncedMotors = synchNone;// отменить синхронизацию

nSyncedMotors = synchBC;// синхронизировать мотор "В" и "С"

--------------------------------------

     Режим синхронизации указывается с помощью переменной nSyncedTurnRatio. Этот показатель колеблется в диапазоне от -100% до +100%. Величина (0 до 100) представляет собой отношение зависимости скорости второго двигателя от основной скорости вращения первого двигателя. Знак указывает направление синхронизации.

---------------------------------------

nSyncedMotors = synchBC;

nSyncedTurnRatio = +100;

nMotorEncoder[motorB] = 0;

nMotorEncoderTarget[motorB] = -1000;

motor[motorB] = 100;

while (nMotorEncoder[motorB] < 1000)

{}

nSyncedTurnRatio = -100;

nMotorEncoderTarget[motorB] = 200;

motor[motorB] = 50;

wait1Msec(3000);

---------------------------------------

     bMotorReflected [] переменная, которая переворачивает или отражает направление вращения двигателя.

--------------------------------------

bMotorReflected[motorA] = true;

-------------------------------------

 

Установки и Функции моторов

1. Установка значений моторов в значение Float

---------------------------------

bFloatDuringInactiveMotorPWM = true;

bFloatDuringInactiveMotorPWM = false;

-----------------------------------------------------

2. Установка для указания того, что направление двигателя должна быть отражена на 180 градусов.

-------------------------------------------

bMotorReflected[motorA] = true;

bMotorReflected[motorA] = false;

-------------------------------------------

3. Установка максимального такта отсчета инкодера в моторе ( по умолчанию и максимум 1000 тактов)

-----------------------------------------------

nMaxRegulatedSpeedNXT = 500;

-----------------------------------------------

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

-----------------------------------------------

nMotorPIDSpeedCtrl[motorA] = mtrSpeedReg;

-----------------------------------------------

5. Массив состояний мотора. Содержит три варианта:

runStateRunning
runStateHoldPosition
runStateIdle

--------------------------

nMotorEncoder[motorB] = 0; //обнуление инкодера на моторе В

nMotorEncoderTarget[motorB] = 360; // установка момента прирывание на инкодере мотора В

motor[motorB] = 75;

motor[motorC] = 75;

while(nMotorRunState[motorB] != runStateIdle) //выполнение условий пока двигатель работает

{

// код.

}

motor[motorB] = 0;

motor[motorC] = 0;

--------------------------

6. Установка интервала между тактами мотора (по умолчанию 25)

---------------------------

nPidUpdateInterval = 20

---------------------------

 

Прочитано 2920 раз
Бекурин Максим

Методист и Педагог дополнительного образования.
Возглавляет Детское техническое объединение по робототехнике
Областной судья робототехнических соревнований в Свердловской област.

vk.com/bekurin
Top
Яндекс.Метрика Рейтинг@Mail.ru