2013-06-23 26 views
1

所以我想模擬下圖所示的系統。我在Matlab中用ODE45模擬過,但由於某種原因,我用下面的代碼得到了一個奇怪的輸出。我不確定是否因爲我放置了if((Vin-Vd-Vc)/ Ll> = 0)的條件,這有助於防止任何電流在反向偏置時流向二極管的錯誤方向。Matlab中的ODE45麻煩與二極管模型

我試圖附上照片,但我的代表不夠高,真的是男性?,所以我必須描述它。

source -> Inductor(Ll) -> diode -> Capacitor -> ground 
           |->Inductor(Lline)->resistor(Rf) -> ground 

任何幫助表示讚賞!

function dy = ThreeLamp(t,y) 

I1 = y(1); 
I2 = y(2); 
Vc = y(3); 

Is = 1E-15;          % these are parameters for the diode 
n = 1.05; 
Vt = .025; 

D = 24;          % this number is from 0 to 50 
f = 100E3;          % this is the frequency of the input waveform 
Ll = 5E-7; 
Lline = 5.3E-6; 
C = 10E-6; 
Rf = 10; 
Vin = (465/2)*(6/266)*square(2*pi*f*t,D);  % Input voltage waveform 

if(Vin < 0)         
    Vin = 0;          % get rid of negative half cycle 
end 

%% 

Vd = n*Vt*log(I1/Is + 1)/log(10);    % This is the voltage across the diode 

if((Vin - Vd - Vc)/Ll >= 0)     % Is the diode conducting when forward biased? 
    dy(1) = (Vin - Vd - Vc)/Ll;     % Sounds good, what is the current? 
else 
    dy(1) = 0;         % force current to 0 when reversed biased 
end 
dy(2) = (Vc - I2*Rf)/Lline;      % KCL for second loop 
dy(3) = (I1 - I2)/C;       % Voltage on cap 

dy = dy';          % ODE45 likes output to be in columns 

end 

% [t, y] = ode45('ThreeLamp',[0 .001],[0 0 0 ]); 
+0

爲什麼輸出「奇怪」?你能指望什麼? – horchler

+0

我會嘗試一個僵硬的求解器,比如'ode15s'或'ode23t'。你也可以使用Simulink和Simscape嗎?如果是這樣,有一個電氣元件庫可以使您的系統建模變得更加容易:http://www.mathworks.co.uk/help/physmod/simscape/simscapeblocklist.html – am304

+0

'ode15s'給出了幾乎相同的結果。較小的容差似乎也沒有太大變化。 – horchler

回答

1

我最近有嘗試建模DCDC升壓轉換器的完全相同的問題。就像am304所說的那樣,一個僵硬的求解者可能是解決這個問題的方法。二極管開啓/關閉時的不連續性非常強烈,對於可變步長解算器來說非常難以提取。我發現一個固定步驟解算器對我的應用程序運行良好。

編輯

然而,隨着horchler,帶來了,沒有寬容收斂或其它數字安全網,所以你必須非常仔細地解釋你的輸出。使用非常小的步長和非常明智的輸出,當輸出具有預期的形狀時,往往會緩解這個問題。然而,當試圖解決一個僵硬的系統時,必須注意horchler的警告。我發現即使固定步驟方法失效,對解決方案的洞察力也值得付出努力。

編輯完

而且,你可能要檢查通過二極管的電流流動的方向爲好。我發現我會得到一個大的反向偏置電流流過二極管,這是不可能的!

我建立了一個電路模型here。這是一張圖片,這是正確的拓撲? HTH! pic

編輯

好了,現在我懂電路,我也許可以用導數函數,ThreeLamp幫助。如果二極管反向偏置,則通過電感的電流不能流過二極管。因此,二極管導通/不導通時電流的變化很大,以便在切斷電感器的同時切斷通過二極管的電流。我認爲這個問題在電感電流計算的第25行左右。

+0

小心使用固定步進求解器來處理剛性系統。他們樂於將系統中的難點融入其中,從而引入數值誤差。看起來他們在工作,因爲你沒有得到適應性方法拋出的警告和錯誤,但你可能會自欺欺人。如果系統真的很僵硬,那麼需要使用一個非常小的固定步長(也是有問題的),或者非常幸運並且通過離散化時間來最好地分離不連續性。或者可以使用事件檢測技術,但這些技術通常適用於可變步長方法。 – horchler

+0

@horchler,好點! – macduff

+0

如果你在電阻和電感之前移動二極管,那麼它就是正確的型號。是的,我會嘗試僵硬的解決方案,但是horchler指出它可能沒有什麼區別。 。 。我期望Vc是接近輸入波形均方根的直流等效電路,電流和電阻的電流約爲300mA。應該有一個短暫的地方,上限發生衝擊,但是通過迴路1的電流應該下降。 – user2368363