如何利用FPGA生成SPWM调制信号

如何利用FPGA生成SPWM调制信号

稍微说一下原理

SPWM即正弦波宽度脉冲调制
脉冲宽度随着sin函数发生变化。
冲量等效原理
冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同;冲量即窄脉冲的积分面积,所说的效果基本相同是指环节的输出波形基本相同。如果把各输入波形用傅里叶变换分析,则其低频段非常接近,仅在高频略有差异。
如下图,上下电压的分为14小段,每段的面积积分应是一致的,这样通过惯性环节时就会得到相同的输出:
如何利用FPGA生成SPWM调制信号
双极性的的SPWM信号
本次是通过三角波和正弦波幅值大小进行对比,在下图中:三角波大于正弦波时,SPWM信号为0,反之,为1,产生了不规则占空比的下面的SPWM波形。

①三角波频率f1和正弦波频率f2的比值N为载波比,N需要大一点
②要保证三角波的峰峰值A1大于正弦波的峰峰值A2
如何利用FPGA生成SPWM调制信号
原理性的具体可以参考:
[1]https://wenku.baidu.com/view/99d488ea7275a417866fb84ae45c3b3566ecddf8.html?fr=search-4
[2]https://wenku.baidu.com/view/94564f1d24c52cc58bd63186bceb19e8b8f6ecf1.html

1.用matlab生成三角波和正弦波的coe文件

1.创建matlab文件写代码:
clc;
close all;
clear;
%%triangle wave
k=1/50;
t0=0:1:24;
t1=25:1:49;
a0=kt0;
a1=k
t1;
t2=50:1:99;
a2=1-k*(t2-50);
a=[a1,a2,a0];
t=[t0,t1,t2];
y0=round(a1024);
plot (y0)
hold on
%%sine wave
t3=0:1:999;
A=0.25
sin(2pit3/1000)+0.5;
y1=round(A*1024);
plot(y1)
%%
l1=length(t);%三角波的长度
l2=length(t3);%正弦波的序列长度

%%生成文件三角波coe文件
fid1=fopen(‘triwave.coe’,‘w+’);
fprintf(fid1,‘memory_initialization_radix = 16;\n’);
fprintf(fid1,‘memory_initialization_vector =\n’);
for i=1:l1-1
fprintf(fid1,’%x’,y0(i));
fprintf(fid1,’,\n’);
end
fprintf(fid1,’%x’,y0(l1));
fprintf(fid1,’;’);
fclose(fid1);

%%生成正弦波coe文件
fid1=fopen(‘sinwave.coe’,‘w+’);
fprintf(fid1,‘memory_initialization_radix = 16;\n’);
fprintf(fid1,‘memory_initialization_vector =\n’);
for i=1:l2-1
fprintf(fid1,’%x’,y1(i));
fprintf(fid1,’,\n’);
end
fprintf(fid1,’%x’,y1(l2));
fprintf(fid1,’;’);
fclose(fid1);

2.找不到生成的文件,一般是路径的问题。检查你的路径没问题的话,会出现以下文件。
如何利用FPGA生成SPWM调制信号
这些文件作为fpga导入rom ip核的coe文件。

2.未完待续