Electronic – Arduino Nano disconnecting from PC on plugging in 3.3v NRF24L01 into PCB

3.3varduinonrf24l01pcb

I've built this PCB which includes two I2C port expanders, an Arduino nano, inputs for buttons and encoders, and headers to plug in an NRF24L01 board.

PCB

Currently, I just have code running to read two encoders plugged into J12 and J11 on this schematic, and send how far each of them have turned over the serial port.

schematic
This all works perfectly, the problem comes when I plug in the NRF24L01 into the headers on the board. As soon as I do, the arduino disconnects from the PC; I get the little noise from Windows, both the COM port and the device disappear, and it resets the arduino. However, I can still see the TX LED light up, so the code is still running and the data is transmitting over serial, the PC just doesn't see it anymore. As soon as I remove the NRF board, the nano reconnects and works as usual.

I've tried plugging in an external power source and get the exact same behavior, so I don't believe it's an issue of the NRF drawing too much power. I've tried several different NRF boards as well, so it isn't an issue with the specific board I have plugged in.

What could my problem be?

Best Answer

In your design the 3.3V power to NRF24L01 is coming from Arduino Nano USB interface chip, which is FT232RL. The internal FT232 regulator can only supply 50 mA, "Up to 50mA can be drawn from this pin to power external logic if required". the FT232 specs says.

The 50 mA regulator is a pretty weak source. While the spec says the NRF24L01 draws only "11 mA" in transmit", I suspect it draws much more than that in bursts. More, the NRF24L01 requires the power to be bypassed by "high performance RF capacitor" of 4.7 uF. Your board has a junky aluminum electrolytic cap, which likely has no bypass capability at burst frequencies the NRF24L01 operates at.

So essentially you inject huge noise into USB PHY power rail, and the USB signals (or their frequency) are likely got severely distorted, which causes the host to detect massive errors and shut the port down.

To fix the problem you need to place a 10 uF low-ESR ceramic capacitor right between pins of NRF24L01 2x4 header, and better de-couple it from Arduino pin14 (3.3V) with a good ferrite bead or good inductor, to filter the noise from entering the FT232 IC.

Related Topic