直流電動機具有啟動轉矩大、控制性能優(yōu)等特點。目前直流電機多采用傳統(tǒng)的PID控制,PID控制是最早發(fā)展起來的控制策略之一。由于其具有算法簡單、魯棒性好和可靠性高等優(yōu)點,被廣泛應用于工業(yè)過程控制中。但PID控制適合于可建立精確數(shù)學模型的確定性控制系統(tǒng)。
但實際的工業(yè)過程控制系統(tǒng)中存在很多非線性或時變的不確定因素,使得PID控制器的參數(shù)整定過程繁瑣。控制效果也因此而受影響。近些年來。隨著現(xiàn)代控制理論、智能控制和計算機技術的飛速發(fā)展。出現(xiàn)了很多新型的控制系統(tǒng)。模糊控制就是其中之一。本期帶來基于模糊PID的直流電機Simulink模型的搭建。
1、模糊控制
模糊控制作為目前最具實際意義的智能控制方法之一,以模糊集合論、模糊語言變量及模糊邏輯推理為基礎。實現(xiàn)一步模糊控制算法的過程:獲取被控制量的精確值。將此量與給定值比較得到誤差信號,一般選誤差信號作為模糊控制器的一個輸入量。把誤差信號的精確量進行模糊化變成模糊量。誤差的模糊量可用相應的模糊語言表示,得到誤差的模糊語言集合的一個子集(一個模糊矢量),再由誤差和模糊控制規(guī)則(模糊算子)根據(jù)推理的合成規(guī)則進行模糊決策,得到模糊控制量。
2、基于模糊控制的轉速調節(jié)器設計
直流電機控制系統(tǒng)中,外環(huán)轉速調節(jié)器采用模糊PID控制器.內(nèi)環(huán)電流調節(jié)器依然采用傳統(tǒng)PID控制器。從理論上講.模糊控制器的維數(shù)越高。控制越精密。但是維數(shù)越高。模糊控制規(guī)則變得過于復雜,控制算法的實現(xiàn)相當困難。這是目前廣泛應用二維模糊控制器的原因所在。
模糊控制輸出量確定的過程:
①確定輸入與輸出變量的模糊子集和論域及其隸屬度:
②設計模糊推理關系,確定模糊控制規(guī)則,以明確模糊關系矩陣:
③模糊決策,確定輸出量在其論域上的模糊矢量:
④模糊判決,即將控制量去模糊化,得到確定的輸出變量。進而得到相應的控制表。
代碼:
clc;clear;close all;
% 傳遞函數(shù)
Ts = 0.01;
J = 0.01;
b = 0.1;
Ke = 0.01;
Kt = 0.01;
R = 1;
L = 0.5;
syms s;
K = Ke;
num = K;
den = sym2poly((J*s+b)*(L*s+R)+K^2);
sys = tf(num,den);
Plant = c2d(sys,Ts,'zoh');
figure
step(Plant)
title('初始系統(tǒng)響應')
open_system('SimFuzzyPID')
open_system('SimFuzzyPID/Fuzzy PID')
% 設計傳統(tǒng)的 PID 控制
open_system('SimFuzzyPID/PID')
C0 = pid(1,1,1,'Ts',Ts,'IF','B','DF','B'); % PID結構
C = pidtune(Plant,C0) % 設計PID
[Kp, Ki, Kd] = piddata(C); % 參數(shù)PID
GE = 100;
GCE = GE*(Kp-sqrt(Kp^2-4*Ki*Kd))/2/Ki; % Kp = GCU * GCE + GU * GE
GCU = Ki/GE; % Ki = GCU * GE
GU = Kd/GCE; % Kd = GU * GCE
% 模糊推理系統(tǒng) Sugeno:
FIS = newfis('FIS','FISType','sugeno');
FIS = addvar(FIS,'input','E',[-100 100]);
FIS = addmf(FIS,'input',1,'Negative','gaussmf',[70 -100]);
FIS = addmf(FIS,'input',1,'Positive','gaussmf',[70 100]);
FIS = addvar(FIS,'input','CE',[-100 100]);
FIS = addmf(FIS,'input',2,'Negative','gaussmf',[70 -100]);
FIS = addmf(FIS,'input',2,'Positive','gaussmf',[70 100]);
FIS = addvar(FIS,'output','u',[-200 200]);
FIS = addmf(FIS,'output',1,'Min','constant',-200);
FIS = addmf(FIS,'output',1,'Zero','constant',0);
FIS = addmf(FIS,'output',1,'Max','constant',200);
% 模糊規(guī)則
ruleList = [1 1 1 1 1;...
1 2 2 1 1;...
2 1 2 1 1;...
2 2 3 1 1];
FIS = addrule(FIS,ruleList);
sim('SimFuzzyPID')
load('StepPID')
load('StepFP')
figure
plot(StepPID(1,1:401),StepPID(2,101:501))
hold on