前面我們基本把有感FOC介紹得差不多了,接下來我本打算進(jìn)入無感FOC控制的深入學(xué)習(xí),奈何導(dǎo)師項(xiàng)目項(xiàng)目太多太雜........................先把自己這段時間學(xué)的東西總結(jié)分享一下再說吧。查閱了很多無感FOC控制的相關(guān)資料,把基本原理和流程漸漸的了解了一下(以后有時間再詳細(xì)介紹了),發(fā)現(xiàn)很多環(huán)節(jié)都會用到”一階低通數(shù)字濾波器“(相電流濾波,反電勢濾波,角度、轉(zhuǎn)速濾波,校正因子濾波),雖然代碼里面只是一個簡單的公式,但為了控制系統(tǒng)的參數(shù)設(shè)計(jì),我還是淺淺的去探究了一下其基本原理,如有錯誤還望提出指正。
開局先直接給出公式:
式中:x(k)為當(dāng)前輸入,y(k-1)為上一次的輸出,y(k)為當(dāng)前計(jì)算的輸出;a為濾波系數(shù),取值范圍0~1,a取值越小,當(dāng)前輸入權(quán)重就越小,輸出波形越平滑,但響應(yīng)靈敏度降低;
如果只是套用公式寫代碼的話,看到這里就可以結(jié)束了,想要理解其中的原理,以及采樣頻率、截止頻率和參數(shù)的計(jì)算,那么請接著往下看。
01. 原理及公式推導(dǎo)
”一階低通數(shù)字濾波器“對應(yīng)的物理電路模型是”一階RC低通濾波電路“,電路如下圖所示。
電容的阻抗表示為1/jωC,對于上面電路,有輸入輸出電壓關(guān)系:
上式寫成傳遞函數(shù)形式:
,
在《自動控制原理》中稱為一階慣性環(huán)節(jié)。
由Y(s)=G(s).F(s)得到時域的微分方程:
使用一階后向差分法,對上面微分方程進(jìn)行離散化,有:
其中T為采樣周期,對上式進(jìn)行整理化簡可寫成:
令得到一般表達(dá)式:,a稱為濾波系數(shù)。
02. 截止頻率和參數(shù)計(jì)算
對于電路模型,有截止頻率(截止頻率定義為幅頻響應(yīng)曲線衰減 -3db,即為原來的1/sqrt(2)時的頻率,模電里面的基礎(chǔ)知識這里不細(xì)講)
可得是將常數(shù)
代入濾波系數(shù)a的表達(dá)式得:
式中f=1/T為采樣頻率。
在實(shí)際的應(yīng)用中,一般有采樣頻率遠(yuǎn)大于截止頻率,即有,故近似有,所以已知截止頻率和采樣頻率,我么就能夠計(jì)算濾波系數(shù)a的值了。
又會問:截止頻率和采樣頻率怎么確定呢?選取不同的值會對計(jì)算輸出有什么影響呢?下面為你簡單介紹一下。
03. 頻率的選擇
3.1采樣頻率的選擇
一般人為主觀選擇,在不影響其他功能性能的條件下,盡量越大越好。
先以我之前做的電機(jī)控制為例。在程序中,PWM定時器開啟中斷,在中斷服務(wù)函數(shù)中用ADC采集相電流,故采樣頻率就等于PWM定時器頻率,我在控制代碼中用的是20kHz,即采樣頻率f=20kHz。
3.2截止頻率的選擇
根據(jù)采樣對象信號的頻率選擇,一般稍大于被采樣信號的最大基波頻率就好。
還是以我做的電機(jī)控制為例。我用的永磁同步電機(jī)額定轉(zhuǎn)速為3000rpm,極對數(shù)為4,采樣對象為相電流。則在額定條件下,相電流的頻率為f_current=3000*4/60=200Hz,考慮到電機(jī)超負(fù)荷運(yùn)行,瞬時轉(zhuǎn)速可以大于3000,保留一定余量,我取截止頻率f_H=500Hz。如此計(jì)算得濾波系數(shù)。
在電機(jī)運(yùn)行前,對放大器進(jìn)行校準(zhǔn)時,只考慮直流偏置輸入,即被采樣的信號頻率趨近于0Hz,主要濾掉電路中的高頻干擾和噪聲,故可把截止頻率取得很小,我這里取f_H=5Hz,計(jì)算得濾波系數(shù)a=0.00157。
04頻率選擇對輸出的影響(附仿真分析)
在采樣頻率固定的情況下,截止頻率越大,濾波系數(shù)a的值越大,當(dāng)前輸入的權(quán)重就越大,計(jì)算的輸出和實(shí)際的輸出跟蹤效果更好,即動態(tài)響應(yīng)更好,幅值衰減的影響更小。
減小截止頻率,濾波系數(shù)a的值越小,當(dāng)前輸入的權(quán)重越小,故計(jì)算的輸出信號更平滑,對噪聲干擾和諧波的濾除效果更好,但是動態(tài)響應(yīng)變差,而且會產(chǎn)生一定程度的幅值衰減。
下面是matlab代碼和仿真結(jié)果分析:
仿真結(jié)果:
圖中,綠色為含有噪聲的采樣信號,藍(lán)色為標(biāo)準(zhǔn)的正弦信號,紅色為采樣信號經(jīng)過一階低通濾波器的計(jì)算輸出。
可以發(fā)現(xiàn),當(dāng)截止頻率較小時,輸出信號幅值衰減明顯,且存在一定滯后;隨著截止頻率的增大,對標(biāo)準(zhǔn)正弦信號的跟蹤效果越好;當(dāng)截止頻率過大時,幾乎能完全復(fù)現(xiàn)采樣信號,但是對噪聲的濾波效果變差。
下面再看一下對直流信號的測試
可以看出,隨著截止頻率的減小,計(jì)算輸出的信號越來越平滑,接近直流信號,但同時調(diào)節(jié)時間也增大,對應(yīng)我前面電機(jī)控制中,對放大器的校準(zhǔn)時間需要延長。在實(shí)際應(yīng)用中,對于直流信號的濾波,截止頻率一般取1~50Hz我覺得就好了(當(dāng)然也有可能其它情況我沒想到)。
最后附上matlab的仿真源代碼
代碼源程序:
交流信號部分:
f_basic=200;%原信號頻率為200Hz
w_basic=2*pi*f_basic;
f_H=1;%截止頻率500Hz
f_simple=20000;%采樣頻率20kHz
PointNumber = 100000;%坐標(biāo)點(diǎn)數(shù)量
x=0PointNumber-1;
Standard =2+sin(w_basic*x*0.0000005);%原始標(biāo)準(zhǔn)信號
noise = 0+0.1*randn(1,PointNumber);
AddNoise=Standard+noise;
a=2*pi*f_H/f_simple;
y_last=0;
y_now=0;
for i = 0PointNumber-1
x_now=AddNoise(i+1);
y_now=(1-a)*y_last+a*x_now;
output(i+1)=y_now;
y_last=y_now;
end
figure(1);
X=0PointNumber-1;
plot(X,AddNoise,'-.g');hold on;
plot(X,Standard,'-..b');hold on;
plot(X,output,'-..r');hold on;
legend('With noise','Standard','Output')
xlabel('time');
ylabel('value');
title('一階低通濾波器(fH=1Hz)');
f_basic=200;%原信號頻率為200Hz
w_basic=2*pi*f_basic;
f_H=5;%截止頻率500Hz
f_simple=20000;%采樣頻率20kHz
PointNumber = 100000;%坐標(biāo)點(diǎn)數(shù)量
x=0PointNumber-1;
Standard =2+sin(w_basic*x*0.0000005);%原始標(biāo)準(zhǔn)信號
noise = 0+0.1*randn(1,PointNumber);
AddNoise=Standard+noise;
a=2*pi*f_H/f_simple;
y_last=0;
y_now=0;
for i = 0PointNumber-1
x_now=AddNoise(i+1);
y_now=(1-a)*y_last+a*x_now;
output(i+1)=y_now;
y_last=y_now;
end
figure(2);
X=0PointNumber-1;
plot(X,AddNoise,'-.g');hold on;
plot(X,Standard,'-..b');hold on;
plot(X,output,'-..r');hold on;
legend('With noise','Standard','Output')
xlabel('time');
ylabel('value');
title('一階低通濾波器(fH=5Hz)');
f_basic=200;%原信號頻率為200Hz
w_basic=2*pi*f_basic;
f_H=50;%截止頻率500Hz
f_simple=20000;%采樣頻率20kHz
PointNumber = 100000;%坐標(biāo)點(diǎn)數(shù)量
x=0PointNumber-1;
Standard =2+sin(w_basic*x*0.0000005);%原始標(biāo)準(zhǔn)信號
noise = 0+0.1*randn(1,PointNumber);
AddNoise=Standard+noise;
a=2*pi*f_H/f_simple;
y_last=0;
y_now=0;
for i = 0PointNumber-1
x_now=AddNoise(i+1);
y_now=(1-a)*y_last+a*x_now;
output(i+1)=y_now;
y_last=y_now;
end
figure(3);
X=0PointNumber-1;
plot(X,AddNoise,'-.g');hold on;
plot(X,Standard,'-..b');hold on;
plot(X,output,'-..r');hold on;
legend('With noise','Standard','Output')
xlabel('time');
ylabel('value');
title('一階低通濾波器(fH=50Hz)');
f_basic=200;%原信號頻率為200Hz
w_basic=2*pi*f_basic;
f_H=500;%截止頻率500Hz
f_simple=20000;%采樣頻率20kHz
PointNumber = 100000;%坐標(biāo)點(diǎn)數(shù)量
x=0PointNumber-1;
Standard =2+sin(w_basic*x*0.0000005);%原始標(biāo)準(zhǔn)信號
noise = 0+0.1*randn(1,PointNumber);
AddNoise=Standard+noise;
a=2*pi*f_H/f_simple;
y_last=0;
y_now=0;
for i = 0PointNumber-1
x_now=AddNoise(i+1);
y_now=(1-a)*y_last+a*x_now;
output(i+1)=y_now;
y_last=y_now;
end
figure(4);
X=0PointNumber-1;
plot(X,AddNoise,'-.g');hold on;
plot(X,Standard,'-..b');hold on;
plot(X,output,'-..r');hold on;
legend('With noise','Standard','Output')
xlabel('time');
ylabel('value');
title('一階低通濾波器(fH=500Hz)');
直流信號部分:
f_basic=1;%原信號頻率為200Hz
w_basic=2*pi*f_basic;
f_H=500;%截止頻率500Hz
f_simple=20000;%采樣頻率20kHz
PointNumber = 100000;%坐標(biāo)點(diǎn)數(shù)量
x=0PointNumber-1;
Standard =2+0.05*sin(w_basic*x*0.00005);%原始標(biāo)準(zhǔn)信號
noise = 0+0.05*randn(1,PointNumber);
AddNoise=Standard+noise;
a=2*pi*f_H/f_simple;
y_last=0;
y_now=0;
for i = 0PointNumber-1
x_now=AddNoise(i+1);
y_now=(1-a)*y_last+a*x_now;
output(i+1)=y_now;
y_last=y_now;
end
figure(1);
X=0PointNumber-1;
plot(X,AddNoise,'-.g');hold on;
plot(X,output,'-..r');hold on;
xlabel('time');
ylabel('value');
title('一階低通濾波器(直流信號測試)');
f_H=1;%截止頻率500Hz
a=2*pi*f_H/f_simple;
y_last=0;
y_now=0;
for i = 0PointNumber-1
x_now=AddNoise(i+1);
y_now=(1-a)*y_last+a*x_now;
output(i+1)=y_now;
y_last=y_now;
end
plot(X,output,'-..c');hold on;
f_H=0.5;%截止頻率500Hz
a=2*pi*f_H/f_simple;
y_last=0;
y_now=0;
for i = 0PointNumber-1
x_now=AddNoise(i+1);
y_now=(1-a)*y_last+a*x_now;
output(i+1)=y_now;
y_last=y_now;
end
plot(X,output,'-..m');hold on;
f_H=0.2;%截止頻率500Hz
a=2*pi*f_H/f_simple;
y_last=0;
y_now=0;
for i = 0PointNumber-1
x_now=AddNoise(i+1);
y_now=(1-a)*y_last+a*x_now;
output(i+1)=y_now;
y_last=y_now;
end
plot(X,output,'-..k');hold on;
f_H=0.1;%截止頻率500Hz
a=2*pi*f_H/f_simple;
y_last=0;
y_now=0;
for i = 0PointNumber-1
x_now=AddNoise(i+1);
y_now=(1-a)*y_last+a*x_now;
output(i+1)=y_now;
y_last=y_now;
end
plot(X,output,'-..r');hold on;
plot(X,Standard,'-..b');hold on;
legend('With noise','Output-500Hz','Output-1Hz','Output-0.5Hz','Output-0.2Hz','Output-0.1Hz','Standard')
-
濾波器
+關(guān)注
關(guān)注
158文章
7594瀏覽量
176562 -
數(shù)字濾波器
+關(guān)注
關(guān)注
4文章
265瀏覽量
46909 -
FOC
+關(guān)注
關(guān)注
20文章
313瀏覽量
42459
原文標(biāo)題:“一階數(shù)字低通濾波器”原理推導(dǎo)(含仿真和代碼實(shí)現(xiàn))
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論