logo

ダイナミックシステムとしてのDC-DCバックコンバータ 📂動力学

ダイナミックシステムとしてのDC-DCバックコンバータ

モデル

上の回路図1の電圧VV電流 IIは以下のような非自律ノンスムースシステムで表される。これをDC-DCバックコンバータDC-DC Buck Converterと呼ぶ。

V˙=1RCV+1CII˙=VL+{0,if VVr(t)E/L,if V<Vr(t)Vr(t)=γ+η(tmodT) \begin{align*} \dot{V} =& - {{ 1 } \over { RC }} V + {{ 1 } \over { C }} I \\ \dot{I} =& - {{ V } \over { L }} + \begin{cases} 0 & , \text{if } V \ge V_{r} (t) \\ E / L & , \text{if } V < V_{r} (t) \end{cases} \\ V_{r} (t) =& \gamma + \eta \left( t \bmod T \right) \end{align*}

変数

  • V(t)V(t): tt時点の電圧を表す。
  • I(t)I(t): tt時点の電流を表す。
  • Vr(t)V_{r}(t): tt時点のTT周期のコントロールシグナル。このシグナルより電圧が低ければスイッチを開けてバッテリーを充電し、高ければスイッチを閉じて電流を供給する。

パラメータ

  • γ,η,T>0\gamma , \eta , T > 0: コントロールの設定に関連する定数。γ=11.75238V\gamma = 11.75238 Vが小さくなるほど低い電圧で電流が供給され、η=1309.524Vs1\eta = 1309.524Vs^{-1}が大きくなるほど高い電圧でバッテリーが充電される。T=400μsT = 400 \mu sが小さいほどスイッチングが頻繁に行われ、電圧をより均一に保つ。
  • C=47μFC = 47 \mu F: キャパシタンス。
  • E=53.500001E = 53.500001: バッテリー電圧。
  • L=20mHL = 20 mH: インダクタンス。
  • R=22ΩR = 22 \Omega: 抵抗。

パラメータのデフォルト値は、このポストで再現されるすべてのシミュレーションに使用された値であり、m=103m = 10^{-3}μ=106\mu = 10^{-6}である。ちなみに主要な参考文献(Bernardo)ではCC4.7μF4.7 \mu Fだったが、別の参考文献(Deane)ではC=47μFC = 47 \mu Fを使ったときにシミュレーションがうまく行かなかったため、CCを異なる設定にした。

説明

DC-DCバックコンバータ、つまりバックコンバータは、入力電圧よりも電圧を下げる目的のコンバータ2だが、実際にはこの’アイテム’についてはよく知らない。タイトルの通り、システムについての説明だけをしたいと思う。

ノンスムースシステム

方程式から分かるように、バックコンバータシステムは微分が連続ではないため、ノンスムースなシステムである。赤い線はコントロールシグナルVr(t)V_{r} (t)であり、電圧V(t)V(t)がこのシグナルを超えるかどうかによって、システムがジャンプしてノンスムースに変化することが確認できる。このため、システムの電圧はおおよそ11.5~14.0Vの間で維持される。

カオスシステム

スイッチが開いたり閉じたりする部分システムsubsystemだけ見れば、それぞれが線形システムであるため難しくなさそうだ。しかし、問題は V(t)=Vr(t)V(t) = V_{r}(t)な時点tt、つまりスイッチが入ったり切れたりするタイミングが全く一貫性がないことだ。

上の図はトラジェクトリーでいつスイッチングが発生するかを示している。見ての通り、点々がある程度群をなしている帯、つまりVVrV \approx V_{r}の領域は存在しているが、V,IV,Iだけ見て確実に言えるわけではない。このようなノンスムース性のため、この見た目ほど単純ではないシステムは実際にはカオスであり、長い間多く研究されてきた3

バイフルケーション

buck_bifurcation.png

パラメータEEを変えながらシグナルの周期に合わせてVVの値をプロットすると、上の図のようなバイフルケーションを見ることができる4E25E \approx 25で2つの枝が出現し、交差して、E30E \approx 30で枝周辺に周期的オービットが現れるのは正常である。

コード

トラジェクトリー

次は、システムを解いてジャンピングポイントの位置を示した図を再現できるジュリアコードだ。

using CSV, DataFrames, Clustering

function RK4(f::Function,v::AbstractVector, h=10^(-2))
    V1 = f(v)
    V2 = f(v + (h/2)*V1)
    V3 = f(v + (h/2)*V2)
    V4 = f(v + h*V3)
    return v + (h/6)*(V1 + 2V2 + 2V3 + V4)
end


if !isfile("./buck.csv")
    m = 10^(-3)
    μ = 10^(-6)
    R = 22
    C = 47μ
    L = 20m
    T = 400μ
    γ = 11.75238
    η = 1309.524
    E = 53.500001

    Vr(t) = γ + η * (mod(t, T))
    function buck(v)
        V, I, t = v

        V̇ = - V/(R*C) + I/C
        İ = - (V/L) + ifelse(V < Vr(t), E/L, 0)
        return [V̇, İ, 1]
    end

    u0 = [12.3, 0.55, 0.0]
    u_ = [u0]
    ∇_ = []
    dt = 0.00001; tend = 0.25
    for t in dt:dt:tend
        push!(∇_, buck(u_[end]))
        push!(u_, RK4(buck, u_[end], dt))
    end
    push!(∇_, buck(u_[end]))
    U = stack(u_)[Not(end), :]
    ∇ = stack(∇_)[Not(end), :]
    CSV.write("buck.csv", DataFrame(
        [collect(0:dt:tend)'; U; ∇; Vr.(0:dt:tend)']'
      , ["t", "V", "I", "dV", "dI", "Vr"]))
end

DATA = CSV.read("data/buck.csv", DataFrame)

Y = select(DATA, [:dV, :dI]) |> Matrix .|> Float32
X = select(DATA, [ :V,  :I]) |> Matrix .|> Float32
XY = [X Y]

dbs = dbscan(col_normalize(Y)', 0.01); nsubsys = length(dbs.clusters); println(nsubsys, " clusters found!")

a1 = plot(DATA.V, DATA.I, alpha = 0.1, legend = :best, label = "Trajectory", xlabel = L"V", ylabel = L"I")
scatter!(a1, 
    DATA.V[Not(1)][.!iszero.(diff(dbs.assignments))]
  , DATA.I[Not(1)][.!iszero.(diff(dbs.assignments))]
  , color = 1, shape = :+, label = "Jumping points")

バイフルケーションダイアグラム

次はバイフルケーションダイアグラムのコードだ。注意してほしいのは、少し技術的な問題があって、実際にバックコンバータをシミュレーションする場合は、時間間隔がh=107h = 10^{-7}くらい必要である。オイラーメソッドを使用しても、Intel i7-12700Fを基準にすると10時間ほどかかる。


  1. https://upload.wikimedia.org/wikipedia/commons/c/ca/Commutation_cell_in_converters.svg ↩︎

  2. https://gdnn.tistory.com/85 ↩︎

  3. J. H. B. Deane and D. C. Hamill, “Analysis, simulation and experimental study of chaos in the buck converter,” 21st Annual IEEE Conference on Power Electronics Specialists, San Antonio, TX, USA, 1990, pp. 491-498, doi: https://doi.org/10.1109/PESC.1990.131228↩︎

  4. M. di Bernardo, F. Garefalo, L. Glielmo and F. Vasca, “Switchings, bifurcations, and chaos in DC/DC converters,” in IEEE Transactions on Circuits and Systems I: Fundamental Theory and Applications, vol. 45, no. 2, pp. 133-141, Feb. 1998, doi: https://doi.org/10.1109/81.661675 ↩︎