基于Matlab模糊控制器HDL代码的自动生成
2012-06-01诸葛俊贵
诸葛俊贵
(上海师范大学精密机电系统与控制工程研究室,上海 201418)
经典和现代控制理论都是建立在被控对象具有精确数学模型的基础上,而实际应用中的许多系统很难用精确的数学模型来描述,难以建模,无法确定控制过程的传递函数和状态方程[1]。而模糊控制在处理这类问题上具有明显优势,尤其对那些控制精度要求不高和需要紧跟环境变化的系统。
随着FPGA技术的快速发展,FPGA在智能电子产品、智能家居、智能交通等领域得到了广泛应用。但在FPGA上直接实现模糊控制算法比较困难,由于Matlab的强大功能,可以借助Matlab的Simulink、Fuzzy Logic和HDL Coder等工具间接快速地自动生成模糊控制器的HDL代码。
1 Fuzzy Logic工具箱设计模糊控制器
实验目的是要将设计的模糊控制器用Matlab自动生成 HDL代码,以用于 FPGA中。由于用 Fuzzy Logic设计的模糊控制器tank.fis嵌入到Simulink中的Fuzzy Controller元件中不能自动生成HDL代码,故采用Lookup Table来设计模糊控制器以便用Matlab内嵌的HDL Coder自动生成HDL代码。
实验按照Demos中的举例Water Level Control in a Tank来设计模糊控制器的,这是一个标准二维mamdani模糊控制器。其输入变量有两个分量,偏差e和偏差变化率rate=de/dt,一个输出量u。偏差e为给定液位与实际输出液位的偏差,命名为level,偏差变化率就是偏差随时间的变化率,输出量为阀门的开度,这里为valve,该模糊控制器有5条控制规则。
对于输入变量level有3个模糊子集high、okay和low覆盖在模糊论域[-1,1]上,输入变量rate同样有3个模糊子集negative、none和positive覆盖在模糊论域[-0.1,0.1]上,输出变量valve则有5个模糊子集close_fast、close_slow、no_change、open_slow 和 open_fast覆盖在模糊论域[-1,1]上。
