10. Управление моторами

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

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

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

Регулируемое управление двигателем включается и отключается переменной массива nMotorPIDSpeedCtrl [].

nMotorPIDSpeedCtrl[motorA] = mtrNoReg;

nMotorPIDSpeedCtrl[motorA] = mtrSpeedReg;

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

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

Управление моторами.

task main
{
motor[motorC]=100;
wait1Msec(5000);
}

Максимальная скорость, которую можно установить с помощью следующих переменных:

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%.

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;
Установка и Функции моторов
Установка значений моторов в значение Float


bFloatDuringInactiveMotorPWM = true;
bFloatDuringInactiveMotorPWM = false;

Функция, которая указывает должны ли команды быть приняты или отклонены.

bPlaySounds = true;
bPlaySounds = false;

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

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

nMotorPIDSpeedCtrl[motorA] = mtrSpeedReg;
Массив состояний мотора. Содержит три варианта:

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;
Установка интервала между тактами мотора (по умолчанию 25)

nPidUpdateInterval = 20
1/14