直流電動(dòng)機(jī)具有啟動(dòng)轉(zhuǎn)矩大、控制性能優(yōu)等特點(diǎn)。目前直流電機(jī)多采用傳統(tǒng)的PID控制,PID控制是最早發(fā)展起來的控制策略之一。由于其具有算法簡單、魯棒性好和可靠性高等優(yōu)點(diǎn),被廣泛應(yīng)用于工業(yè)過程控制中。但PID控制適合于可建立精確數(shù)學(xué)模型的確定性控制系統(tǒng)。
但實(shí)際的工業(yè)過程控制系統(tǒng)中存在很多非線性或時(shí)變的不確定因素,使得PID控制器的參數(shù)整定過程繁瑣。控制效果也因此而受影響。近些年來。隨著現(xiàn)代控制理論、智能控制和計(jì)算機(jī)技術(shù)的飛速發(fā)展。出現(xiàn)了很多新型的控制系統(tǒng)。模糊控制就是其中之一。本期帶來基于模糊PID的直流電機(jī)Simulink模型的搭建。
1、模糊控制
模糊控制作為目前最具實(shí)際意義的智能控制方法之一,以模糊集合論、模糊語言變量及模糊邏輯推理為基礎(chǔ)。實(shí)現(xiàn)一步模糊控制算法的過程:獲取被控制量的精確值。將此量與給定值比較得到誤差信號(hào),一般選誤差信號(hào)作為模糊控制器的一個(gè)輸入量。把誤差信號(hào)的精確量進(jìn)行模糊化變成模糊量。誤差的模糊量可用相應(yīng)的模糊語言表示,得到誤差的模糊語言集合的一個(gè)子集(一個(gè)模糊矢量),再由誤差和模糊控制規(guī)則(模糊算子)根據(jù)推理的合成規(guī)則進(jìn)行模糊決策,得到模糊控制量。
2、基于模糊控制的轉(zhuǎn)速調(diào)節(jié)器設(shè)計(jì)
直流電機(jī)控制系統(tǒng)中,外環(huán)轉(zhuǎn)速調(diào)節(jié)器采用模糊PID控制器.內(nèi)環(huán)電流調(diào)節(jié)器依然采用傳統(tǒng)PID控制器。從理論上講.模糊控制器的維數(shù)越高??刂圃骄堋5蔷S數(shù)越高。模糊控制規(guī)則變得過于復(fù)雜,控制算法的實(shí)現(xiàn)相當(dāng)困難。這是目前廣泛應(yīng)用二維模糊控制器的原因所在。
模糊控制輸出量確定的過程:
①確定輸入與輸出變量的模糊子集和論域及其隸屬度:
②設(shè)計(jì)模糊推理關(guān)系,確定模糊控制規(guī)則,以明確模糊關(guān)系矩陣:
③模糊決策,確定輸出量在其論域上的模糊矢量:
④模糊判決,即將控制量去模糊化,得到確定的輸出變量。進(jìn)而得到相應(yīng)的控制表。
代碼:
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)響應(yīng)')
open_system('SimFuzzyPID')
open_system('SimFuzzyPID/Fuzzy PID')
% 設(shè)計(jì)傳統(tǒng)的 PID 控制
open_system('SimFuzzyPID/PID')
C0 = pid(1,1,1,'Ts',Ts,'IF','B','DF','B'); % PID結(jié)構(gòu)
C = pidtune(Plant,C0) % 設(shè)計(jì)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