Никаких действий можно не производить



}

}

 

Команда nMotorEncoderTarget[] обеспечивает остановку мотора при повороте на заданное число градусов. Команда обладает собственным «интеллектом» и, учитывая инерцию движения, может откорректировать окончательную позицию мотора.

 

task main() {

nMotorEncoderTarget[motorA] = 1000; motor[motorA] = 50; wait1Msec(10000); }

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

На практике часто можно заметить, что движение колесного робота непрямолинейно. Это может быть связано с различным трением приводов, разницей нагрузок на колеса и т. п. Команда nSyncedMotors позволяет синхронизовать моторы, объявив один из них главным, второй — подчиненным (один ведущим, второй — ведомым):

 

nSyncedMotors = synchNone; // Отключить синхронизацию nSyncedMotors = synchAC; // Мотор C подчинен мотору A

 

В режиме синхронизации достаточно управлять только одним мотором: второй будет в точности повторять его действия.

Переменная nSyncedTurnRatio позволяет изменить соотношение движения синхронизированных моторов. Ее значения изменяются от – 100 до 100 %. Отрицательный знак указывает на противоположное направление движения подчиненного мотора. Абсолютное значение показывает отношение скорости ведомого мотора к скорости ведущего. Если оно меньше 100, робот поворачивает. 

В следующем фрагменте программы робот проедет по прямой, а затем повернется:

 

nSyncedMotors = synchAC; // Мотор C подчинен мотору A

 

// Движение по прямой

nSyncedTurnRatio = +100; // Режим движения прямо nMotorEncoder[motorA] = 0; // остановиться через 1000 градусов nMotorEncoderTarget[motorA] = 1000; motor[motorA] = 100;

 

while (nMotorEncoder[motorA] < 1000) // дождаться остановки

{}

 

// Повернуться на месте

 

nSyncedTurnRatio = -100; // Режим поворота // остановиться через 200 градусов nMotorEncoderTarget[motorA] = 200; motor[motorA] = 50; wait1Msec(3000);

 

Режим импульсной модуляции

Скорость моторов контролируется технологией широтноимпульсной модуляции (ШИМ, pulse width modulation — PWM). Импульсы тока подаются на моторы тысячи раз в секунду. Каждый импульс представляет из себя волну, содержащую период наличия напряжения (on-time) и период отсутствия напряжения (off-time). Отношение между этими двумя периодами определяет мощность, подаваемую на мотор. В периоды on-time используется полный ресурс батареи, и эта технология более эффективна, чем регуляция скорости с помощью изменения напряжения. 

В периоды off-time, когда напряжение на моторы не подается, цепь может находиться в двух состояниях: разомкнутом и замкнутом. Разомкнутая цепь получается в режиме плавающего напряжения, замкнутая — в режиме торможения. RobotC позволяет выбрать режим как в установках среды, так и с помощью специальной переменной bFloatDuringInactiveMotorPWM. При компиляции программы будет установлен выбранный режим: 

 

bFloatDuringInactiveMotorPWM = false; // режим торможения

bFloatDuringInactiveMotorPWM = true; // плавающий режим

 

Для моторов NXT предпочтительным является режим торможения, он и выставляется по умолчанию.


Глава 7. Алгоритмы управления

Релейный регулятор

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

управления) — то, чем мы хотим управлять;  цель управления — то, чего мы хотим достичь при помощи

управления, т.е. желаемое поведение объекта управления;  список измеряемых переменных (или выходов) — то, что мы мо-

жем измерять;  список управляющих переменных (или входов) — то, что мы мо-

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

Еще один важный компонент — регулятор — устройство, вырабатывающее входные величины, необходимые для достижения заданной цели. Этот пятый элемент обычно появляется после того, как теоретическое решение задачи найдено. Под решением проблемы управления будем понимать нахождение закона управления (алгоритма управления), обеспечивающего достижение цели. Как только искомый закон найден, он может быть использован для вычисления управляющих входов по измеренным значениям выходов объекта управления. Полученные значения входов в виде некоторых сигналов подаются на исполнительные устройства. 

В формировании этих сигналов может принимать участие микропроцессор, производящий достаточно сложные вычисления в соответствии с заданным алгоритмом.

Будем рассматривать простейший случай, когда задача состоит в поддержании системы в определенном состоянии. Тогда можно говорить о задаче регулирования как частном случае задачи автоматического управления. Для осуществления автоматического регулирования к объекту подключается регулятор. Под регулятором будем понимать устройство, которое с помощью чувствительного элемента (датчика) измеряет регулируемую величину и в соответствии с законом регулирования вырабатывает воздействие на регулирующий орган объекта. Система, состоящая из объекта и регулятора, называется системой управления [1].

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

Релейным двухпозиционным регулятором называется регулятор, у которого регулирующий орган под действием сигнала от датчика может принимать одно из двух крайних положений: «открыт» или «закрыт». При этом управляющее воздействие на регулируемый объект может быть только максимальным или минимальным.

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

«Робот поднимает меч и бросается на противника!» Здорово. Как в сказке. А что если меч наткнется на что-нибудь и потеряет свое заданное положение? Нехорошо бросаться на противника с опущенным мечом. 

Для примера прикрепите к мотору длинную балку с помощью сдвоенного трехмодульного штифта. Это будет меч. По сценарию, в момент запуска его надо поднять на 45 градусов и удерживать в этом положении, что бы ни случилось (рис. 7.1). 

 

Рис. 7.1. Стабилизация мотора в положении 45 градусов.

Регулируемой величиной будет угол поворота мотора, определяемый через показания энкодера, регулирующим органом — сам мотор.

Алгоритм таков: обнулить показания датчика оборотов, задать желаемое положение в 45 градусов и в цикле поддерживать это положение, учитывая возможные отклонения. Если показания энкодера превышают 45, мотор вращается назад. В противном случае вращается вперед. Задержка в 1 мс предназначена для разгрузки контроллера.

 

Рис. 7.2. Релейное управление одним мотором.

task main() { int alpha=45; nMotorEncoder[motorA]=0; while(true) {

if(nMotorEncoder[motorA]>alpha)  motor[motorA]=-100; else  motor[motorA]=100; wait1Msec(1);

}

}

 

Что же мы увидим? Робот ведет себя как новобранец с мечом. Мотор удерживает балку, но как-то неуверенно: происходят постоянные колебания. Уменьшить их можно, разве что понизив мощность мотора. Попробуйте сделать это. 

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


Дата добавления: 2019-02-22; просмотров: 973; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!