基于模糊控制的洗涤粉出料机构的设计

2010-02-20 02:16艺,陈
装备制造技术 2010年10期
关键词:电位器控制算法模糊控制

谭 艺,陈 欢

(1.上海建峰职业技术学院,上海201900;2,同济大学,上海200092)

目前,家用洗衣机的洗涤粉的用量多少,仍依靠人工办法进行控制,其结果很难使洗衣机的洗涤效果达到最佳状态。如何设计一种能随洗涤量、洗涤强度和水的硬度不同,而能自动调节洗涤粉用量的加料装置,这对改善洗衣机的工作性能、提高洗涤效果具有非常重要的实际意义。

基于以上的目标,笔者提出了一种随洗涤量、洗涤强度和水的硬度不同而能自动调节洗涤粉用量的加料机构。使用直流电动机驱动,并由光电传感器反馈位置信号形成闭环位置伺服控制系统。采用8位微控制器,采用模糊控制策略。并将其用C语言实现。最后设计制作了一个位置控制系统的演示机构,以此调试控制算法。

1 目标的描述

控制系统可根据用户在控制面板上设定的三个参数:洗涤量、脏的程度和水的硬度,通过控制算法得出执行机构的控制量,使执行机构输出满足需要的洗涤粉量。

2 方案的描述

2.1 出料机构

首先为实现洗涤粉的定量输出,设计如图1的机械机构。

图1 出料机构剖面图

此机构的轴在电机驱动下,旋转一定的角度,轴旋转一周输出若干单元格的洗涤粉。每个单元格的体积(洗涤粉的体积)是由单元格的长度、半径以及一周内单元格的数量确定的。在确定了这3个尺寸参数后,每单元格输出的洗涤粉量也就确定了。这样输出定量洗涤粉的任务,通过这个机械机构转化为控制轴转动一定的角度。为便于制作和控制,我们选择了4个单元格形式。

2.2 驱动电机

驱动系统是这个控制系统的基本组成部分,也是关键的内容,其为执行机构实现控制策略提供动力。在现实中机械的驱动,主要有电气、液压和气压3种方式。由于我们的整个机构是个小型化的设备,所以直流电机的驱动方式更合适。步进电机也是一种选择,但考虑到本机构是一个精度要求比较高的角位置控制系统,所以需要采用反馈控制的方式。在这种状况下,由于直流电机较步进电机更易控制,所以决定采用直流电机。通过对负载的估算、驱动对象运动规律的确定、传动系统转动惯量的折算等,确定直流电机的功率。最后选型电机采用KYSAN公司的ZGA20RS79i型直流减速电动机。其额定电压为直流12V,输出最高转速为80 r/min,转矩为12 N·m。

使用电机驱动芯片驱动电机。MPC17510是Freescale公司的一款集成H桥控制电路的芯片。

2.3 反馈机构

轴转动的角位置信号,需要通过传感器反馈,形成一个闭环控制系统。传感器采用SUNX的光电传感器。其实现结构如图2所示。

图2 反馈机构原理图

为了更适宜整个方案的机械出料结构,我们自制一个面盘。其结构如图2所示。其形状为一圆盘,在相对的90°位置都有一通孔,用于透光。光电盘安装在旋转主轴上。这4个通孔的位置,也正对应了出料机构的每90°的一个出料位置。

在控制方面,只要用微控制器捕捉传感器信号的上升沿或下降沿,并进行软件计数,就得到了主轴的转角位置信号。

2.4 人机交互面板及操作过程设计

用户在操作面板上输入控制器用于控制量计算的3个参数:洗涤量、脏的程度和水的硬度。

信号输入使用通过电位器分压得到的电压信号,作为模拟量输入。由于有3个参考参数,所以有3路电压信号,通过AD转换模块得到数字量,由主控制器根据控制算法得到控制电机的控制量。为便于说明操作面板的操作形式,用VB程序设计一个模拟界面如图3所示。

图3 操作界面

在图3中的操作面板上,共有3个条形的电位器调节装置(当然也可以是旋钮状的调节电位器),分别是选择参数大小的3个电位器:

Wasserha咬rte——水硬度;

Waschenstrenge——脏的程度;

WaschenMenge——洗涤量,

以及执行键starten和状态显示LED灯。

在此操作面板模式下,用户的操作方法是:

(1)通过电位器“水硬度”设定水的硬度;

(2)通过电位器“洗涤强度”设定被洗物脏的程度;

(3)通过电位器“洗涤量”设定量的多少;

(4)设定完3个参数后按“执行”键。

在这4步后,执行指示灯亮,机构开始工作;工作完成后执行指示灯暗,结束。

2.5 控制器

对于此反馈控制系统而言,需要有3路AD采样通道、PWM输出模块和键盘中断模块。选用Freescale公司的08系列微控制器GZ16。其嵌入式软件的开发基于Metrowerk公司的Codewarrior软件。

此闭环位置控制系统的框图如图4所示。

图4 控制系统框图

3 模糊控制策略及其C语言化

模糊控制是近代控制理论中建立在模糊集合论基础上的一种基于语言规则与模糊推理的控制理论,是智能控制的一个重要分支。其区别于常规控制策略的是,无需建立精确的数学模型。

机构采用模糊控制规则,并用C语言将其实现,以使其能植入微控制器中。

3.1 建立精确输入成员

模糊成员集为具有true/false值的变量。一个模糊成员的值域从绝对true(255)到绝对false(0)。 对于这个模糊控制器,定义以下精确输入成员:

(1)水硬度。weich(软);normal(正常);hart(硬)。

(2)脏的程度。ss(很脏);sc(脏);ws(不太脏)。

(3)洗涤量。sviel(很多);viel(多);wenig(少)。

由于在8位的单片机GZ16的AD转换模块中,可设置AD转换的精度为8位或10位。取8位精度。也就是输入模拟量值在AD转换后得到数字量(0~255)。也就是说3参数输入后的精确值是数字量0~255。

模糊成员集的图形化定义如图5~图7。

图5 水硬度的图形化定义

图6 脏程度的图形化定义

图7 量的多少的图形化定义

在此定义了3个可调的阀值:WH、SS、ME。它们在软件中为常量,用于对控制系统的微调。在C语言程序中,定义一个模糊函数以便接收精确输入并计算各个模糊成员的值。3个可调阀值作为软件中影响控制器误差和响应时间的常量。

以下就是此功能函数:

Die folgende Funktion;

#define WH 64

unsigned char weich,normal,hart;

#define SS 64

unsigned char ws,sc,ss;

#define ME 64

unsigned wenig,viel,sviel;

void InputMembership(void){

if(wasser_harte<=WH){ //wasser_harte ist AD daten

weich=255;normal=0;hart=0;

}else if(wasser_harte<=127){

weich=255*(wasser_harte-127)/(WH-127);

normal=255*(wasser_harte-WH)/(127-WH);

hart=0;

}else if(wasser_harte<=255-WH){

weich=0;

normal=255*(wasser-harte-255+WH)/(WH-128);

hart=255*(wasser-harte-127)/(128-WH);

}else{weich=0;normal=0;hart=255;}

if(waschen_strenge<=SS){ //waschen_strenge ist AD daten

ws=255;sc=0;ss=0;

}else if(waschen_strenge<=127){

ws=255*(waschen_strenge-127)/(SS-127);

sc=255*(waschen_strenge-SS)/(127-SS);

ss=0;

}else if(waschen_strenge<=255-SS){

ws=0;

sc=255*(waschen_strenge-255+SS)/(SS-128);

ss=255*(waschen_strenge-127)/(128-SS);

}else{ws=0;sc=0;ss=255;}

if(menge<=ME){ //menge ist AD daten

wenig=255;viel=0;sviel=0;

}else if(menge<=127){

wenig=255*(menge-127)/(ME-127);

viel=255*(menge-SS)/(127-ME);

sviel=0;

}else if(menge<=255-ME){

wenig=0;

viel=255*(menge-255+ME)/(ME-128);

sviel=255*(menge-127)/(128-ME);

}else(wenig=0;viel=0;sviel=255;}

}

3.2 建立精确输出成员

模糊控制器中,输出量为洗衣粉的总质量。但实质上该出料机构把洗衣粉净质量的输出转换为主轴旋转角度的输出,而且是90°的整数倍。

然而出于对模糊概念上的直观考虑,定义以下精确输出成员为洗衣粉的净质量,但其值为主轴转角。

M1(Menge1)、M2、M3、M4、M5;

在此设置另一个软件常量MG(#define MG XXX),其模糊含义为洗衣粉的净质量,实际值是主轴转角(见表1)。

表1 各精确输出成员的关系表

3.3 定义模糊规则

定义输入模糊成员集和输出模糊成员集的关系。这些规则得以直观地建立控制器。

模糊逻辑规则包含27条,比如:

Ifweich and ws and wenig then M1;

如果水硬度为软,洗涤物不很脏并且洗涤量为少,则需要洗衣粉量为M1(MG);

……

Ifhart and sc and viel then M4;

如果水硬度为硬,洗涤物很脏并且洗涤量为多,则需要洗衣粉量为M4(4MG);

……

此27条规则,可用三张二维表格清楚地表达如表2。

表2 27条规则的二维表

将规则综合起来表示:

M1=(weich and ws and wenig)or(weich and sc and wenig)or(weich and ws and viel)

M2=(weich and ss and wenig)or(weich and sc and viel)or(weich and ws and sviel)or(normal and ws and wenig)or(normal and sc and wenig)or(normal and ws and viel)

M3=(weich and sc and sviel)or(weich and ss and viel)or(weich and ss and sviel)or(normal and ws and sviel)or(normal and sc and viel)or(normal and ss and wenig)or(hart and ws and wenig)or(hart and ws and viel)or(hart and sc and wenig)

M4=(normal and sc and sviel)or(normal and ss and viel)or(normal and ss and sviel)or(hart and ws and sviel)or(hart and sc and viel)or(hart and ss and wenig)

M5=(hart and sc and viel)or(hart and ss and viel)or(hart and ss and sviel)

对于以上模糊逻辑,and运算取最小值,or运算取最大值。由此,计算5个输出模糊成员得C函数如下所示:void OutputMenbership(void){

unsigned char temp1,temp2,temp3,temp4,temp5,temp6;

unsigned char temp7,temp8,temp9;

temp1=min (weich,ws,wenig);temp2=min (weich,sc,wenig);temp3=min(weich,ws,viel);

M1=max(temp1,temp2,temp3);

temp1=min (weich,ss,wenig); temp2=min (weich,sc,viel);temp3=min(weich,ws,sviel);

temp4=min (normal,ws,wenig);temp5=min(normal,sc,wenig);temp6=min(normal,ws,sviel);

M2=max(max(temp1,temp2,temp3),max(temp4,temp5,temp6),0);

temp1=min(weich,sc,sviel);temp2=min(weich,ss,viel);temp3=min(weich,ss,sviel);temp4=min (normal,ws,sviel);temp5=min (normal,sc,wenig);temp6=min (normal,ss,wenig); temp7=min (hart,ws,wenig);temp8=min(hart,ws,viel);temp9=min(hart,sc,wenig);

M3=max(max(temp1,temp2,temp3),max(temp4,temp5,temp6),max(temp7,temp8,temp9));

temp1=min (normal,sc,sviel); temp2=min (normal,ss,viel);temp3=min(normal,ss,sviel);

temp4=min(hart,ws,sviel);temp5=min(hart,sc,viel);temp6=min(hart,ss,sviel);

M4=max(max(temp1,temp2,temp3),max(temp4,temp5,temp6),0);

temp1=min(hart,sc,sviel);temp2=min(hart,ss,viel);temp3=min(hart,ss,sviel);

M5=max(temp1,temp2,temp3);

}

其中,

min()是用于取最小值的子函数;

max()是用于取最大值的子函数。

3.4 去模糊化

使用模糊成员集得加权平均值,计算精确输出。

输出量为

以上是该机构模糊控制算法的C语言描述。若需要植入微控制器中,还需添加主循环程序和三个参数的AD采样程序。

4 程序流程简介

以上给出了模糊控制的C语言描述,这里给出在Codewarrior平台上实现整个控制的程序流程。

对于这个控制系统,所需要的硬件层的控制有:电动机的PWM驱动设置,执行键的键盘中断驱动设置,3个通道的AD转化的设置。这些内容都在GZ16的初始化程序中完成。程序流程如图8所示。

图8 程序流程图

控制器在上电之后,首先进行初始化,其内容前面已介绍过。初始化完成后,进入for(;;)循环。在没有执行指令按键输入的情况下,控制器进入省电STOP模式。当有按键输入操作时,键盘中断使控制器出STOP模式进入正常模式。控制器的模式状态由变量work_flag标识。

在用户选择完3个参数的值后,便按下执行键。控制器就根据设计的控制算法和用户输入的参数值,计算出一个控制量。在此,控制量为电动机转动的角度,其值是90°的倍数。

控制器启动电动机,电动机驱动机构主轴作旋转运动的同时,光电传感器在以计数的方式记录主轴转过的角度。当主轴转动角度达到控制量时,控制器关闭电动机。

一个工作周期之后,控制器再次进入STOP模式。等待下一次操作的执行按键输入。

5 结束语

设计并制作一个位置控制系统的演示机构(如图9),不是为了完全实现设计方案,而是通过这个演示机构,不仅能证明方案的可行性,更重要的是可以在此机构上尝试调试控制算法。并能进行分析,找出不足加以改进。

图9 演示机构

实际情况证明,控制算法是符合逻辑要求的,但控制效果无法在此机构上得到说明。

[1]Jonathan W.Valvano.嵌入式微计算机系统实时接口技术[M].北京:机械工业出版社,2003.

[2]韩峻峰,李玉惠,等.模糊控制技术[M].上海:同济大学出版社,2000.

[3]谢宋和,甘 勇,等.单片机模糊控制系统设计与应用实例[M].北京:电子工业出版社,1999.

猜你喜欢
电位器控制算法模糊控制
基于变论域模糊控制的Taylor逼近型内模PID算法
基于遗传算法的模糊控制在过热汽温控制系统优化中的应用
Hepatitis C virus antigens enzyme immunoassay for one-step diagnosis of hepatitis C virus coinfection in human immunodeficiency virus infected individuals
基于ARM+FPGA的模块化同步控制算法研究
高精度位置跟踪自适应增益调度滑模控制算法
Mixly开源项目设计10:用自制多量程欧姆表测量电位器的电阻
基于模糊控制的PLC在温度控制中的应用
基于模糊控制的恒压供水系统的研究
基于航迹差和航向差的航迹自动控制算法
一种非圆旋转工件支撑装置控制算法