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.

BOOSTXL-PGA460: Load a custom datapath to GUI

Part Number: BOOSTXL-PGA460
Other Parts Discussed in Thread: PGA460, PGA460-Q1, MSP-EXP430F5529LP,

I have developed a pcb with a pga460 and all the stuff needed to generate a burst. I have got the datapath from this new pcb and I want to customize the threshold levels. I have tried to load my datapath to the memory dump screen to see it on my threshold window but I can't.

Is this possible?

  • Hi Pablo,
    Only when using the PGA460-Q1 GUI's Data Monitor, the last echo data dump is automatically plotted on the threshold and time varying gain page. The GUI is currently not equipped to read the Dump Memory, and then plot.

    Do you have the PGA460-Q1 EVM? If so, connect the UART port from the MSP-EXP430F5529LP (EVM's motherboard) to the UART port of your custom hardware. The GUI does not require the BOOSTXL-PGA460 in order to function. Alternatively, you can also navigate to the menu bar's "Edit --> Disable BOOSTXL-PGA460 Communication" to keep the BOOSTXL-PGA460 attached the MSP430 LP, but block UART communication between the PGA460-Q1 populated on the BOOSTXL-PG460. Either approach will allow you to connect you custom hardware to the EVM for evaluation with the GUI.

    If you do not have the PGA460-Q1 EVM, I can update the GUI to read the Dump Memory for the purpose you've described. However, the updated GUI may not release to the web until next week.
  • Thank you Akeem.

    I do have EVM. but we want to deploy a large batch of units on field and we would want to ask those units the datapath so we can adjust at any time the threshold and tvg (through wifi/lora/zigbe...). It would be great if you could modify the GUI to allow us to do that. We are not in a hurry right now, so next week sounds amazing.

  • Hello Akeem, have you had the time to check the GUI's improvements? 

    I have a couple of questions related to the PGA460 but I couldn't find an email to write to yo directly nor a private message on the forum. 

    I wonder if there is a double transducer version of the evaluation board. We have tested the BOOSTXL-PGA460 board and it works great but now we need to measure lower distances and because of the decay time we have with the one transducer solution we are unable to detect distance lower than 25 cm (give or take). 

    We want to test https://e2e.ti.com/support/sensor/ultrasonic/f/991/t/595974 

    2 sealed due to the nature of our device. Is this possible? anything we should keep in mind while designing pcb or software?

  • Hi Pablo,
    The latest version of the GUI (1.0.0.6) will be available on the web tomorrow since TI.com refreshes overnight.
    To load the echo data dump generated by the GUI onto the threshold or TVG pages, navigate to either of the pages, and click on the new "Load Chart" button in the bottom right corner of the page.

    If you do not need the TVG or threshold, you can always use the already available Echo Data Dump plotter from the menu bar (File --> Echo Data Dump Plotter) to load previous echo data dump recordings.

    Both the echo data dump plotter and load chart features require the data format to match what is typically exported from the GUI.

    Regarding the dual transducer configuration, you can use the EVM to test this feature. We typically refer to a dual transducer configuration as bi-static, whereby a single PGA460 device uses a separate transducer to transmit and another transducer to receive. To modify the PGA460-Q1 EVM's daughter card for bi-static mode, follow the instructions from FAQ #4.4.5 "How do I enable the daughtercard to use a bi-static transducer pair (a separate transmitter and
    receiver)?"at: www.ti.com/.../slaa733

    The software is not impacted by mono-static or bi-static operation. Only the hardware must be altered.

    A single Murata MA58MF14-7N can detect as low as 10cm in transformer drive mode. You'll need to update daughtercard's R38 from 2.7kOhm to 10.0kOhm, and C15 from 1500pF to 680pF. If you need less than 10cm, then a bi-static solution may be required. If you do not need a long range (1-2m), you can also use a single high-frequency transducer (180-450kHz), which can detect down to 3-5cm.

  • Thank you Akeen, I will test the new GUI as soon as it is available.

    Do you know any 480Khz sensor we could test? I have been looking for a part number to buy some but I couldn't find anything good.

    We will make the modifications in EVM to test dual transducer.

  • I just tested the new version. But I am not able to display any of my saved memory dump. I try creating new ones (files contains data) but when I try to display them, I see a black chart. Could you check this? I unninstalled previous GUI version.

    I see you added ambient temperatue. Could you tell me how to get that? Is there a formula? Just an offset? It would be great for us to have that, we could remove our temperature sensor in that case

  • Hi Pablo,
    I have had much success with the Steminc brand of high-frequency transducers. Here is the link to their air transducer page:
    www.steminc.com/.../air-transducers
    You can also consider Murata and Massa as other options. Keep in mind that high frequency transducers are very focused in beam pattern.

    If you are using the on-chip temp sensor for ambient measurements, and do not want to calibrate the TEMP_GAIN and TEMP_OFFSET variables, you’ll need to negate the difference in die temp by accounting for the RθJA (Junction-to-ambient thermal resistance) of 96.1C/W. For example, a 24V supply at the nominal 12mA static current draws 0.288W. That’s a 27.7C (96.1*0.288) difference to the die-temp sensor readout of 50C, which yields an ambient of 22.32C (room temp).

    Can you attach the text file output, or copy and paste the contents of the text file output onto your next post so I can try to load it using the new GUI on my PC? The contents of a working example should appear as follows. Try copying the following contents to a text file, and loading it using the Load Chart feature.

    ;EDD
    0,0,64,
    1,0.512,255,
    2,1.024,255,
    3,1.536,255,
    4,2.048,122,
    5,2.56,12,
    6,3.072,8,
    7,3.584,4,
    8,4.096,4,
    9,4.608,4,
    10,5.12,10,
    11,5.632,6,
    12,6.144,4,
    13,6.656,4,
    14,7.168,4,
    15,7.68,4,
    16,8.192,4,
    17,8.704,2,
    18,9.216,4,
    19,9.728,4,
    20,10.24,4,
    21,10.752,4,
    22,11.264,4,
    23,11.776,4,
    24,12.288,4,
    25,12.8,4,
    26,13.312,4,
    27,13.824,4,
    28,14.336,4,
    29,14.848,4,
    30,15.36,6,
    31,15.872,6,
    32,16.384,4,
    33,16.896,4,
    34,17.408,4,
    35,17.92,4,
    36,18.432,4,
    37,18.944,2,
    38,19.456,4,
    39,19.968,2,
    40,20.48,4,
    41,20.992,4,
    42,21.504,4,
    43,22.016,6,
    44,22.528,6,
    45,23.04,8,
    46,23.552,6,
    47,24.064,6,
    48,24.576,6,
    49,25.088,6,
    50,25.6,4,
    51,26.112,4,
    52,26.624,4,
    53,27.136,6,
    54,27.648,6,
    55,28.16,6,
    56,28.672,8,
    57,29.184,8,
    58,29.696,8,
    59,30.208,10,
    60,30.72,8,
    61,31.232,12,
    62,31.744,12,
    63,32.256,12,
    64,32.768,10,
    65,33.28,10,
    66,33.792,14,
    67,34.304,10,
    68,34.816,12,
    69,35.328,8,
    70,35.84,10,
    71,36.352,10,
    72,36.864,8,
    73,37.376,8,
    74,37.888,10,
    75,38.4,14,
    76,38.912,20,
    77,39.424,22,
    78,39.936,22,
    79,40.448,22,
    80,40.96,28,
    81,41.472,24,
    82,41.984,26,
    83,42.496,26,
    84,43.008,28,
    85,43.52,34,
    86,44.032,32,
    87,44.544,38,
    88,45.056,34,
    89,45.568,54,
    90,46.08,64,
    91,46.592,64,
    92,47.104,104,
    93,47.616,98,
    94,48.128,192,
    95,48.64,162,
    96,49.152,100,
    97,49.664,106,
    98,50.176,94,
    99,50.688,106,
    100,51.2,108,
    101,51.712,90,
    102,52.224,58,
    103,52.736,54,
    104,53.248,62,
    105,53.76,58,
    106,54.272,80,
    107,54.784,62,
    108,55.296,92,
    109,55.808,122,
    110,56.32,140,
    111,56.832,120,
    112,57.344,122,
    113,57.856,108,
    114,58.368,90,
    115,58.88,82,
    116,59.392,102,
    117,59.904,86,
    118,60.416,104,
    119,60.928,84,
    120,61.44,86,
    121,61.952,98,
    122,62.464,92,
    123,62.976,114,
    124,63.488,124,
    125,64,128,
    126,64.512,130,

    EOF
  • Thank you Akeem.

    I see where we went wrong with datadump. We are trying to introduce inside the GUI the values we get from the uart command  "get echo datadump". It returns values in hex format and we created a file like the one you get when you hit datadump memory on the GUI. We load that file onto the board connected to the gui and nothing happens. We have the same problem when we load our file on the button you added. Because it is not the same kind of file structure.

    This is what we want to add:

    ;GRID_DATADUMP_MEMSPACE
    80 (DATA_MEM_0),EC
    81 (DATA_MEM_1),FF
    82 (DATA_MEM_2),FF
    83 (DATA_MEM_3),FF
    84 (DATA_MEM_4),FF
    85 (DATA_MEM_5),FF
    86 (DATA_MEM_6),FD
    87 (DATA_MEM_7),FF
    88 (DATA_MEM_8),FF
    89 (DATA_MEM_9),FF
    8A (DATA_MEM_10),FF
    8B (DATA_MEM_11),FF
    8C (DATA_MEM_12),FF
    8D (DATA_MEM_13),FF
    8E (DATA_MEM_14),FF
    8F (DATA_MEM_15),E9
    90 (DATA_MEM_16),B4
    91 (DATA_MEM_17),FA
    92 (DATA_MEM_18),FE
    93 (DATA_MEM_19),E3
    94 (DATA_MEM_20),56
    95 (DATA_MEM_21),39
    96 (DATA_MEM_22),54
    97 (DATA_MEM_23),54
    98 (DATA_MEM_24),3C
    99 (DATA_MEM_25),18
    9A (DATA_MEM_26),19
    9B (DATA_MEM_27),1D
    9C (DATA_MEM_28),1D
    9D (DATA_MEM_29),1B
    9E (DATA_MEM_30),12
    9F (DATA_MEM_31),0A
    A0 (DATA_MEM_32),07
    A1 (DATA_MEM_33),06
    A2 (DATA_MEM_34),05
    A3 (DATA_MEM_35),04
    A4 (DATA_MEM_36),02
    A5 (DATA_MEM_37),02
    A6 (DATA_MEM_38),02
    A7 (DATA_MEM_39),02
    A8 (DATA_MEM_40),02
    A9 (DATA_MEM_41),01
    AA (DATA_MEM_42),02
    AB (DATA_MEM_43),02
    AC (DATA_MEM_44),02
    AD (DATA_MEM_45),02
    AE (DATA_MEM_46),03
    AF (DATA_MEM_47),03
    B0 (DATA_MEM_48),03
    B1 (DATA_MEM_49),06
    B2 (DATA_MEM_50),07
    B3 (DATA_MEM_51),06
    B4 (DATA_MEM_52),08
    B5 (DATA_MEM_53),09
    B6 (DATA_MEM_54),09
    B7 (DATA_MEM_55),08
    B8 (DATA_MEM_56),07
    B9 (DATA_MEM_57),06
    BA (DATA_MEM_58),05
    BB (DATA_MEM_59),04
    BC (DATA_MEM_60),03
    BD (DATA_MEM_61),03
    BE (DATA_MEM_62),02
    BF (DATA_MEM_63),02
    C0 (DATA_MEM_64),03
    C1 (DATA_MEM_65),08
    C2 (DATA_MEM_66),11
    C3 (DATA_MEM_67),13
    C4 (DATA_MEM_68),12
    C5 (DATA_MEM_69),0C
    C6 (DATA_MEM_70),09
    C7 (DATA_MEM_71),06
    C8 (DATA_MEM_72),06
    C9 (DATA_MEM_73),06
    CA (DATA_MEM_74),06
    CB (DATA_MEM_75),03
    CC (DATA_MEM_76),02
    CD (DATA_MEM_77),02
    CE (DATA_MEM_78),01
    CF (DATA_MEM_79),02
    D0 (DATA_MEM_80),02
    D1 (DATA_MEM_81),02
    D2 (DATA_MEM_82),02
    D3 (DATA_MEM_83),02
    D4 (DATA_MEM_84),02
    D5 (DATA_MEM_85),01
    D6 (DATA_MEM_86),02
    D7 (DATA_MEM_87),02
    D8 (DATA_MEM_88),02
    D9 (DATA_MEM_89),02
    DA (DATA_MEM_90),02
    DB (DATA_MEM_91),03
    DC (DATA_MEM_92),03
    DD (DATA_MEM_93),03
    DE (DATA_MEM_94),02
    DF (DATA_MEM_95),01
    E0 (DATA_MEM_96),01
    E1 (DATA_MEM_97),01
    E2 (DATA_MEM_98),02
    E3 (DATA_MEM_99),02
    E4 (DATA_MEM_100),02
    E5 (DATA_MEM_101),02
    E6 (DATA_MEM_102),01
    E7 (DATA_MEM_103),01
    E8 (DATA_MEM_104),01
    E9 (DATA_MEM_105),20
    EA (DATA_MEM_106),50
    EB (DATA_MEM_107),51
    EC (DATA_MEM_108),43
    ED (DATA_MEM_109),2B
    EE (DATA_MEM_110),26
    EF (DATA_MEM_111),23
    F0 (DATA_MEM_112),1B
    F1 (DATA_MEM_113),10
    F2 (DATA_MEM_114),0D
    F3 (DATA_MEM_115),19
    F4 (DATA_MEM_116),20
    F5 (DATA_MEM_117),26
    F6 (DATA_MEM_118),25
    F7 (DATA_MEM_119),22
    F8 (DATA_MEM_120),38
    F9 (DATA_MEM_121),37
    FA (DATA_MEM_122),23
    FB (DATA_MEM_123),18
    FC (DATA_MEM_124),0E
    FD (DATA_MEM_125),0D
    FE (DATA_MEM_126),0D
    FF (DATA_MEM_127),12
    EOF

    Could be possible to add this as it is? Or your file with values in hex format? That would be enough. In other case we should have to change every value before adding it to the file. Besides that, your file has only 127 measures instead of the 128 the datadump returns. Is this ok?

    I update with a comment. Would be possible to display the chart as a line instead as bars? It is easier to see the line with thresholds and time varying gain

  • Hello Akeem,

    We have done further tests. We think we have a problem with the burst number. We have tested the configuration you suggested with the R38 10K and C15 680pF with the murata sensor and the closest we get is 19cm. Could you please give us the configuration you used to get 10cm?

    On the other hand, we have a strange issue.We have configured the device to fire 10 bursts. We have connected an oscilloscope to the test pin (analog front end output)  and what we see is:

    *Channel1 x 1. AFE Voltage.

    *Channel2 x 10. Transducer voltage.

    Why do we have longer oscillation between burst and decay time? 

    I think this is our problem with sorter distances. Our datapath have a very long blind area:

    Besides that, I attach you our current configuration for the murata sensor so you can test it and tell us what we are doing wrong.

    ;GRID_USER_MEMSPACE
    00 (USER_DATA1),00
    01 (USER_DATA2),00
    02 (USER_DATA3),00
    03 (USER_DATA4),00
    04 (USER_DATA5),00
    05 (USER_DATA6),00
    06 (USER_DATA7),00
    07 (USER_DATA8),00
    08 (USER_DATA9),00
    09 (USER_DATA10),00
    0A (USER_DATA11),00
    0B (USER_DATA12),00
    0C (USER_DATA13),00
    0D (USER_DATA14),00
    0E (USER_DATA15),00
    0F (USER_DATA16),00
    10 (USER_DATA17),00
    11 (USER_DATA18),00
    12 (USER_DATA19),00
    13 (USER_DATA20),00
    14 (TVGAIN0),BA
    15 (TVGAIN1),99
    16 (TVGAIN2),99
    17 (TVGAIN3),10
    18 (TVGAIN4),E8
    19 (TVGAIN5),36
    1A (TVGAIN6),FC
    1B (INIT_GAIN),C0
    1C (FREQUENCY),8C
    1D (DEADTIME),00
    1E (PULSE_P1),0A
    1F (PULSE_P2),01
    20 (CURR_LIM_P1),6A
    21 (CURR_LIM_P2),FF
    22 (REC_LENGTH),32
    23 (FREQ_DIAG),00
    24 (SAT_FDIAG_TH),EE
    25 (FVOLT_DEC),7C
    26 (DECPL_TEMP),8F
    27 (DSP_SCALE),00
    28 (TEMP_TRIM),00
    29 (P1_GAIN_CTRL),01
    2A (P2_GAIN_CTRL),01
    2B (EE_CRC),83
    40 (EE_CNTRL),00
    41 (BPF_A2_MSB),8B
    42 (BPF_A2_LSB),4D
    43 (BPF_A3_MSB),F3
    44 (BPF_A3_LSB),72
    45 (BPF_B1_MSB),06
    46 (BPF_B1_LSB),47
    47 (LPF_A2_MSB),7C
    48 (LPF_A2_LSB),D3
    49 (LPF_B1_MSB),01
    4A (LPF_B1_LSB),97
    4B (TEST_MUX),20
    4C (DEV_STAT0),80
    4D (DEV_STAT1),00
    5F (P1_THR_0),37
    60 (P1_THR_1),54
    61 (P1_THR_2),68
    62 (P1_THR_3),99
    63 (P1_THR_4),99
    64 (P1_THR_5),99
    65 (P1_THR_6),FF
    66 (P1_THR_7),D0
    67 (P1_THR_8),20
    68 (P1_THR_9),00
    69 (P1_THR_10),02
    6A (P1_THR_11),24
    6B (P1_THR_12),2C
    6C (P1_THR_13),2D
    6D (P1_THR_14),2D
    6E (P1_THR_15),07
    6F (P2_THR_0),88
    70 (P2_THR_1),88
    71 (P2_THR_2),88
    72 (P2_THR_3),88
    73 (P2_THR_4),88
    74 (P2_THR_5),88
    75 (P2_THR_6),84
    76 (P2_THR_7),21
    77 (P2_THR_8),08
    78 (P2_THR_9),42
    79 (P2_THR_10),10
    7A (P2_THR_11),80
    7B (P2_THR_12),80
    7C (P2_THR_13),80
    7D (P2_THR_14),80
    7E (P2_THR_15),00
    7F (THR_CRC),F5
    EOF

  • Hi Pablo,

    I can update the GUI to display the Load Chart values as lines, rather than bars. The format you're requesting could be accommodated, but the short term fix may be for you to develop a  converter, which accepts the text file as you've generated, and creates a new text file in the format required by the Load Chart feature. The problem with the hex only amplitude is that there is no time reference, so it would be impossible to align the echo data dump to the threshold and TVG profiles without knowing the preset record time length. The next GUI update/release won't be for another few weeks, so the text convert workaround is recommended. You are correct in that the echo data dump should have 128 bytes, but the GUI and load chart feature always expect 127.

    Regarding 10cm detection using the Murata MA58MF14-7N, I reviewed your configurtion, and have a few recommendations.

    Note, 10cm detection occurs in the decay profile. Use of the ultrasonic measurement results with proper threshold mapping is required to detect 10cm.

    •Set your Digital Gain SR Gain to x1. It is currently x2, which is why the echo data dump shows a saturated decay.

    •Set Preset 1 Burst Pulses =4 and Driver Current Limit = 100mA. For comparison, set Preset 2 Burst Pulses = 16 and Driver Current Limit = 400mA.

    •You may need to further reduce the AFE Gain Range to 32-64.

    •Tighten the Band-Pass Filter Bandwidth to 2 or 4 kHz.

    I'll need to dig up the full register configuration, but your results should appear as follows:

    Preset 1

    Preset 2

  • Thank you Akeem.

    I updated our configuration with the parameters you said. We are using record time length of 8192 ms to detect distances up to 1.4 meters. More or less, distances are consistent with the murata sensor.

    Could you please post your total configuration? I would want to test by loading your current file. Also, I don't know if you are testing with the resistor and capacitor changed or with the default ones.

    I would be pleased if you could modify the gui to display lines instead of bars. We will implement a parser to load the datapath into the file you sent. I guess the only modification we have to do is the values column as all the temporal references will remain untouched. Or on the contrary we should adapt time reference depending on the record time? (record time/128 samples)??

    Besides that, I have a few questions. The first one, I wrote in my previous message. Why do we see a ringing time longer than it should with the oscilloscope? We set, for example, 1 burst and we have a very long ringing time (instead of having just one burst).

    Apart from that. We are using transformer driver configuration. What is the deadtime parameter for? And threshold deglitc time? We have not found an explanation in the datasheet. Also, I would want you to explain me what is the driver current limit parameter. I see the differences when I apply one another value but I don't understand why I should set one another.

    In system diagnostics, transducer frequency is always 9.3. It doesn't matter we use one transductor or another, always the same value.

  • Hi Pablo,
    The echo data dump results I previously shared are using the updated passive values (R_damp=10kOhm, C_tune = 680pF). When using the original passives, the minimum detectable distance is only about 15-17cm.

    I am attaching (below) the complete memory config for the updated passive tuning values . Keep in mind that the echo data dump is unreliable at very short distance. For instance, when you use Preset 2 of this configuration, it will appear as though there is no change to the ultrasonic activity prior to 14cm. However, this is due to the DSP ramp-up and downsampling. The theshold comparator is able to register the actual echo down to 10cm when you enable the Ultrasonic Measurement Results output. Long story short, do not rely on the echo data dump for very short range evaluation.

    You will need to incorporate the record time in your txt file converter. The Load Chart feature requires the x-axis format to be in milliseconds given the accepted input format is:
    Sample#,Time(ms),echoAmp,
    You are correct on how to compute the time interval: RecLength(ms)/128samples
    Discard the last byte since the LoadChart feature only accepts 127 bytes.

    To answer your previous questions:
    1) The AFE output is the gain amplified version of the raw signal. With a dB gain range between 32-90dB (42-32k multiplier), the ringing decay time will appear to drag on much longer when compared to probing directly at the transducer. This large amount of amplification is required since the returning ultrasonic echo can attenuate down to the uV range. This is why you can’t see the returning echo (especially at long distances) when probing the transducer.

    2) The deadtime parameter does not help in the transformer driven mode; I recommend that you keep this value at ‘0’. You can see how the deadtime impacts direct drive mode in section 7.3.2.2 Direct Drive of the datasheet.

    3) The threshold level comparator deglitch period serves to ignore any minor noise ripple or short period transients that exceed the threshold levels. If there were no deglitcher, every negligible instance of a threshold crossing would register as an object detection. For this reason, I always recommend to keep the deglitcher at a non-0 value. The larger the deglitch value, the longer these false positive can cross the threshold without triggering an object detect. Be careful not to set the deglitcher so large that it ignore acutal objects though.

    4) In transformer mode, the driver current limit helps to limit the peak to peak voltage across the transducer. For the transformer and transducer combination on the EVM, the peak to peak voltage across the transducer saturates at about 300mA. If you probe the transducer, you should see a difference at 100mA versus 500mA. The PGA460 Ultrasonic Module Hardware and Software Optimization appnotes describes this feature in more detail
    (www.ti.com/.../slaa732).

    Have you seen the six part Ultrasonic Sensing with the PGA460-Q1 video series which walks through the EVM & GUI features? I highly recommend it if you haven’t. It may help answer many of these questions. training.ti.com/ultrasonic-sensing-pga460-q1

    For the system diagnostics, try these steps:
    1) clear the THR_CRC_ERR
    2) On the Diagnostics page, check the Burst+Listen box.
    3) In the Frequency Diagnostic window, ensure the window length is not 0. Start with a value of 3. Set a low start time, i.e. 300us. A value of 9.3 indicates the THR_CRC_ERR is not clear, the Window Length is 0, or you are using a bi-static transducer mode (only works for mono-static).

    Murata MA58MF14-7N regmap for updated passives:

    ;GRID_USER_MEMSPACE
    00 (USER_DATA1),00
    01 (USER_DATA2),00
    02 (USER_DATA3),00
    03 (USER_DATA4),00
    04 (USER_DATA5),00
    05 (USER_DATA6),00
    06 (USER_DATA7),00
    07 (USER_DATA8),00
    08 (USER_DATA9),00
    09 (USER_DATA10),00
    0A (USER_DATA11),00
    0B (USER_DATA12),00
    0C (USER_DATA13),00
    0D (USER_DATA14),00
    0E (USER_DATA15),00
    0F (USER_DATA16),00
    10 (USER_DATA17),00
    11 (USER_DATA18),00
    12 (USER_DATA19),00
    13 (USER_DATA20),00
    14 (TVGAIN0),44
    15 (TVGAIN1),44
    16 (TVGAIN2),44
    17 (TVGAIN3),61
    18 (TVGAIN4),86
    19 (TVGAIN5),18
    1A (TVGAIN6),60
    1B (INIT_GAIN),18
    1C (FREQUENCY),8F
    1D (DEADTIME),80
    1E (PULSE_P1),04
    1F (PULSE_P2),30
    20 (CURR_LIM_P1),71
    21 (CURR_LIM_P2),31
    22 (REC_LENGTH),00
    23 (FREQ_DIAG),33
    24 (SAT_FDIAG_TH),EE
    25 (FVOLT_DEC),7C
    26 (DECPL_TEMP),CF
    27 (DSP_SCALE),00
    28 (TEMP_TRIM),00
    29 (P1_GAIN_CTRL),00
    2A (P2_GAIN_CTRL),00
    2B (EE_CRC),B6
    40 (EE_CNTRL),00
    41 (BPF_A2_MSB),89
    42 (BPF_A2_LSB),52
    43 (BPF_A3_MSB),FC
    44 (BPF_A3_LSB),CE
    45 (BPF_B1_MSB),01
    46 (BPF_B1_LSB),99
    47 (LPF_A2_MSB),7F
    48 (LPF_A2_LSB),33
    49 (LPF_B1_MSB),00
    4A (LPF_B1_LSB),67
    4B (TEST_MUX),00
    4C (DEV_STAT0),80
    4D (DEV_STAT1),00
    5F (P1_THR_0),41
    60 (P1_THR_1),12
    61 (P1_THR_2),43
    62 (P1_THR_3),44
    63 (P1_THR_4),55
    64 (P1_THR_5),55
    65 (P1_THR_6),9C
    66 (P1_THR_7),D4
    67 (P1_THR_8),41
    68 (P1_THR_9),04
    69 (P1_THR_10),21
    6A (P1_THR_11),08
    6B (P1_THR_12),08
    6C (P1_THR_13),08
    6D (P1_THR_14),08
    6E (P1_THR_15),00
    6F (P2_THR_0),31
    70 (P2_THR_1),33
    71 (P2_THR_2),34
    72 (P2_THR_3),44
    73 (P2_THR_4),55
    74 (P2_THR_5),55
    75 (P2_THR_6),EC
    76 (P2_THR_7),A4
    77 (P2_THR_8),41
    78 (P2_THR_9),88
    79 (P2_THR_10),41
    7A (P2_THR_11),08
    7B (P2_THR_12),08
    7C (P2_THR_13),08
    7D (P2_THR_14),08
    7E (P2_THR_15),00
    7F (THR_CRC),FC
    EOF

  • I just tested your code and it works fine. I got 11-12 cm as minimum distance. I am watching the videos right now to understand the GUI better.

    About the link you gave (slaa732...) there are some values we do not understand how to get them. In page 8, Rt, Lt, Ct. We are modeling the equivalent secondary cirtcuit side of the transformer (including the transducer equivalent circuit) and we don't know hoe the get those values, can you give us some ideas here? This is because we are trying to use a 40KHz transducer.

    We are starting to understand diagnostic tab now but what is window length, start time and error time threshold? There are no explanation if we pass the mouse pointer over their names. also, voltage diagnostic or decay diagnostic are not very clear to us. It we modify values at the Frequency Diagnostic box, we do get 58.6 KHz as transducer frequency. But in case we don't know the real frequency, we cannot adapt those values to get us the frequency because the values we get could be or not the real frequency. I don't know if you understand me here...

  • Hi Pablo,
    I'm glad to hear you were able to get down to 11-12cm! I plan on releasing another set of videos which will discuss this entire process in detail. The video series is currently very high level.

    Unfortunately, most transducer supplies do not provide the complete equivalent circuit values in their datasheets. As noted in the SLAA732 app note, an impedance gain phase analyzer is typically used to model the equivalent circuit when the information is missing. I understand that not all PGA460 users will have access to this equipment, which is why it is important to at least know the frequency of the selected transducer.

    If you cannot obtain the equivalent model, I recommend that you use a variable capacitor (i.e. cap bank) to spot check certain capacitance values while monitoring the decay profile of the transducer on the echo data dump or LNA test mode output. I typically sweep from 100pF to 2000pF at 100pF increments (so only 20 steps). The same applies to the damping resistor. Once the tuning cap value is optimized, sweep the damping resistor from 1KOhm to 20kOhm in 1kOhm increments (once again, 20 steps). Though this process is not as scientific as an equation, it can work much faster and more effectively when the values to the equation are unavailable. This trial-and-error method is how I updated the values of C_Tune and R_Damp for the Murata MA58 transducer. We are still working on a more scientific means of approximating these values.

    Regarding frequency diagnostics, there is a section in the datasheet which explains the parameters in detail (7.3.5 System Diagnostics). To your point, the parameters must be optimized such that the reading is most stable at a certain point of time of the decay period. Too soon of a frequency measurement may yield a value much higher than the actual resonant, while too late of a frequency measurement can yield in a completely unreliable readout. Here is the subset of the datasheet discussing Transducer frequency measurement:

    During the decay stage of the record interval a frequency measurement
    on the transducer node is performed to validate the performance and proper tuning of the
    transformer and transducer matching.
    To measure the transducer frequency, a start parameter, FDIAG_START, and a window
    length parameter, FDIAG_LEN, are defined in EEPROM memory. The start parameter,
    FDIAG_START, defines the time when the frequency measurement starts relative to the end
    of the burst time. The diagnostic window length parameter, FDIAG_LEN, sets the time width
    of the diagnostic window in terms of signal periods captured. A brief example of parameter
    configuration can be explained:
    1. Assume FDIAG_START = 2 and FDIAG_LEN = 1. Referring to the Register Maps
    section, the start time of these EEPROM parameters is determined to be 200 μs after
    the burst is completed and window length of 3 signal periods. Assuming an operating
    frequency of 58 kHz, the signal period is 17.24 μs and therefore the diagnostic ends at
    200 μs + 3 × 17.24 μs = 251.72 μs after the burst is complete.
    2. The frequency information captured in the measurement window is averaged and
    expressed as a 500 ns time based counter value. The signal frequency can be
    calculated using Equation 5.
    f = 1 / (FDIAG_VAL × 500e–09)
    where
    • FDIAG_VAL is a value that can be extracted using any of the device interfaces. (5)
    3. If the specified number of objects are detected before a frequency diagnostic
    measurement completes, no frequency measurement results are saved. This can be
    managed by setting the previously defined diagnostic parameters and threshold settings
    for near-object detection.
    An additional frequency error feature is implemented in the PGA460-Q1 device to signify that
    the measured transducer frequency is outside of the limits set by the FDIAG_ERR_TH
    threshold parameter. The result of this feature is reported in the status frames of the IO time command
    or the UART interface. For more information on reporting the transducer frequency
    error, see the Interface Description section.
  • Hello Akeen,

    I have a couple of questions with low measures.

    We are planning to move to the murata sensor so we can reuse the current HW and most of your configuration parameters. It seems to work great but we have found that when we reach the minimum distance (about 12 cm) we start to get measures about 20 cm. We think it is due that sensor see a second bounce from the echo instead of the first one. How could we get rid of those values?

    I mean, we know we cannot get values below 12 cm, thats ok. But If we have a lower distance, shouldn't we get a distance like 11.22m like we see if there is no object? Or anything which points that minimum distance is saturated? It is a problem because if we see a 20 cm, we do not know if it is a real 20 or it is an incorrect one.

    Besides that, please, tell me if I am wrong or not here: The PGA460 detects objects not based in the echo data dump values (127-128 measures) but with the complete list of values it has. So, the datapath we see does not correspong exactly with the distance we should see as the detected one. What we are seeing right now is that we set a threshold level at one point (lets say, cutting the datapath at measure number 50 which corresponds to 32.0cm) but GUI says that object is detected at 28cm which, based on datapath chart, is clearly below threshold level. Could you give us some ideas or thoughts about this? Is this the expected behaviour?

    Thanks in advance.

  • Hi Pablo,
    Unfortunately, there is no means of guaranteeing binary presence detection below 12cm (i.e. is an object present or not) when using a mono-static transducer. As you've noted, the 20cm reflection may indicate a second round-trip echo from the object which is actually at ~10cm.

    You may be able to systemically determine if the 20cm object is actually at 10 or 20cm by looking for trends in software. If your object approaches 12cm from a longer range (15cm...14cm...13cm), but suddenly registers 20cm... 19cm... 18cm..., you can assume this is a sub-12cm reflection. You can also use the amplitude and width information to determine if the ultrasonic measurement results (UMR) match what is expected for an actual 20cm reflection. If you typically expect a peak amplitude of 200-230, but you suddenly see a peak amplitude of 120, this could be another indicator. This also assumes you expect to detect the same type of target though. A foreign target may actually return a peak of 120 at 20cm, so some combination of trend monitoring and profile matching would be best.

    The most effective means of resolving sub-12cm reflections is to use a bi-static transducer configuration.

    The echo data dump (EDD) only provides a rough / down-sampled approximate of the actual time-of-flight data, which typically accounts for the minor cm offset you have observed. The echo data dump should mainly be used for configuring the threshold mapping. For this reason, I recommend that you refer to the UMR listing for a more accurate distance readout. In your example, if the EDD reads out 32cm, but the UMR reads out 28cm, then the object is actually closer to 28cm.
  • Hello Akeem,

    I have been testing a custom board for the pga460. At the end, I am using murata sensor.  I have tried to export configuration given by Memory Map option at GUI and load it on my pga460 custom board. It seems to be a couple of problems.

    First of them, register PULSE_P2 (1Fh) contains UART address. My PGA460 development board gave address 0x01 for some time (I have exported multiple files during last month) but for the last 2 weeks, this address was changed to 0x02 (In GUI and memory map files).

    I don't know if it is configurable or I should leave the one given by the pga460 as default. When I changed the address in my custom board, pga460 didn't answer any more until I reboot it (So UART address went back to 0x01).

    The other one, register EE_CRC (2Bh), what is it for? I don't keep anything in the eeprom, at least, nothing I am aware of. I usually power the pga460 on, write every register I need and then use it. After all those steps I power it off. So next time I have to reprogram all registers. I am ok with this, because configuration can be changed at any time so I don't want to use eeprom to store anything.

    Which registers are eeprom dependant? I mean, I need to know if I have to update EE_CRC register in case I change something.  Or I could just not write in this register at all if I just use 0x09 command to write memory map registers.

  • Hi Pablo,
    The default factory programmed address is always 0 (000b). If you update the UART address bits of the PULSE_P2 register, be sure you are updating your UART master's transmit command field's address bits and compute the new checksum for each command as well.

    For instance, a preset 2 burst-and-listen command for four objects at
    • UART address 0 is {01 04 FA}
    • UART address 1 is {21 04 DA}
    • UART address 1 is {41 04 BA}

    You can use the GUI's Interface page --> UART --> Command Selection window's command and address controls to generate the respective UART hex sequence with checksum when clicking "Run Command".

    You can ignore the EE_CRC. In a pre-released version of the PGA460, the user was required to compute and update the EE_CRC. However, in the released version, this field is automatically computed and updated by the device itself. Regardless of what you write into this register. The device will always auto-correct the value after any register read/write commands. TI should consider marking this register "Reserved" to hide its details and prevent confusion.