第章单片机常用算法设计课件

上传人:痛*** 文档编号:247367549 上传时间:2024-10-18 格式:PPT 页数:54 大小:380.50KB
返回 下载 相关 举报
第章单片机常用算法设计课件_第1页
第1页 / 共54页
第章单片机常用算法设计课件_第2页
第2页 / 共54页
第章单片机常用算法设计课件_第3页
第3页 / 共54页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,7,章,单片机常用算法设计,7.1,单片机滤波算法的设计,7.2,信号处理的,FFT,变换,7.3 SPWM,正弦逆变算法的设计,7.4 PID,控制算法,7.5 51,单片机,PID,算法程序,7.6,模糊控制算法,7.1,单片机滤波算法的设计,电路的滤波分为,模拟滤波,与,数字滤波,。其中数字滤波器具有,精度高、高可靠性和高稳定性,的特点,因此被广泛应用。用数字滤波算法克服随机误差主要有如下,优点,:,数字滤波由软件程序实现,不需要硬件,因此,不存在阻抗匹配的问题,;,对于多路信号输入通道,可以共用一个软件“滤波器”,降低仪表的设计成本,;,只要改变滤波器程序或元算参数,就能方便的改变滤波特性。,下面我们介绍几种主要的数字滤波法:,A.,限幅滤波法,对于,随机干扰,限幅滤波是一种有效的方法;,基本方法,:比较相邻,n,和,n-1,时刻的两个采样值,y(n),和,y(n 1),,根据经验确定两次采样允许的最大偏差。如果两次采样值的差值超过最大偏差范围,认为发生可随机干扰,并认为后一次采样值,y(n),为非法值,应予删除,删除,y(n),后,可用,y(n 1),代替,y(n),;若未超过所允许的最大偏差范围,则认为本次采样值有效。,下面是,限幅滤波程序,:,(A,值可根据实际情况调整,,value,为有效值,new_value,为当前采样值滤波程序返回有效的实际值,),#define A 10,char value;,char filter(),char new_value;,new_value=get_ad();,if(new_value-value A)|(value-new_value A)return value;,return new_value;,B.,中位值滤波法,中位值滤波法能有效克服,偶然因素,引起的波动或,采样不稳定,引起的误码等脉冲干扰;,对温度 液位等,缓慢变化,的被测参数用此法能收到良好的滤波效果,但是对于流量压力等快速变化的参数一般不宜采用中位值滤波法;,基本方法,:对某一被测参数连续采样,n,次,(,一般,n,取奇数,),然后再把采样值按大小排列,取中间值为本次采样值。,#define N 11,char filter(),char value_bufN,,,count,i,j,temp;,for(count=0;countN;count+),value_bufcount=get_ad();delay();,for(j=0;jN-1;j+),for(i=0;ivalue_bufi+1),temp=value_bufi;value_bufi=value_bufi+1;value_bufi+1=temp;,return value_buf(N-1)/2;,下面是,中位值滤波程序,:,C.,算术平均滤波法,算术平均滤波法适用于对,一般的具有随机干扰的信号,进行滤波。这种信号的特点是信号本身在某一数值范围附近上下波动,如,测量流量、液位,;,基本方法,:按输入的,N,个采样数据,寻找这样一个,Y,使得,Y,与各个采样值之间的偏差的平方和最小。,编写算术平均滤波法程序时严格注意,:,一,.,为了加快数据测量的速度,可采用先测量数据,存放在存储器中,测完,N,点后,再对,N,个数据进行平均值计算,;,二,.,选取适当的数据格式,也就是说采用定点数还是采用浮点数。其程序如下所示:,#define N 12,char filter(),int sum=0,,,count;,for(count=0;countN;count+),sum+=get_ad();delay();,return(char)(sum/N);,D.,递推平均滤波法,基本方法,:采用队列作为测量数据存储器,设队列的长度为,N,每进行一次测量,把测量结果放于队尾,而扔掉原来队首的一个数据,这样在队列中始终就有,N,个“最新”的数据。当计算平均值时,只要把队列中的,N,个数据进行算数平均,就可得到新的算数平均值。这样每进行一次测量,就可得到一个新的算术平均值。,#define N 12,char value_bufN,,,i=0;,char filter(),char count;int sum=0;,value_bufi+=get_ad();,if(i=N)i=0;,for(count=0;countN;count+),sum=value_bufcount;,return(char)(sum/N);,程序如下:,E.,一阶滞后滤波法,优点,:对周期性干扰具有良好的抑制作用,适用于波动频率较高的场合;,缺点,:相位滞后,灵敏度低,.,滞后程度取决于,a,值大小,.,不能消除滤波频率高于采样频率的,1/2,的干扰信号。程序如下:,#define a 50,char value;,char filter(),char new_value;,new_value=get_ad();,return(100-a)*value+a*new_value;,7.2,信号处理的,FFT,变换,快速傅里叶变换,(Fast Fourier Transfonn,,,FFT),是为了减少离散傅里叶变换,(Discrete Fourier Transform,,,DFT),计算次数的一种快速有效的算法。它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。,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,。其程序片段如下所示:,#include#include#include,typedef struct double r;double i;my_complex;,/,检查,a,是否为,2,的整数次方数,#define NOT2POW(a)(a)-1)&(a)|(a)=1;if(j=i)yi=xj;yj=xi;/,用变址后的,y,向量进行计算,for(i=0;iex;i+)t=1i;for(j=0;jlen;j+=t1)for(k=0;kt;k+),ti=-MYPI*k/t;rr=cos(ti);ri=sin(ti);tr=yj+k+t.r;ti=yj+k+t.i;yr=rr*tr-ri*ti;yi=rr*ti+ri*tr;tr=yj+k.r;ti=yj+k.i;,yj+k.r=tr+yr;yj+k.i=ti+yi;,yj+k+t.r=tr-yr;yj+k+t.i=ti-yi;return y;,/,以下为测试,int main()int i,DATA_LEN;my_complex*x,*y;printf(,基二,FFT,测试,n,输入生成序列长度,:);scanf(%d,printf(,处理前,.n,实部,tt,虚部,n);,for(i=0;iDATA_LEN;i+)printf(%lft%lfn,xi.r,xi.i);,y=fft(x,DATA_LEN);if(!y)printf(,序列长度不为,2,的整数次方,!n);return 0;,printf(,处理后,.n,实部,tt,虚部,n);for(i=0;iDATA_LEN;i+)printf(%lft%lfn,yi.r,yi.i);free(y);free(x);,return 0;,7.3 SPWM,正弦逆变算法的设计,PWM,的全称是,Pulse Width Modulation,(脉冲宽度调制),它是通过改变输出方波的占空比来改变等效的输出电压,广泛地用于电动机调速和阀门控制;,SPWM,是在,PWM,的基础上改变了调制脉冲方式,脉冲宽度时间占空比按正弦规率排列,这样输出波形经过适当的滤波可以做到正弦波输出,它广泛地用于直流交流逆变器等;,SPWM,理论基础,:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。,实现,SPWM,法的几种方案:,A.,等面积法,该方案是用同样数量,等幅而不等宽,的矩形脉冲序列代替正弦波,然后计算各脉冲的宽度和间隔,并把这些数据存于微机中,通过查表的方式生成,PWM,信号控制开关器件的通断,以达到预期的目的;,优点:,可准确计算出各开关器件的通断时刻,所得的波形很接近正弦波;,缺点:,计算繁琐,数据占用内存大,不能实时控制。,用面积法实现,SPWM,正弦波逆变换的程序片段:,void CalcSpwmWithArea(float32 a/*,调制比,*/,Uint16 w_Hz/*,调制频率,*/,Uint32 z_Hz/*,载波频率,*/),/Uint16 tmp_PR;/T1,周期值,volatile Uint16 i,n,*p;,float32 m,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+;,B.,硬件调制法,方案原理:,把所希望的波形作为调制信号,把接受调制的信号作为载波,通过对载波的调制得到所期望的,PWM,波形,.,用等腰三角波作为载波,当调制信号波为正弦波时,所得到的就是,SPWM,波形;,优点:,实现方法简单,可以解决等面积法计算繁琐的缺点;,缺点:,模拟电路结构复杂,难以实现精确的控制。,C.,自然采样法,方案原理:,以正弦波为调制波,等腰三角波为载波进行比较,在两个波形的自然交点时刻控制开关器件的通断;,优点:,所得,SPWM,波形最接近正弦波;,缺点:,脉宽表达式是一个超越方程,计算繁琐,难以实时控制。,D.,规则采样法,方案原理:,用三角波对正弦波进行采样得到阶梯波,再以阶梯波与三角波的交点时刻控制开关器件的通断,从而实现,SPWM,法;按照三角波在其顶点或底点的位置不同又分为,对称规则采样,和,非对称规则采样,;,优点:,计算简单,便于在线实时运算,其中非对称规则采样法因阶数多而更接近正弦;,缺点:,直流电压利用率较低,线性控制范围较小。,用对称规则采样实现,SPWM,正弦波逆变换的程序片段:,void CalcSpwmWithSym(float32 a/*,调制比,*/,float32 w_Hz/*,调制频率,*/,float32 z_Hz/*,载波频率,*/),Uint16 tmp_PR;/T1,周期值,volatile Uint16 i,n,*p;,float32 m;,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;i(Uint16)m;i+),n=tmp_PR*(0.5-0.5*a*sin(i+0.75)*2*PI/m);,*p=n;p+;,用非对称规则采样实现,SPWM,正弦波逆变换的程序片段:,void CalcSpwmWithImSym(float32 a
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!