TIDUE53J March   2018  – February 2025 TMS320F28P550SG , TMS320F28P550SJ , TMS320F28P559SG-Q1 , TMS320F28P559SJ-Q1

 

  1.   1
  2.   Description
  3.   Resources
  4.   Features
  5.   Applications
  6.   6
  7. 1System Description
    1. 1.1 Key System Specifications
  8. 2System Overview
    1. 2.1 Block Diagram
    2. 2.2 Highlighted Products
      1. 2.2.1  UCC21710
      2. 2.2.2  UCC5350
      3. 2.2.3  TMS320F28379D
      4. 2.2.4  AMC3306M05
      5. 2.2.5  OPA4388
      6. 2.2.6  TMCS1123
      7. 2.2.7  AMC0330R
      8. 2.2.8  AMC0381D
      9. 2.2.9  UCC14341
      10. 2.2.10 UCC33421
    3. 2.3 System Design Theory
      1. 2.3.1 Three-Phase T-Type Inverter
        1. 2.3.1.1 Architecture Overview
        2. 2.3.1.2 LCL Filter Design
        3. 2.3.1.3 Inductor Design
        4. 2.3.1.4 SiC MOSFETs Selection
        5. 2.3.1.5 Loss Estimations
      2. 2.3.2 Voltage Sensing
      3. 2.3.3 Current Sensing
      4. 2.3.4 System Auxiliary Power Supply
      5. 2.3.5 Gate Drivers
        1. 2.3.5.1 1200-V SiC MOSFETs
        2. 2.3.5.2 650-V SiC MOSFETs
        3. 2.3.5.3 Gate Driver Bias Supply
      6. 2.3.6 Control Design
        1. 2.3.6.1 Current Loop Design
        2. 2.3.6.2 PFC DC Bus Voltage Regulation Loop Design
  9. 3Hardware, Software, Testing Requirements, and Test Results
    1. 3.1 Required Hardware and Software
      1. 3.1.1 Hardware
        1. 3.1.1.1 Test Hardware Required
        2. 3.1.1.2 Microcontroller Resources Used on the Design (TMS320F28379D)
        3. 3.1.1.3 F28377D, F28379D Control-Card Settings
        4. 3.1.1.4 Microcontroller Resources Used on the Design (TMS320F280039C)
      2. 3.1.2 Software
        1. 3.1.2.1 Getting Started With Firmware
          1. 3.1.2.1.1 Opening the CCS project
          2. 3.1.2.1.2 Digital Power SDK Software Architecture
          3. 3.1.2.1.3 Interrupts and Lab Structure
          4. 3.1.2.1.4 Building, Loading, and Debugging the Firmware
          5. 3.1.2.1.5 CPU Loading
        2. 3.1.2.2 Protection Scheme
        3. 3.1.2.3 PWM Switching Scheme
        4. 3.1.2.4 ADC Loading
    2. 3.2 Testing and Results
      1. 3.2.1 Lab 1
      2. 3.2.2 Testing Inverter Operation
        1. 3.2.2.1 Lab 2
        2. 3.2.2.2 Lab 3
        3. 3.2.2.3 Lab 4
      3. 3.2.3 Testing PFC Operation
        1. 3.2.3.1 Lab 5
        2. 3.2.3.2 Lab 6
        3. 3.2.3.3 Lab 7
      4. 3.2.4 Test Setup for Efficiency
      5. 3.2.5 Test Results
        1. 3.2.5.1 PFC Mode
          1. 3.2.5.1.1 PFC Start-Up – 230 VRMS, 400 VL-L AC Voltage
          2. 3.2.5.1.2 Steady State Results - PFC Mode
          3. 3.2.5.1.3 Efficiency, THD, and Power Factor Results, 60 Hz – PFC Mode
          4. 3.2.5.1.4 Transient Test With Step Load Change
        2. 3.2.5.2 Inverter Mode
  10. 4Design Files
    1. 4.1 Schematics
    2. 4.2 Bill of Materials
    3. 4.3 PCB Layout Recommendations
      1. 4.3.1 Layout Prints
    4. 4.4 Altium Project
    5. 4.5 Gerber Files
    6. 4.6 Assembly Drawings
  11. 5Trademarks
  12. 6About the Authors
  13. 7Revision History

Testing and Results

All the labs in this section can be run with both control cards. However, when using the TMS320F280039C control card, consider the following notes:

  • The GUI interface cannot be used. To change the parameters and the operating lab, parameters in the user_settings.h file must be changed directly.
  • SFRA cannot be used.
  • Space Vector modulation together with control of the middle point of the DC link capacitors can be used. Notice that the neutral of the grid must be disconnected from the grid. By changing the following user settings parameters, the two new control techniques can be operated:
    • #define TINV_THIRD_HARMONIC_INJECTION_STATUS TINV_THIRD_HARMONIC_INJECTION_ENABLE
    • #define TINV_MIDDLE_POINT_CONTROL_STATUS TINV_MIDDLE_POINT_CONTROL_ENABLE

The following parameters were used for testing the E7 hardware and can be configured either with main.syscfg or tinv_settings.h. When using E6, keep the default main.syscfg values. The E7 parameters are shown in the follow code:

// Power Stage Settings
//
#define TINV_PWM_SWITCHING_FREQ_HZ ((float32_t)90*1000)
#define TINV_PWM_DEADBAND_US ((float32_t)0.15)
#define TINV_PWM_PERIOD_TICKS (TINV_PWMSYSCLOCK_FREQ_HZ / TINV_PWM_SWITCHING_FREQ_HZ)
#define TINV_PWM_DEADBAND_TICKS (int16_t)((float32_t)TINV_PWM_DEADBAND_US *    \
                                          (float32_t)TINV_PWMSYSCLOCK_FREQ_HZ *   \
                                          (float32_t)ONE_MICRO_SEC)

#define TINV_AC_FREQ_HZ ((float32_t)60)
#define TINV_VBUS_NOMINAL_VOLTS ((float32_t)800)
#define TINV_LI_INDUCTOR_VALUE  ((float32_t)0.13*0.001)
#define TINV_LG_INDUCTOR_VALUE  ((float32_t)0.01*0.001)
#define TINV_VGRID_MAX_SENSE_VOLTS ((float32_t)512.5)
#define TINV_VINV_MAX_SENSE_VOLTS TINV_VGRID_MAX_SENSE_VOLTS
#define TINV_VBUS_MAX_SENSE_VOLTS ((float32_t)1100)
#define TINV_IINV_MAX_SENSE_AMPS ((float32_t)33)
#define TINV_IINV_TRIP_LIMIT_AMPS ((float32_t)29)
#define TINV_IGRID_MAX_SENSE_AMPS ((float32_t)32)
#define TINV_IGRID_TRIP_LIMIT_AMPS ((float32_t)29)


//
// PI Controller Settings from Compensation Designer
//
#define TINV_GI_PI_KP ((float32_t)0.0996509341)
#define TINV_GI_PI_KI ((float32_t)0.0070057718)



#define TINV_GV_PI_KP ((float32_t) 1.9979056049)
#define TINV_GV_PI_KI ((float32_t) 0.0041887902)
Note:

Some C2000Ware_DigitalPower_SDK software changes are required to support the new E7 hardware. The first change is the fan GPIO change as previously described in Section 3.1.1.2 (shown here for convenience). The second software change is to invert the voltage sensing polarity in the default SDK software because the latest E7 uses non-inverting voltage sensing for the V_PCC and V_SN.

For the fan GPIO change in tinv_user_settings.h:

//E6
//#define TINV_FAN_GPIO                      9
//#define TINV_FAN_GPIO_PIN_CONFIG           GPIO_9_GPIO9

//E7
#define TINV_FAN_GPIO                      18
#define TINV_FAN_GPIO_PIN_CONFIG           GPIO_18_GPIO18
Note:

Make sure to enable the fans when testing at high power using the TINV_fanSet function in the CCS watch window during the debug session.

Use the following for the E7 voltage sensing polarity change in tinv.h:

    // Voltage sensing on the actual board is non-inverted hence a +2.0f needs to be multiplied as below
    TINV_vInv_A_sensed_pu = ((float32_t)TINV_VINV_A_READ *
                      TINV_ADC_PU_SCALE_FACTOR -
                      TINV_vInv_A_sensedOffset_pu) *  2.0f;

    TINV_vInv_B_sensed_pu = ((float32_t)TINV_VINV_B_READ *
                      TINV_ADC_PU_SCALE_FACTOR -
                      TINV_vInv_B_sensedOffset_pu) * 2.0f;

    TINV_vInv_C_sensed_pu = ((float32_t)TINV_VINV_C_READ *
                      TINV_ADC_PU_SCALE_FACTOR -
                      TINV_vInv_C_sensedOffset_pu) * 2.0f;

    TINV_vGrid_A_sensed_prev_pu = TINV_vGrid_A_sensed_pu;

    TINV_vGrid_A_sensed_pu = ((float32_t)TINV_VGRID_A_READ *
                       TINV_ADC_PU_SCALE_FACTOR -
                       TINV_vGrid_A_sensedOffset_pu ) * 2.0f;

    TINV_vGrid_B_sensed_pu = ((float32_t)TINV_VGRID_B_READ *
                       TINV_ADC_PU_SCALE_FACTOR -
                       TINV_vGrid_B_sensedOffset_pu ) * 2.0f;

    TINV_vGrid_C_sensed_pu = ((float32_t)TINV_VGRID_C_READ *
                       TINV_ADC_PU_SCALE_FACTOR -
                       TINV_vGrid_C_sensedOffset_pu ) * 2.0f;

For the E6 voltage sensing, from tinv.h (the default SDK code is acceptable):

    // Voltage sensing on the actual board is inverted hence a -2.0f needs to be multiplied as below
    TINV_vInv_A_sensed_pu = ((float32_t)TINV_VINV_A_READ *
                      TINV_ADC_PU_SCALE_FACTOR -
                      TINV_vInv_A_sensedOffset_pu) *  -2.0f;

    TINV_vInv_B_sensed_pu = ((float32_t)TINV_VINV_B_READ *
                      TINV_ADC_PU_SCALE_FACTOR -
                      TINV_vInv_B_sensedOffset_pu) * -2.0f;

    TINV_vInv_C_sensed_pu = ((float32_t)TINV_VINV_C_READ *
                      TINV_ADC_PU_SCALE_FACTOR -
                      TINV_vInv_C_sensedOffset_pu) * -2.0f;

    TINV_vGrid_A_sensed_prev_pu = TINV_vGrid_A_sensed_pu;

    TINV_vGrid_A_sensed_pu = ((float32_t)TINV_VGRID_A_READ *
                       TINV_ADC_PU_SCALE_FACTOR -
                       TINV_vGrid_A_sensedOffset_pu ) * -2.0f;

    TINV_vGrid_B_sensed_pu = ((float32_t)TINV_VGRID_B_READ *
                       TINV_ADC_PU_SCALE_FACTOR -
                       TINV_vGrid_B_sensedOffset_pu ) * -2.0f;

    TINV_vGrid_C_sensed_pu = ((float32_t)TINV_VGRID_C_READ *
                       TINV_ADC_PU_SCALE_FACTOR -
                       TINV_vGrid_C_sensedOffset_pu ) * -2.0f;
Note:

For E7 hardware, to turn on all three phase relays (after precharge) use the TINV_neutralRelaySet function in the CCS watch window. Only use TINV_allRelaySet for E6 hardware.