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.

MSP430FR5989: MSP430FR5989: How to increase sensitivity of LC sensor (ESI).

Part Number: MSP430FR5989
Other Parts Discussed in Thread: EVM430-FR6989, TIDM-LC-WATERMTR

Hi all,

I am using the LC Sensor Rotation Detection with MSP430, but the sensitivity when detect metal disk very low, the delta voltage between no metal disk and metal disk is 160mV.

i using L =235uH (GT1128-0, GEMPHIL) and C=470pF.

How to increase sensitivity of LC sensor ?

Thanks,

  • Hi Loc,

    Have you seen https://www.ti.com/lit/slaa639?

    Are you measuring that 160mV at the peak of the difference between the two signals?

    My understanding of electromagnetic damping is pretty rusty, but the induced current in the metal disk is what is actually responsible for the damping effect on the oscillation signal. I would expect that bringing the metal disk and LC sensor closer together would increase the magnitude of damping. Using a higher conductance material for the metal disk may help as well. 

    Best Regards,
    Brandon Fisher

  • Dear Brandon,

    • I have already read the document slaa639.
    • Are you measuring that 160mV at the peak of the difference between the two signals? => Yes. Can you share the peak of the diffenrence between the two sensor of EVM430-FR6989.
    • I can't bring the metal disk and the lc sensor closer (because it limit by hoursing). And i can't change the meterial of metal disk.

    Thank

  • Hi Loc,

    Are you measuring that 160mV at the peak of the difference between the two signals? => Yes. Can you share the peak of the diffenrence between the two sensor of EVM430-FR6989.

    I'm currently checking to see if we have one of these on hand, may have to order it otherwise to get a measurement. 

    Best Regards,
    Brandon Fisher

  • Hi Brandon,

    I am checking the EVM430-FR6989 form supplier. I started my project without use any Evaluation board. I think i miss more information.

    I am getting the big issue, when the water meter run long time, sometime the counter miss a few dozen to a few hundred pulse.

    Thanks,

    Loc,

  • Hi Loc, 

    I've requested a board be sent to me, but it may be a few days. 

    I am getting the big issue, when the water meter run long time, sometime the counter miss a few dozen to a few hundred pulse.

    Are you entering any low power modes in your code? Is this custom software? 

    It sounds a bit like it might be an overflow issue. 

    Best Regards,
    Brandon Fisher

  • Hi Brandon,

    Ok, i will send to you schematic and PCB layout.

    Are you entering any low power modes in your code? => Yes

    Is this custom software? => Yes, this is customer software.

    Please check link (pcb layout, schematic, metal disk, PCB).

    Link: https://drive.google.com/file/d/1cRKrXxMYnjKaEvgf725NB359FCmSK9Ks/view?usp=sharing

    Thanks,

    Loc,

  • Hi Brandon,

    The material  of metal disk look like stainless steel (Weak interaction with magnets).

    Thanks,

    Loc,

  • Hi Brandon,

    It sounds a bit like it might be an overflow issue. 

    => I reset counter every 4 counts.

    //////////////////////////code

    Rotation_Cnt = ESI_getCounter1();

    if((Rotation_Cnt > 3)||(Rotation_Cnt < -3))
    {
        ESI_PSM_resetCounter(ESICNT2RST|ESICNT1RST|ESICNT0RST);

        Rotation_Cnt += Surplus_Rotation_Cnt;
        Integer_Rotation_Cnt = Rotation_Cnt/4;
        Surplus_Rotation_Cnt = Rotation_Cnt%4;
        ///
        FlowVolume += Integer_Rotation_Cnt;

    }

    Thanks

    Loc,

  • Thanks for sharing your files Loc, I will take a look at them. 

    => I reset counter every 4 counts.

    //////////////////////////code

    Rotation_Cnt = ESI_getCounter1();

    if((Rotation_Cnt > 3)||(Rotation_Cnt < -3))
    {
        ESI_PSM_resetCounter(ESICNT2RST|ESICNT1RST|ESICNT0RST);

        Rotation_Cnt += Surplus_Rotation_Cnt;
        Integer_Rotation_Cnt = Rotation_Cnt/4;
        Surplus_Rotation_Cnt = Rotation_Cnt%4;
        ///
        FlowVolume += Integer_Rotation_Cnt;

    }

    This seems like it should workin terms of keeping Rotation_Cnt bounded, what are the size of Integer_Rotation_Cnt, Surplus Rotation_Cnt, and FlowVolume? 

    Best Regards,
    Brandon Fisher

  • Hi Brandon,

    what are the size of Integer_Rotation_Cnt, Surplus Rotation_Cnt, and FlowVolume? 

    =>

    short Rotation_Cnt
    long Integer_Rotation_Cnt
    long Surplus_Rotation_Cnt 

    long  FlowVolume   

    Best Regards,

    Thanks,

    Loc,

  • Hi Brandon,

    May I check if there is any update on this?

    Thanks.

    Best Regards,

    Ernest.

  • Ernest, Loc,

    Are you running a recalibration routine at any point in your program? If so how often? How long does it take for these failures to start occurring? 

    Based on what you shared so far I don't see any obvious reason for an overflow or software condition to create missed cycles, but these systems do require regular recalibration due to drift. 

    Best Regards,
    Brandon Fisher

  • Hi Brandon,

    Are you running a recalibration routine at any point in your program? If so how often?

    =>The Recalib_ESI function was set every 10 minutes.

    How long does it take for these failures to start occurring? 

    =>  It is random. a few days or a few hours.

    Based on what you shared so far I don't see any obvious reason for an overflow or software condition to create missed cycles, but these systems do require regular recalibration due to drift. 

    => I don't think the reason is overflow. I checked the volume of water meter, when it is false (the counter value don't increase)., there isn’t any interrupt event. The counter will be working normally after it was missing a few dozen to a few hundred liters.

    => Do you think the reason is small the peak of the difference between the two signals ?

    Best Regards,
    Loc,
  • Hi Loc,

    What is your sample rate? If the maximum number of rotations is exceeding the upper limit set by your sample rate it is possible that you could miss some counts. Does your flow rate vary in this setup or is it constant? 

    => I don't think the reason is overflow. I checked the volume of water meter, when it is false (the counter value don't increase)., there isn’t any interrupt event. The counter will be working normally after it was missing a few dozen to a few hundred liters.

    Just to clarify, are you saying you were able to watch the counts value and for interrupts during one of the failure events? That would indicate to me that something could be wrong in signal level or configuration. 

    => Do you think the reason is small the peak of the difference between the two signals ?

    It is possible, but 160mV is enough that I would expect it could be distinguished if the DAC levels are set correctly. Your peak-to-peak differences could vary while the system runs though. 

    Best Regards,
    Brandon Fisher

  • Hi Brandon,

    What is your sample rate? If the maximum number of rotations is exceeding the upper limit set by your sample rate it is possible that you could miss some counts. Does your flow rate vary in this setup or is it constant? 

    => The same rate is 72, it is constant.  The maximum number of rotations is 2000 cycles/hours (2  m3/h) => 0.55 cycles/second (0.55 liter /s)

    Just to clarify, are you saying you were able to watch the counts value and for interrupts during one of the failure events? That would indicate to me that something could be wrong in signal level or configuration. 

    => Yes, i can read counter value and interrupt status by NFC reader. when i checked the counter value don't change but the water meter is running (metal disk is running), i can check there isn’t any interrupt event by NFC reader. I will send to you my configuration (please check link: ESI_configuration.c).

    Your peak-to-peak differences could vary while the system runs though. 

    => if you said "Your peak-to-peak differences could vary while the system runs though", why the counter can work well again after it was missing a few dozen to a few hundred liters.

    Thanks,

    Best Regards,

    Loc,

  • Hi Brandon,

    Is there any update for this? Many thanks.

  • Hi Loc,

    Thanks for sharing your code.

    Is there a reason you are not using the ESI_TSM_copyTable functions or ESI_TSM/PSM_copyTable functions? Were you having issues when using these?

    Did you use the FlowESI GUI to generate the TSM/PSM tables? 

    What is the contents of the Write_Calib_Value function?
    Best Regards,
    Brandon Fisher
  • Hi Brandon,

    Is there a reason you are not using the ESI_TSM_copyTable functions or ESI_TSM/PSM_copyTable functions? Were you having issues when using these?

    => I used the PSMtable and TSMtable from  TIDM-LC-WATERMTR V1, i am not using ESI_TSM_copyTable because i want to write direct to register

    Did you use the FlowESI GUI to generate the TSM/PSM tables? 

    => Yes, but i don't use TSM_table from FLowESI GUI generate. Do you think i need try with TSM_table from FLowESI GUI ?

    ////TMStable FLowESI generate

    uint16_t gTSMTable[] = {
    0x0400, // DAC=off, CA=off, 1xACLK
    0x202C + CHANNEL_0_SELECTION, // DAC=off, CA=off, 5xESICLK, excitation
    0x0404 + CHANNEL_0_SELECTION, // DAC=off, CA=off, 1xACLK
    0x0024 + CHANNEL_0_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0x0024 + CHANNEL_0_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0x0024 + CHANNEL_0_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0x0024 + CHANNEL_0_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0x0024 + CHANNEL_0_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0xF134 + CHANNEL_0_SELECTION, // DAC=on, CA=on, 31xESIFCLK,
    0x5974 + CHANNEL_0_SELECTION, // DAC=on, CA=on, OUTPUT LATCHES ENABLED, 12xESICLK
    0X0401 + CHANNEL_0_SELECTION, // DAC=off, CA=off, 1xACLCK, Internally damped
    0x202C + CHANNEL_1_SELECTION, // DAC=off, CA=off, 5xESICLK, excitation
    0x0404 + CHANNEL_1_SELECTION, // DAC=off, CA=off, 1xACLK
    0x0024 + CHANNEL_1_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0x0024 + CHANNEL_1_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0x0024 + CHANNEL_1_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0x0024 + CHANNEL_1_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0x0024 + CHANNEL_1_SELECTION, // DAC=off, CA=off, 1xESIFCLK , delay tunable
    0xF134 + CHANNEL_1_SELECTION, // DAC=on, CA=on, 31xESIFCLK,
    0x5974 + CHANNEL_1_SELECTION, // DAC=on, CA=on, OUTPUT LATCHES ENABLED, 12xESICLK
    0x0200, // stop
    };

    //////////////////////TMStable from TIDM-LC-WATERMTR V1
    //ESI_TSM_copyTable(gTSMTable, sizeof(gTSMTable));
    ESITSM0 = 0X0400; // DAC=off, CA=off, 1xACLK for ACLK sync
    ESITSM1 = 0x202C; // DAC=off, CA=off, 5xESICLK, excitation CH.0
    ESITSM2 = 0x0404; // DAC=off, CA=off, 1xACLK CH.0
    ESITSM3 = 0x0024; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.0
    ESITSM4 = 0x0024; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.0
    ESITSM5 = 0x0024; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.0
    ESITSM6 = 0x0024; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.0
    ESITSM7 = 0x0024; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.0
    ESITSM8 = 0xF134; // DAC=on, CA=on, 31xESIFCLK, CH.0
    ESITSM9 = 0x5974; // DAC=on, CA=on, OUTPUT LATCHES ENABLED, 12xESICLK CH.0
    ESITSM10 = 0X0401; // DAC=off, CA=off, 1xACLCK, Internally damped CH.0
    ESITSM11 = 0x20AD; // DAC=off, CA=off, 5xESICLK, excitation CH.1
    ESITSM12 = 0x0485; // DAC=off, CA=off, 1xACLK CH.1
    ESITSM13 = 0x00A5; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.1
    ESITSM14 = 0x00A5; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.1
    ESITSM15 = 0x00A5; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.1
    ESITSM16 = 0x00A5; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.1
    ESITSM17 = 0x00A5; // DAC=off, CA=off, 1xESIFCLK , delay tunable CH.1
    ESITSM18 = 0xF1B5; // DAC=on, CA=on, 31xESIFCLK CH.1
    ESITSM19 = 0x59F5; // DAC=on, CA=on, OUTPUT LATCHES ENABLED, 12xESICLK CH.1
    ESITSM20 = 0x0200; // stop

    What is the contents of the Write_Calib_Value function?
    => This function used for write calibration value to eeprom.

    Thanks,

    Best regard,

    Loc,

  • Hi Loc,

    => Yes, but i don't use TSM_table from FLowESI GUI generate. Do you think i need try with TSM_table from FLowESI GUI ?

    Yes I would try this if you haven't already.

    Out of curiosity, is this a single setup with this issue or have you seen this on multiple boards?

    Is it possible to move the disk closer for a temporary test? It seems like we've checked most of the other potential items here. I know your housing uses a fixed distance but if you could figure out a way around that, it would tell you for certain if your amplitude is really the issue. 

    Best Regards,
    Brandon Fisher

  • Hi Brandon,

    I am trying with TSM_table from FLowESI GUI generate.

    is this a single setup with this issue or have you seen this on multiple boards?

    => I already tested more than 100 devices.

    I will try to move the disk closer for a temporary test ( i will check how to do it).

    Thanks,

    Best Regards,

    Loc,

**Attention** This is a public forum