个人觉得,控制理论可以说都是数学,并且是一种专门的数学,或者说是一种应用数学,模糊控制也不例外,它是建立在模糊集合论基础上的,模糊集合可以看成是普通集合的拓展,那什么是集合,对不起,没有定义,集合属于初始概念,是不定义的概念,对不定义概念的理解,可以借助于公理,公理可以看成是初始概念的定义,扯远了,回到集合,那怎么理解集合,集合大致可以看成是有相同属性事物的总和,什么是模糊集合,这么说吧,比如我们描述一个人,其属性可以有美丑、气质,也可以有高矮、胖瘦、年老等等,那颜值究竟有多高,那气质究竟有多好,在模糊集合中就用隶属度来表示,比如,定义一个胖子集合A,大胖子a1,属于A的隶属度为1.0,中胖子a2,属于A的隶属度为0.8,小胖子a3,属于A的隶属度为0.65,,体重正常者a4,属于A的隶属度为0.5,...,超级瘦子an,属于A的隶属度为0,这样模糊集合A可以表示为:A=1.0/a1+0.8/a2+0.65/a3+0.5/a4+...+0.0/an,在模糊集合基础上,发展出模糊关系和模糊推理等等运算。
模糊控制原理如图1所示(参见易继锴《智能控制技术》),大致工作过程是:计算偏差变化率,将偏差和偏差变化率变换成模糊量,根据一定的模糊规则推理出模糊控制量,模糊控制量清晰化作为实际输出去控制被控对象,整个过程的细节如图2所示(参见孙增圻《智能控制》)。
实现模糊控制的步骤如下:
1.确定语言变量x、y和z的隶属度函数,这个一般用表格来表示。
2.确定模糊控制规则表。
3.根据1和2计算控制表。1-3点具体可参见前面博文《用MATLAB玩控制-模糊控制输出表》。
4.根据被控对象的先验知识或经验确定量化因子k1、k2、k3值,但要说明,k1、k2、k3值的调整如同pid参数整定一般,不是一件容易的事,如果应用最优化理论,则可以获得最佳参数,甚至于模糊控制输出表也可用最优化理论来优化,以后,或许会写一篇最优化理论在控制中应用专题,这里且按下不表。
5.在C语言中,模糊控制输出表可以用一个两维数组Fuzzy来表示,STM32F407中有足够多(变量)内存空间可供使用,所以,可以直接定义为float或double类型,x0、y0定义为int类型,然后,由Fuzzy[x0][y0]就可获得模糊控制输出,这个值乘于k3就得到实际控制量u,u是实型数。
复合模糊控制是在模糊控制基础上,加上一个pid控制器,如图3所示,当大偏差时是模糊控制,而小偏差时用pid控制,我们在STM32F407上实现的复合模糊控制,其控制效果如图4所示,从图中可以看出,被控对象是一个大纯滞后系统,其控制效果相当不错,这还是在没有仔细调整量化因子k1、k2、k3和pid参数的情况下取得的。
关键字:STM32F407 复合模糊控制
引用地址:
用STM32F407玩控制—复合模糊控制
推荐阅读最新更新时间:2024-03-16 16:17
STM32F407用wk2124芯片编写SPI转四路串口驱动
引言 因为项目用到了wk2124芯片来进行串口扩展,网上找了好多资料没有现成的,根据商家提供的demo,它是基于103写的,所以根据自己板子的实际情况进行了改写,并且学习一下里面的主要函数及我对函数的理解 原理图 用到5个引脚,片选CS、时钟SCK、MOSI、MISO和中断IRQ,因为RST设置的是板子连电后电容充电,所以会自动复位,不用这个引脚。 一. SPI通信配置 1.GPIO初始化设置 GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟 RCC_APB
[单片机]
【stm32f407】窗口看门狗 wwdog
一.窗口看门狗 窗口看门狗(WWDG)通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在T6位(WWDG- CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。在递减计数器达到窗口配置寄存器(WWDG- CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新, 那么也将产生一个MCU复位。这表明递减计数器需要在一个有限的时间窗口中被刷新。如图: T 就是WWDG_CR的低七位,W 即是WWDG- CFR的低七位。T 就是窗口看门狗的计数器,而W 则是窗口看门狗的上窗口,下窗口值是固定的(0X40)。当窗口看门狗
[单片机]
stm32f407之高级定时器 死区互补PWM(操作寄存器)
高级定时器的功能有很多,这里只介绍死区互补PWM输出功能。其实死区互补PWM跟通用定时器的PWM配置差异不大,只是需要设置多CCER寄存器中的几个位以及刹车与死区寄存器BDTR。对寄存器的具体描述请参考数据手册。 配置步骤: 1. 使能相关时钟。 2. 配置相关的引脚模式、速度、以及复用功能。 3. 使能TIM时钟 4. 设置分频。 5. 设置周期。(ARR的值)周期=(PSC+1)* ARR / TIMx时钟 6. 产生一次更新事件,更新影子寄存器的值。 7. 在CCMR中设置PWM模式。 8. 设置各通道占空比。占空比= CCRx / ARR。 9. 使能比较输出。 10. 启动预装载。
[单片机]
STM32F407 SPI flash
STM32F407 SPI 接口: STM32F4XX时钟计算 HCLK=168M PCLK1 =HCLK/4 =42M PCLK2 =HCLK/2 =84M SPI2、SPI3在PCLK1,最大时钟为42M SPI1在PCLK2,最大时钟为84M STM32F4 支持的最大SPI时钟为37.5Mbits/s 因此需要分频。 例程选择SPI2 分频后为21M 串行Flash W25Q64BVSSIG (最高支持80MHz)。 测试: 全部写入0XAA 数据长度8192K 擦除:20.798 写入耗时42.599S 读:9.008S 百度的参照时间 擦除:8.9S 写入
[单片机]
接触STM32F407芯片的总结
今天开始弄了一下STM32F4的板子,板子的核心芯片是STM32F407,是Contex M4的内核,和之前接触的STM32F1的相比,功能真的强大了很多,而且设计上也更加容易使用,先介绍一下今天的成果。 今天看了数据手册的RCC部分和GPIO部分,在灵格斯的帮助下,还是能够看懂的,因为它和STM32F1差不多,应该是高级芯片的寄存器结构都很类似,所以看起来不是那么的难懂,很多东西都是相通的。 GPIO部分,他的寄存器包括4个参数设置寄存器用来设置IO口的工作方式,两个数据寄存器(一个输入一个输出),一个置位复位寄存器,一个LOCK寄存器,两个功能选择寄存器。寄存器的结构是十分的清晰的,Configure寄存器
[单片机]
国产优秀替代_APM32F407替代STM32F407记录
前言 最近一段时间在玩极海的APM32F407系列的MCU,在研究一段时间后发现其资源和意法半导体的STM32F407不相上下。通过对比两者的数据手册和参考手册,我发现APM32F407替代STM32F407绰绰有余。我拿出了我吃灰已久的一块开发板“启明欣欣 IMT407 V5.1”(淘宝搜索“启明欣欣”)。预计将开发板上的STM32F407芯片替换成APM32F407的芯片,看看会发生什么样的事情。 本文记录一下我使用APM32F407替代STM32F407制作的一个小demo(使用SPI外设读取W25Q128)。该demo使用原开发板电路,看看将主控换成APM32F407后看看能不能做到pin对pin的完美替代。 本文使用环境
[单片机]
stm32f407discovery 的keil 4.60ST-linkII不能用解决方法
1 、用资源中的STLink文件替换 C:\Keil\ARM\STLink, 记得备份原来的文件, 2、C:\Keil\TOOLS.INI改成如下的 ORGANIZATION= cs2c NAME= jianzhong , cui EMAIL= cjzswust@gmail.com ARMSEL=1 BOOK0=UV4\RELEASE_NOTES.HTM( uVision Release Notes ) PATH= C:\Keil\ARM VERSION=4.60 PATH1= C:\Program Files\arm-none-eabi-gcc-4_6\ TOOLPR
[单片机]
stm32F407之USART6的DMA工作方式
昨天调试了USART6的DMA工作模式,今天补发上这篇笔记。 力求简洁,stm32的DMA就不介绍了,不了解的可以搜索一下。这里重点介绍一下DMA的外设地址如何确定,这个是网上很少涉及但是很重要的一块,如果不清楚如何确定外设寄存器地址就无法进行DMA功能,这里以stm32F407的USART6为例介绍,参考手册为 RM0090 Reference manual 。 在进行DMA参数配置时有这样一项 DMA_InitStructure.DMA_PeripheralBaseAddr = ?;这句是要确定Memory与Peripheral数据传输时的外设数据地址,因为这里我们用到的是USART6从Memory的数组中取出数据并发送给上位
[单片机]