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.

LDC1000 resolution and handling

Other Parts Discussed in Thread: MSP430F5659, LDC1000EVM

Hello,


I'm trying to use the LDC1000 to measure the change of inductance in a RIP-Belt (belt with a woven wire) and encountered some difficulties.


1. The d/s states "Conversion data is updated to these registers only when a read is initiated on 0x21 register." while in fact it seems 0x20 (Status) has the described effect?

2. DRDYB Mode: INTB is supposed to be pulsed when a read is in progress. However figure 20 shows that it is held high instead, which is also what I abserve when scoping the line....?

3. SPI write commands: "Data is written into the register on the rising edge of the 16th clock." - That does not seem to be the case either. I always have to send another Byte (or generate additional clock flanks) for the value to be written (while keeping CSB set, of course) - no matter the polarity or phase of the SPI clock on the MSP430F5659 side...?

4. Regarding the L-resolution, I currently only get like 4-Bit of resolution for my setup no matter what settings i choose for the resgisters / filter capacitor (was told here to change from 100pF to 33pF to increase resolution). Here are some example configurations (last column values are way out of range but were suggested here):

Setting Value Register Setting Value Register Setting Value Register
C_F (pF) 100   C_F (pF) 33   C_F (pF) 10  
C_TANK (pF) 470   C_TANK (pF) 470   C_TANK (pF) 66  
Fmin (Hz) 500000 159 Fmin (Hz) 4000000 221 Fmin (Hz) 500000 159
Ampl (V) 4 10 Ampl (V) 2 1 Ampl (V) 2 1
RT 6144 111 RT 6144 111 RT 6144 111
Rp_Max 1347 0x1D Rp_Max 1347 0x1D Rp_Max 1796 0x1C
Rp_Min 1026 0x3E Rp_Min 1026 0x3E Rp_Min 1347 0x1D
                 
FREQ (max) 4043 FREQ (max) 4011 FREQ (max) 1815
  (min) 3991   (min) 3961   (min) 1794
  (diff.) 52   (diff.) 50   (diff.) 21
PROX   15500 PROX   13870 PROX   21000
    12250     10900     18600
    3250     2970     2400
Y   0.4730 Y   0.4233 Y   0.6409
    0.3738     0.3326     0.5676
Rp (Ohm)   1173.35 Rp (Ohm)   1189.48 Rp (Ohm)   1479.87
    1205.95     1220.03     1510.25
F_sensor (Hz)   4052436.31 F_sensor (Hz)   4084766.89 F_sensor (Hz)   9026997.25
    4105236.78     4136329.21     9132664.44
L (uH)   3.28 L (uH)   3.23 L (uH)   4.71
    3.20     3.15     4.60

So what can i do to get more than 4-Bit resolution out of the 24-Bit stated in the prodcut description?


PS: When measuring the inductance of the belt externally I get ~4uH (at 1 Hz - 100kHz).

  • Hello Silvano,
    4uH may be a bit low for the LDC1000, depending on the Q of the sensor. Refer to e2e.ti.com/.../inductive-sensing-sensor-frequency-constraints for some more details. You can try using a series inductor as discussed in e2e.ti.com/.../inductive-sensing-how-to-use-a-tiny-2mm-pcb-inductor-as-a-sensor for more information on that.
    As for the register update, the datasheet is correct on register 0x21; note that reading register 0x21 before the completion of a new conversion will produce the same output data from the previous read. Note that for LDC1000, the status register needs an extra clock (17th pulse) with CSB asserted in order for proper operation. The best approach is to simply read data 0x21 after status (0x20) read.
    Figure 20 does not show the pulsing feature, rather it shows the deassertion of INTB on the readback of register 0x21.
    Please check with a scope your waveforms a consistent with the datasheet regarding the 16 clocks.
    The L resolution can be improved be setting a higher response time value or using a lower frequency sensor. Note that both of these changes will reduce your sample rate. And, you should use the highest reference frequency possible (8MHz) for the TBCLK input (note that the MSP430 used on the LDC1000EVM can't provide an 8MHz signal AND keep the USB running, so the EVM uses 6MHz).
    Regards,Chris O
  • "Please check with a scope your waveforms a consistent with the datasheet regarding the 16 clocks."

    > Here are some screenshots showing the write and read process and the corresponding code (except reading):

    write_command_rip(0x06, 0xAB);
    char value = read_command_rip(0x06);
    if( value != 0xAB ){
        _NOP();
    }
    if( value == 0xAB ){
        _NOP();
    }
    write_command_rip(char adr, char data){
    	// set !CS
    	RIP_SPI_CS_LOW;
    
    	// send write address
    	while(!(UCA1IFG & UCTXIFG));
    	UCA1TXBUF = (adr & 0x7F);
    
    	// send data
    	while(!(UCA1IFG & UCTXIFG));
    	UCA1TXBUF = data;
    
    	// send another byte for additional CLKs
    //	while(!(UCA1IFG & UCTXIFG));
    //	UCA1TXBUF = 0x00;
    
            delay_us_16MHz(2); RIP_SPI_CS_HIGH; }

    write of "0xAB" to "0x06":

    read of "0x06": (still reading as 0xFF - the default value)

    CSB:

    "deassertion of INTB on the readback of register 0x21"

    > Here is a screenshot showing the INTB being held high the moment 0x20 is half read:

    readMultiple_command_rip(RIP_STATUS /*0x20*/, 6 /*amount*/, bufferLDC /*target*/)
    -> sending "0x80 | 0x20" and transceiving 6 times afterwards (sending "0x80")

    As for the resolution I have to test that yet and will inform you of the outcome afterwards.

    regards, Silvano M.

  • The resolution doesnt change much, if at all when going down with the frequency / up with the capacitor:

    570pF: 18 samples

    670pF: 18 samples

    770pF: 23 samples

    870pF: 28 samples, but instable (drops below Rp_Min 0.798)

    PS: something went wrong with the code-insert before...

    CSB:
     

    "deassertion of INTB on the readback of register 0x21"

    > Here is a screenshot showing the INTB being held high the moment 0x20 is half read:

    readMultiple_command_rip(RIP_STATUS /*0x20*/, 6 /*amount*/, bufferLDC /*target*/)

    -> sending "0x80 | 0x20" and transceiving 6 times afterwards (sending "0x80")

     
    regards, Silvano M.

  • Hello Silvano,

    The write of 0xAB to register 0x06 looks correct, assuming the CSB behaves as shown in the other posting. What are the contents of register 0x0B (Power configuration)? Power Configuration should hold 0x00 when changing device configuration. Regsiter changes may be ignored if you are changing them when Power Configuration = 0x01.

    Also, please clarify what the samples mean in your table (e.g. 570pF: 18 samples). Do you mean the output code is 18?

    As for INTB going high on the 8th clock of a read command to register 0x20, yes, that is the behavior; the device assumes all SPI transactions will be complient with the formatting described in the datasheet, and so the true INTB reset stimulus in the device is a read of 0x20, which was what was done.

    Regards,

    ChrisO