Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

КТПСА_лаб5

.docx
Скачиваний:
7
Добавлен:
10.05.2020
Размер:
435.26 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ

Кафедра СТ

ОТЧЕТ

по лабораторной работе 5

по дисциплине: Компьютеризированные технологии проектирования систем автоматики

на тему: «ПРОЕКТИРОВАНИЯ ДИСКРЕТНОГО ПИД-РЕГУЛЯТОРА С ПРИМЕНЕНИЕМ ИНСТРУМЕНТАРИЯ МОДЕЛИРУЮЩИХ ПАКЕТОВ»

Выполнили:

Ст. гр. СИ-15-1

Рыжов В.Б.

Лавриков В.С.

Проверил:

доц. каф. СТ

Ребезюк Л. Н.

ХАРЬКОВ 2019

5 ПРОЕКТИРОВАНИЯ ДИСКРЕТНОГО ПИД-РЕГУЛЯТОРА С ПРИМЕНЕНИЕМ ИНСТРУМЕНТАРИЯ МОДЕЛИРУЮЩИХ ПАКЕТОВ

5.1 Цель работы

Приобретение навыков проектирования дискретного ПИД-регулятора с применением инструментария моделирующего пакета VisSim.

5.2 Ход выполнения лабораторной работы

Задачи проектирования дискретных ПИД-регулятора и коррекции подобны. В непрерывном варианте между устройствами есть отличие: регулятор должен содержать активные элементы - операционные усилители (ОУ), позволяющие усиливать сигналы, а коррекция может быть выполнена на пассивных элементах (RC-цепи). В дискретном же варианте устройства неразличимы – могут состоять из трех микросхем включенных последовательно (АЦП, цифровой сигнальный процессор (DSP), ЦАП). И регулятор и четыре основные вида последовательных корректирующих устройств описываются передаточной функцией (ПФ) не выше второго порядка. Следовательно, достаточно составить одну программу цифрового рекурсивного фильтра второго порядка для DSP и менять в зависимости от задачи пять – семь констант программы – коэффициентов z-ПФ.

5.3 Вариант задания

Файл для лабораторной работы podbor.vsm.

ДПТ – двигатель постоянного тока, колебательное звено. Его передаточная функция по каналу управления:

где:

  • кду = 0.1(11 + 7) + 0,1= 1,9 [об/(сек•В)];

  • Tя = 0.01 (6 + 0.32·7)= 0,0824 с;

  • Tм = 0.1 (6 + 0.5·7) – 0,01= 0,88 с.

WДУ(p)=

Принцип управления - по отклонению Wос(s)=1

Закон управления - ПИД регулятор, передаточная функция которого^

Задающий сигнал g(t) - генератор ступенчатой единичной функции

ЭТАП 1 – Синтез ПФ непрерывного ПИД-регулятора

Рисунок 5.1 – ЛАЧХ и ЛФЧХ системы с настроенным ПИД-регулятором и переходная характеристика системы

Рисунок 5.2 – Корни системы с настроенным ПИД-регулятором

ЭТАП 2 – Переход к эквивалентной ПФ ПИД-регулятора

Рисунок 5.3 – Коэффициенты полиномов числителя и знаменателя

ЭТАП 3 – Переход к дискретной ПФ ПИД-регулятора

Рисунок 5.4 –Эквивалентная ПФ ПИД-регулятора

Рисунок 5.5 - Схема модели системы с подставленной эквивалентной ПФ ПИД-регулятора и её переходная характеристика

Рисунок 5.6 - ЛАЧХ и ЛФЧХ системы с подставленной эквивалентной ПФ ПИД-регулятора

Рисунок 5.7 – Схема модели системы с z-ПФ и переходная характеристика системы

При переходе от s-ПФ к z-ПФ переходная характеристика системы значительно улучшилась.

ЭТАП 4 – Выбор структурной схемы (алгоритма программы) и получение РУ цифрового ПИД-регулятора

Разностное уравнение (РУ) для оригиналов:

y[n] =  [ 116,674644726797(1x[n] -1,8938716938177 x[n-1]+ 0.89581201197248 x[n-2]) -

- ( -1.3333333333333 y[n-1]+0.33333333333333 y[n-2]) ] / 1

(*)

Рисунок 5.8 – Разностное уравнение для оригиналов и структурная схема z-ПФ

ЭТАП 5 – Написание программы ПИД-регулятора для ЦВМ

Рисунок 5.9 – Схема модели системы и её переходная характеристика при использовании программы ПИД-регулятора

Таблица 5,1 – Значения параметров оценки качества управления

н/п

Название параметра

Непрерывный ПИД

Дискретный ПИД

Запас устойчивости

1.

Частота среза (wС), рад/сек.

253,65

Запас по фазе , град.

63,6

2.

Частота w(-180º), рад/сек.

743819,64

Запас по амплитуде L(A), dB

123

3.

Частота полосы пропускания (wП), рад/сек.

353,087

Корневые оценки

4.

Ступінь стійкості системи

автоматичного управління  

4,06331

0.992868

5.

Коливальність системи

автоматичного управління  

0,681249127

3418.30356

Точность

6.

Ошибка в установившемся режиме

0,000906

0.000482

Быстродействие

7.

Время переходного процесса tП (Δ=±2%), сек.

0,012420

0.00943063

Стойкость системы автоматического управления  определяется как:

Колебательность системы автоматического управления  определяется как:

ВЫВОДЫ

В ходе выполнения данной лабораторной работы приобретены навыки проектирования дискретного ПИД-регулятора с применением инструментария моделирующего пакета VisSim.

Приложение А

Таблица 5.1

Файл pid.cpp

#include <math.h> #include <condefs.h> #pragma hdrstop #define EXPORT32 __declspec(dllexport) //--------------------------------------------------------------------------- struct z_TF_INFO {   double k;        // коэффициент усиления   double b0,b1,b2; // коэффициенты полинома числителя   double a0,a1,a2; // коэффициенты полинома знаменателя }; //--------------------------------------------------------------------------- extern "C" {   double buffer_x[2]={0,0}, buffer_y[]={0,0};   double c, help_y; //************ Функция размещения параметров ******************************** //************ Вызывается VisSim-ом при создании блока ********************** EXPORT32 long WINAPI zWPA(short FAR *ppCount){   *ppCount=7; // число записываемых в файл vsm параметров модели пользователя   return sizeof(z_TF_INFO); } //************ Процедура инициализации параметров *************************** //************ Вызывается VisSim-ом после PA функции ************************ EXPORT32 void WINAPI zWPI(z_TF_INFO *zTF){   zTF->k=116.674644726797;   zTF->b0=1;   zTF->b1=-1.8938716938177;   zTF->b2=0.89581201197248;   zTF->a0=1;   zTF->a1=-1.3333333333333;   zTF->a2=0.33333333333333; } //************ Функция изменения параметров ********************************* //************ Вызывается VisSim-ом при нажатии правой клавиши мыши ********* EXPORT32 LPSTR WINAPI zWPC(z_TF_INFO *zTF){   return "k;b0;b1;b2;a0;a1;a2"; } //************ Процедура Simulation Start *********************************** //************ Вызывается VisSim-ом на первом шаге моделирования ************ EXPORT32 long WINAPI zWSS(z_TF_INFO *zTF, long *runCount){   buffer_x[0]=0; buffer_x[1]=0;   buffer_y[0]=0; buffer_y[1]=0;   help_y=0; c=0;   return 0; } //************ Процедура Simulation End ************************************* //************ Вызывается VisSim-ом на последнем шаге моделирования ********* EXPORT32 long WINAPI zWSE(z_TF_INFO *zTF, long *runCount){   return 0; } //************ Это базовая процедура в DLL ********************************** //************ Вызывается VisSim-ом на каждом шаге моделирования ************ EXPORT32 void WINAPI zW(z_TF_INFO *zTF, double FAR x[], double FAR y[]){   if (x[0]==1 && c==0) {   // Непосредственный алгоритм с двумя буферами     help_y=(zTF->k*(x[1]*zTF->b0+buffer_x[0]*zTF->b1+buffer_x[1]*zTF->b2)                 -(buffer_y[0]*zTF->a1+buffer_y[1]*zTF->a2)) / zTF->a0;     buffer_x[1]=buffer_x[0]; buffer_x[0]=x[1];     buffer_y[1]=buffer_y[0]; buffer_y[0]=help_y;   // Непосредственный алгоритм с одним буфером   /* double help;     help=(x[1]-(buffer_x[0]*zTF->a1+buffer_x[1]*zTF->a2))/zTF->a0;     help_y=(help*zTF->b0+buffer_x[0]*zTF->b1+buffer_x[1]*zTF->b2)*zTF->k;     buffer_x[1]=buffer_x[0]; buffer_x[0]=help;*/   }   y[0]=help_y;   c=x[0]; // организованна синхронизация блока по фронту }; //--------------------------------------------------------------------------- }// end extern "C" { //--------------------------------------------------------------------------- int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*){   return 1; }

Таблица 5.2

Файл pid.dpr

library PID; type   InVector = array [0..9] of Double;   { тип входной переменной: входов - 10 }   OutVector = array [0..9] of Double; { тип выходной переменной: выходов - 10 }   Global = record { запись параметров, и координат "dll"-модели }     k : double;     b0, b1, b2 : double;     a0, a1, a2 : double; end; var buffer_x, buffer_y : array [0..1] of double;     c, help_y : double; {/************ Это базовая процедура в DLL ****************************/} {/************ Вызывается VisSim-ом на каждом шаге моделирования ******/} procedure zW(var zTF:Global; var x:InVector; var y:OutVector); export; stdcall; var help : double; begin   if (x[0]=1)and(c=0) then   begin   { Непосредственный алгоритм с двумя буферами }     help_y:=(zTF.k*(x[1]*zTF.b0+buffer_x[0]*zTF.b1+buffer_x[1]*zTF.b2)            -(buffer_y[0]*zTF.a1+buffer_y[1]*zTF.a2))/zTF.a0;     buffer_x[1]:=buffer_x[0]; buffer_x[0]:=x[1];     buffer_y[1]:=buffer_y[0]; buffer_y[0]:=help_y;{}   { Непосредственный алгоритм с одним буфером }   { help:=(x[1]-(buffer_x[0]*zTF.a1+buffer_x[1]*zTF.a2))/zTF.a0;     help_y:=(help*zTF.b0+buffer_x[0]*zTF.b1+buffer_x[1]*zTF.b2)*zTF.k;     buffer_x[1]:=buffer_x[0]; buffer_x[0]:=help;{}   end;   y[0]:=help_y;   c:=x[0]; { организованна синхронизация блока по фронту } end; {/************ Функция размещения параметров **************************/} {/************ Вызывается VisSim-ом при создании блока ****************/} function zWPA( var pCount:integer):Longint; export; stdcall; begin   pCount := 7; { число записываемых в файл параметров диалогового окна }   zWPA := sizeof(Global);     { размер памяти необходимый под параметры } end; {/************ Процедура инициализации параметров *********************/} {/************ Вызывается VisSim-ом после PA функции ******************/} procedure zWPI( var zTF:Global ); export; stdcall; begin    zTF->k=7646.3449811453;   zTF->b0=1;   zTF->b1=-1.9867174344388;   zTF->b2=0.3867714339794;   zTF->a0=1;   zTF->a1=-1.3333333333333;   zTF->a2=0.33333333333333; end; {/************ Функция изменения параметров ***************************/} {/************ Вызывается VisSim-ом при нажатии правой клавиши мыши ***/} function zWPC( var zTF:Global ):Pchar; export; stdcall; begin   zWPC :='k;b0;b1;b2;a0;a1;a2'; { названия могут быть любые } end; {/************ Процедура Simulation Start *****************************/} {/************ Вызывается VisSim-ом на первом шаге моделирования ******/} procedure zWSS( var zTF:Global; var runCount:longint); export; stdcall; begin   buffer_x[0]:=0; buffer_x[1]:=0;   buffer_y[0]:=0; buffer_y[1]:=0;   help_y:=0;      c:=0; end; {/************ Процедура Simulation End *******************************/} {/************ Вызывается VisSim-ом на последнем шаге моделирования ***/} procedure zWSE( var zTF:Global; var runCount:longint); export; stdcall; begin end; exports   zW index 1,{ Имя базовой процедуры в DLL Его нужно будет указать в блоке userFunction }   zWPA index 2,{ Список вспомогательных процедур и функций для экспорта. Они будут }   zWPI index 3,{ вызываться Vissim-ом по окончаниям PA,PI,PC,SS,SE для базового имени. }   zWPC index 4,   zWSS index 5,   zWSE index 6; begin end.