КТПСА_лаб5
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ
Кафедра СТ
ОТЧЕТ
по лабораторной работе 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. |