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.

DRV3946-Q1: Current fault when using contactor with economizer

Part Number: DRV3946-Q1
Other Parts Discussed in Thread: TPS1HTC30-Q1

Tool/software:

Hello,

I am using the DRV3946-Q1 in an application with contactors that have a built in economizer.  I am seeing some weird behaviors where the driver IC gives an over-current error on the low side.

High side switch: TPS1HTC30-Q1

  • Always on during the test
  • FAULTn signal goes low for ~40us when the low side fault trips, but it self-recovers (it does not open the high side switch)
    • The LATCH is pulled high so expect a fault to latch the high side switch off and require toggling the LATCH to reenable -- but despite seeing FAULTn go low, don't see the switch turn off
  • The current measured on the high side switch at it's peak is 10.5A
  • The high side side switch over-current limit is expected to be 16A (R_ILIM = 0 Ohm to GND)

Low side switch: DRV3946-Q1

  • We've tried changing the peak and hold current limits to 2A hold, 4A peak up to their maximum setting 0xFF
  • The IPROPIx resistors are 10.7kOhm
    • We have an external RC filter from this pin to our MCU for measuring analog voltage which is 4.7kOhm + 470nF
    • With this external RC filter, we found the DRV measured resistance to be 4.7kOhm
    • We tried adjusting or removing the external RC the DRV measures the expected resistance (10.7kOhm)
  • With the external RC on IPROPIx (DRV reported resistance = 4.7k), we occasionally get an over-current trip when driving a contactor with a built-in economizer
  • Without the external RC on IPROPIx (DRV reported resistance = 10.7k), we repeatedly get an over-current trip when driving a contactor with a built-in economizer
  • When trying on a contactor without an economizer the circuit works as expected

Is there a recommended configuration for the DRV3946-Q1 when using it with contactors which have an economizer?  Any ideas why having the DRV detect the correct resistance result in more over-current faults?  Why is the DRV reporting over-current at all if the measured current (measured on the high side switch) is < 11A?

Thank you for any help you can provide.

  • Hello Jessica,

    Thanks for your question. I have some further questions to narrow down on the issue.

    With this external RC filter, we found the DRV measured resistance to be 4.7kOhm

    - Is this coming from MEAS5 and MEAS6 registers?

    -Is there anything else connected on the pin other than 4.7k/47nF. It will be good to see a waveform of RIPROPI pin during power up.

    • With the external RC on IPROPIx (DRV reported resistance = 4.7k), we occasionally get an over-current trip when driving a contactor with a built-in economizer
    • Without the external RC on IPROPIx (DRV reported resistance = 10.7k), we repeatedly get an over-current trip when driving a contactor with a built-in economizer

    - Can you confirm which fault is tripped. Can you provide the Status registers read out

    • When trying on a contactor without an economizer the circuit works as expected

    -Could you provide a current and OUT node waveform of power up both with and without the economizer.

    -Can you also provide the resistance and inductance of the contactor.

    Thanks,

    Ibinu

  • Hi Ibinu,

    I am the firmware engineer working with Jess. Here are the answers to your questions, for context, we are trying to drive an EVC350 contactor (datasheet attached at the end of the post):

    1. The 4.7kΩ resistance we mentioned on the circuit with the RC filter is as read on the MEAS registers. At the moment, we have left the RC filter on the IPROPI1 pin and removed it on the IPROPI2, so the MEAS registers are:
      1. MEAS5 = 0xF911 -> ~4.7kΩ from datasheet page 13
      2. MEAS6 = 0xAD57 -> ~10.7kΩ from datasheet page 13
    2. There is nothing else connected to the IPROPI1 pin besides the RC circuit (as mentioned before, IPROPI2 is currently not connected to anything)

      Figure 1: IPROPI1 pin upon board power up


      Figure 2: IPROPI2 pin upon board power up

    3. When driving the contactor (with economizer) on channel 2, the STATUS registers are as follows:
      1. STATUS0 = 0x148B (Loss of control and OCP_LS error)
        1. This flips between the above and 0x1489 as the contactor is continuously closed and opened by the DRV3946
      2. STATUS1 = 0x3800
      3. STATUS2 = 0x0000
      4. STATUS3 = 0x0000
      5. STATUS4 = 0x0000
      6. STATUS5 = 0x0000

    4. Waveforms for contactor closing with economizer are in figures 3-5. This uses CH2

      Figure 3: DRV3946 CH2OUT and IPROPI2 Waveforms -- DRV Continuously Attempts to Close


      Figure 4: DRV3946 CH2OUT and IPROPI2 Waveforms Zoom to First Closing Attempt


      Figure 4: DRV3946 CH2OUT and IPROPI2 Waveforms Zoom to First Low Side Switch Closing


      Figure 5: DRV3946 CH2OUT and IPROPI2 Waveforms Zoom to First Low Side Switch Opening



      Wave forms for contactor closing with economizer circuit manually bypassed are in figures 6-7. This uses CH2:

      Figure 6: DRV3946 CH2OUT and IPROPI2 Waveforms (No Economizer) -- Commanded Close through SPI
                     Note no PWM occurs later because of a high Hold Current configuration (see config at the end of post)


      Figure 7: DRV3946 CH2OUT and IPROPI2 Waveforms (No Economizer) Zoom to Low Side Switch Closing

      Waveforms for SUCCESSFUL close for contactor with economizer connected to CH1 are shown in figures 8-10:

      Figure 8: DRV3946 CH1OUT and IPROPI1 Waveforms


      Figure 9: DRV3946 CH1OUT and IPROPI1 Waveforms, Zoom for Current


      Figure 10: DRV3946 CH1OUT and IPROPI1 Waveforms, Zoom for CH1OUT

      Waveforms for SUCCESSFUL close for contactor with economizer removed and connected to CH1 are shown in figures 11-12:

      Figure 11: DRV3946 CH1OUT and IPROPI1 Waveforms (No Economizer)


      Figure 12: DRV3946 CH1OUT and IPROPI1 Waveforms (No Economizer), Zoom for CH1OUT

      Waveforms for FAILED close for contactor with economizer connected to CH1 are shown in figures 13-14:

      Figure 13: DRV3946 CH1OUT and IPROPI1 Waveforms -- Failed to close


      Figure 14: DRV3946 CH1OUT and IPROPI1 Waveforms, Zoom For CH1OUT -- Failed to close

      Waveforms for FAILED close for contactor with no economizer connected to CH1 are shown in figure 15:

      Figure 15: DRV3946 CH1OUT and IPROPI1 Waveforms (No Economizer) -- Failed to close

    5. With the economizer removed, the coil resistance is measured at 6.3Ω and the inductance at 12.786mH (at 10kHz using an LCR meter)

    The loaded configuration for the provided waveforms is as follows:

    • CONFIG A Register
          static constexpr ConfigRegisterDataRegA kDefaultConfigRegisterAData{
              .peak_current_setting_ch1 = 0xe4,
              .hold_current_setting_ch1 = 0x51,
              .peak_current_setting_ch2 = 0xe4,
              .hold_current_setting_ch2 = 0x51,
              .uclo_threshold_ch1 = 0x2,
              .ripple_threshold_ch1 = 0x4,
              .pwm_cycle_skip_dis = false,
              .uclo_threshold_ch2 = 0x2,
              .cycle_skip_w_dis = false,
              .ripple_threshold_ch2 = 0x4,
              .vdd_ov_filter = 0x0,
              .vdd_uv_filter = 0x0,
              .pvdd_ov_filter = 0x0,
              .pvdd_uv_filter = 0x0,
              .peak_time_setting_ch1 = 0x8,
              .peak_time_setting_ch2 = 0x8,
              .slope_compensation_enable_ch1 = false,
              .enable_pin_config = false,
              .ocv_filter = false,
              .uclo_fault_filter = 0x4,
              .clamping_time_max_threshold = 0x3,
              .clamping_time_min_threshold = 0x0,
              .peak_ramp_time_min_threshold = 0x0,
              .hold_ramp_time_max_threshold = 0x3,
              .hold_ramp_time_min_threshold = 0x0,
              .nfault_pin_config_3 = false,
              .nfault_pin_config_2 = false,
              .nfault_pin_config_1 = false,
              .nfault_pin_config_0 = false,
              .ch1_pin_turn_on_delay = 0x0,
              .ch1_pin_turn_off_delay = 0x0,
              .ch2_pin_turn_on_delay = 0x0,
              .ch2_pin_turn_off_delay = 0x0,
              .slope_compensation_ch1 = 0x00,
              .reserved_crc = 0x00,
          };
    • CONFIG B Register:
          static constexpr ConfigRegisterDataRegB kDefaultConfigRegisterBData{
              .vdd_ov_shutoff_enable = false,
              .retry_wait_sel = 0x4,
              .spi_wd_sel = 0x3,
              .pc_reg_disable = false,
              .uclo_enable = false,
              .pvdd_ov_shutoff_enable = false,
              .spi_wd_shutoff_enable = false,
              .ot_w_action = false,
              .olp_sel = 0x3,
              .pvv_ov_w_disable = true,
              .ot_w_disable = true,
              .spi_wd_disable = true,
              .qtot_max_w_disable = true,
              .qtot_min_w_disable = true,
              .prt_max_w_disable = true,
              .prt_min_w_disable = true,
              .hrt_max_w_disable = true,
              .hrt_min_w_disable = true,
              .pc_pwm_w_disable = true,
              .ls_sns_to_disable = true,
              .hs_sns_to_disable = true,
              .ripple_u_w_disable = true,
              .ripple_l_w_disable = true,
              .low_curr_w_disable = true,
              .pvdd_uv_w_disable = true,
              .ch1_fss_sel_type = 0x0,
              .ch1_fss_sel = 0x0,
              .ch1_fc_pwm = 0x0b,
              .ch2_fss_sel_type = 0x0,
              .ch2_fss_sel = 0x0,
              .ch2_fc_pwm = 0x0b,
              .dis_ssc = true,
              .cp_ssc_ctrl = false,
              .startup_abist_bypass = false,
              .ch1_olp_dis = false,
              .ch2_olp_dis = false,
              .ripropi_w_bypass = false,
              .ch2_slope_comp_en = false,
              .ch2_slope_comp = 0x00,
              .ch1_ctrl_config = false,
              .ch2_ctrl_config = false,
              .reserved_crc = 0x00,
          };

    EVC350 Contactor Datasheet:

    EVC350-EN.pdf

    Thanks you for your help. Let me know if you would like us to perform any additional tests.

    Marco

  • HI Marco,

    Thanks for the detailed waveforms. Please give me a day to review this and I will get back to you by 07/28.

    Thanks,

    Ibinu

  • Hello Marco,

    Thanks again for the detailed waveforms.

    There is nothing else connected to the IPROPI1 pin besides the RC circuit (as mentioned before, IPROPI2 is currently not connected to anything)

    Figure 1: IPROPI1 pin upon board power up

    During power up we measure the RIPORPI by forcing a current IPROPI pin and measuring against known thresholds, please see an example waveform below. From the waveform you shared it looks like  the RC waveform looks corrupted. 

    However, I feel that the waveform without the RC is also not looking as per the expectation . Can you confirm that the signal is floating and not going to other pages in the schematic (like an MCU input etc) 


    Figure 2: IPROPI2 pin upon board power up

    Thanks,

    Ibinu

  • Hello ,

    Coming to the second problem, around 80ms looks like there is a high current and going into LSOCP.


    Figure 4: DRV3946 CH2OUT and IPROPI2 Waveforms Zoom to First Closing Attempt

    I went through the datasheet of contactor, but couldn't find out a reason.

    Also from the waveforms I understand that the waveforms that CH2 without the economizer was able to make the successful connection. 

    For the end system are you planning to consider having the economizer? or will it be without that.

    Thanks,

    Ibinu

  • Hi Ibinu,

    It seems like I had some additional probes connected to the IPROPI pins when taking the board power up waveforms. I was able to retake those and got figure 1 for CH1 (contains RC filter) and figure 2 for CH2 (no filter). I verified the board layout and there is nothing else connected to the IPROPI pins.


    Figure 1: CH1 IPROPI Pin Measurement On Board Power Up


    Figure 2: CH2 IPROPI Pin Measurement On Board Power Up
    One thing I noticed is that the max voltage on the pin is not always the same for CH2. See Figure 3 and 4 for different captures of the board power up. Would these values be within the expectation?


    Figure 3: CH2 IPROPI Pin Measurement On Board Power Up - Vmax ~= 0.888V


    Figure 4: CH2 IPROPI Pin Measurement On Board Power Up - Vmax ~= 1.16V

    Regarding the spike for CH2 on the contactor with economizer, I captured a close up of the event as shown in Figure 5 below. A similar waveform was captured in Figure 5 of my previous response.


    Figure 5: CH2 Overcurrent Event on Contactor with Economizer

    It would seem the voltage starts changing first, but I am not sure why the the contactor would be pulling more current in this case. Would you expect the DRV3946 to work as expected with an economized contactor? Do you have a recommended register configuration I can try on this setup?

    You are correct, I was able to get a contactor without economizer to close successfully using the same configuration. I simply opened the contactor and de-soldered the economizer circuit and connected directly to the coil for the test. Our nominal configuration will support a variety of economized (most common) and a few non-economized contactors from different vendors. We are trying to get a general configuration to work but we were surprised to see OCP errors on this economized contactor since we would have expected it to be easier to control. If you have a recommendation for the register configuration I would appreciate it.
    I have tried using the non-regulating mode at 100% duty but I would still get OCP errors.

    Thank you for your help, I look forward to your response.

    Marco

  • Hello Marco,

    Thanks for the updated waveforms.

    From Fig 2 and 3 looks like the voltage is varying almost ~30%. This seems quiet high.  One follow-up here would be to look at the MEAS6 register and see if the register value is changing similarly. This would help us isolate if we have any measurement related issues.

    Thanks,
    Ibinu

  • Hello Marco,

    Adding on the second question.

    The interaction between economizer and DRV3946 will depend on the operation of economizer also. 

    At the system level would the current regulation be done by economizer or DRV3946. DRV3946 has an option to do constant duty cycle if economizer is to be used for current regulation( please see the internal regulation disabled settings below).

    You can find more details on this in datasheet sections 6.3.5.2 Fixed Frequency, Variable Duty Cycle Mode and 6.3.5.3 Fixed Duty Cycle, Variable Frequency Mode.

    Thanks,

    Ibinu

  • Hi Ibinu, 

    Sorry for the delayed reply.

    I got more waveforms for the board power up to confirm the variability of the measurement voltage on the IPROPI line for CH2. I took four measurements, the first three had a maximum voltage of 1.24V, 1.20V, and 1.24V respectively and had a waveform similar to the one in Figure 1 below. The fourth measurement was different, with a maximum voltage of 0.80V and had the waveform shown in Figure 2. The MEAS6 register value for each measurement was:

    1. 0xAE57
    2. 0xAE57
    3. 0xAE57
    4. 0xAD57

    Figure 1: Board Power-up CH2 IPROPI Measurement (Attempt #3)

    Figure 2: Board Power-up CH2 IPROPI Measurement (Attempt #4)

    Regarding the configuration without regulation, I had some success but not in all cases. We have QTY 3 DRV3946 on this board and I had a couple of configurations for our RC filter for testing. The IPROPI circuit for each driver was as follows:

    • Driver 1, CH1:
      • RIPROPI = 10.7kΩ
      • Filter values:
        • R = 4.7kΩ
        • C = 470nF
    • Driver 1, CH2:
      • RIPROPI = 10.7kΩ
      • Filter values: none (filter circuit was removed)
    • Driver 2, CH1:
      • RIPROPI = 10.7kΩ
      • Filter values:
        • R = 4.7kΩ
        • C = 470nF
    • Driver 2, CH2:
      • RIPROPI = 10.7kΩ
      • Filter values:
        • R = 4.7kΩ
        • C = 470nF
    • Driver 3, CH1:
      • RIPROPI = 10.7kΩ
      • Filter values:
        • R = 100kΩ
        • C = 470nF
    • Driver 3, CH2:
      • RIPROPI = 10.7kΩ
      • Filter values:
        • R = 100kΩ
        • C = 22nF

    You'll notice that on Driver 3, we changed the RC filter resistance to 100kΩ to attempt to minimize the effects of the filter when the driver measures RIPROPI on boot. However, we could not get the channels on Driver 3 to close.The results of the MEAS5 and MEAS6 for Driver 3 are as follows:

    • MEAS5:
      • RIPROPI: 0xBA
      • VIPROPI: 0x4C
    • MEAS6:
      • RIPROPI: 0xB8
      • VIPROPI: 0x4D

    Both of these measurements are within the range for the 10kΩ IPROPI resistance, according to section 5.5, p.13

    For all drivers, we used the economized contactors and set the software configuration shown below. The close command was CHx_CTRL = 0x3.

    Struct for Config A Register

    static constexpr ConfigRegisterDataRegA kDefaultConfigRegisterAData{
            .peak_current_setting_ch1 = 0xe4,
            .hold_current_setting_ch1 = 0x51,
            .peak_current_setting_ch2 = 0xe4,
            .hold_current_setting_ch2 = 0x51,
            .uclo_threshold_ch1 = 0x2,
            .ripple_threshold_ch1 = 0x4,
            .pwm_cycle_skip_dis = false,
            .uclo_threshold_ch2 = 0x2,
            .cycle_skip_w_dis = false,
            .ripple_threshold_ch2 = 0x4,
            .vdd_ov_filter = 0x0,
            .vdd_uv_filter = 0x0,
            .pvdd_ov_filter = 0x0,
            .pvdd_uv_filter = 0x0,
            .peak_time_setting_ch1 = 0x8,
            .peak_time_setting_ch2 = 0x8,
            .slope_compensation_enable_ch1 = false,
            .enable_pin_config = false,
            .ocv_filter = true,
            .uclo_fault_filter = 0x4,
            .clamping_time_max_threshold = 0x3,
            .clamping_time_min_threshold = 0x0,
            .peak_ramp_time_min_threshold = 0x0,
            .hold_ramp_time_max_threshold = 0x3,
            .hold_ramp_time_min_threshold = 0x0,
            .nfault_pin_config_3 = false,
            .nfault_pin_config_2 = false,
            .nfault_pin_config_1 = false,
            .nfault_pin_config_0 = false,
            .ch1_pin_turn_on_delay = 0x0,
            .ch1_pin_turn_off_delay = 0x0,
            .ch2_pin_turn_on_delay = 0x0,
            .ch2_pin_turn_off_delay = 0x0,
            .slope_compensation_ch1 = 0x00,
            .reserved_crc = 0x00,
        };

    Struct for Config B Register

    static constexpr ConfigRegisterDataRegB kDefaultConfigRegisterBData{
            .vdd_ov_shutoff_enable = false,
            .retry_wait_sel = 0x4,
            .spi_wd_sel = 0x3,
            .pc_reg_disable = true,
            .uclo_enable = false,
            .pvdd_ov_shutoff_enable = false,
            .spi_wd_shutoff_enable = false,
            .ot_w_action = false,
            .olp_sel = 0x3,
            .pvv_ov_w_disable = true,
            .ot_w_disable = true,
            .spi_wd_disable = true,
            .qtot_max_w_disable = true,
            .qtot_min_w_disable = true,
            .prt_max_w_disable = true,
            .prt_min_w_disable = true,
            .hrt_max_w_disable = true,
            .hrt_min_w_disable = true,
            .pc_pwm_w_disable = true,
            .ls_sns_to_disable = true,
            .hs_sns_to_disable = true,
            .ripple_u_w_disable = true,
            .ripple_l_w_disable = true,
            .low_curr_w_disable = true,
            .pvdd_uv_w_disable = true,
            .ch1_fss_sel_type = 0x0,
            .ch1_fss_sel = 0x0,
            .ch1_fc_pwm = 0x00,
            .ch2_fss_sel_type = 0x0,
            .ch2_fss_sel = 0x0,
            .ch2_fc_pwm = 0x00,
            .dis_ssc = true,
            .cp_ssc_ctrl = false,
            .startup_abist_bypass = false,
            .ch1_olp_dis = false,
            .ch2_olp_dis = false,
            .ripropi_w_bypass = false,
            .ch2_slope_comp_en = false,
            .ch2_slope_comp = 0x00,
            .ch1_ctrl_config = false,
            .ch2_ctrl_config = false,
            .reserved_crc = 0x00,
        };

    Waveforms for all channels are shown in Figures 3-8 below:

    Figure 3: Driver 1, CH1 Contactor Closing Waveform

    Figure 4: Driver 1, CH2 Contactor Closing Waveform

    Figure 5: Driver 2, CH1 Contactor Closing Waveform

    Figure 6: Driver 2, CH2 Contactor Closing Waveform

    Figure 7: Driver 3, CH1 Contactor Closing Waveform

    Figure 8: Driver 3, CH2 Contactor Closing Waveform

    As you can see on Figure 7 and 8, we get an OCP_LS (which I confirmed by looking at the STATUS0 register). In this case the initial spikes are of about 4.72V, which is the same as the spike for the Driver 1, CH2 (no RC filter), except that one managed to successfully close the contactor.

    Comparing the MEAS5 and MEAS6 for these two drivers, we see that they are both within the range for the 10kΩ IPROPI resistance, but Driver 1 CH2 measures 0xAE (174 decimal), while Driver 3 CH2 measures 0xB8 (184 decimal)

    We want to be able to successfully close the economized contactor as well as monitor the current that is being drawn (via the RC circuit to the ADC input). Is this something that would not be possible? Or do you maybe have a recommendation for RC values that we can try to be able to achieve both goals?

    It would be nice, if possible, to get a formula of how these MEAS5/6 resistance/voltage codes come into play when calculating the observed current and therefore the OCP_LS error trigger. Do you have a formula for Current Draw as a function of RIPROPI, AIPROPI, and the voltage measured at the IPROPI pin?

  • Hi Marco,

    Thanks for the detailed reply. Let me go through this and come back to you by early next week.

    Thanks,
    Ibinu