单片机常用算法设计详解PPT课件_第1页
单片机常用算法设计详解PPT课件_第2页
单片机常用算法设计详解PPT课件_第3页
单片机常用算法设计详解PPT课件_第4页
单片机常用算法设计详解PPT课件_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.,1,第7章单片机常用算法设计,7.1单片机滤波算法的设计7.2信号处理的FFT变换7.3SPWM正弦逆变算法的设计7.4PID控制算法7.551单片机PID算法程序7.6模糊控制算法,.,2,7.1单片机滤波算法的设计,电路的滤波分为模拟滤波与数字滤波。其中数字滤波器具有精度高、高可靠性和高稳定性的特点,因此被广泛应用。用数字滤波算法克服随机误差主要有如下优点:数字滤波由软件程序实现,不需要硬件,因此不存在阻抗匹配的问题;对于多路信号输入通道,可以共用一个软件“滤波器”,降低仪表的设计成本;只要改变滤波器程序或元算参数,就能方便的改变滤波特性。,.,3,下面我们介绍几种主要的数字滤波法:,A.限幅滤波法,对于随机干扰,限幅滤波是一种有效的方法;基本方法:比较相邻n和n-1时刻的两个采样值y(n)和y(n1),根据经验确定两次采样允许的最大偏差。如果两次采样值的差值超过最大偏差范围,认为发生可随机干扰,并认为后一次采样值y(n)为非法值,应予删除,删除y(n)后,可用y(n1)代替y(n);若未超过所允许的最大偏差范围,则认为本次采样值有效。,.,4,下面是限幅滤波程序:(A值可根据实际情况调整,value为有效值,new_value为当前采样值滤波程序返回有效的实际值),#defineA10charvalue;charfilter()charnew_value;new_value=get_ad();if(new_value-valueA)|(value-new_valueA)returnvalue;returnnew_value;,.,5,B.中位值滤波法,中位值滤波法能有效克服偶然因素引起的波动或采样不稳定引起的误码等脉冲干扰;对温度液位等缓慢变化的被测参数用此法能收到良好的滤波效果,但是对于流量压力等快速变化的参数一般不宜采用中位值滤波法;基本方法:对某一被测参数连续采样n次(一般n取奇数),然后再把采样值按大小排列,取中间值为本次采样值。,.,6,#defineN11charfilter()charvalue_bufN,count,i,j,temp;for(count=0;countvalue_bufi+1)temp=value_bufi;value_bufi=value_bufi+1;value_bufi+1=temp;returnvalue_buf(N-1)/2;,下面是中位值滤波程序:,.,7,C.算术平均滤波法,算术平均滤波法适用于对一般的具有随机干扰的信号进行滤波。这种信号的特点是信号本身在某一数值范围附近上下波动,如测量流量、液位;基本方法:按输入的N个采样数据,寻找这样一个Y,使得Y与各个采样值之间的偏差的平方和最小。,.,8,编写算术平均滤波法程序时严格注意:一.为了加快数据测量的速度,可采用先测量数据存放在存储器中,测完N点后,再对N个数据进行平均值计算;二.选取适当的数据格式,也就是说采用定点数还是采用浮点数。其程序如下所示:,#defineN12charfilter()intsum=0,count;for(count=0;countN;count+)sum+=get_ad();delay();return(char)(sum/N);,.,9,D.递推平均滤波法,基本方法:采用队列作为测量数据存储器,设队列的长度为N,每进行一次测量,把测量结果放于队尾,而扔掉原来队首的一个数据,这样在队列中始终就有N个“最新”的数据。当计算平均值时,只要把队列中的N个数据进行算数平均,就可得到新的算数平均值。这样每进行一次测量,就可得到一个新的算术平均值。,.,10,#defineN12charvalue_bufN,i=0;charfilter()charcount;intsum=0;value_bufi+=get_ad();if(i=N)i=0;for(count=0;countN;count+)sum=value_bufcount;return(char)(sum/N);,程序如下:,.,11,E.一阶滞后滤波法,优点:对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合;缺点:相位滞后,灵敏度低.滞后程度取决于a值大小.不能消除滤波频率高于采样频率的1/2的干扰信号。程序如下:,#definea50charvalue;charfilter()charnew_value;new_value=get_ad();return(100-a)*value+a*new_value;,.,12,7.2信号处理的FFT变换,快速傅里叶变换(FastFourierTransfonn,FFT)是为了减少离散傅里叶变换(DiscreteFourierTransform,DFT)计算次数的一种快速有效的算法。它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。,.,13,FFT变换算法的基本思想:利用WN的周期性和对称性,把一个N项序列(设N=2k,k为正整数),分为两个N/2项的子序列,每个N/2点DFT变换需要(N/2)2次运算,再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。这样变换以后,总的运算次数就变成N+2(N/2)2=N+N2/2。其程序片段如下所示:,.,14,#include#include#includetypedefstructdoubler;doublei;my_complex;/检查a是否为2的整数次方数#defineNOT2POW(a)(a)-1),.,15,if(NOT2POW(len)returnNULL;/如果失败,返回空指针for(;!(t,.,16,yj+k.r=tr+yr;yj+k.i=ti+yi;yj+k+t.r=tr-yr;yj+k+t.i=ti-yi;returny;/以下为测试intmain()inti,DATA_LEN;my_complex*x,*y;printf(基二FFT测试n输入生成序列长度:);scanf(%d,.,17,printf(处理后.n实部tt虚部n);for(i=0;iDATA_LEN;i+)printf(%lft%lfn,yi.r,yi.i);free(y);free(x);return0;,.,18,7.3SPWM正弦逆变算法的设计,PWM的全称是PulseWidthModulation(脉冲宽度调制),它是通过改变输出方波的占空比来改变等效的输出电压,广泛地用于电动机调速和阀门控制;SPWM是在PWM的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规率排列,这样输出波形经过适当的滤波可以做到正弦波输出,它广泛地用于直流交流逆变器等;SPWM理论基础:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。,.,19,实现SPWM法的几种方案:,A.等面积法,该方案是用同样数量等幅而不等宽的矩形脉冲序列代替正弦波,然后计算各脉冲的宽度和间隔,并把这些数据存于微机中,通过查表的方式生成PWM信号控制开关器件的通断,以达到预期的目的;优点:可准确计算出各开关器件的通断时刻,所得的波形很接近正弦波;缺点:计算繁琐,数据占用内存大,不能实时控制。,.,20,用面积法实现SPWM正弦波逆变换的程序片段:,voidCalcSpwmWithArea(float32a/*调制比*/,Uint16w_Hz/*调制频率*/,Uint32z_Hz/*载波频率*/)/Uint16tmp_PR;/T1周期值volatileUint16i,n,*p;float32m,n1,n2;m=z_Hz/w_Hz;/求出载波比g_SPWM_Table.SpwmSize=(Uint16)m;/tmp_PR=g_T1_Clk/(2*z_Hz);/计算出其周期值p=g_SPWM_Table.p_HeadTable;/得到数据表头指针n=m;m/=2;/除去一半计算半波n1=(float32)g_T1_Clk/(8.0*m*w_Hz);/计算首相n2=(float32)g_T2_Clk/(8.0*PI*w_Hz)*a;for(i=0;in;i+)*p=n1-n2*(cos(i*PI/m)-cos(i+1)*PI/m);p+;,.,21,B.硬件调制法,方案原理:把所希望的波形作为调制信号,把接受调制的信号作为载波,通过对载波的调制得到所期望的PWM波形.用等腰三角波作为载波,当调制信号波为正弦波时,所得到的就是SPWM波形;优点:实现方法简单,可以解决等面积法计算繁琐的缺点;缺点:模拟电路结构复杂,难以实现精确的控制。,.,22,C.自然采样法,方案原理:以正弦波为调制波,等腰三角波为载波进行比较,在两个波形的自然交点时刻控制开关器件的通断;优点:所得SPWM波形最接近正弦波;缺点:脉宽表达式是一个超越方程,计算繁琐,难以实时控制。,.,23,D.规则采样法,方案原理:用三角波对正弦波进行采样得到阶梯波,再以阶梯波与三角波的交点时刻控制开关器件的通断,从而实现SPWM法;按照三角波在其顶点或底点的位置不同又分为对称规则采样和非对称规则采样;优点:计算简单,便于在线实时运算,其中非对称规则采样法因阶数多而更接近正弦;缺点:直流电压利用率较低,线性控制范围较小。,.,24,用对称规则采样实现SPWM正弦波逆变换的程序片段:,voidCalcSpwmWithSym(float32a/*调制比*/,float32w_Hz/*调制频率*/,float32z_Hz/*载波频率*/)Uint16tmp_PR;/T1周期值volatileUint16i,n,*p;float32m;m=z_Hz/w_Hz;/求出载波比g_SPWM_Table.SpwmSize=(Uint16)m;tmp_PR=g_T1_Clk/(2*z_Hz);/计算出其周期值p=g_SPWM_Table.p_HeadTable;/得到数据表头指针for(i=0;iSumError+=Error;/积分dError=Error-pp-LastError;/当前微分pp-PrevError=pp-LastError;pp-LastError=Error;return(pp-Proportion*Error/比例项+pp-Integral*pp-SumError/积分项+pp-Derivative*dError);/微分项voidPIDInit(PID*pp)memset(pp,0,sizeof(PID);,.,46,doublesensor(void)return100.0;voidactuator(doublerDelta)voidmain(void)PIDsPID;doublerOut;doublerIn;PIDInit(,for(;)rIn=sensor();rOut=PIDCalc(,主程序:,.,47,二增量式PID控制算法,.,48,增量式PID控制算法公式为:,其中:,.,49,程序如下:,typedefstructPIDintSetPoint;/设定目标longSumError;/误差累计doubleProportion;/比例常数doubleIntegral;/积分常数doubleDerivative;/微分常数intLastError;/Error-1intPrevError;/Error-2PID;staticPIDsPID;staticPID*sptr=,.,50,/*PID参数初始化*/voidIncPIDInit(void)sptr-SumError=0;sptr-LastError=0;/Error-1sptr-PrevError=0;/Error-2sptr-Proportion=0;/比例常数sptr-Integral=0;/积分常数sptr-Derivative=0;/微分常数sptr-SetPoint=0;,.,51,/*增量式PID计算部分*/intIncPIDCalc(intNextPoint)registerintiError,iIncpid;/当前误差iError=sptr-SetPoint-NextPoint;/增量计算iIncpid=sptr-Proportion*iError/Ek项-sptr-Integral*sptr-LastError/Ek1项+sptr-Derivative*sptr-PrevError;/Ek2项sptr-PrevError=sptr-LastError;sptr-LastError=iError;/返回增量值return(iIncpid);,.,52,7.6模糊控制算法,模糊控制是采用由模糊数学语言描述的控制律(控制规则)来操纵系统工作的控制方式。模糊控制系统的结构组成和工作原理如下图,控制器的任务是根据系统输出的误差和误差变化情况来决定控制对象的输入量。,.,53,模糊控制系统具有以下特点:,简化系统设计的复杂性,适用于非线性、时变、模型不完全的系统;利用控制法则来描述系统变量间的关系;用语言式的模糊变量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论