• Resolved

TPS54160: Question about equation in design example of worksheet Page 37 Equation 47.

Part Number: TPS54160

I wrote a C++ Program to try to calculate the equation 47  the data sheet

Can't paste the data sheet equation in but I will give you the C++ code and Output to show what the computer calculates.

Below are inputs to the equation:

// set RLOAD to 10 ohms
R_LOAD = 3.3 / .33; // tenth the current
cout << "R_LOAD = " << R_LOAD << endl;
cout << "fc = " << fc << endl;
cout << "COUT = " << COUT << endl;
cout << "pi = " << pi << endl;
COUT_Resr = 10.0e-3;
cout << "COUT_Resr = " << COUT_Resr << endl;

values printed out by the C Program:

COUT = 4.7e-05 after derating
fp_MOD = 1539.22
pi = 3.14159
COUT = 4.7e-05
fz_MOD = 338628
fc_max = 45353.6
fc_min = 7696.08
fc = 45000
R_LOAD = 10
fc = 45000
COUT = 4.7e-05
pi = 3.14159
COUT_Resr = 0.01


G_MOD_fc = 67.773   value come back

C++ Equation

G_MOD_fc_numerator = gm_ps * R_LOAD * ( (2.0 * pi * fc * COUT * COUT_Resr ) + 1.0);
G_MOD_fc_denominator = ( 2.0 * pi * COUT * (R_LOAD + COUT_Resr ) ) + 1.0;
G_MOD_fc = G_MOD_fc_numerator / G_MOD_fc_denominator;
//
cout << "G_MOD_fc = " << G_MOD_fc << endl;

G_MOD_fc = 67.773   // Calculated output from C++ Program

Expected answer in the data sheet is

For the example problem, the gain of the modulator at the crossover frequency is 0.542. Next

This is on page   37 of the data sheet.

Thanks for any help on this

  • gm_ps = 6

    The gm_ps is 6.0 Amps/Volt
  • fc is missing from the denominator.

    TI Wide Vin Buck Converter & Controller Applications Engineer

  • In reply to YangZhang:

    Thank You Yang,

    I would like to go to another equation in the app note:

    Equation 51 and 48 calculate a R_C value.  When I plug in the values into the equation the numbers for Equation 51 seem to be wrong here is the 

    C code I am using:

    // 51

    double R_C;
    double gm_EA;
    double VREF;
    fz_MOD = 338.0e3;
    gm_EA = 97.0e-6;
    VREF = 0.8;
    G_MOD_fc = 0.542;
    cout << "fz_MOD = " << fz_MOD << endl;
    cout << "gm_EA = " << gm_EA << endl;
    cout << "VREF = " << VREF << endl;
    cout << "VOUT = " << VOUT << endl;
    cout << "G_MOD_fc = " << G_MOD_fc << endl;
    //R_C = ( VOUT ) / ( G_MOD_fc * fc * gm_EA * VREF ); // 51 fz_MOD
    //cout << ( G_MOD_fc * fz_MOD * gm_EA * VREF ) << endl;
    R_C = VOUT / ( G_MOD_fc * fz_MOD * gm_EA * VREF ); // 51 fz_MOD
    cout << "R_C = " << R_C << endl;
    R_C = ( VOUT ) / ( G_MOD_fc * gm_EA * VREF ); // 48
    cout << "R_C = " << R_C << endl;

    And the output or values I used in the equations:


    fz_MOD = 338000
    gm_EA = 9.7e-05
    VREF = 0.8
    VOUT = 3.3
    G_MOD_fc = 0.542
    R_C = 0.232133
    R_C = 78460.8

    expected value is 

    • RC = 76.2 kΩ

    Not that for equation 51 it is very small:

    Equation 48 seems reasonable.  The app note suggests need to use equation 51 for this example:

    Expected values:

    For the example problem, the ESR zero is located at a higher frequency compared to the crossover frequency so
    Equation 50 through Equation 53 are used to calculate the compensation components. In this example, the
    calculated components values are:
    • RC = 76.2 kΩ
    • CC = 2710 pF
    • Cƒ = 6.17 pF

    This is on page 38 of TPS54160.pdf data sheet.

    Thanks.

  • In reply to Gary Olson:

    This equation appears to be wrong: from the above post

    R_C = VOUT / ( G_MOD_fc * fz_MOD * gm_EA * VREF );


    The output value that comes out of the program is
    R_C = 0.232133
  • In reply to Gary Olson:

    App note SLVS9492.pdf   (heading at the top   TPS54620.  Entitled

    TPS54620 4.5 to 17V input 6-A Synchronout Ste Downt Swift Converter

    Calculating the Type 2 compensation resistor R4 in this app note

    had an equation on page  28    equation number 35

    R4_num = 2.0 * pi * fc * VOUT * COUT;
    R4_denom = ( gm_ps * gm_EA * VREF );

    R4 = R4_num / R4_denom;

    I can get a resistance in the ball park especially if I change the fc = 36500

    leaving all the other parameters the same.

    double R4_num;
    double R4_denom;
    //double R4;

    //fc = 0.1 * f_sw_hz;
    fc = 36500.0;

    R4_num = 2.0 * pi * fc * VOUT * COUT;
    R4_denom = ( gm_ps * gm_EA * VREF );

    R4 = R4_num / R4_denom;


    cout << endl << endl << endl;


    cout << "fc = " << fc << endl;
    cout << "VOUT = " << VOUT << endl;
    cout << "COUT = " << COUT << endl;
    cout << "gm_ps = " << gm_ps << endl;
    cout << "gm_EA = " << gm_EA << endl;
    cout << "VREF = " << VREF << endl;
    cout << endl;

    cout << "R4_num = " << R4_num << endl;
    cout << "R4_denom = " << R4_denom << endl;
    cout << "R4 = " << R4 << endl;

    Results of C++ output


    fc = 36500
    VOUT = 3.3
    COUT = 4.7e-05
    gm_ps = 6
    gm_EA = 9.7e-05
    VREF = 0.8

    R4_num = 35.5701
    R4_denom = 0.0004656
    R4 = 76396.2

    when fc is left at 45000

    R4_num = 43.8535
    R4_denom = 0.0004656
    R4 = 94187.1

  • In reply to YangZhang:

    I agree with this as the answer to the first question.  I was hoping to hear more about the next question.