参考Simulink编写锁相环程序,在数据处理中不需要运行sim函数调用Simulink,以此来提高数据处理的效率。
下面相关代码,此处未考虑0轴分量
function [ud_filt,uq_filt] = PLL(data,kp,ki)
%%kp = 1; %ki = 10; 锁相环参数
size_data = size(data);
Ts = ceil(1e10*(data(1,2) - data(1,1)))/1e10;%计算采样时间
time = 0:Ts:6-Ts;
ua = data(2,:);% 三相电流数据
ub = data(3,:);
uc = data(4,:);
wt(1) = 0;% 初始角度
for i=1:1:size_data(2)
[ud(i),uq(i)] = a3s_2r (ua(i),ub(i),uc(i),wt(i));%% abc-dq 坐标变换
time_for = time(1:i); %% 循环时间
if i==1
yq(i) = uq+uq*time_for; % 首次循环采用数值计算
yyq(i) = yq*time_for;
else
sys_PI = tf([kp ki],[1 0]);
yq = lsim(sys_PI,uq,time_for);%
sys_s = tf(1,[1 0]);
yyq = lsim(sys_s,yq,time_for);
end
wt(i+1) = mod(yyq(i),2*pi);% 循环角度
f(i) = yq(i)/2/50/pi;% 输出频率
end
%% 滤波环节
fc = 100;%截止频率
fs = 1/Ts;%采样频率
[b,a] = butter(6,fc/(fs/2));
% freqz(b,a)
ud_filt = filter(b,a,ud); %b为分子,a为分母 第三项为输入数据
uq_filt = filter(b,a,uq);
end
<

最低0.47元/天 解锁文章
1076

被折叠的 条评论
为什么被折叠?



