DRV3946-Q1: Spike and hold functionality does not appear to work

Part Number: DRV3946-Q1

Tool/software:

Hello again,

I have been working with this device off and on for a while and finally got it MOSTLY working.  I was informed by the test team recently that the device is not operating the spike and hold functionality...

I have the device set up so that I can use EN and EN1 as individual controls for the two solenoids that the device is controlling, I THINK I have also set it up so that the spike lasts about 250ms and the hold is then %40 of the peak current value, however, it never goes into hold mode.. The current always stays at the maximum for the device which is about 400ma.

I have the registers set up like so.

Spi Read gave us Register Addr 0x1 rdata -> 0xc1 = 0x1 0x88
Spi Read gave us Register Addr 0x2 rdata -> 0xc2 = 0x8 0x80
Spi Read gave us Register Addr 0x3 rdata -> 0xc3 = 0x8 0x0
Spi Read gave us Register Addr 0x4 rdata -> 0xc4 = 0x8 0x0
Spi Read gave us Register Addr 0x5 rdata -> 0xc5 = 0x0 0x0
Spi Read gave us Register Addr 0x6 rdata -> 0xc6 = 0x1 0x0
Spi Read gave us Register Addr 0x7 rdata -> 0xc7 = 0xff 0x9c
Spi Read gave us Register Addr 0x8 rdata -> 0xc8 = 0x1 0x0
Spi Read gave us Register Addr 0x9 rdata -> 0xc9 = 0xff 0x9c
Spi Read gave us Register Addr 0xa rdata -> 0xca = 0x0 0x0
Spi Read gave us Register Addr 0xb rdata -> 0xcb = 0x0 0x0
Spi Read gave us Register Addr 0xc rdata -> 0xcc = 0xb9 0x4c
Spi Read gave us Register Addr 0xd rdata -> 0xcd = 0xb9 0x4c
Spi Read gave us Register Addr 0xe rdata -> 0xce = 0x0 0x0
Spi Read gave us Register Addr 0xf rdata -> 0xcf = 0x0 0x0
Spi Read gave us Register Addr 0x10 rdata -> 0xd0 = 0xc0 0x40
Spi Read gave us Register Addr 0x11 rdata -> 0xd1 = 0xc0 0x40
Spi Read gave us Register Addr 0x12 rdata -> 0xd2 = 0x24 0x24
Spi Read gave us Register Addr 0x13 rdata -> 0xd3 = 0x0 0xff
Spi Read gave us Register Addr 0x14 rdata -> 0xd4 = 0xd3 0xc
Spi Read gave us Register Addr 0x15 rdata -> 0xd5 = 0x80 0x0
Spi Read gave us Register Addr 0x16 rdata -> 0xd6 = 0x0 0xde
Spi Read gave us Register Addr 0x17 rdata -> 0xd7 = 0x26 0x23
Spi Read gave us Register Addr 0x18 rdata -> 0xd8 = 0x0 0x0
Spi Read gave us Register Addr 0x19 rdata -> 0xd9 = 0xb 0xb
Spi Read gave us Register Addr 0x1a rdata -> 0xda = 0xa0 0x0
Spi Read gave us Register Addr 0x1b rdata -> 0xdb = 0x0 0x56
Spi Read gave us Register Addr 0x1c rdata -> 0xdc = 0x80 0xb1
Spi Read gave us Register Addr 0x1d rdata -> 0xdd = 0x12 0x5f
Spi Read gave us Register Addr 0x1e rdata -> 0xde = 0x0 0x87
Spi Read gave us Register Addr 0x1f rdata -> 0xdf = 0x0 0x0

and the command registers I have been playing around with, currently they hold the following contents..

Spi Read gave us Register Addr 0x1c rdata -> 0xdc = 0x80 0xb1
Spi Read gave us Register Addr 0x1d rdata -> 0xdd = 0x12 0x5f
Spi Read gave us Register Addr 0x1e rdata -> 0xde = 0x0 0x87

I have tried many different settings but have failed to successfully get it to do the spike and then move to hold.

All of the specifications read as if it SHOULD be able to do this on it's own, my concern is that I will actually have to smack the device around using the cmd1 register to forcibly move it to %50 every time I activate it, I'd really rather not have to do that.  

Does the drv3946 actually do this on its own when I enable the solenoid with the EN lines? Or do I have to go in and touch the cmd1 register after I activate it to do this myself?

Any insight you can give me on this would be helpful.

Thanks

Rick

  • Hi Rick,

    Sorry for the delay. Give me till end of this weel to quickly try this on bench and get back to you.

    Best,

    Keerthi

  • Hello there. Have you managed to get any results for this?  Also, where can I get a copy of the errata sheet for the drv3946?

    Thanks

    Rick

  • Hi Rick,

    Apologies on the slow response.

    From the register map of the config registers looks good.

    However i see that Status0 register is showing bit 7 and 3 as high, which points to either open load or short to Ground kind of fault

    DO you think if this is a possibility in the system.

    Thanks,

    Ibinu

  • Ah, my apologies, I think I grabbed the status registers from the wrong device. I have four devices on my board, with a total of 8 valves...  Half of them are not populated.. The configuration register settings, however, are all identical.  My intention was to share just the configuration register settings.  So no, that's not what is causing this.. There is something else, but I simply don't understand what.

    One thing I HAVE been able to do is to use the command register to reset the current to %50, and that has worked, but I REALLY need to be able to just set an IO bit to energize or energize the valves, and have the drv3946 do what it's supposed to do an d perform the spike and hold operation for me.

    Are there any  other things I can look at in my configuration register settings to determine what's going on?  Also, is there some errata that I can look at and see if maybe something in there is pointing to a solution?

    Thank you!

    Rick

  • Hi Richard,

    Can you provide me a waveform of the PVDD, Output voltage and current once the current regulation command is given.

    It will be useful to look at the status registers also to see what kind of fault is seen.

    Thanks,

    Ibinu

  • Capturing the data in this thread to help others as well.

    Coil voltage is running at 24volts

    Coil resistance is 56.3 ohms

    Coil inductance - 237.5 milli henries

    Register dump for the device with only the EN1 line asserted.

    EN1 asserted, DIS NOT asserted. nFault not asserted, Device error not asserted, Device warning asserted in states register 0 (Address 0x1)

    Micropython run from load shown for reference.

    >>> import main
    ERROR: CODE=200 ATTR=VALVE_4 Short to ground or open, loss of valve control
    ERROR: CODE=200 ATTR=VALVE_3 Short to ground or open, loss of valve control
    ERROR: CODE=200 ATTR=VALVE_6 Short to ground or open, loss of valve control
    ERROR: CODE=200 ATTR=VALVE_5 Short to ground or open, loss of valve control
    ERROR: CODE=200 ATTR=VALVE_8 Short to ground or open, loss of valve control
    ERROR: CODE=200 ATTR=VALVE_7 Short to ground or open, loss of valve control
    0 svs 1 1
    OK: SEQ_ID=0 Valve 1 state set to 1
    ERROR: CODE=311 ATTR=CONTROLLER_1 Maximum threshold violation set by CHx_PT
    ERROR: CODE=318 ATTR=CONTROLLER_1 Minimum threshold violation set by HRT_MIN_THRS
    ERROR: CODE=208 ATTR=CONTROLLER_1 Under current lock out warning
    ERROR: CODE=222 ATTR=CONTROLLER_1 Ripple low warning during hold current regulation
    ERROR: CODE=224 ATTR=CONTROLLER_1 Hold current low current warning during hold current regulation
    0 dc
    Dump DRV3946 #1......
    Spi Read gave us Register Addr 0x1 rdata -> 0xc1 = 0x15 0x10 (Status0, EN1 asserted, DIS , nFault, Device error NOT asserted. Device warning asserted)
    Spi Read gave us Register Addr 0x2 rdata -> 0xc2 = 0x38 0x80
    Spi Read gave us Register Addr 0x3 rdata -> 0xc3 = 0x21 0x30
    Spi Read gave us Register Addr 0x4 rdata -> 0xc4 = 0x0 0x0
    Spi Read gave us Register Addr 0x5 rdata -> 0xc5 = 0x7d 0x0
    Spi Read gave us Register Addr 0x6 rdata -> 0xc6 = 0x9c 0x0
    Spi Read gave us Register Addr 0x7 rdata -> 0xc7 = 0x0 0x0
    Spi Read gave us Register Addr 0x8 rdata -> 0xc8 = 0x0 0x0
    Spi Read gave us Register Addr 0x9 rdata -> 0xc9 = 0x0 0x0
    Spi Read gave us Register Addr 0xa rdata -> 0xca = 0x80 0x14
    Spi Read gave us Register Addr 0xb rdata -> 0xcb = 0x0 0x0
    Spi Read gave us Register Addr 0xc rdata -> 0xcc = 0xb8 0x4d
    Spi Read gave us Register Addr 0xd rdata -> 0xcd = 0xb8 0x4e
    Spi Read gave us Register Addr 0xe rdata -> 0xce = 0x0 0x0
    Spi Read gave us Register Addr 0xf rdata -> 0xcf = 0x0 0x0
    Spi Read gave us Register Addr 0x10 rdata -> 0xd0 = 0xc0 0x40
    Spi Read gave us Register Addr 0x11 rdata -> 0xd1 = 0xc0 0x40
    Spi Read gave us Register Addr 0x12 rdata -> 0xd2 = 0x24 0x24
    Spi Read gave us Register Addr 0x13 rdata -> 0xd3 = 0x0 0xff
    Spi Read gave us Register Addr 0x14 rdata -> 0xd4 = 0xd3 0xc
    Spi Read gave us Register Addr 0x15 rdata -> 0xd5 = 0x80 0x0
    Spi Read gave us Register Addr 0x16 rdata -> 0xd6 = 0x0 0xde
    Spi Read gave us Register Addr 0x17 rdata -> 0xd7 = 0x26 0x23
    Spi Read gave us Register Addr 0x18 rdata -> 0xd8 = 0x0 0x0
    Spi Read gave us Register Addr 0x19 rdata -> 0xd9 = 0xb 0xb
    Spi Read gave us Register Addr 0x1a rdata -> 0xda = 0xa0 0x0
    Spi Read gave us Register Addr 0x1b rdata -> 0xdb = 0x0 0x56
    Spi Read gave us Register Addr 0x1c rdata -> 0xdc = 0x80 0xb1
    Spi Read gave us Register Addr 0x1d rdata -> 0xdd = 0x12 0xbc
    Spi Read gave us Register Addr 0x1e rdata -> 0xde = 0x0 0x0
    Spi Read gave us Register Addr 0x1f rdata -> 0xdf = 0x0 0x0

  • Hi Rick,

    I went through the settings file one more time.

     Couple of points I figured out

    1. Address 0x2 (Status 1): PVDD_OV seems to be High, this means that PVDD_OV_SHUTOFF_EN will determine if the driver will turn OFF based on PVDD

    2. Address 0x17 (Config B0 ) : Bit 5 seems to be HIGH  which meansPVDD_OV_SHUTOFF_EN =1

    Can you try to keep this bit as mentioned in #2 as LOW and try after CLR-FAULT

    Thanks,

    Ibinu

  • I tried this and I do not see it going into hold mode. 

    As for the PVDD_OV.. this will always be true since we are using 24volts to drive the valves and have PVDD at 24volts. Given the threshold is 13.5 volts, I expect to always see PVDD_OV set to true.

    Thanks

    Rick

  • HI Rick,

    Thanks for your patience. I am sending you one more meeting invite. Can you help with the waveforms on the OUT node and current through the coil, when the device is turned on with current regulation.

    Thanks,

    Ibinu