The PCB finally arrived earlier this week and the team has assembled a total of 5 boards. I opted to systematically hand solder the PCB first while individually testing various parts of it. By doing so, I was able to confirm the hardware works as expected and troubleshoot it easily. Here are the photos of the completed board.
Good news! All the individual component works as expected. (after some troubleshooting 😶)
The PCB was soldered and tested in the following order:
- Buck converter
- Digital 3.3V supply
- USB to UART converter and USB
- ESP32
- SD Card
- Analog 3.3V supply
- ADC and supporting components
Total time taken was roughly 6 hours.
Preliminary Tests
Let’s take a look at the performance of the hardware.
Power Supply
The power supply unit (PSU) on the right is feeding power into the main input of the PCB and the multimeter is measuring the output of the 5V buck converter. This shows that the buck converter is able to produce a 5V output (with a ~0.8% error) even when fed with 6V input.
Note that this test is conducted when the ESP32 is on idle, ie low load. This should be considered the absolute minimum voltage and not the operating voltage.
ADC
Next, we’ll take a look at the accuracy of the voltage reference.
The accuracy of the ADC is directly dependent on the accuracy and stability of the voltage reference.
The multimeter is measuring the output of the voltage reference after passing through a low pass filter (LPF). As shown, the voltage is spot on at 2.045V. As we currently do not have the capabilities to perform any form of noise measurements on the voltage reference. Also, we will skip the ADC performance test for now.
ESP32, USB and SD Card
Justin has written a test program to write a file into the SD card and read it back.
This ensures that:
- The USB to UART converter is working and is able to program the ESP32 with no issue
- The ESP32 is functional
- The SD card is functional
The SD card is mounted successfully, and read and write operations are successful.
BME280
Screenshot by courtesy of Justin.
As shown in the above screenshot, the ESP32 is able to read the temperature, pressure and humidity respectively.
Issues in Hardware
Hotplate process produced inconsistent results
After I hand soldered and confirmed that the PCB is indeed working, the team proceeded to use hotplate to reflow 4 other boards. There were however, different issues with different boards, with different ICs either not soldered on properly or has pins that were shorted together.
The team has concluded that this was due to the process not being optimised for reflowing. This could be due many factors such as, the kind of solder paste used, the thickness of the stencil, the size of the pads etc.
This required additional rework after the reflow process.
Programming of ESP32 with SDIO lines pulled up
IO2 of the EPS32 is a bootstrap pin, meaning that this has to left floating in order to go into programming mode…….. Only if you’re programming for the first time.
We noticed that some boards couldn’t be programmed. However, there wasn’t an issue with the schematics. Turns out desoldering the pullup resistor on IO2 before programming for the first time worked. Thereafter, the pullup resistor had to soldered back in, in order to use the SD card. We suspect this might be due to the ESP32 internal efuse not being programmed from the factory.
High Quiescent Current Draw
Quiescent current is the current that a device draws when it is in idle mode. In our case, with everything powered down, we have ~6mA current draw at 12V. That works out to be about 15mA at 5V. While the ESP32 is capable of very low power draw, down to 0.1mA in power saving mode, this would not matter if everything else on the board is drawing 15mA.
After some quick probing on the board, we have determined that the current draw comes from:
- Low Dropout Regulator (2x 5mA)
- LEDs (2x 2.5mA)
We have placed an order for new low quiescent current LDOs. However, for the next revision of hardware, low current draw will one of the main focus.
Missing USB power diode
During the process of PCB design a diode to provide provide to the board from USB was unintentionally left out, as a result, the board cannot be powered from USB. This was quickly solved by soldering a ‘botch’ wire from the USB connector to the 5V supply.
Next Steps
We will be looking at how we can optimise the current design over the one or two weeks. Stay tuned for more details!
Edit 22 Aug 2020
Issue with the Programming ESP32 with SDIO Lines Pulled Up
It appears that our conclusion that this issue only occurs when programming for the first time may not be entirely true. Some boards can’t be programmed with IO2 pulled up regardless it is the first time or not. This issue can be fixed be allowing the software to control the pull up. However, changes has to be made on the hardware.
One of the changes for the next revision, we will be connecting the pull up to the SD card power, rather than the main (always on) power.