Home > Community > Forums > RF Design > Verilog-A large-signal model for a fixed-fixed beam RF MEMS capacitive switch, switched capacitor and varactor

Email

* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

 Verilog-A large-signal model for a fixed-fixed beam RF MEMS capacitive switch, switched capacitor and varactor 

Last post Tue, Dec 14 2010 2:15 AM by vcaeken. 0 replies.
Started by vcaeken 14 Dec 2010 02:15 AM. Topic has 0 replies and 1536 views
Page 1 of 1 (1 items)
Sort Posts:
  • Tue, Dec 14 2010 2:15 AM

    • vcaeken
    • Not Ranked
    • Joined on Fri, Aug 13 2010
    • Posts 3
    • Points 15
    Verilog-A large-signal model for a fixed-fixed beam RF MEMS capacitive switch, switched capacitor and varactor Reply

    /* Verilog-A large-signal model for a fixed-fixed beam RF MEMS capacitive switch, switched capacitor and varactor.
    Content of RF_MEMS_CAPACITOR.va. Open-source code covered by BSD license.

    The Verilog-A large signal model can be used for operating point, small signal (AC, SP)
    and large signal (HB, PSS, QPSS) simulations, using ADS, SpectreRF or Qucs. It includes
    large-signal electromechanical effects, as well as small-signal Brownian noise. It does
    not include electro-thermal effects yet.

    Electromechanical: C-V hysteresis, hold-down, self-actuation,
        displacement-compensated squeeze-film damping
    Noise: Brownian noise

    5th of September, 2011
    Check for update: http://www-personal.umich.edu/~vcaeken

    Reference: "Modeling RF MEMS Devices", by K. Van Caekenberghe,
    IEEE Microwave Magazine, vol. 13, no. 1, pp. 83-110, Jan.-Feb. 2012 */

    `include "disciplines.vams"
    `include "constants.vams"

    module RF_MEMS_CAPACITOR (in,out);
        inout in, out;
        electrical in, out;
        kinematic z, velocity;

        // Dimensions
        parameter real g_0=2e-6 from (0:inf); // nominal gap height [m]
        parameter real l=300e-6 from (0:inf); // beam length [m]
        parameter real t=0.5e-6 from (0:inf); // beam thickness [m]
        parameter real t_d=0.2e-6 from [0:inf); // dielectric thickness [m]
        parameter real w=80e-6 from (0:inf); // beam width [m]
        parameter real W=100e-6 from (0:inf); // electrode width [m]
        // Material parameters: beam (gold)
        parameter real nu=0.44 from [0:inf); // Poisson ratio [
        parameter real rho=19.2e3 from (0:inf); // mass density [kg/m^3]
        parameter real sigma=100e6 from [0:inf); // residual stres [Pa]
        parameter real E=78e9 from (0:inf); // Young's modulus [Pa]
        // Material parameters: dielectric (silicon nitride)
        parameter real epsilon_r=7.6 from [1:inf); // dielectric constant [
        // Material parameters: gas (air):
        parameter real lambda = 1.5e-7 from [0:inf); // mean-free path [m]
        parameter real mu = 1.845e-5 from (0:inf); // viscosity coefficient [kg/(m.s)]
        // van der Waals and nuclear force coefficients
        parameter real c_1=10e-80 from [0:inf); // van der Waals force coefficient [N.m]
        parameter real c_2=10e-75 from [0:inf); // nuclear force coefficient [N.m^8]

        real A, b, C, C_d, C_u, F_c, F_e, F_s, f_m_0, IIP3, k_1, k_3, m, Q_e, Q_m, t_s_max, t_s_min, V_H, V_P, V_S;

        analog begin

        @ ( initial_step ) begin
            A=W*w;
            $strobe("\n%M: A (electrode area [m^2]) = %E",A);
            m=0.4*rho*l*t*w;
            $strobe("%M: m (effective beam mass [kg]) = %E",m);
            k_1=32*E*w*pow(t/l,3)*27/49+8*sigma*(1-nu)*w*t/l*3/5;
            $strobe("%M: k_1 (spring constant [N/m]) = %E",k_1);
            k_3=pow(`M_PI,4)*E*w*t/(8*pow(l,3));
            $strobe("%M: k_3 (stretching constant [N/m^3]) = %E",k_3);
            V_H=sqrt(2*k_1*g_0*pow(t_d/epsilon_r,2)/(`P_EPS0*epsilon_r*A));
            $strobe("%M: V_H (pull-in voltage [V]) = %E",V_H);
            V_P=sqrt(8*k_1*pow(g_0+t_d/epsilon_r,3)/(27*A*`P_EPS0));
            $strobe("%M: V_P (pull-in voltage [V]) = %E",V_P);
            f_m_0=sqrt(k_1/m)/(2*`M_PI);
            $strobe("%M: f_m_0 (mechanical resonant frequency [Hz]) = %E",f_m_0);
            Q_m=sqrt(E*rho)*pow(t,2)*pow(g_0,3)/(mu*pow(w*l/2,2));
            $strobe("%M: Q_m (mechanical quality factor [) = %E",Q_m);
            V_S=V_P;
            t_s_max=27*pow(V_P,2)/(4*2*`M_PI*f_m_0*Q_m*pow(V_S,2));
            $strobe("%M: t_s_max (maximum switching time [s], V_S = V_P) = %E",t_s_max);
            t_s_min=3.67*V_P/(V_S*sqrt(k_1/m));
            $strobe("%M: t_s_min (minimum switching time [s], V_S = V_P) = %E",t_s_min);
            C_u=`P_EPS0*A/(g_0+t_d/epsilon_r);
            $strobe("%M: C_u (up-state capacitance [F]) = %E",C_u);
            C_d=`P_EPS0*A/(t_d/epsilon_r);
            $strobe("%M: C_d (down-state capacitance [F]) = %E",C_d);
            IIP3=10*log(2*k_1*pow(g_0,2)/(`M_PI*10e9*pow(C_u*50,2)))+30;
            $strobe("%M: IIP3 (third order intercept [dBm], C=C_u, delta_f < f_m_0, f=10 GHz, Z=50 Ohm) = %E",IIP3);
        end

        // b: damping coefficient [N.s/m] (displacement-compensated squeeze-film damping)
        Q_e=Q_m*pow(1.1-pow(g_0*tanh(Pos(z)/g_0)/g_0,2),1.5)*(1+9.9638*pow(lambda/(g_0-g_0*tanh(Pos(z)/g_0)),1.159));
        $strobe("\n%M: Q_e (displacement-compensated mechanical quality factor [) = %E",Q_e);
        b=k_1/(2*`M_PI*f_m_0*Q_e);
        $strobe("%M: b (damping coefficient [N.s/m]) = %E",b);

            // Forces
        F_c=c_1*A/pow(g_0-g_0*tanh(Pos(z)/g_0)+1e-9,3)-c_2*A/pow(g_0-g_0*tanh(Pos(z)/g_0)+1e-9,10);
        $strobe("%M: F_c (attractive van der Waals and repulsive nuclear forces [N]) = %E",F_c);
            F_e=`P_EPS0*A*pow(V(out,in),2)/2/pow(g_0+t_d/epsilon_r-Pos(z),2);
            //F_e=`P_EPS0*A*pow(V(out,in),2)/2/pow(g_0+t_d/epsilon_r-g_0*tanh(Pos(z)/g_0),2); // Envelope simulation
        $strobe("%M: F_e (electrostatic force [N]) = %E",F_e);
            F_s=k_1*Pos(z)+k_3*pow(Pos(z),3);
            //F_s=k_1*g_0*tanh(Pos(z)/g_0)+k_3*pow(g_0*tanh(Pos(z)/g_0),3); // Envelope simulation
        $strobe("%M: F_s (spring force [N]) = %E",F_s);

        // Nonlinear time-varying state-space description
        Pos(velocity):ddt(Pos(z))==Pos(velocity);
        Pos(z):ddt(Pos(velocity))==1/m*(-b*Pos(velocity)-F_s+F_e+F_c+white_noise(4*`P_K*$temperature*b, "BROWNIAN_NOISE"));

        if (Pos(z)<g_0)
            C=`P_EPS0*A/(g_0+t_d/epsilon_r-Pos(z));   
        else
            C=C_d;

        I(out,in)<+ddt(C*V(out,in));

        end

    endmodule
    23th of July, 2011
    K. Van Caekenberghe (vcaeken@umich.edu)
    Check for update: http://www-personal.umich.edu/~vcaeken

    Reference: "RF MEMS Theory, Design and Technology", by G. M. Rebeiz, Wiley, 2003 */

    `include "disciplines.vams"
    `include "constants.vams"

    module RF_MEMS_CAPACITOR (in,out);
        inout in, out;
        electrical in, out;
        kinematic z, velocity;

        // Dimensions
        parameter real g_0=2e-6 from (0:inf); // nominal gap height [m]
        parameter real l=300e-6 from (0:inf); // beam length [m]
        parameter real t=0.5e-6 from (0:inf); // beam thickness [m]
        parameter real t_d=0.2e-6 from [0:inf); // dielectric thickness [m]
        parameter real w=80e-6 from (0:inf); // beam width [m]
        parameter real W=100e-6 from (0:inf); // electrode width [m]
        // Material parameters: beam (gold)
        parameter real nu=0.44 from [0:inf); // Poisson ratio [
        parameter real rho=19.2e3 from (0:inf); // mass density [kg/m^3]
        parameter real sigma=100e6 from [0:inf); // residual stres [Pa]
        parameter real E=78e9 from (0:inf); // Young's modulus [Pa]
        // Material parameters: dielectric (silicon nitride)
        parameter real epsilon_r=7.6 from [1:inf); // dielectric constant [
        // Material parameters: gas (air):
        parameter real lambda = 1.5e-7 from [0:inf); // mean-free path [m]
        parameter real mu = 1.845e-5 from (0:inf); // viscosity coefficient [kg/(m.s)]
        // van der Waals and nuclear force coefficients
        parameter real c_1=10e-80 from [0:inf); // van der Waals force coefficient [N.m]
        parameter real c_2=10e-75 from [0:inf); // nuclear force coefficient [N.m^8]

        real A, b, C, C_d, C_u, F_c, F_e, F_s, f_m_0, IIP3, k_1, k_3, m, Q_e, Q_m, t_s_max, t_s_min, V_H, V_P, V_S;

        analog begin

        @ ( initial_step ) begin
            A=W*w;
            $strobe("\n%M: A (electrode area [m^2]) = %E",A);
            m=0.4*rho*l*t*w;
            $strobe("%M: m (effective beam mass [kg]) = %E",m);
            k_1=32*E*w*pow(t/l,3)*27/49+8*sigma*(1-nu)*w*t/l*3/5;
            $strobe("%M: k_1 (spring constant [N/m]) = %E",k_1);
            k_3=pow(`M_PI,4)*E*w*t/(8*pow(l,3));
            $strobe("%M: k_3 (stretching constant [N/m^3]) = %E",k_3);
            V_H=sqrt(2*k_1*g_0*pow(t_d/epsilon_r,2)/(`P_EPS0*epsilon_r*A));
            $strobe("%M: V_H (pull-in voltage [V]) = %E",V_H);
            V_P=sqrt(8*k_1*pow(g_0+t_d/epsilon_r,3)/(27*A*`P_EPS0));
            $strobe("%M: V_P (pull-in voltage [V]) = %E",V_P);
            f_m_0=sqrt(k_1/m)/(2*`M_PI);
            $strobe("%M: f_m_0 (mechanical resonant frequency [Hz]) = %E",f_m_0);
            Q_m=sqrt(E*rho)*pow(t,2)*pow(g_0,3)/(mu*pow(w*l/2,2));
            $strobe("%M: Q_m (mechanical quality factor [) = %E",Q_m);
            V_S=V_P;
            t_s_max=27*pow(V_P,2)/(4*2*`M_PI*f_m_0*Q_m*pow(V_S,2));
            $strobe("%M: t_s_max (maximum switching time [s], V_S = V_P) = %E",t_s_max);
            t_s_min=3.67*V_P/(V_S*sqrt(k_1/m));
            $strobe("%M: t_s_min (minimum switching time [s], V_S = V_P) = %E",t_s_min);
            C_u=1.4*`P_EPS0*A/(g_0+t_d/epsilon_r);
            $strobe("%M: C_u (up-state capacitance [F]) = %E",C_u);
            C_d=0.65*`P_EPS0*A/(t_d/epsilon_r);
            $strobe("%M: C_d (down-state capacitance [F]) = %E",C_d);
            IIP3=10*log(2*k_1*pow(g_0,2)/(`M_PI*10e9*pow(C_u*50,2)))+30;
            $strobe("%M: IIP3 (third order intercept [dBm], C=C_u, delta_f < f_m_0, f=10 GHz, Z=50 Ohm) = %E",IIP3);
        end

        // b: damping coefficient [N.s/m] (displacement-compensated squeeze-film damping)
        Q_e=Q_m*pow(1.1-pow(g_0*tanh(Pos(z)/g_0)/g_0,2),1.5)*(1+9.9638*pow(lambda/(g_0-g_0*tanh(Pos(z)/g_0)),1.159));
        $strobe("\n%M: Q_e (displacement-compensated mechanical quality factor [) = %E",Q_e);
        b=k_1/(2*`M_PI*f_m_0*Q_e);
        $strobe("%M: b (damping coefficient [N.s/m]) = %E",b);

        // Forces
        F_c=c_1*A/pow(g_0-g_0*tanh(Pos(z)/g_0)+1e-9,3)-c_2*A/pow(g_0-g_0*tanh(Pos(z)/g_0)+1e-9,10);
        $strobe("%M: F_c (attractive van der Waals and repulsive nuclear forces [N]) = %E",F_c);
        F_e=`P_EPS0*A*pow(V(out,in),2)/2/pow(g_0+t_d/epsilon_r-Pos(z),2);
        //F_e=1.4*`P_EPS0*A*pow(V(out,in),2)/2/pow(g_0+t_d/epsilon_r-g_0*tanh(Pos(z)/g_0),2); // Envelope simulation
        $strobe("%M: F_e (electrostatic force [N]) = %E",F_e);
        F_s=k_1*Pos(z)+k_3*pow(Pos(z),3);
        //F_s=k_1*g_0*tanh(Pos(z)/g_0)+k_3*pow(g_0*tanh(Pos(z)/g_0),3); // Envelope simulation
        $strobe("%M: F_s (spring force [N]) = %E",F_s);

        // Nonlinear time-varying state-space description
        Pos(velocity):ddt(Pos(z))==Pos(velocity);
        Pos(z):ddt(Pos(velocity))==1/m*(-b*Pos(velocity)-F_s+F_e+F_c+white_noise(4*`P_K*$temperature*b, "BROWNIAN_NOISE"));

        if (Pos(z)<g_0)
            C=1.4*`P_EPS0*A/(g_0+t_d/epsilon_r-Pos(z));    
        else
            C=C_d;

        I(out,in)<+ddt(C*V(out,in));

        end

    endmodule

    Filed under:
    • Post Points: 5
Page 1 of 1 (1 items)
Sort Posts:
Started by vcaeken at 14 Dec 2010 02:15 AM. Topic has 0 replies.