logo

동역학계로써의 진동 충격 모델 📂동역학

동역학계로써의 진동 충격 모델

개요

진동 충격 모델vibro-impact model은 진동하는 원통형 관 속에 있는 물체의 움직임을 나타내는 넌스무스다이내믹 시스템으로, 크게 하드와 소프트hard, Soft 두 가지 타입으로 나눌 수 있다.

모델 1

원통형 관cylindric0al Capsule은 편의상 캡슐이라고 부르자. 이하 등장하는 삽화에서 ss 는 캡슐의 길이, MM 은 캡슐의 질량, mbm_{b} 는 물체의 질량이고 MmbM \gg m_{b} 이라서 물체의 운동이 캡슐의 움직임에는 영향을 미치지 못한다고 가정한다.

캡슐은 FextF_{\text{ext}} 과 같은 방향으로 시간단위 τ\tau 기준으로 했을 때 진동수 ω\omega 의 조화진동을 한다고 가정한다. 이에 따라 충돌이 없을 때 캡슐의 변위displacement ZZ 는 진동의 세기amplitude A0A_{0}τ\tau 에 대한 미분 ' 에 대해 다음과 같은 미분방정식으로 나타낼 수 있다. MZ=A0cosωτ M Z '' = - A_{0} \cos \omega \tau gg중력 가속도, β\beta 는 캡슐의 기울기다. 이에 따라 충돌이 없을 때 물체의 변위 YYY=gsinβ Y '' = - g \sin \beta 이다. FextF_{\text{ext}} 방향으로 봤을 때 물체의 좌표를 YY, 캡슐의 좌표를 ZZ 라 할 때 그들의 상대적 변위 X:=YZX := Y - ZA:=A0/MA := A_{0} / M 에 대해 다음과 같이 나타낼 수 있다. X=gsinβ+Acosωτ X '' = - g \sin \beta + A \cos \omega \tau

하드 임팩트

hard.png

하드 임팩트 모델hard Impact model은 물체가 캡슐의 바운드에 닿았을 때 방향이 반대로 바뀌는 방식으로 충격을 반영한다. X=gsinβ+Acosωτif x<s2X(τ)=rX(τdτ)if x=s2 \begin{align*} X '' =& - g \sin \beta + A \cos \omega \tau & \text{if } \left| x \right| < {{ s } \over { 2 }} \\ X ' \left( \tau \right) =& - r X ' \left( \tau - d\tau \right) & \text{if } \left| x \right| = {{ s } \over { 2 }} \end{align*} 여기서 dτ0d\tau \approx 0 는 아주 짧은 시간 간격을 나타낸다. 물리적인 의미를 가지지 않도록 추상적인 시스템으로 바꾸면 tt 에 대한 미분 ˙\dot{} 에 대해 다음과 같다. x¨=γ+cosπtif x<d2x˙(t)=rx˙(tdt)if x=d2 \begin{align*} \ddot{x} =& - \gamma + \cos \pi t & \text{if } \left| x \right| < {{ d } \over { 2 }} \\ \dot{x} \left( t \right) =& - r \dot{x} \left( t - dt \right) & \text{if } \left| x \right| = {{ d } \over { 2 }} \end{align*}

소프트 임팩트

soft.png

소프트 임팩트 모델soft Impact model은 물체가 스프링을 댄 판에 부딪혀서 방향이 바뀌는 것을 강제 조화 진동을 통해 반영한다. 용수철에 닿지 않았을 때의 상대적 변위 U:=YZU := Y - Z 와 용수철에 닿아있을 때의 상대적 변위 UcU_{c} 가 따로 나뉜다. U=gsinβ+Acosωτ,for U<s2Uc=gsinβ+Acosωτkmbsign(Uc)(Ucs2)cmbUc,for Ucs2 \begin{align*} U '' =& - g \sin \beta + A \cos \omega \tau & , \text{for } \left| U \right| < {{ s } \over { 2 }} \\ U_{c} '' =& - g \sin \beta + A \cos \omega \tau - {{ k } \over { m_{b} }} \sign \left( U_{c} \right) \left( \left| U_{c} \right| - {{ s } \over { 2 }} \right) - {{ c } \over { m_{b} }} U_{c} ' & , \text{for } \left| U_{c} \right| \ge {{ s } \over { 2 }} \end{align*} 물리적인 의미를 가지지 않도록 추상적인 시스템으로 바꾸면 uuucu_{c} 를 따로 구분하지 않고 tt 에 대한 미분 ˙\dot{} 에 대해 다음과 같다. u¨=γ+cos(πt)+{0,for u<d2κ2sign(u)(ud2)μu˙,for ud2 \ddot{u} = - \gamma + \cos \left( \pi t \right) + \begin{cases} 0 & , \text{for } \left| u \right| < {{ d } \over { 2 }} \\ - \kappa^{2} \sign (u) \left( \left| u \right| - {{ d } \over { 2 }} \right) - \mu \dot{u} & , \text{for } \left| u \right| \ge {{ d } \over { 2 }} \end{cases} 여기서 sign\sign부호 함수다.

변수와 파라미터

기본적으로 모델의 파라미터들은 다음과 같이 주어져 있다:

  • mb=0.0035m_{b} = 0.0035: 물체의 질량이다.
  • A=1.0A = 1.0: 진동의 세기에 관련된 값이다.
  • γ=gsinβ=0\gamma = g \sin \beta = 0: 중력에 의해 수직 방향으로 작용하는 값이다.
    • β=0.0\beta = 0.0: 캡슐의 기울기다.
    • g=9.8g = 9.8: 중력가속도다.
  • s=0.3s = 0.3: 캡슐의 길이다.
    • d=0.3d = 0.3: 캡슐의 길이가 변환된 값이다.
  • ω=π\omega = \pi: 진동수다.
    • ω0\omega_{0}: 시스템의 고유 진동수다.
  • r=0.5r = 0.5: 하드 임팩트 모델에서, 충돌 이후의 속도에 관련된 값이며, 충돌 직후에 속도는 기존의 rr 배로 바뀐다. r=0.5r = 0.5 인 경우 속도가 절반이 된다.
  • k=560.0k = 560.0: 소프트 임팩트 모델에서, 탄성계수다.
    • κ=400.0\kappa = 400.0: 탄성계수에 관련된 값이다.
    • μ=172.363\mu = 172.363: 소프트 임팩트 모델에서, 제동력에 관련된 값이다.

모델이 넌디멘져널non-dimensional하게 바뀔 때 변수의 변환은 다음과 같다. t:=τωπx(t):=X(τ)ω2Aπ2u(t):=U(τ)ω2Aπ2 \begin{align*} t :=& {{ \tau \omega } \over { \pi }} \\ x(t) :=& {{ X (\tau) \omega^{2} } \over { A \pi^{2} }} \\ u(t) :=& {{ U (\tau) \omega^{2} } \over { A \pi^{2} }} \end{align*} 파라미터의 변환은 다음과 같다. d:=sω2Aπ2γ:=gsinβAκ:=ω0πωμ:=cπmω \begin{align*} d :=& {{ s \omega^{2} } \over { A \pi^{2} }} \\ \gamma :=& {{ g \sin \beta } \over { A }} \\ \kappa :=& {{ \omega_{0} \pi } \over { \omega }} \\ \mu :=& {{ c \pi } \over { m \omega }} \end{align*}

설명

트래젝터리

소프트 임팩트 모델에서 d=0.15d = 0.15 일 때의 애니메이션. xx-축은 상대변위 uu, yy-축은 속도 v=u˙v = \dot{u} 이다. ±d/2=±0.075\pm d /2 = \pm 0.075 에 도달하면 강한 충격과 함께 속도가 변한다:

보통 우리가 관심을 가지는 파라미터는 캡슐의 길이에 관련된 dd 다. 소프트 임팩트 모델에서 dd 가 변하는 것에 따라서 시스템이 어떻게 변하는지 살펴보자. 오른쪽 그림의 붉은 실선은 캡슐의 바운더리에 해당하며, 자세히 보면 물체의 변위가 아주 살짝 바운더리 외부로 벗어나고 있다.

  • d=0.30d = 0.30 일 때:d030.png
  • d=0.20d = 0.20 일 때:d020.png
  • d=0.16d = 0.16 일 때:d016.png
  • d=0.10d = 0.10 일 때:d010.png

바이퍼케이션

soft_bifurcation.png

파라미터 dd0.30.3 부터 0.10.1 까지 줄여가며 바이퍼케이션 다이어그램을 그려보면 위와 같은 바이퍼케이션을 볼 수 있다. d0.12d \approx 0.12 이하에서 캐어릭한 윈도우가 두드러진다.

코드

다음은 이 포스트에서 사용된 그림들을 재현하는 줄리아 코드다.

바이퍼케이션 다이어그램

const κ = 400.0
const μ = 172.363

using ProgressMeter
packages = [:DataFrames, :CSV, :Plots, :LaTeXStrings]
@time for package in packages
    @eval using $(package)
end
println(join(packages, ", "), " loaded!")

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), V1
end


function factory_soft(idx::Int64, d::Number)
    d2 = d/2
    
    function soft(tuv)
        t, u, v    = tuv

        impact = ifelse(abs(u) < d2, 0, -(κ^2)*sign(u)*(abs(u)-d2) - μ*v)
        ṫ = 1
        u̇ = v
        v̇ = cospi(t) + impact
        return [ṫ, u̇, v̇]
    end
    dt = 10^(-5); tend = 50
    t_ = 0:dt:tend

    ndatapoints = round(Int64, tend/(10dt))

    len_t_ = length(t_)
    traj = zeros(6, len_t_+1)
    x = [0.0, 0.05853, 0.47898]
    dx = soft(x)
    traj[1:3, 1] = x

    
    for t in 1:length(t_)
        x, dx = RK4(soft, x, dt)
        if t ≥ ndatapoints
            traj[4:6,   t] = dx
            traj[1:3, t+1] = x
        end
    end
    traj = traj[:, (end-ndatapoints):(end-1)]'

    data = DataFrame(traj,
        ["t", "u", "v", "dt", "du", "dv"])

    return data
end

d_range = 0.1:0.0001:0.3
schedule = DataFrame(idx = eachindex(d_range), d = d_range)

xdots = Float64[]; ydots = Float64[]
@showprogress for dr in eachrow(schedule)
    data = factory_soft(dr.idx, dr.d)
    
    idx = [false; diff(abs.(data.u) .> (dr.d/2)) .< 0]

    sampled = data.v[idx]
    append!(xdots, fill(dr.d, length(sampled)))
    append!(ydots, sampled)
end
@time a1 = scatter(xdots, ydots,
xlabel = L"d", ylabel = "Impact velocity",
label = :none, msw = 0, color = :black, ms = 0.5, alpha = 0.5, size = (700, 300))

png(a1, "soft_bifurcation")

애니메이션

Plots.gr()
anim = @animate for tk in ProgressBar(1:100:nrow(_data))
    plot(_data.u[1:10:tk], _data.v[1:10:tk],
    xlabel = "position", ylabel = "velocity", legend = :none,
    xlims = (-0.2, 0.2), ylims = (-0.6, 0.6), alpha = (1:10:tk)/tk)
end
mp4(anim, "soft.mp4")

  1. Dimitri Costa, Rachel Kuske, Daniil Yurchenko; Qualitative changes in bifurcation structure for soft vs hard impact models of a vibro-impact energy harvester. Chaos 1 October 2022; 32 (10): 103120. https://doi.org/10.1063/5.0101050 ↩︎