双极性SPWM波生成

本篇文章主要介绍用于逆变电路的双极性SPWM波生成。
SPWM波就是脉冲宽度按正弦规律变化和正弦波等效的PWM波形,用于控制逆变电路中开关器件的通断,使其输出的脉冲电压的面积与所希望输出的正弦波在相应区间内的面积相等,经滤波后可以得到正弦波输出(也就是交流电)。通过改变调制波的频率和幅值则可调节逆变电路输出电压的频率和幅值。

  • 1、SPWM波生成

    简单来说,spwm波就是以正弦波为调制波,三角波为载波调制生成的。接下来就介绍一下正弦波和三角波是怎么生成的吧。

  • 2、三角波生成

    三角波生成挺简单的,利用计数器递增就行了,在这里其实可以用三角波,也可以用锯齿波,但一般来说,用三角波效果应该会好很多。因为我写的代码是verilog,就直接把verilog代码贴出来吧。

module tri_rom
(
input clk,
input rst_n,
input [11:0]top,
output reg [11:0]tri_wave
);

reg [11:0]cnt;

always@(posedge clk or negedge rst_n)
begin 
	if(!rst_n)
		cnt<=12'd0;
	else 
	begin
		if(cnt<top)
			cnt<=cnt+12'd1;
		else
			cnt<=12'd0;
		if(cnt<(top/2))
			tri_wave<=cnt*2;
		else
			tri_wave<=(top-cnt)*2;
	end
end

endmodule

或者这个

module tri_rom(
input clk,
input [15:0] top,
output reg [15:0] tri_wave
);
reg [15:0] cnt=16'd0;
always@(posedge clk)
begin
if(cnt<top) 
   cnt<=cnt+1'd1;
else 
   cnt<=15'd0;
if(cnt<(top/2))
   tri_wave<=cnt*8;
else
   tri_wave<=(top-cnt)*8;
end
endmodule

也可以用波表来生成。

原理大家自己理解,挺简单的,不做过多描述

  • 3、正弦波生成

     正弦波的生成就是靠波表。先在matlab生成一个正弦波波表。
    

    然后在quatus中创建一个ROM
    在这里插入图片描述
    在这里插入图片描述
    把matlab中生成的正弦波表导入进来
    在这里插入图片描述
    ROM就设置好了,需要注意的是,ROM读取的位数和容量要和matlab生成的波表一致。

    在verilog中读取波表的频率可以自行控制,主要的方法是:假设我们波表中有1000个数,也就是说,一个周期的正弦波采样1000个数形成波表。现在用50KHz的时钟,以10为步进读取波表,那么显然需要读取1000/10=100次才能输出一个正弦波表。也就是说,我们需要50KHz/100=500Hz的频率输出一个波表,即输出正弦波的频率为500Hz。
    顺表提一下,为了精确的控制频率,这个步进10(也可以说是频率控制字)可以用定点数进行运算。
    再贴一下正弦波生成的代码

module sin(
input clk,
input rst_n,
input [10:0]KW,
output [10:0]out_sin
);

reg [20:0]phase;

always@(posedge clk or negedge rst_n)
begin 
	if(!rst_n)
		phase<=21'd0;
	else
		phase<=phase+KW;

end
wire [10:0]addr_sin=(phase[20:10]>11'd1024)?(phase[20:10]-11'd1024):phase[20:10];
 
sin_rom	rom_sin_inst
(
	.address ( addr_sin ),
	.clock ( clk ),
	.q ( out_sin )
);
endmodule
  • 4、生成SPWM波

    将三角波和正弦波进行比较就可以得到SPWM波。在逆变中,要考虑到调制度以及偏置的问题,如下图:
    在这里插入图片描述

  • 5、单极性SPWM波和双极性SPWM波的区别

    最后想说一下单极性和双极性的区别。主要就是单极性在峰值(±1)处的占空比最大,占空比变化规律是从小到大,再从大到小。单极性应该可以用余弦波代替正弦波生成(如果不是,希望指正!)
    在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值