版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE20毕业论文题目:基于C51单片机的速度模糊控制器-软件学生姓名:学号:系(院):专业:班级:指导教师:起止时间:2007年12月—-2008年5月基于C51单片机的速度模糊控制器摘要:模糊控制技术是以模糊数学为基础发展起来的一种新的控制技术。模糊控制方式是一种非线性控制方式,对无法取得数学模型或数学模型相当粗糙的系统可以取得令人满意的控制效果。直流电动机转速控制是一种非线性的时变的复杂过程,转速直接影响着工件的机器质量。本文讨论了利用模糊控制技术设计的单片机模糊速度控制系统,实验表明该系统比传统的PID速度控制系统精度高、速度快。关键词:模糊控制;模糊算法;单片机;霍尔传感器;直流电动机Thefuzzycontrolerwhichusedspeedadjustedbasedon51MCUAbstract:Fuzzycontroltechnologyisanewcontroltechnologybasedonfuzzymath.Fuzzycontrolwayisanon-linearcontrolmode,whichisunabletoobtainthemathematicalmodeloraroughmathematicalmodelofthesystemofcontrolcanbeachievedsatisfactoryresults。Motorspeedcontrolisanonlineartime-varyingcomplexityoftheprocess,speeddirectimpactonthequalityofthemachineparts.Thisarticlediscussestheuseoffuzzycontrolofthemicrocontrollertechnologydesignfuzzyspeedcontrolsystem,experimentsshowthatthesystemishigheraccuracyandfasterthanthetraditionalPIDspeedcontrolsystem.Keywords:Fuzzycontrol,fuzzyalgorithm;MCU;Hallsensor;DCMotors目录1。引言…………(5)1。1模糊控制器的可行性分析…………………(5)1.2本设计的的任务和要求…………1。2.1设计任务…………(6)1.2.2设计要求…………(6)2.系统电路设计2。1基本硬件组成…………………(6)2.1.1AT89C51……………………(6)2。1。2直流电动机转速的测量原理………………(10)2。1。3直流电动机工作原理与结构……(11)2。2电路设计整体思路…………(13)3.系统控制算法设计与实现……(13)3.1模糊控制的原理…………………(13)3.1.1模糊控制器的基本原理………………(13)3.1。2模糊控制器设计的基本方法……(14)3.2本设计模糊控制算法的设计思想……………(15)3。2。1确定模糊控制器的输入量和输出量……(15)3.2.2精确量的模糊化………(15)3。2.3模糊控制规则…………(17)3。2.4模糊判决…………………(18)4.系统软件设计与实现………………(18)4.1软件主程序…………………(18)4.2软件主要子程序……………(27)4。2.1霍尔元件角速度采样及显示子程序……(27)5.系统的安装与调试………………(31)5。1软件调试……………(31)5.2系统调试………………6.总结和体会……………………(31)致谢………(32)参考文献…………(32)附录………………(33)1.引言1。1模糊控制器的可行性分析在我国,模糊控制的理论研究水平相对较高,而应用技术水平却相对落后,特别是在工业过程控制领域,普遍采用查表法或公式法实现模糊控制,其控制精度不高,影响系统的性能.
本文推出一种通用的模糊控制器,其模糊控制用推理法实现,并且将PI控制结合进去以改善控制性能,工程设计人员只要根据对象给出系统输入、输出量的隶属函数及控制规则,再加上少量的外围电路就可构成一个模糊控制系统。一个简单的模糊控制系统结构框图如图1所示,模糊控制系统与其它控制系统的区别就是其控制器是采用模糊控制算法而不是其它控制算法.简单模糊控制器的基本结构如图2所示,模糊控制器首先需要将输入的精确数据值转化为模糊量,以便能够按照人的语言习惯和模糊思维特点进行推理;其次,依据规则库对输入量进行模糊推理,得到输出量的结果;最后,将模糊推理结果的模糊量转化为精确量输出。事实上,硬件化的模糊集成电路组成的模糊控制器就是这样一种思路,我们用软件实现模糊控制的3个步骤来构成通用模糊控制器,虽然速度低于硬件模糊芯片构成的模糊控制器,但价格远远低于后者,更适合我国国情。图1简单模糊控制系统结构框图图2简单模糊控制器的功能结构1.2本设计的任务及要求1。2.1设计任务:基于单片机,采用模糊算法设计一个速度模糊控制器控制直流电动机的角速度,从而控制直流电动机的电流.1。2.2设计要求具体实现功能如下:角速度传感器能采样电动机的角速度。数码管显示采样角速度值和直流电动机的电流.根据得出不同的角速度,从而得到控制直流电动机的不同电流。2..系统电路设计2。1基本硬件组成2.1.1AT89C51AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次.该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51的芯片管脚图如图2-1图2-1AT89C51的芯片管脚图主要特性:·与MCS—51兼容ﻫ·4K字节可编程闪烁存储器
寿命:1000写/擦循环ﻫ数据保留时间:10年
·全静态工作:0Hz-24Hzﻫ·三级程序存储器锁定
·128*8位内部RAMﻫ·32可编程I/O线ﻫ·两个16位定时器/计数器ﻫ·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式ﻫ·片内振荡器和时钟电路管脚说明:VCC:供电电压。ﻫ
GND:接地。ﻫ
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入.P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位.在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。ﻫ
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故.在FLASH编程和校验时,P1口作为第八位地址接收。ﻫ
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流.这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。ﻫ
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1"后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故.
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)ﻫP3.2/INT0(外部中断0)ﻫP3.3/INT1(外部中断1)
P3。4T0(记时器0外部输入)ﻫP3.5T1(记时器1外部输入)ﻫP3.6/WR(外部数据存储器写选通)ﻫP3。7/RD(外部数据存储器读选通)ﻫP3口同时为闪烁编程和编程校验接收一些控制信号。ﻫﻫ
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间.ﻫALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0.此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高.如果微处理器在外部执行状态ALE禁止,置位无效。
ﻫ
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器.注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP).ﻫ
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。ﻫ
XTAL2:来自反向振荡器的输出。振荡特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接.有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行.ﻫ此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式.在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止.2。1.2直流电动机转速的测量原理转速是工业上常用的一个参数。电动机的转速常以每秒或分钟的圈数来表示,有时也用角速度表示瞬时速度.转速的测定方法很多,常用的一种测量方法是用霍尔IC器件。霍尔IC器件是由半导体材料制成的一种薄片.在半导体薄片相对的两侧通以控制电流,在薄片垂直方向加以磁场,则在半导体两端会产生一电动势,其大小与控制电流和磁场的乘积成正比,这就是霍尔效应。若控制电流保持不变,则霍尔IC器件感应电压将随外界的磁场强度而变化。将一块永久磁钢固定在电动机转轴上转盘的边沿,转盘随被测轴旋转,磁钢也将跟着同步旋转。在转盘附近安装一个3000系列的霍尔IC器件,当转盘随轴旋转时,霍尔IC器件受磁钢所产生的磁场影响,输出脉冲信号,其频率f和转速n成正比,只要测量出脉冲的周期T或频率f即可计算出电动机的转速n.根据电动机的工作情况和它的转速特性,选用美国SPRAGUE公司生产的3000系列霍尔IC开关传感器,它内部含有稳压电路、霍尔电动势发生器、放大器、施密特触发器和集电极开路输出电路,具有工作范围宽(包括频率响应宽和动态范围大等)、可靠性高、外围电路简单、输出电平可与各种数字电路兼容等特点。霍尔传感器检测转速示意图如下。在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。圆盘每转动一圈,霍尔传感器便输出一个脉冲。通过单片机测量产生脉冲的频率就可以得出圆盘的转速。图2-2霍尔传感器工作电路图图2-3霍尔传感器测转速直流电动机的转速与电动机线圈的电流大小有关。用DAC0832芯片控制输出到直流电动机的电流的方法来控制电动机的转速。当电动机转速小于设定值时,DAC0832芯片的输出电流增大;当大于设定值时,则DAC0832芯片输出电流减小,从而使电动机设定的速度恒速旋转。DAC0832芯片是一块数模转换器。其基本原理是按二进制各位代码的数值,将每一位二进制数字量按其“权”换成相应的模拟器,然后对各位数字量转换后的模拟量进行叠加.其和就是与被转换的二进制数据成正比的模拟量.2.1.3直流电动机工作原理与结构图2-4直流电动机模型图2-4是一个最简单的直流电动机模型。在一对静止的磁极N和S之间,装设一个可以绕Z-Z'轴而转动的圆柱形铁芯,在它上面装有矩形的线圈abcd。这个转动的部分通常叫做电枢.线圈的两端a和d分别接到叫做换向片的两个半圆形铜环1和2上。换向片1和2之间是彼此绝缘的,它们和电枢装在同一根轴上,可随电枢一起转动.A和B是两个固定不动的碳质电刷,它们和换向片之间是滑动接触的。来自直流电源的电流就是通过电刷和换向片流到电枢的线圈里.图2-5换向器在直流电机中的作用当电刷A和B分别与直流电源的正极和负极接通时,电流从电刷A流入,而从电刷B流出.这时线圈中的电流方向是从a流向b,再从c流向d。我们知道,载流导体在磁场中要受到电磁力,其方向由左手定则来决定。当电枢在图7-5(a)所示的位置时,线圈ab边的电流从a流向b,用表示,cd边的电流从c流向d,用⊙表示.根据左手定则可以判断出,ab边受力的方向是从右向左,而cd边受力的方向是从左向右。这样,在电枢上就产生了反时针方向的转矩,因此电枢就将沿着反时针方向转动起来。当电枢转到使线圈的ab边从N极下面进入S极,而cd边从S极下面进入N极时,与线圈a端联接的换向片1跟电刷B接触,而与线圈d端联接的换向片2跟电刷A接触,如图7—5(b)所示。这样,线圈内的电流方向变为从d流向c,再从b流向a,从而保持在N极下面的导体中的电流方向不变。因此转矩的方向也不改变,电枢仍然按照原来的反时针方向继续旋转。由此可以看出,换向片和电刷在直流电机中起着改换电枢线圈中电流方向的作用.直流电机是最常见和成本最低的小型电机,并且广泛用于各种应用.无刷直流电机宣称能提供更高可靠性以及更低噪声和成本,然而到目前为止,它却只能在磁盘或计算机风扇等少数量产应用中取代传统直流电机。在某些应用里,无刷直流电机有多项优点胜过传统电刷电机,例如它以电子组件和传感器取代电刷,不但延长电机寿命和减少维护成本,而且也没有电刷产生的噪音。直流电机的特性使它成为调速系统最容易使用的电机。2.2电路设计整体思路整体原理图如图2-9图2-6整体思路原理图3.系统控制算法设计与实现3.1模糊控制的原理3。1。1模糊控制的基本原理模糊控制是以模糊集合论、模糊语言变量和模糊逻辑推理为基础的一种计算机数字控制。该系统的被控对象是直流电动机,被控参数是直流电动机电流值,单片机模糊速度控制器,控制器根据系统给定角速度和直流电动机角速度偏差值及电动机角速度偏差值的变化率,利用模糊控制算法,求出控制系统的控制输出量μk(数字量),经D/A变换器转变为控制模拟量以控制直流电动机电流.它的基本原理见图3-1,可概括为以下四个步骤:a.根据传感器采样值,计算出变化量和变化率作为系统的输入量。b。将输入变量的精确值变为模糊量。c.根据输入变量(模糊量)及模糊控制规则,按模糊推理合成规则计算模糊量。d.由上述得到的控制量计算精确的控制量.通常使用的变量形式用N(Negabive),P(Positive),L(Large),S(Small),0(Zero)等组合来表示.图3—1模糊控制的基本原理3.1。2模糊控制器设计的基本方法模糊控制器的设计基本方法为:a。确定模糊控制器的输入变量与输出变量.b.设计模糊控制器的控制规则。c.模糊化与非模糊化的方法.d。模糊控制器的输入变量和输出变量的论域并确定模糊控制器的参数。e.模糊控制算法的应用程序。f.选择模糊控制算法的采样时间.模糊规则的设计一般包括:选择描述输入输出变量的词集,定义一个模糊变量的模糊子集及建立模糊控制器的控制规则.输入输出变量的词集一般为{NL,NM,NS,NO,PO,PS,PM,PL}。定义模糊变量的模糊子集就是要确定模糊子集函数的形状。一般用正态分布.在精确度要求不很高时,可采用梯形分布。控制规则可用条件语句描述,即ifAandBthenC等,然后建立控制规则表。模糊化就是把精确量转为模糊量,可采用公式:Y=12[x(a+b)/2](b—a),精确量实际变化范围为[a,b]。模糊控制的输出是一个模糊量,它不能直接控制被控对象,需要将其转为精确量。此过程亦称清晰化、判决.方法有三:a。取最大隶属度法.该法简单易行,但利用信息少.b.中位法。c.平均判决法,该法利用信息多,但计算量大。3.2本设计模糊控制算法的设计思想3。2.1确定模糊控制器的输入和输出量模糊控制器采用目前广泛使用的二维模糊控制器。确定模糊变量为:ﻫ
A:e—直流电动机转子角速度给定值和实际值的偏差,ﻫ
B:de—直流电动机转子角速度给定值和实际值的偏差的变化量,ﻫ
C:u—直流电动机电流值.ﻫ
ﻫ3。2.2精确量的模糊化取直流电动机转子角速度给定值和实际值的偏差e、直流电动机转子角速度给定值和实际值的偏差的变化量de作为控制器的输入信息,二者皆可用模糊语言变量表示为:PB、PM、PS、ZE、NS、NM、NB.模糊化是对模糊控制器的输入变量求取相应语言值的隶属度.模糊变量词集:选择e的词集为{NB,NM,NS,ZE,PS,PM,PB}选择de的词集为{NB,NM,NS,ZE,PS,PM,PB}选择u的词集为{NB,NM,NS,ZE,PS,PM,PB}a。采样角速度值模糊子集的隶属函数输入值e论域划分为11档,令e={-150,-120,-90,-60,-30,0,30,60,90,120,150}采角速度偏差范围为-150-—150(rad/min).通过统计可得模糊变量e的赋值表如表3—1e-150-120-90—60—300306090120150PB00000000。10。40.71PM000000.10.40.710.70。4PS0000.10.40.710.70.40。10ZE000.10.40.710.70.40.100NS00。10.40.710.70.40。1000NM0.40.710.70.40.100000NB10.70.40。10000000表3—2模糊变量e赋值表b。偏差变化量模糊子集的隶属函数设角速度偏差变化量论域划分为11档,令de={-30,—24,-18,-12,-6,0,6,12,18,24,30}。通过统计可得模糊变量C的赋值表如表3-2所示.de—30-24-18-12-60612182430PB00000000.10。40。71PM000000。10.40.710。70。4PS0000.10。40。710.70。40。10ZE000.10。40。710。70.40。100NS00.10。40。710.70。40.1000NM0.40.710.70。40.100000NB10.70.40。10000000
表3-3模糊变量de的赋值表c。输出量u的隶属函数设输出量化论域为11档,令u={-100,—80,—60,-40,—20,0,20,40,60,80,100},通过统计,输出变量U的赋值表如表3—3所示。u—100-80-60-40-20020406080100PB00000000.10。40.71PM000000.10。40.710。70.4PS0000.10.40.710.70。40.10ZE000.10.40.710。70。40.100NS00.10.40.710.70.40。1000NM0.40。710。70。40.100000NB10。70.40。10000000表3—4输出变量u赋值表3.2。3模糊控制规则模糊控制规则”部分的任务是:利用前面“模糊化"部分得到的输入e和de的模糊集E和De,按照模糊推理语句(规则或经验)求出输出模糊集U.模糊控制规则由下列推理语言构成ife=NBandde=PBthenu=ZEife=PSandde=PMthenu=PB。.。实际上它们规定了输入变量e和de的各种状态下输出变量e的对应值,体现了人的控制经验.共有35条规则,把这些规则列成表,称作控制规则表,如表3-4.ddueNBNMNSZEPSPMPBNBNBNBNBNMNMNSZENMNBNBNBNMNSZEPSNSNBNMNMNSZEPSPMZENBNSNSZEPSPMPBPSNMNSZEPSPMPBPBPMNSNEPSPMPBPBPBPBZEPSPNPMPBPBPBﻫ表3-5模糊控制规则表3.2。4模糊判决根据控制规则,可以求出每一条规则的模糊关糸Ri,进而求得总的模糊关糸R。对于给定的e和de的值,通过合成推理规则可求出对应的u.再经过模糊判决可得执行量。由前述可知计算R的工作量较大,且是重复性运算。因此,可以事先进行运算。在工程上常用的方法是,根据模糊量化、模糊决策表,存入计算机。根据模糊决策表可直接由输入对应到输出.在进行控制时,计算机根据采样和变换得来的e和de值接查表得出控制量u。模糊决策表要在糸统调试时反复修改后才能达到实用的目的.从模糊决策去查到的是输出精确量。把此精确量加到被控对象的输入,实现对被控对象的控制.eeμde—150—120-90-60-300306090120150-301008010010060602020000-248080808060602020000—1810080100806060000000-1280808080808000-40-40-40—6100801008060200—40-60—60-6001008010060200—20—60—100-80-10066060604000-60-80-100-80—1001240404000-20-80-80-80-80—801800000—20—60-80—100-80-10024000-20—20-60-60—80-80-80—8030000-20-20-60—60-100-100-80—100表3—6模糊控制决策表4.系统软件设计与实现硬件平台结构一旦确定,大的功能框架即形成。软件在硬件平台上构筑,完成各部分的协调。系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大.因此,软件是本系统的灵魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。同时,对软件进行全面测试也是检验错误排除故障的重要手段。4.1软件主程序系统以中断方式以角速度传感器对角速度进行采样并进行显示,同时计算出角速度变化量,从面得到两个模糊控制输入量,然后通过查表程序查根据前人经验得到的模糊决策表,最后得到控制输出量(u)进而实现对直流电动机电流控制的功能。主程序流程图如图4-1.开始开始定时器初始化允许定时器中断开系统中断采样时间到?采样角速度值值查模糊决策表输出控制量偏差变化量控制直流电动机显示角速度显示电流图4-1主程序流程图8051模糊控制算法子程序:#include”reg52。h"ﻫ//--—-————--—-------—---—-———----———-——--—--—---—-——---------——---—--—-———---—ﻫ//定义差距输入常量ﻫ#defineGAP_ZERO
0x00ﻫ#defineGAP_VSMALL
0x01ﻫ#defineGAP_SMALL
0x02ﻫ#defineGAP_MEDIUM
0x03
#defineGAP_BIG
0x04ﻫ//定义控制输出常量
#defineTURN_ZERO
0x80ﻫ#defineTURN_VSMALL
0x81ﻫ#defineTURN_SMALL
0x82
#defineTURN_MEDIUM
0x83
#defineTURN_BIG
0x84ﻫ//-——--------——定义常量—--—-——---————----—---——-——--—------—--——--—-—-—---—-----———-ﻫ#defineMU_MAX0XFF
//模糊度的最大值为0XFF代表面1ﻫ#defineRULE_TOT10
//规则数个数
#defineMF_TOT5
//成员函数的个数ﻫ#defineIO_NUM0x07ﻫ#defineLABEL_NUM0x70ﻫ#defineDEFAULT_VALUE0x00ﻫ//—--—-—-----—-—--定义数据库—----—----——-—---------—--—-——---—————-—----ﻫunsignedcharcodeoutput_memf[MF_TOT]={0,15,35,60,102};//OUTPUTTURNINGNUMBER:
//ZERO,VSMALL,SMALL,MEDIUM,BIGﻫunsignedcharcodeinput_memf[MF_TOT][4]={ﻫ//输入功能函数以点斜式方式存储。第一维成员函数标号第二维是点斜式数据ﻫ//距离功能函数
{0x00,0x00,0x00,0x0d},//VSLOWﻫ{0x00,0x0d,0x14,0x0d},//SLOWﻫ{0x1e,0x0d,0x32,0x0d},//MEDIUMﻫ{0x3C,0x0d,0x50,0x0d},//FASTﻫ{0x50,0x09,0x6e,0x00}
//VFASTﻫ
};ﻫ//--——-—-—--—定义模糊系统规则——-—-—-——--—-—-—--—————-——----—-—-——-—-—--—-——--——ﻫunsignedcharcoderules[RULE_TOT]={ﻫ//if.。.
then..。ﻫGAP_ZERO,TURN_ZERO,ﻫGAP_VSMALL,TURN_VSMALL,
GAP_SMALL,TURN_SMALL,ﻫGAP_MEDIUM,TURN_MEDIUM,
GAP_BIG,TURN_BIGﻫ
};
//—-—-—--——-—定义各变量—-—--——-—-----———-—--——-—--—---—-—---—-——--—--——------—ﻫunsignedcharoutputs[MF_TOT],fuzzy_out;
//模糊输出mu值ﻫ//—-—---—--—-子程序函数头申明--——-----—---————-———-——-—-—----—-----—--—-——---—--——-
voidfuzzy_engine(uchar);
ucharcompute_memval(uchar,uchar);
voiddefuzzify(void);ﻫ/***************************************************************************************************************/ﻫucharcompute_memval(ucharinput,ucharlabel)ﻫ
{ﻫ
intdatatemp;ﻫ
if(input〈input_memf[label][0])ﻫ
{
//如果输入不在曲线下u值为0ﻫ
return0;ﻫ
}
else
{ﻫ
if(input<input_memf[label][2])ﻫ
{
temp=input;
//用点斜式计算muﻫ
temp-=input_memf[label][0];ﻫ
if(!input_memf[label][1])ﻫ
{ﻫ
temp=MU_MAX;ﻫ
}
elseﻫ
{
temp*=input_memf[label][1];ﻫ
}ﻫ
if(temp〈0x100)ﻫ
{
//如果结果不超过1ﻫ
returntemp;
//返回计算结果ﻫ
}ﻫ
elseﻫ
{
returnMU_MAX;
//确保mu值在范围内
}ﻫ
}ﻫ
else
{
//输入落在第二条斜线上ﻫ
temp=input;
//用点斜式方法计算mu
temp-=input_memf[label][2];ﻫ
temp*=input_memf[label][3];
temp=MU_MAX—temp;ﻫ
if(temp〈0)ﻫ
{
//确保结果不小于0ﻫ
return0;
}ﻫ
elseﻫ
{
returntemp;
//mu为正–返回结果ﻫ
}ﻫ
}
}ﻫ
return0;
}ﻫ/*******************************************************************************ﻫFunction:defuzzifyﻫDescription:计算模糊输出的重心并调用函数把它ﻫ转换成可被系统使用的输出量ﻫParameters:无.ﻫReturns:无.ﻫSideEffects:outputs[][]数组被清零.
*******************************************************************************/
voiddefuzzify(void)
{ﻫ
unsignedlongnumerator,denominator;ﻫ
unsignedcharj;ﻫ
numerator=0;
//恢复总数值ﻫ
denominator=0;ﻫ
for(j=0;j<MF_TOT;j++)ﻫ
{
//计算总和值ﻫ
numerator+=(outputs[j]*output_memf[j]);ﻫ
denominator+=outputs[j];ﻫ
outputs[j]=0;//清零输出作为参考使用
}
if(denominator)ﻫ
{
//确保分母是0的情况不发生
fuzzy_out=numerator/denominator;//确定COG
}ﻫ
elseﻫ
{
fuzzy_out=DEFAULT_VALUE;//没有规则被触发ﻫ
}ﻫ
}ﻫ
}ﻫ/*******************************************************************************
Function:fuzzy_engine
Description:实施规则基中的规则ﻫParameters:无ﻫReturns:无。
SideEffects:无
********************************************************************************/
unsignedcharbdataclause_val;
//保存当前的分支进行快速访问
sbitclause_type=clause_val^7;
//表示分支是否是条件分支或者是结果分支ﻫvoidfuzzy_engine(ucharinput)ﻫ
{ﻫ
bitthen;
//当正在分析结果时置位ﻫ
unsignedcharif_val,
//保存当前规则中条件分支中的值ﻫ
clause,
//规则基中当前的分支ﻫ
mu,
//保存当前分支中的值ﻫ
label=0;
//被条件使用的成员函数ﻫ
then=0;
//设第一个分支是条件分支ﻫ
if_val=MU_MAX;
//maxoutmuforthefirstruleﻫ
for(clause=0;clause〈RULE_TOT;clause++)ﻫ
{
//遍历每条规则
clause_val=rules[clause];
//读入当前的分支ﻫ
if(!clause_type)ﻫ
{
//当前的分支是不是条件分支ﻫ
if(then)
{
//是否正在分析结果...ﻫ
then=0;
if_val=MU_MAX;
//复位muﻫ
}
mu=compute_memval(input,label);
//得到条件分支的值
if_val=mu;ﻫ
label++;
}ﻫ
elseﻫ
{
//当前分支是结果ﻫ
then=1;
//置位标志位,如果当前规则的mu比参考的值要大,保存这个值作为新的模糊输出ﻫ
if(outputs[clause_val&0x07]〈if_val)ﻫ
{ﻫ
outputs[clause_val&0x07]=if_val;ﻫ
}ﻫ
}ﻫ
}ﻫ
defuzzify();//用COG方法计算模糊输出和反模糊输出ﻫ4.2软件主要子程序4。2。1霍尔元件角速度采样及显示子程序该程序主要功能是使用霍尔元件和七段数码管对角速度进行采样和显示,程序流程图如图4-2。开始开始初始化传感器跳过读序列号号延时初始化读取角速度并显示跳过读序列号启动速度转换跳过序列号图4—2霍尔元件采样显示流程图霍尔元件测角速度:/*VIICC.H*/#pragmadbcdsmall#include<intrins.h〉ﻫ#include<reg52.h〉
#defineNOPnop();nop();nop();nop()
#defineSDAP1^7ﻫ#defineSCLP1^6ﻫ
voidsta();ﻫvoidcack();ﻫvoidstop();ﻫvoidmnack();ﻫvoidmack();ﻫvoidwrbyt(ucharshu);ﻫvoidwrnbyta(ucharslaw,uchargg[],ucharn);ﻫvoidwrnbyt(ucharslaw,ucharff[],ucharnumber);ﻫucharrdbyt();ﻫvoidrdnbyt(ucharslar,ucharqq[],ucharnumber);ﻫ源程序由9个函数组成,程序清单如下:
voidsta()/*启动I2C总线*/ﻫ{ﻫSDA=1;ﻫSCL=1;ﻫNOP;ﻫSDA=0;ﻫNOP;
SCL=0;ﻫ}
ﻫvoidstop()/*停止I2C总线ﻫ*/ﻫ{ﻫSDA=0;
SCL=1;ﻫNOP;SDA=1;ﻫNOP;
SCL=0;ﻫ}ﻫﻫvoidmack()/*发送应答位*/ﻫ{ﻫSDA=0;ﻫSCL=1;ﻫNOP;ﻫSCL=0;
SDA=1;ﻫ}
ﻫvoidmnack()/*发送非应答位*/
{
SDA=1;ﻫSCL=1;
NOP;
SCL=0;ﻫSDA=0;
}
ﻫvoidcack()/*应答位检查*/
{
SDA=1;ﻫSCL=1;ﻫF0=0;ﻫif(SDA==1)
F0=1;ﻫSCL=0;ﻫnop();ﻫ}ﻫ/*向虚拟I2C总线上发送1个数据字节*/ﻫvoidwrbyt(ucharshu)
{
uchari;ﻫfor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024权登记与保护服务合同2篇
- 绿化养护合同协议书
- 《条件概率独立性》课件
- 年度大型设备安装与维修分包合同
- 装饰工程清工承包合同范本版
- 《建筑与家具发展史》课件
- 《屋面找平层施工》课件
- 2024版工程设计与咨询服务合同
- 个人租房合同下载标准版可打印
- 铝矿交易履约保证合同2024
- 2024年世界职业院校技能大赛中职组“婴幼儿保育组”赛项考试题库-上(单选题)
- 栏杆喷漆合同范例
- 踝关节不稳的康复治疗
- 产学研合同模板
- 2024-2030年中国云安全服务行业深度调查及投资模式分析报告
- 建筑工程施工现场安全管理处罚规定
- 安徽省合肥市2024年七年级上学期期中数学试卷【附答案】
- 4.1陆地水体间的相互关系课件高中地理人教版(2019)选择性必修一
- 国开学习网《幼儿园课程与活动设计》期末大作业答案(第3套)
- DB11T 854-2023 占道作业交通安全设施设置技术要求
- 浙教版2024-2025学年七年级数学上册第四章 代数式 单元测试(附答案)
评论
0/150
提交评论