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.

Blanking Windows can NOT overlap!

Other Parts Discussed in Thread: TMS320F28027

Hi,

"SPRUGE9E - F2.9.3.2 Event Filtering" states, that blanking windows can overlap, this seem not to be true.
Initialized with the following Code the ePWM generates Sync Pulses @ CTR = Zero and also starts a blanking window @ CTR = Zero. As long as the windows are not overlapping everything is OK, but if you increase the window, that it is longer than the period (i.e. > 120) -> blanking windows overlap and every second window is lost.

Some explanations:

- Blanking (yellow) low means the window is active.

- SYNC_OUT (red) is the sync output @ CTR = Zero

- you can see the blanking window length changed from 50 to 150 in the mid, you would expect to see Blanking to be permanently low from that point, cause the window is longer than the period, but every second window is lost, so that you can see a Blanking at every second pulse that is 2.5µs(150*16,6ns) long.

- to output the blanking window the Output is forced to be low by AQCSFRC, but overwritten by the TripZone that sets it high cause Comp1 @ DCAEVT1 is permanently set. -> Output is low when blanking window inhibits Comp1 @ DCAEVT1

The ePWM init:

//=================================================================================
//    Comparators used for Over Current Trip Zone
//=================================================================================

// init comparators, they will generate a high signal when the input is above the Limit
AdcRegs.ADCCTL1.bit.ADCBGPWD         = 1;                        // Comparator shares the internal BG reference of the ADC -> must be powered even if ADC is unused or uses another reference

Comp1Regs.COMPCTL.bit.COMPDACEN     = 1;                        // Power up Comparator 1
Comp1Regs.COMPCTL.bit.COMPSOURCE     = 0;                          // Connect the inverting input to Internal DAC
Comp1Regs.COMPCTL.bit.CMPINV        = 0;                        // Output is not inverted
Comp1Regs.COMPCTL.bit.QUALSEL        = 0;                        // no Qualification Periode, effectless cause overwritten by SYNCSEL
Comp1Regs.COMPCTL.bit.SYNCSEL        = 0;                        // Asynchronous Comparator Output / Not synchronized to clock
Comp1Regs.DACVAL.bit.DACVAL         = 512;                        // Set DAC output

//=================================================================================
//    ePWM1
//=================================================================================

//DCTRIPSEL
EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL    = DC_COMP1OUT;                // input for Qualifier A High is DC_COMP1OUT

// Event x Qual
EPwm1Regs.TZDCSEL.all                 = 0;                        // init
EPwm1Regs.TZDCSEL.bit.DCAEVT1        = TZ_DCAH_HI;                // forward Comp1 Signal

// init blanking window.
EPwm1Regs.DCFCTL.all                = 0;                        // init
EPwm1Regs.DCFCTL.bit.PULSESEL         = DC_PULSESEL_ZERO;            // alligned @ CTR = Zero
EPwm1Regs.DCFCTL.bit.BLANKE         = DC_BLANK_ENABLE;            // Enable blanking
EPwm1Regs.DCFCTL.bit.SRCSEL         = DC_SRC_DCAEVT1;            // Filter Block signal source (DCAEVT1)
EPwm1Regs.DCFWINDOW                 = 50;                        // Blanking window duration
EPwm1Regs.DCFOFFSET                    = 1;                        // Blanking offset duration

// Event Triggerin
EPwm1Regs.DCACTL.all                = 0;                        // init
EPwm1Regs.DCACTL.bit.EVT1SRCSEL        = DC_EVT_FLT;                // filtered Overcurrent Signal 1
EPwm1Regs.DCBCTL.all                = 0;                        // init

// init, TimeBase is only used to allign the blanking window. Output is controlled by Continous Software Force and TripZone
EPwm1Regs.TBPRD                     = 119;                        // 60MHz / 500kHz - 1 = 119clks;     // Period = 120 TBCLK counts -> 500kHz

EPwm1Regs.TBCTR                     = 0;                         // clear TB counter
EPwm1Regs.TBCTL.bit.CTRMODE         = TB_COUNT_UP;
EPwm1Regs.TBCTL.bit.PHSEN             = TB_DISABLE;                 // Phase loading disabled
EPwm1Regs.TBCTL.bit.PRDLD             = TB_SHADOW;
EPwm1Regs.TBCTL.bit.SYNCOSEL         = TB_CTR_ZERO;                // Output Syny Signal for debug
EPwm1Regs.TBCTL.bit.HSPCLKDIV         = TB_DIV1;                     // TBCLK = SYSCLK
EPwm1Regs.TBCTL.bit.CLKDIV             = TB_DIV1;                    // TBCLK = SYSCLK
EPwm1Regs.TBCTL.bit.PHSDIR            = TB_UP;                    // Count Up after Sync event
EPwm1Regs.TBCTL.bit.FREE_SOFT        = 0x10;                        // Free run even during emulation events

EPwm1Regs.CMPCTL.all                = 0;                        // init

EPwm1Regs.AQCTLA.all                = 0;                        // init
EPwm1Regs.AQCTLB.all                = 0;                        // init

EPwm1Regs.AQSFRC.all                = 0;                        // init
EPwm1Regs.AQSFRC.bit.RLDCSF            = 0x3;                        // Load Continious Software Force immediately

EPwm1Regs.AQCSFRC.all                = 0x0;                        // init
EPwm1Regs.AQCSFRC.bit.CSFA            = AQCSFRC_LOW;                // force Pin state by Software -> low

EPwm1Regs.DBCTL.all                    = 0;                        // DeadBand Control is not used/bypassed

EPwm1Regs.PCCTL.all                    = 0;                        // Chopping is not used/bypassed

// Disable High Resolution
EPwm1Regs.HRCNFG.all                = 0;                        // Disable HR
EPwm1Regs.HRPCTL.all                = 0;

// init Trip Zone
EPwm1Regs.TZSEL.all                    = 0;                        // init

EPwm1Regs.TZCTL.all                    = 0x0FFF;                    // init all Events are disabled
EPwm1Regs.TZCTL.bit.DCAEVT1            = TZ_FORCE_HI;                // OverCurrent Pulse Skipping

EPwm1Regs.TZEINT.all                = 0;                        // init // no Interrupts yet

// Enable TimeBase Clock of the ePWM after they have been configured, to have them synchronized
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC     = 1;                      // Enable TBCLK within the EPWM

// clear all Flags
EPwm1Regs.TZCLR.all                 = 0x007F;                // Clear all Flags
EPwm2Regs.TZCLR.all                 = 0x007F;                // Clear all Flags
EPwm3Regs.TZCLR.all                 = 0x007F;                // Clear all Flags
EPwm4Regs.TZCLR.all                 = 0x007F;                // Clear all Flags
EPwm1Regs.ETCLR.bit.INT                = 1;                    // Clear Interrupt Flag
EPwm2Regs.ETCLR.bit.INT                = 1;                    // Clear Interrupt Flag
EPwm3Regs.ETCLR.bit.INT                = 1;                    // Clear Interrupt Flag
EPwm4Regs.ETCLR.bit.INT                = 1;                    // Clear Interrupt Flag

// ePWMs are initialized -> route Outputs
GpioCtrlRegs.GPAMUX1.bit.GPIO0         = 1;                    //     0=GPIO,  1=EPWM1A,  2=Resv,       3=Resv

EDIS;

  • Hi,
    can anyone confirm or deny this?
    We used the TMS320F28027. Are overlapping blanking windows possible with other Piccolo devices?
  • Hi,

    Blanking window can go over the period bounday. 
    When the offset counter expires, the blanking window is applied. If the blanking window is currently active at that time (looks to be the case above) then the blanking window counter is restarted.
    So, offset counter starts at the selected time every PWM cycle irrespective of the blanking status. Once the offset counter is expired, if the blanking window is active, then blanking window will restart - without the previous blanking window completion.
    Hence behavior is completely depending on the PWM period, blanking window, offset window, pulsesel.

    -Bharathi.

      

     

     

  • Hi,

    We tried some different configurations, but were not able to reset the blanking window timer while it is active. -> overlapping windows.
    Can you post an example were windows overlap? Perhaps we can adapt this to our configuration.

    Thanks,
    Johannes
  • Hi Johannes,
    I do not have an example for this case. I'll try this out and let you know.
    Is it possible to send your project?-Bharathi.
  • Hi Johannes,
    I used the configuration you provided above and was able to replicate the behavior you mentioned.
    I do observe that the blanking window doesn't seem to get reset and start a new blaning window in case of overlap.
    I also did notice that for your case - if i just keep blanking window count to 120, output stays low continuously.
    Do it work for you to write blanking window as 120 (if it's >= 120)?
    I'll work on fixing the documentation.-Bharathi.
  • Hi

    thanks for checking. Sending you our project is not possible, but wouldn't help at all cause it is just more complex and has the same effect. We need the overlapping windows for an application, were we are measuring the current in a full bridge and the shortest pulses of the full bridge are shorter than the blanking window we need. Than the windows need to overlap. We are working on a hardware tweak to fix this for our application.
    Do all Piccolo devices react like this? Or has the DigitalCompare module get an update in newer devices?

    Thanks
    Johannes
  • Hi,
    when you are updating the documentation, can you also correct/clarify this:
    e2e.ti.com/.../1617230

    Thanks
    Johannes