资讯详情

全国大学生电子设计竞赛(二)--电源常用技术与算法

常用的电源技术和算法

    • 1 有效的检波技术
      • 1.1 均值检波技术
      • 1.2 峰值检波技术
      • 1.3 均方根值检波技术
    • 2 高精度采样技术
      • 2.1 AD的选择
        • 2.1.1 A/D转换器的性能指标
        • 2.1.2 A/D转换器的选择
        • 2.1.3 A/D使用转换器的注意事项
      • 2.2 采样电路的设计
        • 2.2.1 采样直流电压
        • 2.2.2 采样交流电压
    • 3 SPWM波调制技术
      • 3.1 调制单极性正弦脉宽
      • 3.2 双极正弦脉宽调制
      • 3.3 调制三相正弦脉宽
      • 3.4 调制正弦脉宽(SPWM)生成控制信号
        • 3.4.1 模拟控制模式
        • 3.4.2 数字控制模式
    • 4 PID算法
      • 4.1 PID控制系统简介
      • 4.2 PID参数控制效果分析
      • 4.3 通俗易懂的理解PID
      • 4.4 数字PID控制的实现
        • 4.4.1 位置式PID控制算法
        • 4.4.2 增量式PID控制算法
    • 5 数字滤波算法
      • 5.1 限幅滤波
      • 5.2 中值滤波
      • 5.3 算术平均滤波
      • 5.4 推平均滤波器
      • 5.5 中值平均滤波
      • 5.6 推动中值平均滤波

1 有效的检波技术

1.1 均值检波技术

??在工业上,我们常用的检波技术主要有三种波技术、峰值检波技术和均方根值检波技术。其中,平均检波法主要用于交流直流转换电路,其主要实现方法是半波或全波整流交流信号,然后整流输出脉动直流信号积分得到相对温和的直流信号,最后根据半波整流平均值或全波整流平均值与有效值的关系计算测量信号的有效值。图2.一是典型的均值检波电路图: 图2.1  均值检波电路

??图2.1为用于,图中二极管D1和D二极管构成半波整流电路D不需要转换电路本身来保持被测电路电流的连续性。二极管用于测量电压信号时D2可以省略。当输入处于正半周时,二极管D1导通,向电容C充电,微安表得到电容平滑滤波后的直流电,当输入为负半周时,电流从D二极管流过D截止日期,电容电荷通过微安表内阻放电,电容电压下降。

??电容器两端的电压波形如图2所示.2.流过微安表的电流波形及图2.2.电压波形相同。可以看出,只要输入交流电流范围不变,流过电流表的波形就非常接近直线。。因此,均值检波电路更适用于振幅值相对稳定或变化缓慢、频率较高的交流电测量。

??峰值检波是脉动直流信号的峰值,用充电电容保持整流输出,获得相对温和的直流信号。 ??电容充放电电路通常用作平均值电路。由于输出为整流平均值,电容充放电时间常数相等。由图2.可以看出,电容器充放电时间的常数取决于微安表的内阻。充电时,微安表内阻越大,电容器越大,流过微安表的电流越小,电容器充电电流越大,充电速度越快;放电时,微安表内阻越大,电容器越大,放电速度越慢。为了使充放电速度相同,只有当微安表内阻与电容器符合特定关系时,才能使充放电速度相同。

??对于数字采样仪器,图中的微安表可以用采样电阻代替。一般来说,在转换之前,电流信号将转换为电压信号。电压半波整流的平均检波电路如图2所示.3所示。 ??但上图中存在一些问题: ??① 由于二极管压降,当测量电压较小时,二极管压降的影响不容忽视。 ??② 这是电阻电容串联电路,而不是严格的平均电路。 ??因此,图2.3.电路无法实现严格的整流平均值。我们可以用基于精密整流的绝对值电路代替变容器二极管半波整流电路来解决第一个问题。.4是一个实用的均值检波电路,只要在图中删除C1.全波精密整流电路在A2在反相加法器上增加积分电容,将其变成反相加法和积分电路。R3=2R4。

1.2 峰值检波技术

??峰值检波法构建的交流直流转换电路对交流信号进行半波或全波整流,然后利用充电电容保持整流输出的脉动直流信号峰值,获得较温和的直流信号,,被测信号的有效值可以通过使用被测信号的峰值与有效值之间的关系来计算。 ??。因此, ??有趣的是,峰值检波最简单的电路模型可以采用与交流电压检波电路相同的模型,如图2所示.5所示: ??但事实上,峰值检波和平均检波还是有很多区别的,它们最大的区别在于: ??① ,窄脉冲测试的峰值检波电路要求电容在短时间内快速充电至峰值。放电时间相对较长,否则输出波形不够光滑。对于正负对称、振幅相对稳定的交流电,只要放电速度远低于充电速度,即使充电速度较慢,输出也可以非常接近峰值。 ??② ,否则,到的不是整流平均值,平均检波电路适用于测量正负对称和相对稳定的交流电。 ??类似于平均检波,当测量电压较小时,需要消除二极管压降引起的误差。我们还改进了电路,得到了图2.6所示电路: ??我是红色当Vi大于Vo时,A1输出正电源电压,变容器二极管D1截止,D2.电容C快速充电Vi。 ??我是红色当Vi小于Vo时,A1输出负电源电压,变容器二极管D1导通,D2截止日期,电容C通过电阻Rc缓慢放电。

1.3 均方根值检波技术

??均方根值检波技术可以通过硬件方法或软件算法实现。如果需要硬件,可以使用专用的真实有效值转换芯片。常用的真实有效值转换芯片AD536、AD637、LTC1966、LTC1967、LTC1968等。其用法可参考芯片datasheet,这里不再重复。让我们详细讨论软件算法的实现。 ??。有两点需要特别注意: ??① 对于高频信号,最好选择采样率足够高的信号AD而且主频足够高FPGA处理,否则,计算出的有效值误差会很大。 ??② 采样时,最好根据周期的整数倍进行采样和数据处理。如果数据处理不是根据整数周期进行处理,则得到的值将是一个跳动数字。 流程图如下: ??接下来,我们以FPGA以算法为例,详细介绍了如何实现有效值的计算。 ??首先,搭建一个DDS具体代码如下:

module dds_add (  input clk,rst_n,
 input [31:0]data_rate_square,
 output reg[31:0]outdata_square
);
reg [31:0]add_rate_san;
reg [31:0]add_rate_sin;
reg [31:0]add_rate_square;
always @(posedge clk or negedge rst_n) 
 if(!rst_n)begin 
	 add_rate_square<=32'd0;
 end 
 else begin 
	 add_rate_square<=add_rate_square+data_rate_square; 
 end
always @(posedge clk or negedge rst_n)
 if(!rst_n)begin 
	 outdata_square<=32'd0;
end 
 else begin
	 outdata_square<=add_rate_square;
 end 
endmodule

  这个时钟产生模块实际就相当于一个分频器,对输入的时钟信号进行分频,其中data_rate_square是和输入信号频率有关的一个量,此模块的作用就是产生一个和输入信号周期整数倍同步的一个时钟信号,以保证每次进行数据累加处理时,单个周期内的数据量是一定的。   接下来,我们用时钟信号驱动周期平方平均模块,模块内部具体实现如下:

module sample
(
  input clk,rst_n,
  input [13:0]data3,
  output reg [47:0] 
  add_data 
);
reg [13:0] rdata;
reg [47:0] radd_data;
reg [2:0] i;
reg [9:0] cnt;
always @(posedge clk or negedge rst_n) 
 if(!rst_n) begin 
	 add_data<=48'd0;
	 rdata<=14'd0; 
	 i<=3'd0; 
	 cnt<=10'd200;
 end 
 else  
 case(i) 
	 3'd0: begin i<=i+1'd1;rdata<=data3; end
	 3'd1: begin if(rdata[13]) rdata<=~rdata;i<=i+1'd1; end 
	 3'd2: begin if(cnt) begin radd_data<=radd_data+rdata*rdata;cnt<=cnt-1'd1;
           end i<=i+1'd1; 
           end 
     3'd3: begin i<=3'd0;if(!cnt) begin  add_data<=radd_data;cnt<=10'd200;
           radd_data<=48'd0 ;
           end 
           end 
 endcase 
 endmodule

  代码很明了,就是对输入的信号进行平方累加,这里不再多说。最后,我们将以上模块输出的累加值进行平均和开根号:

module EFFECT_Cal
    (
	input clk,rst_n,
	input [47:0]EV_IN,
	output [13:0]EV_OUT
    );
wire [47:0]AVE_EVIN = EV_IN/200;
wire [31:0]SQ_OUT;
sqrt sqrt_inst 
    (
    .radical ( AVE_EVIN ),
    .q ( SQ_OUT ),
    .remainder ( remainder_sig )
    );
assign EV_OUT = SQ_OUT;
endmodule

  模块最终输出就是要求的有效值,经实测,用TLC3578采样,每个周期采样两百个点进行运算,最终得到的有效值精度可以到小数点后第三位,满足绝大部分应用场景。   综上所述,。三种方法各有优劣,应根据实际场景来选择最合适的方案。

2 高精度采样技术

  采样对于电源设计来说,是极其重要的一部分,采样精度往往决定了整个系统最终输出的精度,性能以及稳定性,因此,我们在设计系统的采样部分时,应尽可能地高标准。要想实现高精度采样,有两点最重要,第一是AD的选择,第二则是采样电路以及滤波算法的选择。

2.1 AD的选择

  根据A/D转换器的转换原理可以把A/D转换器分为两大类:直接型A/D和间接型A/D。   直接型A/D将输入的模拟电压通过比较直接转换为数字量。而间接型A/D转换器,模拟电压先被转换为一种中间变量(像时间、频率、脉冲等),然后再把中间量转换成数字量。   直接型A/D中应用较为广泛的主要有逐次逼近式A/D转换器、流水线A/D转换器;间接型A/D转换器中应用较为广泛的主要有双积分A/D转换器和V/F变换A/D转换器。   这节主要介绍一下A/D的性能指标以及应用。

2.1.1 A/D转换器的性能指标

  在选择A/D转换器的时候,要根据需要选择性能指标合适的A/D转换器,这就需要我们对A/D的性能指标有一定的了解。      分辨率表示输出数字量变化一个数字量,输入的模拟电压的变化量,转换器的分辨率定义为满刻度电压与2的n次方的比值,其中n代表A/D转换器位数。      转换速率是指A/D转换器完成一次数据转换所需要的时间。不同的A/D的转换时间是不一样的,根据实际需要转换速率合适的A/D。      量化误差是由于A/D转换器的有限分辨率而引起的误差。量化误差是指量化结果和被量化模拟量的差值,显然量化级数越多,量化的相对误差越小。分辨率高的A/D具有较小的量化误差。      非线性度是指转换器实际的转换曲线与理想转换曲线的偏移,也可以称为线性度。      偏移误差是指输入信号为零时,输出信号不为零的值,也叫做零值误差。偏移误差通常是由A/D转换器内部的放大器或比较器输入的失调电压或电流引起的。在使用A/D转换器前,要先将偏移误差降到最低,有的A/D转换器有零点调节的功能。      A/D转换器一般都有规定的输入电压范围,使用过程中尽量不要超出范围,因为这样会造成对A/D的永久损坏。

2.1.2 A/D转换器的选择

  对于品种繁多、性能各异的A/D转换器,在设计数据采集系统时要按照一下几点要求进行选择。      A/D转换器的位数的确定与整个测量控制系统所要测量控制的范围和精度有关。A/D转换器的位数至少要比总精度要求的最低分辨率高一位。虽然分辨率与转换精度是不同的概念,但是没有基本的分辨率就谈不上转换精度。但是,选的太高也没有实际意义,而且会增加系统的成本。      A/D的转换速率从s级到ns级都有,实际应用中根据系统需要选择合适的转换速率。像积分型的A/D转换速率就比较慢,一般用于对温度、压力、流量等缓变参量的测量和控制。逐次比较型A/D转换器属于中速转换器,常用于单片机控制系统、音频采集等。FLASHA/D转换器属于高速转换器,适用于雷达、数字传输、瞬态记录等实时要求高的测量系统。      早期设计的集成A/D转换器需要±15V的工作电源,现在的A/D转换器大多可以在5V~12V范围内工作。基准电压是A/D转换准确的保证,有的A/D带有内部基准比较方便,对于要外接基准的A/D转换器,一定要保证基准电压幅度稳定、准确。必要时使用基准电压芯片。      A/D转换器根据用途不一,输入电压范围各异,选择A/D前一定要注意输入电压的范围,超范围的电压输入可能会导致A/D转换器的永久损坏。

2.1.3 A/D转换器的使用注意事项

  A/D转换器的启动一般需要外部控制启动转换信号,一般由CPU提供。A/D转换器的启动转换信号一般分为两种:脉冲控制启动和电平控制启动。对于电平控制类A/D转换器,电平应在转换的全过程中保持不变,否则会中止转换。   在正常使用中,A/D转换芯片可能会电流突然增大、突然发热,这是可控硅现象,是所有CMOS集成电路在使用中都可能发生的现象。出现这种情况以后,要切断电源,然后重新打开,又会回复正常工作。为防止这种现象发生可采取一下措施:   (1)   (2)。为防止窄脉冲窜入,应;   (3)在A/D转换芯片的电源端,可在出现可控硅现象时有效地限定电流,保护芯片。   另外现在使用的A/D中一般都自带采样保持电路,不需要外面再外接采样保持电路。

2.2 采样电路的设计

  说完了AD的选择,我们就来聊聊采样电路的设计。在电源系统的设计中,AD的采样管脚直接采样的一般都是电压信号,如果需要采样电流信号,我们可以先将电流信号转化为电压信号之后再进行采样,而电压采样一般也分为两种:直流电压采样和交流电压采样,接下来我们来分别讨论这两种采样的电路设计。

2.2.1 直流电压采样

  最简单,最直接的采样方法:判断采样电压的峰值是否在AD的采样范围之内,如果信号范围和AD采样范围相吻合,滤波后直接送入AD采样口进行采样,这里滤波可以用。如果信号的范围超出了AD的采样范围,可以用。如果分压之后信号幅值太小,可以。典型的电路图如图2.8所示:

2.2.2 交流电压采样

  在我国,交流电的频率一般都是50Hz,对交流电压的采样,我们可以电流互感器将强交流信号转化为较弱的交流信号,以方便后级采样。这里对交流互感器的选择也是有讲究的,普通的线圈互感器只能互感交流信号,如果采样信号是交流加上直流偏置的话,直流信号会被直接过滤掉,从而破坏信号的完整性,为了同时采集直流信号和交流信号,我们可以。然后,我们可以利用高速AD,以周期为单位采集信号的瞬时值并保存在数组里,为之后求信号有效值值或者峰值做准备,这里以求信号有效值为例,我们可以用FPGA搭建一个DDS信号发生器或者买一个DDS发生器模块,使得DDS信号发生器的周期和交流信号的周期成整数倍关系,然后根据DDS信号的节拍去对采样信号进行均方根运算,最后将结果除以那个整数,即可求得较为精确的交流电压有效值。典型采样电路如图2.8所示:

3 SPWM波调制技术

  逆变电路的控制方式主要是采用SPWM(正弦脉宽调制技术),DUK-AL20控制开关管的通断来实现正弦调制,,如图2.10所示,由于此脉冲序列的面积分布满足正弦规率,根据面积等效原理,将这个脉冲序列输出至负载时,将使负载得到相当接近正弦的输出电压和电流。

  由于采用该方式输出的电压波形很接近正弦波,所以电压中的谐波成分较少,同时也。通过改变SPWM脉冲的宽度可以改变输出电压的幅值,调节电路的调制周期则可以改变输出电压的频率,方便对负载进行控制。

3.1 单极性正弦脉宽调制

  是以一个宽度正弦规律变化的正弦脉冲序列对应交流输出波形的正半周,再以一个宽度按正弦规率变换的负脉冲序列对应交流输出波形的负半周,这两个脉冲序列交替作用,控制开关器件产生近似于正弦波的输出电压波形。   是将正弦波性的调制波与三角波形的载波进行比较,通过比较正弦波形各点的瞬时值确定该点对应的脉冲宽度。单极性正弦脉宽调制使用的三角波是单极性的,在正弦调制波为正半周时三角载波是正极性的;在正弦波为负半周时三角波载波为负极性。如图2.12所示。

3.2 双极性正弦脉宽调制

  双极性正弦脉宽调制是以一个宽度按正弦规率变化的正负双向脉冲序列对应交流输出波形的整个周期,通过正向脉冲与负向脉冲宽度的差产生出按正弦规率变换的正半周波和负半周波。   双极性正弦脉宽调制使用的三角波是双极性的,其波形的形式如图2.13,通过正弦调制波与三角波比较,当正弦调制波值大于三角波时,输出正脉冲;而当正弦调制波的值小于三角载波时,输出负脉冲。如此得到的脉冲序列是正负交替的双向脉冲序列。

3.3 三相正弦脉宽调制

  三相正弦脉宽调制可以使用三个相角彼此相差120°的单相调制电路来合成,但是这样会使调制电路结构比较复杂。较简单的方法是采用一个双极性的三角载波对三相正弦调制波进行调制,其调制的波形如图2.14。   调制过程中,双极性三角载波为三个正弦调制波共用,分别进行比较后获取脉宽调制信号,方式与双极性正弦脉宽调制方法相同。从而得到三个双向的脉冲序列,分别对应A、B、C三相,使用此三个脉冲序列控制逆变电路的A、B、C三相开关元件,可以将直流电压逆变为正弦波的三相交流输出电压。   。采用双极性正弦脉宽调制,H桥上同一相的上、下两个桥臂导通与截止都是互补的,为防止上下两个桥臂直通而造成的短路,需要在给一个桥臂施加关断信号后延迟一段时间,从而在波形中引入了死区时间,死区将会给输出的SPWM波形带来高次谐波。

3.4 正弦脉宽调制(SPWM)控制信号的生成

  早期的SPWM采用模拟控制方式来实现,通过信号发生器产生所需的信号,由比较器进行信号之间的比较,随着数字技术和微处理器在SPWM逆变技术中的应用,采用一定算法产生SPWM的数字控制方式越来越广泛。

3.4.1 模拟控制方式

  波形比较法,其基本的方法是由正弦信号发生器件产生正弦调制波,由三角波信号发发生器产生的三角载波,将正弦调制波与三角载波比较,通过比较器的判断而产生出对应的脉冲信号序列,对逆变电路进行控制从而得到所需的交流电压。

3.4.2 数字控制方式

  其原理就是按面积等效原理构成与正弦波等效的一系列等幅但宽度按正弦规律变化的矩形脉冲。等效面积法适用于单极性控制,算法中计算的是正弦波形到横轴间的面积,这与模拟控制方式中的单极性正弦脉冲调制的方式一致。   自然采样法在算法上仿真模拟控制方式的双极性正弦脉冲调制,通过计算正弦调制波与三角载波的交点位置,确定调制的脉冲宽度。而规则采样法是对自然采样法的简化,其几何关系如图2.16。   规则采样法适用于双极性控制,因为算法中采用的三角载波是双极性。等效面积法和规则采样法都是数字控制的算法,可以由微处理器实时计算SPWM脉冲的宽度和位置,实现对逆变电路的控制,也可以事先计算好每个脉冲中心位置和脉冲宽度存入微处理器中,以查表的方式实现对逆变电路的控制。   此外除了使用微处理器生成SPWM以外,

4 PID算法

  在连续时间控制系统中,PID控制器应用非常广泛,其设计技术成熟,长期以来形成了典型的结构,参数整定方便,结构更改灵活。由于计算机程序的灵活性,数字PID控制比连续PID控制更为优越。

4.1 PID控制系统简介

  连续时间PID控制系统如图3-37所示,D(s)完成PID控制规律,称为PID控制器。   PID控制组合了比例控制、积分控制和微分控制这三种基本控制规律,通过改变调节器参数来实现控制,其基本输入输出关系为:   实际应用中,可以根据受控对象的特性和控制的性能要求,灵活采用比例(P)控制器、比例+积分(PI)控制器、比例+积分+微分(PID)控制器三种不同控制组合。

4.2 PID参数控制效果分析

  PID控制的三基本参数为KP、KI、KD,分别对应比例,积分,微分三个模,经实验测试,可总结出这三项参数的实际控制作用为:   :按比例反映系统的偏差,系统一旦出现偏差,比例调节立即进行。比例调节是主要的控制部分,但过大的比例会使系统的稳定性下降。增大KP,系统的反应变灵敏、速度加快、稳态误差减小,但振荡次数也会加多、调节时间加长。   :消除系统静态(稳态)误差 ,提高系统的控制精度。积分调节会使系统的稳定性下降,动态响应变慢,超调加大。积分控制一般不单独作用,而是与P或者PD结合作用。   :反映系统偏差信号的变化率,可以预见偏差的变化趋势,产生超前控制作用,使偏差在未形成前已被消除。因此,微分控制可以提高系统的动态跟踪性能,减小超调量,但对噪声干扰有放大作用,过强的微分调节会使系统剧烈震荡,对抗干扰不利。   常规的PID控制系统中,减少超调和提高控制精度难以两全其美。主要是积分作用有缺陷造成的。如果减少积分作用,静差不易消除,有扰动时,消除误差速度变慢;而加强积分作用时又难以避免超调,这也是常规PID控制中经常遇到的难题。

4.3 通俗易懂的理解PID

  P就是比例的意思。它的作用最明显,原理也最简单。   需要控制的量,比如水温,有它现在的『当前值』,也有我们期望的『目标值』。 当两者差距不大时,就让加热器“轻轻地”加热一下。要是因为某些原因,温度降低了很多,就让加热器“稍稍用力”加热一下。要是当前温度比目标温度低得多,就让加热器“开足马力”加热,尽快让水温到达目标附近。   这就是P的作用,跟开关控制方法相比,是不是“温文尔雅”了很多.实际写程序时,就让偏差(目标减去当前)与调节装置的“调节力度”,建立一个一次函数的关系,就可以实现最基本的“比例”控制了~   KP越大,调节作用越激进,KP调小会让调节作用更保守。   要是你正在制作一个平衡车,有了KP的作用,你会发现,平衡车在平衡角度附近来回“狂抖”,比较难稳住。如果已经到了这一步——恭喜你!离成功只差一小步了~


  D的作用更好理解一些,所以先说说D,最后说i。   刚才我们有了P的作用。你不难发现,只有P好像不能让平衡车站起来,水温也控制得晃晃悠悠,好像整个系统不是特别稳定,总是在“抖动”。   你心里设想一个弹簧:现在在平衡位置上。拉它一下,然后松手。这时它会震荡起来。因为阻力很小,它可能会震荡很长时间,才会重新停在平衡位置。   请想象一下:要是把上图所示的系统浸没在水里,同样拉它一下 :这种情况下,重新停在平衡位置的时间就短得多。我们需要一个控制作用,让被控制的物理量的“变化速度”趋于0,即类似于“阻尼”的作用。   因为,当比较接近目标时,P的控制作用就比较小了。越接近目标,P的作用越温柔。有很多内在的或者外部的因素,使控制量发生小范围的摆动。D的作用就是让物理量的速度趋于0,只要什么时候,这个量具有了速度,D就向相反的方向用力,尽力刹住这个变化。kD参数越大,向速度相反方向刹车的力道就越强。   如果是平衡小车,加上P和D两种控制作用,如果参数调节合适,它应该可以站起来了~欢呼吧   等等,PID三兄弟好想还有一位。看起来PD就可以让物理量保持稳定,那还要I干嘛?


  因为我们忽视了一种重要的情况:   还是以热水为例。假如有个人把我们的加热装置带到了非常冷的地方,开始烧水了。需要烧到50℃。   在P的作用下,水温慢慢升高。直到升高到45℃时,他发现了一个不好的事情:天气太冷,水散热的速度,和P控制的加热的速度相等了。这可怎么办?   P兄这样想:我和目标已经很近了,只需要轻轻加热就可以了。   D兄这样想:加热和散热相等,温度没有波动,我好像不用调整什么。   于是,水温永远地停留在45℃,永远到不了50℃。   作为一个人,根据常识,我们知道,应该进一步增加加热的功率。可是增加多少该如何计算呢?   前辈科学家们想到的方法是真的巧妙。设置一个积分量。只要偏差存在,就不断地对偏差进行积分(累加),并反应在调节力度上。这样一来,即使45℃和50℃相差不太大,但是随着时间的推移,只要没达到目标温度,这个积分量就不断增加。   系统就会慢慢意识到:还没有到达目标温度,该增加功率啦!到了目标温度后,假设温度没有波动,积分值就不会再变动。这时,加热功率仍然等于散热功率。但是,温度是稳稳的50℃。   Ki的值越大,积分时乘的系数就越大,积分效果越明显。所以,I的作用就是,减小静态情况下的误差,让受控物理量尽可能接近目标值。   I在使用时还有个问题:需要设定积分限制。防止在刚开始加热时,就把积分量积得太大,难以控制。


4.4 数字PID控制的实现

  数字PID控制是通过算法程序实现PID控制的。数字控制系统大多数是采样数据控制系统,进入系统的连续时间信号必须经过采样和量化后转换为数字量,方能进行相应的计算和处理,不论是积分还是微分,只能用数值计算去逼近。当采样周期相当短时,用求和代替积分,用差商代替微商,将描述连续时间PID算法的微分方程变为描述离散时间PID算法的差分方程。数字PID控制通常有以下两种实现:

4.4.1 位置式PID控制算法

  图2.18为位置式PID控制算法的实现框图,根据此框图得到差分方程:   此式是数字PID算法的非递推形式,称全量算法,其中uo为控制量基值(n=0时的控制量);un为第n个采样时刻的控制量;Ts为采样周期。算法中为实现求和,必须存储系统偏差的全部值ei,得出的全量输出un是控制量的绝对数值,这种控制量确定了执行机构在控制系统中的位置(如阀门控制中,输出对应阀门的位置),因此将这种算法称为“位置算法”。

4.4.2 增量式PID控制算法

  当执行机构需要的不是控制量的绝对值,而是控制量的增量(例如驱动步进电动机)时,需要用PID的“增量算法”,其简化示意图如图2.19所示。   增量式PID算法的差分方程为   此时已看不出P、I、D作用的直接关系,只能体现各次误差量对控制作用的影响,但处理时只需要贮存最近的三个误差采样值en en-1 en-2 。

5 数字滤波算法

  说到滤波,大家第一反应可能就是各种或者是以各个不同型号的运算放大器为核心构建的有源滤波器,以上这些滤波器可以统称为,它们已经在电子行业的各个领域得到了广泛应用,但它们都有一个致命的缺点,那就是需要硬件电路作为支撑,费材料,费空间。随着计算机技术的发展,目前很多微型处理器已经具备很强大的运算能力了,我们可以利用CPU强大的计算运算功能,通过某种数值运算,达到改变输入信号中所含频率分量的相对比例、或滤除某些频率分量的目的,这种滤波方法我们称之为数字滤波。   数字滤波相对于硬件滤波来说,在某些方面有着独到的优势,,总之,数字滤波在业界的应用已经越来越广泛,熟练掌握一些基本的数字滤波技巧对于一名合格的电子工程师来说是非常有必要的。   数字滤波的方法有很多种,下面介绍常用的几种,不同的滤波方法应用的场合和环境也不用,应根据具体情况选择使用。为了直观体现出这几种滤波方法对不同噪声的滤波效果,我们人为生成了几段基本信号的组合,然后在它们的波形上叠加上不同的噪声,测试这些滤波方法在不同信号、不同噪声下的输出结果,实验数据如图2.22所示:   在这段长度为800点,最大值为65535的测试样本中,组合了以下几种情况:   ① 起始阶段是一段表达式近似为x的数据,用来模拟大多数系统从0开始启动的采样波形,该段信号受到了约为信号本身1/5强度的随机噪声的干扰,用以测试滤波函数对噪声的过滤程度。   ② 第二段是一段长度为200点的方波信号,其上叠加了幅度为信号本身1/10的毛刺噪声,测试函数对直流采样过程中毛刺的过滤效果以及对阶跃信号的响应速度。   ③ 第三段为一段均匀上升的斜坡信号,但是叠加了几个三角形的噪声信号,用来模拟一些高惯性系统受到脉冲冲击后产生的周期较长的干扰杂波。   ④ 第四段是一段混有信号本身1/10强度的随机噪声与1/4强度的毛刺噪声,模拟了平时在正弦逆变类题目中常常碰到的系统底噪与周期性开关噪声。   ⑤ 最后一段是直流信号上叠加了一个长周期的小幅正弦纹波,同时伴有一定的毛刺,用来模拟DC-DC类题目中常出现的输出伴纹波信号。

5.1 限幅滤波

  ,根据多次采集到的数据,如果当前采集值与前一次采集的数值相差一般维持在一定的偏差detaD内,则将每次采集到的数据和前一次的数据进行比较,如果他们的差的绝对值小于△D则本次采集到的数据有效,否则无效舍弃。   示例代码

#include <stdlib.h>
/*********************限幅滤波*********************** /* sampleValue:当前采样值 /* return 滤波输出值 /***************************************************/
#define AMPLIMIT 8192
int lastValue = -1;
unsigned int AmpLimitFilter(unsigned int sampleValue)
{ 
        
	if(-1 == lastValue)
	lastValue = sampleValue;
	//限幅判断
	if(abs(sampleValue - lastValue) > AMPLIMIT)
	{ 
        
		return lastValue;
	}
	else
	{ 
        
		lastValue = sampleValue;
		return 
		     sampleValue;
	}
}


 &emsp滤波效果:可以看到,那些幅值变化很大的毛刺基本都被滤除了。  &emsp适用性分析:  &emsp。能够克服偶然因素引入的脉冲干扰,也可以消除波形上的尖峰毛刺,但是不能抑制周期性的干扰,而且其完全削除大幅度的阶跃信号,容易造成控制失调,一般不适用于开关电源这类变化剧烈,需要迅速反馈的场景,适用于水温控制等变化缓慢,安全性高的应用。

5.2 中值滤波

  其基本滤波思路是将原来的采样间隔T进行细分,也就是在原来的采样间隔T内采样N次,然后把N次采样值按照大小排序,取中间值为本次采样值。   示例代码

/*********************中值滤波*********************** /* *sampleGet():采样函数指针,返回unsigned int类型 /* return 滤波输出值 /***************************************************/
#define MID_NUM 5
unsigned int MidFilter(unsigned int *sampleGet())
{ 
        
	unsigned char i;
	unsigned int value_buf[MID_NUM]={ 
        0};
	for (i=0;i < MID_NUM;i++)
	{ 
        
		value_buf[i] = sampleGet();
	}
	unsigned int mid;
	//冒泡排序
	for(i=0;i<MID_NUM;i++)
	{ 
        
		int j;
		for(j=i+1;j<MID_NUM;j++)
		{ 
        
			if(value_buf[i]>value_buf[j])
			{ 
        
				mid=value_buf[i];
				value_buf[i]=value_buf[j];
				value_buf[j]=mid;
			}
	    }
    }
	mid=value_buf[MID_NUM/2];
	return mid;
}

  滤波效果   可以看出,其滤波效果较限幅滤波较好,毛刺基本被滤除。   适用性分析   这种滤波方法,特别是对于像温度、液位等变化缓慢的被测参数有良好的滤波效果,但是对于流量、速度或者其他快速变化的信号参数则不适合使用这种方法。中值滤波法的程序设计要稍复杂一些,排序可以使用冒泡法或者选择排序法等,由于引入了排序算法,所以

5.3 算术平均滤波

  该方法也是先将原来设计要求的采样间隔T进行细分,在T内采样N次,但是对于采集进来的数据不是进行排序,而是进行算术平均,算术平均的结果作为本次采样值。N值的选取比较关键,N值较大者处理信号的平滑度会较高,但是灵敏度降低;相反,N值较小者处理信号的灵敏度提高,但是平滑度降低。   示例代码

/*********************均值滤波*********************** /* *sampleGet():采样函数指针,返回unsigned int类型 /* return 滤波输出值 /***************************************************/
#define AVG_NUM 5
unsigned int AvgFilter(unsigned int *sampleGet())
{ 
        
	unsigned char i;
	unsigned long int sum=0;
	for (i=0;i < AVG_NUM;i++)
	{ 
        
		sum += (unsigned int)sampleGet();
	}
	return (sum / AVG_NUM);
}

  滤波效果   适用性分析   这种滤波方法是适用于对具有随机干扰的信号进行处理,并且被处理的信号必须具有一个平均值,信号在这个平均值上下波动。该方法。对于毛刺信号,可以看到均值滤波将其分担到了周围的采样点上,不如中值滤波那样能够完全去除。但是

5.4 递推平均滤波

  递推平均滤波又称为滑动平均滤波,是将连续N个采样值设为一个先入先出的队列,队列的长度为N,每次采样得到的新数据加入队尾,并扔掉原队列的队首,然后对队列中的N个数据进行算术平均,获得的结果作为此次采样值。   示例代码

/*******************递推均值滤波********************* /* sampleQueue[SLIDE_AVG_NUM]:采样队列 /* sampleValue:当前采样值 /* return 滤波输出值 /***************************************************/
#define SLIDE_AVG_NUM 5
unsigned int sampleQueue[SLIDE_AVG_NUM] = { 
        0};
unsigned int SlideAvgFilter(unsigned int sampleValue)
{ 
        
	unsigned int i;
	unsigned long int sum=0;
	for(i = 0; i < SLIDE_AVG_NUM - 1; i ++) //刷新队列
	{ 
        
		sampleQueue[i] = sampleQueue[i + 1];
	}
	sampleQueue[i] = sampleValue;
	for (i=0;i < SLIDE_AVG_NUM;i++) //求和
	{ 
        
		sum += sample

标签: 电容式接近开关ki0209

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台