This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

UCD3138: Evaluation board

Part Number: UCD3138

Hi,

I am beginning a development cycle where I would liketo use the UCD3138 to generate a fixed duty cycle overlapped PWM (approximately 10% overlap) and vary the PWM frequency. I would like to know which UCD3138 evaluation board and software version would be most suitable as the development time for the power controller is limited.

Many thanks

Zaki

  • For that, the best thing is just our open loop board. Our power supply EVMs are all dedicated to more complex topologies than you are talking about.
    It's here: www.ti.com/.../ucd3138ol64evm-031

    You also need a USB adapter to communicate between it and your PC:
    www.ti.com/.../usb-to-gpio

    Then you need to get CCS - Code Composer Studio, ideally version 6.2, which seems to be here:

    processors.wiki.ti.com/.../Download_CCS

    For software, I'd suggest that you start with the training labs, which show you how to get the tools running, and then go straight to DPWM programming like you need:

    training.ti.com/ucd3138-digital-power-training-series
  • Many thanks Ian, I have the system up and running now (albeit I disabled the FAULT3 to ground check and include an additional line to produce the .x0 file) and the PWM has the level of resolution that I need, however the minimum switching frequency is approximately 15kHz. Ideally I would like tis to be around 10kHz. Do you know if this is possible? I am using the TI training labs (in particular LAB2).

    My test source code is below if that helps



    float PS = 65.0e-6;
    int i;
    #define PCLK_PERIOD 4.0e-9
    //#define PERIOD_SECONDS 10.0e-6
    #define PERIOD ((int)(PS/PCLK_PERIOD)<<4)
    #define EVENT1 (int)(PERIOD*0.20)
    #define EVENT2 (int)(PERIOD*0.75)
    #define EVENT3 (int)(PERIOD*0.70)
    #define EVENT4 (int)(PERIOD*0.25)

    //int ram_event2; // comment for hyperknob [min=2500, max=37500, step=2500]

    void init_dpwm0(void)
    {
    Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 0; // disable DPWM0 locally during initilization

    Dpwm0Regs.DPWMCTRL0.bit.CLA_EN = 0; // default is 1 (i.e. default is to use the filter output to control DPWM)

    Dpwm0Regs.DPWMPRD.all = PERIOD; // use .all for all values, so that the scaling matches
    Dpwm0Regs.DPWMEV1.all = EVENT1; // set EVENT 1 to 0% (start) of period
    Dpwm0Regs.DPWMEV2.all = EVENT2; // set EVENT 2 to 25% (start) of period
    Dpwm0Regs.DPWMEV3.all = EVENT3; // set EVENT 3 to 50% (start) of period
    Dpwm0Regs.DPWMEV4.all = EVENT4; // set EVENT 4 to 75% (start) of period

    Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 1; // enable DPWM0 locally
    LoopMuxRegs.GLBEN.bit.DPWM0_EN = 1; // enable DPWM0 globally
    }


    void main()
    {
    // enable JTAG
    MiscAnalogRegs.IOMUX.all = 0;

    //---------------------------------------------------------------------------
    // IMPORTANT: READ BELOW, OR CODE MAY NOT EXECUTE CORRECTLY
    //---------------------------------------------------------------------------
    // tie pin FAULT3 to ground for normal operation
    // tie pin FAULT3 to 3.3V to clear checksum
    //if(GioRegs.FAULTIN.bit.FLT3_IN == 1)
    //{
    // clear_integrity_word();
    //}

    #if (UCD3138|UCD3138064)
    MiscAnalogRegs.CLKTRIM.bit.HFO_LN_FILTER_EN = 0;
    MiscAnalogRegs.CSTRIM.bit.RESISTOR_TRIM =23; //28;
    #endif

    init_pmbus(0x58); // initialize PMBus handler
    init_dpwm0(); // initialize DPWM0
    // ram_event2 = Dpwm0Regs.DPWMEV2.all; // initialize hyperknob
    for(;;)
    {
    pmbus_handler();
    // Dpwm0Regs.DPWMEV2.all = ram_event2; // put hyperknob value into register

    if(PS < 2.0e-6) PS = 65.0e-6;
    else{
    PS = PS - 0.01e-6;
    //Set PWM
    Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 0; // disable DPWM0 locally during initilization
    Dpwm0Regs.DPWMPRD.all = PERIOD; // use .all for all values, so that the scaling matches
    Dpwm0Regs.DPWMEV1.all = EVENT1; // set EVENT 1 to 0% (start) of period
    Dpwm0Regs.DPWMEV2.all = EVENT2; // set EVENT 2 to 25% (start) of period
    Dpwm0Regs.DPWMEV3.all = EVENT3; // set EVENT 3 to 50% (start) of period
    Dpwm0Regs.DPWMEV4.all = EVENT4; // set EVENT 4 to 75% (start) of period
    Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 1; // enable DPWM0 locally
    }
    //Wait
    for(i=0;i<100000;i++){

    }

    }
    }