基于模糊PID的直流电动机闭环调速系统设计

      写在与大家分享吧,有错误欢迎指出,谢谢。

一、系统功能及特点

1、功能

(1)两种速度设定方式:模拟量旋钮给定和数字键盘输入给定;
(2)两种显示格式:脉冲数每周期和转每秒;
(3)系统具备手动启动,手动停止功能。

2、特点

(1)采用模糊逻辑,自动选择PID参数,来控制系统稳定;
(2)编程采用C语言和汇编语言混编的方法。

二、获取PID参数的模糊调整表

       首先说明的是,此处的模糊控制规律是我借鉴论文中的表述,以前人的经验为基础,见参考文献【1】。

1、模糊控制规律

(1)当偏差e较大时,应取较大的Kp和较小的Kd,且使Ki为0。 

(2)当偏差e中等大小时,应取较小的Kp,适当的Ki和Kd。 

(3)当偏差e较小时,应取较大的Kp和Ki,而且Kd的取值要恰当。 

2、输入量模糊化

(1) e的论域

{-3(负大-NB),-2(负中-NM),-1(负小-NS),0(零-ZO),1(正小-PS),2(正中-PM),3(正大-PB)}

(2)ec的论域

{-3(负大-NB),-2(负中-NM),-1(负小-NS),0(零-ZO),1(正小-PS),2(正中-PM),3(正大-PB)}

(3)Kp的论域

{-0.3(负大-NB),-0.2(负中-NM),-0.1(负小-NS),0(零-ZO),0.1(正小-PS),0.2(正中-PM),0.3(正大-PB)}

(4)Ki的论域

{-0.15(负大-NB),-0.1(负中-NM),-0.5(负小-NS),0(零-ZO),0.5(正小-PS),0.1(正中-PM),0.15(正大-PB)}

(5)Kd的论域

{-0.06(负大-NB),-0.04(负中-NM),-0.02(负小-NS),0(零-ZO),0.02(正小-PS),0.04(正中-PM),0.06(正大-PB)}

3、生成模糊规则表

     采用经验归纳法和推理合成法来建立模糊控制规则。

(1)∆K_P模糊规则表,K_P(k)=K_P0+∆K_P(k)


(2) ∆ K_ I 模糊规则表, K _I (k)=K_ I 0+∆K_ I (k)


(3)∆K_D模糊规则表,K_D (k)=K_D0+∆K_D(k)


4、解模糊—将模糊逻辑转化为查询表

      利用MATLAB进行加权平均法(重心法)转化计算,参考网址:如何利用matlab将模糊逻辑转化为查询表

(1)建立模糊逻辑

      打开MATLAB的fuzzy工具箱,结合上述关系建立模糊逻辑控制器,添加49条模糊控制规则。


 (2)  系统测试

  利用Simulink建立控制器模型,调用system test工具,进行系统测试。然后利用MATLAB一个工具,经过多次迭代,计算出需要的调整表。


(3)提取数据     

       得到的是一个多种参数数据的cell细胞组,需要对数据进行提取。笔者当时利用一个博客提供的方法提取不成功,就自己写了一个函数,在M文件编写程序,提取数据形成查询表,把参数提取在excel表中了。


MATLAB提取程序:

writefile='selectPID.xls';%写入文件夹名
dataout1=zeros(7,7);%最终数据输出
dataout2=zeros(7,7);%最终数据输出
dataout3=zeros(7,7);%最终数据输出
%sourcedata=test_data;
title1={'Kp参数的模糊调整表'};
title2={'Ki参数的模糊调整表'};
title3={'Kd参数的模糊调整表'};
varname={-3;-2;-1;0;1;2;3};
corname={-3;-2;-1;0;1;2;3};
xlswrite(writefile,title1,'E1:E1');
xlswrite(writefile,title2,'E11:E11');
xlswrite(writefile,title3,'E20:E20');

for i=2:8
    for j=2:8       
    dataout1(i-1,j-1)=mean(test_data.Kp{(j-1+(i-2)*7)});
    j=j+1;
    end
    i=i+1;
end
for i=2:8
    for j=2:8       
    dataout2(i-1,j-1)=mean(test_data.Ki{(j-1+(i-2)*7)});
    j=j+1;
    end
    i=i+1;
end
for i=2:8
    for j=2:8       
    dataout3(i-1,j-1)=mean(test_data.Kd{(j-1+(i-2)*7)});
    j=j+1;
    end
    i=i+1;
end
xlswrite(writefile,dataout1,'B3:H10');%将数据写入表格
xlswrite(writefile,dataout2,'B12:H19');%将数据写入表格
xlswrite(writefile,dataout3,'B21:H28');%将数据写入表格


参考文献:【1】宋晓宇,马斌,张波,基于单片机的模糊PID控制双闭环直流调速系统研究



©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页