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.

PGA460: Custom Drive Board Design Issues

Part Number: PGA460
Other Parts Discussed in Thread: , ENERGIA

Hi, 

I've created a new board based around the PGA460, but I am having some issues with getting a reading off of it. 

One note, I know that the SCLK should be via a 10K resistor, but this is the current board I am working with and I don't have a fix to put that in for this version.

I am interfacing to a Particle Electron (cellular MCU). It is generally compatible with Arduino, so I have ported over the get distance sample code to work with it, and that seems to be working ok on the MCU side. 

When I run the code, I have tried a few different baud rates, and it looks like I have a working connection on the UART. I have set it up with 8 Bits, No Parity, 2 Stop Bits.

The oddity that I have run into is when the diagnostic results come back and the non-response of the sensor to changing conditions. 

Here are two runs on the same sensor. For this I am using the Murata sensor from the original dev board, so the gain, frequency, and other things should be OK. 

(First run with the Murata, 115.2k baud - Run ended after the echo dump, so baud rate is probably too high)

Configuring the PGA460 with the selected settings. Wait...
System Diagnostics - Frequency (kHz): 83.33
System Diagnostics - Decay Period (us): 2464.00
System Diagnostics - Die Temperature (C): 98.00
System Diagnostics - Noise Level: 85.00
Retrieving echo data dump profile. Wait...
55,220,55,243,187,175,251,191,191,191,191,191,191,191,191,191,191,191,191,191,87,87,87,61,183,246,63,251,48,247,187,175,83,83,166,198,208,27,131,191,191,182,182,56,33,134,135,254,246,86,230,51,62,38,167,36,181,230,202,71,171,23,209,75,38,102,39,51,182,53,52,131,167,246,59,164,173,245,195,236,115,242,172,185,56,59,150,32,102,192,186,131,178,243,169,166,70,191,167,186,214,38,203,155,236,235,167,115,22,19,43,162,186,225,183,60,174,195,224,178,134,7,254,187,3,226,224,155,

(second run with the Murata, 38.4k baud - seems like a stable connection, the output continued as shown until paused)

Configuring the PGA460 with the selected settings. Wait...
System Diagnostics - Frequency (kHz): 20.00
System Diagnostics - Decay Period (us): 2432.00
System Diagnostics - Die Temperature (C): -40.67
System Diagnostics - Noise Level: 81.00
Retrieving echo data dump profile. Wait...
227,249,217,191,191,191,191,191,191,191,191,191,191,191,191,191,191,236,55,99,246,165,177,184,187,188,189,189,189,190,190,189,189,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
P1 Obj1 Distance (m): 2.70
P1 Obj1 Distance (m): 2.70
P1 Obj1 Distance (m): 2.70
P1 Obj1 Distance (m): 2.70
P1 Obj1 Distance (m): 2.70
P1 Obj1 Distance (m): 2.70

(Third run with Murata @ 38.4k baud - Distance readings just keep repeating, regardless of what is infront of the sensor)

Configuring the PGA460 with the selected settings. Wait...
System Diagnostics - Frequency (kHz): 20.00
System Diagnostics - Decay Period (us): 3408.00
System Diagnostics - Die Temperature (C): -40.67
System Diagnostics - Noise Level: 85.00
Retrieving echo data dump profile. Wait...
55,220,55,243,187,175,251,191,191,191,191,191,191,191,191,191,191,191,191,191,87,87,87,61,183,246,63,251,48,247,187,175,83,83,166,198,208,27,131,191,191,182,182,190,190,190,190,190,190,190,190,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
P1 Obj1 Distance (m): 5.98
P1 Obj2 Distance (m): 0.70
P1 Obj6 Distance (m): 7.48
P1 Obj7 Distance (m): 1.41
P1 Obj8 Distance (m): 7.01
P1 Obj1 Distance (m): 5.98
P1 Obj2 Distance (m): 0.70
P1 Obj6 Distance (m): 7.48
P1 Obj7 Distance (m): 1.41
P1 Obj8 Distance (m): 7.01
P1 Obj1 Distance (m): 5.98
P1 Obj2 Distance (m): 0.70
P1 Obj6 Distance (m): 7.48
P1 Obj7 Distance (m): 1.41
P1 Obj8 Distance (m): 7.01

As you can see, the die temp reading is odd. In the first run it shows much higher than actual (actual is room temp), and the second and third times it shows below freezing. 

The 7.5V supply is from a small step-up supply on the same board, going from a LiPO battery. The 7.5V reads pretty stable and very near ideal. 

I know this may be some mistake on the board or the driver design for the transducer, but the temp reading being off doesn't seem like it would be connected to a drive issue. Any thoughts on what may be going on here?

I have tested two separate boards with the same results from both, so I think it is probably a board level design issue rather than a problem with a single sample.

Thanks in advance for any help. 

  • Hi Jon,

    Your schematic appears to be based on the BOOSTXL-PGA460, which is ok for test purposes. Can you confirm that your resistors R4 and R5 are populated? Your overall schematic should be operational, so I do not suspect this is a hardware issue. Are you using the Particle Electron in 3.3V or 5V logic level UART? The PGA460 supports 3.3V by default, but can be enabled for 5V compatiblity.
    When you work to redesign and optimize your hardware, refer to the following reference design examples at www.ti.com/.../technicaldocuments :
    • PGA460 Mono-static Transducer Transformer Driver Ultra-Small Design File ( www.ti.com/.../slac757 )
    • PGA460 Mono-static Transducer Transformer Driver Small Form Factor Design File ( www.ti.com/.../slac754 )

    As far as your serial port readout is concerned, you do appear to be getting data from the PGA460, but I think it is a matter of which response byte your ported code is using as the expected value.
    For instance, the repeated result value of 2.7m from one of your examples may actually be a combination of the diagnostic field and the time-of-flight's MSB byte, rather than the time-of-flight's MSB and LSB byte. More specifically, if the diagnostic field is 0x40 and the ToF's MSB is 0x00, the the ToF according to the master is 0x4000 (16384us), which is identical to ~2.810m. You would likely see this value change if a long range ToF were captured.

    This offset result likely holds true across all of your test cases, including the temperature sensor readout, whereby your code may be referring to the incorrect array element, and using an offset element value instead.

    I recommend that you first use a logic analyzer to check the values of the UART transmit and receive activity of the PGA460, and to ensure the diagnostic field is not a value other than 0x40. (A diagnostic field of 0x40 implies there is no UART communication error.)
    Then, you should check how the actual byte values are being queued into the resulting array (in your PGA460_USSC.cpp file equivalent) of your ported code.
  • Hi Akeem, Thanks for your reply.

    Akeem Whitehead said:
    Your schematic appears to be based on the BOOSTXL-PGA460, which is ok for test purposes. Can you confirm that your resistors R4 and R5 are populated?

    Yes, it is a bit of a hybrid, but mostly based on the BOOSTXL schematic, it just happened to have the closest solution. The resistors are populated.

    Akeem Whitehead said:
    Are you using the Particle Electron in 3.3V or 5V logic level UART?

    It is 3.3V logic.

    Akeem Whitehead said:
    When you work to redesign and optimize your hardware, refer to the following reference design examples at www.ti.com/.../technicaldocuments :
    PGA460 Mono-static Transducer Transformer Driver Ultra-Small Design File ( www.ti.com/.../slac757 )
    PGA460 Mono-static Transducer Transformer Driver Small Form Factor Design File ( www.ti.com/.../slac754 )

    Thanks for the reference. 

    Akeem Whitehead said:
    Then, you should check how the actual byte values are being queued into the resulting array (in your PGA460_USSC.cpp file equivalent) of your ported code.

    I'll check everything as you put about how to test. The code I am running is pretty much the same as what is in the original PGA460_USSC.cpp, just with the serial port defined for my application. The Particle boards are effectively Arduino compatible, so it wasn't too much to change other than the specific ports being used and swapping in the replacement for the common #include "Energia.h" with the equivalent from Particle. I'll get back with the testing results and see how things turn out.