В этом примере показано, как использовать Toolbox™ Control System и Simulink ® Control Design™ для взаимодействия с Simulink, чтобы разработать цифровое управление тангажом для самолета. В этом примере мы спроектируем контроллер, чтобы позволить самолету работать под высоким углом атаки с минимальной нагрузкой пилота.
Наш пример проведёт вас через первый проход при разработке цифрового автопилота для высокого угла атаки контроллера. Чтобы запустить все в этом примере, вы должны иметь Control System Toolbox, Simulink Control Design, Simulink и Coder™ Simulink ®. Если у вас нет всех этих продуктов, можно запустить фрагменты примера, используя режим выполнения камер редактора MATLAB ®.
Ниже представлена модель Simulink самолета. Системы управления в блоке Контроллеров могут быть переключены в модели, чтобы позволить вам увидеть аналоговую характеристику и затем переключиться на проект, созданную с помощью объектов Linear Time Invariant (LTI) Control System Toolbox. Также включен контроллер, который является дискретной реализацией аналогового проекта, которая подобна алгоритму, который поступил бы в бортовой летный компьютер. Потратьте несколько минут, чтобы исследовать модель.
Фигура 1: Модель Simulink системы управления рейсом самолета.
Модель может быть линеаризирована с помощью Linear Analysis Tool, запущенного из модели slexAircraftPitchControlAutopilot Simulink. В редакторе Simulink, на вкладке Apps, в разделе Системы управления, нажмите Model Linearizer.
Для получения справки введите help slcontrol или help linearSystemAnalyzer
или ознакомьтесь с документацией по продукту Control System Toolbox и Simulink Control Design.
Откройте модель slexAircraftPitchControlAutopilot.
Чтобы просмотреть параметры линеаризированной модели:
apmdl = 'slexAircraftPitchControlAutopilot';
open_system(apmdl)
op = operpoint(apmdl);
io = getlinio(apmdl);
contap = linearize(apmdl,op,io)
contap = A = Alpha-sensor Pitch Rate L Proportional Stick Prefil Alpha-sensor -2.526 0 0 0 Pitch Rate L 0 -4.144 0 0 Proportional -1.71 0.9567 0 10 Stick Prefil 0 0 0 -10 B = Alpha Sensed Stick q Sensed Alpha-sensor 1 0 0 Pitch Rate L 0 0 1 Proportional 0 0 -0.8156 Stick Prefil 0 1 0 C = Alpha-sensor Pitch Rate L Proportional Stick Prefil Sum 2.986 -1.67 -3.864 -17.46 D = Alpha Sensed Stick q Sensed Sum 0 0 1.424 Continuous-time state-space model.
Фигура 2: Оригинальный аналоговый автопилот.
Существует три типа объектов LTI, которые можно использовать для разработки линейной модели:
Пространство состояний (SS), передаточная функция (TF) и объекты Zero-Pole-Gain (ZPG).
Контекст переменной является объектом Пространство. Затем можно получить один из других типов с помощью других команд. Когда вы создаете объект в MATLAB, можно манипулировать им с помощью таких операций, как *, +, -, и т.д. Это называется «перегрузкой» операторов MATLAB. Попробуйте создать объект самостоятельно и посмотрите, что происходит при добавлении, умножении и т.д. с объектом contap.
Чтобы точно увидеть то, что сохранено в объекте LTI, введите get (contap) или contap. Например, InputName.
Чтобы просмотреть передаточные функции Zero/Pole/Gain:
contap = tf(contap); contap = zpk(contap)
contap = From input "Alpha Sensed" to output "Sum": 2.9857 (s+2.213) ---------------- s (s+2.526) From input "Stick" to output "Sum": -17.46 (s+2.213) ---------------- s (s+10) From input "q Sensed" to output "Sum": 1.424 (s+2.971) (s+2.213) ------------------------- s (s+4.144) Continuous-time zero/pole/gain model.
Теперь объект LTI будет использоваться для разработки цифрового автопилота, который заменит аналоговый автопилот. Аналоговая система кодируется в объект LTI, называемый contap (CONtinuous AutoPilot).
При первой попытке создания цифрового автопилота будет использовано удержание нулевого порядка со шаг расчета 0,1 секунды. Обратите внимание, что дискретный объект поддерживает тип (ss, tf или zpk).
Из диаграммы Боде ниже ясно, что системы не совпадают по фазе от 3 рад/с до половины частоты дискретизации (вертикальная черная линия) для входа ручки пилота и датчика угла атаки. Этот проект имеет более плохую характеристику, чем аналоговая система. Перейдите к модели Simulink и запустите симуляцию (убедитесь, что вы можете увидеть окна возможностей). Во время симуляции дважды кликните ручной переключатель с меткой Analog или Digital.
Симуляция проверяет вывод, достигнутый путем интерпретации схемы Боде?
discap = c2d(contap, 0.1, 'zoh');
get(discap)
bode(contap,discap)
Z: {[0.8016] [0.8039] [2x1 double]} P: {[2x1 double] [2x1 double] [2x1 double]} K: [0.2943 -1.2458 1.4240] DisplayFormat: 'roots' Variable: 'z' IODelay: [0 0 0] InputDelay: [3x1 double] OutputDelay: 0 Ts: 0.1000 TimeUnit: 'seconds' InputName: {3x1 cell} InputUnit: {3x1 cell} InputGroup: [1x1 struct] OutputName: {'Sum'} OutputUnit: {''} OutputGroup: [1x1 struct] Notes: [0x1 string] UserData: [] Name: '' SamplingGrid: [1x1 struct]
Фигура 3: Bode-схема сравнения аналоговых и ZOH- контроллеров.
Теперь попробуйте различные методы преобразования. Можно использовать преобразование Тастина. В командном окне введите команды выше.
Должно быть ясно, что системы все еще не совпадают по фазе от 3 рад/с до половины частоты дискретизации, преобразование Тастина лучше. В симуляции используется объект LTI в том виде, в котором он разработан. Чтобы увидеть, как объект используется, смотрите в Подсистеме Контроллеров, используя браузер или дважды нажатие значок. Блок LTI захватывает объект LTI из рабочей области. Вы можете изменить имя объекта, используемое в блоке, на любой объект LTI в рабочей области.
Попробуйте использовать «discap1», дискретизацию Tustin аналогового проекта:
discap1 = c2d(contap,0.1,'tustin');
bode(contap,discap,discap1)
Фигура 4: Bode-схема сравнения аналоговых и 0,1-секундных контроллеров Tustin.
Преобразование Тастина работает лучше, чем удержание нулевого порядка от анализа до сих пор. Шаг расчета 0,1 секунды, по-видимому, слишком медленно для дискретной системы, чтобы отслеживать эффективность аналоговой системы на половине частоты дискретизации.
Теперь преобразуйте аналоговый проект с помощью преобразования Тастина с периодом дискретизации 0,05 секунды:
discap = c2d(contap,0.05,'tustin')
bode(contap,discap)
discap = From input "Alpha Sensed" to output "Sum": 0.074094 (z-0.8951) (z+1) ------------------------- (z-1) (z-0.8812) From input "Stick" to output "Sum": -0.36852 (z-0.8951) (z+1) ------------------------- (z-1) (z-0.6) From input "q Sensed" to output "Sum": 1.4629 (z-0.8617) (z-0.8951) ---------------------------- (z-1) (z-0.8123) Sample time: 0.05 seconds Discrete-time zero/pole/gain model.
Фигура 5: Bode-схема сравнения аналоговых и 0,05-секундных контроллеров Tustin.
Теперь, когда у нас есть то, что кажется работоспособным проектом, мы должны реализовать его в форме, которая будет включать некоторые из необходимых элементов, которые были проигнорированы в линейном анализе. Например, если вы посмотрите на аналоговый автопилот, который находится в Подсистеме Контроллеров, то увидите некоторую логику, которая останавливает выключение интегратора при насыщении привода:
Откройте подсистему AnalogControl.
Фигура 6: Подсистема AnalogControl.
Подрыв интегратора является лишь одним из практических вопросов, которые необходимо решить. Другой проблемой является необходимость устранения сглаженных сигналов высокой частоты, которые могли бы поступать в точки измерения. Эти псевдонимические сигналы могут быть предотвращены путем определения аналоговых фильтров перед блоками выборки и удержания (ZOH), которые моделируют устройства аналого-цифрового преобразователя (АЦП), обычно используемые для измерения сигналов во встраиваемом приложении. Кроме того, фильтры в цифровой секции автопилота работают с более высокой частотой дискретизации, чем компенсатор, для подачи обусловленного сигнала на компенсатор. Аналоговые фильтры необходимы, потому что, когда сигнал сглажен, нет возможности отделить допустимое внутриполосное содержимое частоты от сглаженного содержимого.
Этот новый контроллер называется Digital Control. Фильтры имеют шаг расчета deltat1 (установлено на 1/10 дельтата). Блоки удержания нулевого порядка задают эти шаги расчета для различных нисходящих блоков через наследование времени расчета.
Переключатели в модели slexAircraftPitchControlExample настроены так, что можно переключаться между аналоговым автопилотом, цифровым объектом LTI и цифровым автопилотом, который можно реализовать с помощью программного обеспечения.
Попробуйте еще раз симулировать систему и переключитесь между тремя проектами автопилота. Вы увидите, что проекты не сильно влияют на то, какой автопилот активен. Можно также увеличить амплитуду порывов ветра и проверить, что сглаживающие фильтры работают удовлетворительно. Чтобы увеличить амплитуду порыва, откройте подсистему Dryden Wind Gust и измените (двойным нажатием по значку) отклонение шума Белого Шума, которая управляет симуляцией порыва.
Откройте подсистему DigitalControl.
Фигура 7: Подсистема DigitalControl.
Приводы в модели Simulink используют блок Variant Subsystems, чтобы представлять несколько реализаций привода, где только одна реализация активна во время симуляции. Можно дважды щелкнуть блок «Подсистема исполнительного привода», чтобы просмотреть различные реализации привода.
Чтобы изменить симуляцию, используйте нелинейный привод вместо линейного. Это можно сделать с помощью контекстного меню Вариант (Variant Subsystem) Вариант (Variant) > Переопределить (Override).
Обратите внимание, что Simulink должен быть остановлен в порядок, чтобы перенастроить выбор привода. Следует также отметить, что нелинейный привод имеет насыщения по положению и скорости.
Фигура 8: Вариант подсистемы для приводов
Проект автопилота может быть преобразован во встраиваемый код с помощью Simulink Coder. Отдельная модель цифрового автопилота, slexAircraftPitchControlDAP, открыта ниже; он был закодирован в автономную программу на базе хоста с помощью Simulink Coder и компилятора, заданного с помощью строения mex -настройка. Результаты симуляции могут использоваться как базовый уровень валидации для функциональной корректности сгенерированного кода.
Исполняемый файл, полученный в результате генерации кода и компиляции, является slex Aircraft Pitch Control DAP. exe. Если вы создаете его, его можно запустить из командной строки интерпретатора OS (DOS) непосредственно или из MATLAB, набрав:
>>! slexAircraftPitchControlDAP.exe
Исполняемая программа создает файл под названием slex Aircraft Pitch Control DAP. mat, который можно загрузить, набрав загрузку slex Aircraft Pitch Control DAP.
Две переменные rt_tout называемые rt_yout, будут находиться в рабочей области, и их отклонение относительно базового уровня симуляции может быть нанесена. Обратите внимание, что отклонение фактически равна нулю для этой модели на этом хосте. Некоторое небольшое числовое отклонение следует ожидать при более сложных вычислениях из-за различий в оптимизации компилятора и использования переменных промежуточного регистра, имеющих более высокую точность, чем 64-битный формат памяти с двойной точностью. Значительные отклонения должны быть изучены, так как они могут указать на числовую задачу устойчивости в алгоритмах вашей модели, компиляторе или ошибке библиотеки во время выполнения или других задачах.
Откройте модель slexAircraftPitchControlDAP.
Фигура 9: Сравнение результатов симуляции и генерации кода.
Вот временная характеристика высокого угла цифрового тангажа режима атаки проектирования контроллера:
Фигура 10: Реакция системы управления цифровым тангажом самолета.
Дальнейшая работа над этим проектом может включать включение и анализ большего числа реальных эффектов на компенсатор, таких как влияние динамики сглаживающего фильтра и вычислительной задержки встроенного цифрового компьютера на общий « объект», наблюдаемую цифровыми расчетами. Комбинация реального объекта, вычислительной задержки, сглаживающих фильтров и задержки дискретизации и удержания являются лишь несколькими дополнительными элементами, которые могут повлиять на проект параметров цифрового компенсатора.