Document power options and the power-loss failsafe gap
Adds bench vs model power arrangements, the both-USB-plus-5V-jumper hazard, current budget, diode drop margin, and a deliberate test for the case the 400ms failsafe cannot cover.
This commit is contained in:
@@ -29,21 +29,70 @@ a lot more ways to be wrong.)
|
|||||||
|
|
||||||
* 2x ESP32 dev boards. Both must be the **original ESP32** (WROOM/WROVER).
|
* 2x ESP32 dev boards. Both must be the **original ESP32** (WROOM/WROVER).
|
||||||
S3, C3, C6 and H2 have no Bluetooth Classic, so a PS4 pad will not pair.
|
S3, C3, C6 and H2 have no Bluetooth Classic, so a PS4 pad will not pair.
|
||||||
* 3 jumper wires.
|
* 3 jumper wires, or 4 if you daisy-chain power.
|
||||||
|
|
||||||
```
|
```
|
||||||
Board A (Bluepad32) Board B (Legoino)
|
Board A (Bluepad32) Board B (Legoino)
|
||||||
GPIO17 TX -------------> GPIO16 RX
|
GPIO17 TX -------------> GPIO16 RX
|
||||||
GPIO16 RX <------------- GPIO17 TX
|
GPIO16 RX <------------- GPIO17 TX
|
||||||
GND -------------- GND <- do not skip this one
|
GND -------------- GND <- do not skip this one
|
||||||
|
5V -------------- 5V <- only in the model setup, see below
|
||||||
```
|
```
|
||||||
|
|
||||||
TX goes to RX, not TX to TX. If nothing arrives, that swap is the first thing
|
TX goes to RX, not TX to TX. If nothing arrives, that swap is the first thing
|
||||||
to check.
|
to check.
|
||||||
|
|
||||||
Power both from the same supply if you can. Separate USB bricks are fine as long
|
Without a common ground the UART has no shared voltage reference and you get
|
||||||
as the grounds are tied together — without a common ground the UART has no
|
garbage or silence, so that wire is not optional even when both boards have
|
||||||
shared voltage reference and you get garbage or silence.
|
their own USB.
|
||||||
|
|
||||||
|
## Power
|
||||||
|
|
||||||
|
Two arrangements, and the choice matters more than it looks.
|
||||||
|
|
||||||
|
**Bench setup — separate USB, no 5V wire.** Both boards on their own USB cables.
|
||||||
|
You get both serial monitors and can reflash either board without unplugging
|
||||||
|
anything. Use this for everything up to step 5.
|
||||||
|
|
||||||
|
**Model setup — one supply, 5V jumper.** USB into board A, then a fourth wire
|
||||||
|
from **A's 5V pin to B's 5V pin** (labelled VIN on some boards). Ground is
|
||||||
|
already joined by the wire you have.
|
||||||
|
|
||||||
|
Use 5V to 5V, never 3.3V to 3.3V. Each board's onboard AMS1117 regulator makes
|
||||||
|
its own 3.3V, and tying the outputs together back-feeds one regulator from the
|
||||||
|
other.
|
||||||
|
|
||||||
|
**Never have both USB cables plugged in while the 5V wire is connected.** That
|
||||||
|
ties two host supplies together through your jumper. Some devkits have a Schottky
|
||||||
|
diode on VBUS that prevents it, plenty do not, and you cannot tell by looking.
|
||||||
|
Pull the 5V jumper before plugging in a USB cable to reflash.
|
||||||
|
|
||||||
|
**Current budget.** An ESP32 idles around 80-120mA and peaks at a few hundred mA
|
||||||
|
on Bluetooth transmit. Two of them off one USB 2.0 port sits right at the 500mA
|
||||||
|
that port promises. It usually works, but a marginal supply shows up as random
|
||||||
|
reboots that look exactly like a software fault. A 1A+ charger or power bank
|
||||||
|
removes the doubt.
|
||||||
|
|
||||||
|
**Diode drops.** Many boards put a diode between VBUS and the 5V pin, so board
|
||||||
|
A's 5V pin sits nearer 4.7V. Through board B's own diode you are at maybe 4.4V
|
||||||
|
into a regulator wanting roughly 1.1V of headroom. It works, but the margin is
|
||||||
|
thin. If you are running off a power bank anyway, prefer separate leads to each
|
||||||
|
board's 5V pin over chaining B off A — same wire count, no stacked drops.
|
||||||
|
|
||||||
|
## Test the power-loss case deliberately
|
||||||
|
|
||||||
|
The 400ms failsafe in `receiver.ino` only fires if the receiver is *running*. If
|
||||||
|
board B loses power mid-command — and on a shared supply that now happens
|
||||||
|
whenever board A does — the failsafe cannot fire, and whether the motors stop is
|
||||||
|
left to the hub's own behaviour on BLE disconnect.
|
||||||
|
|
||||||
|
Find that out on purpose rather than by accident. Set a track running slowly,
|
||||||
|
pull power from board B, and watch what the motor does. If it keeps running you
|
||||||
|
want a physical switch on the hubs within arm's reach before driving this
|
||||||
|
anywhere interesting.
|
||||||
|
|
||||||
|
Worth doing the same test by pulling the UART wire instead — that path *does*
|
||||||
|
hit the failsafe, and confirming it works takes ten seconds.
|
||||||
|
|
||||||
## Step by step
|
## Step by step
|
||||||
|
|
||||||
@@ -142,6 +191,8 @@ stops all motors if nothing valid arrives for 400ms.
|
|||||||
|
|
||||||
* **Nothing arrives at board B.** TX/RX swapped, or no common ground. Both are
|
* **Nothing arrives at board B.** TX/RX swapped, or no common ground. Both are
|
||||||
silent failures.
|
silent failures.
|
||||||
|
* **Random reboots under load.** Supply, not software. See the current budget
|
||||||
|
above.
|
||||||
* **One hub connects, the other does not.** Legoino shares a single NimBLE
|
* **One hub connects, the other does not.** Legoino shares a single NimBLE
|
||||||
scanner. `receiver.ino` connects them strictly one at a time for this reason —
|
scanner. `receiver.ino` connects them strictly one at a time for this reason —
|
||||||
do not "optimise" that into two parallel `init()` calls.
|
do not "optimise" that into two parallel `init()` calls.
|
||||||
|
|||||||
Reference in New Issue
Block a user