I don't use Workbench, so I'll wait a week instead of using the PR.
I'd also suggest a repeatable approach to future testing, maybe even using the Tripler, OLED, and INA219 from the Particle Store (so we can all perform tests using standardized and inexpensive equipment). Those (3) items plus a pigtail make quick work for checking the Current entering and leaving the Li-Po, as well as Vin. Works great for everything except drilling down on the Sleep Current.
I typically set my Minimum Input Voltage for the PMIC in the Code, and use a variable power supply to sweep through a wide input voltage range, and record the V, mA, an mW, entering the Li-Po (3.8-4.0V) throughout the Voltage Sweep. After about 1 min I'll have the Boron enter Sleep for 1 minute. The Charging Results are also recorded during and after the Sleep event.
Remove Li-Po and replace for a spot check.
Shutdown via EN Pin for another spot check.
Then change the Min Input Voltage in the Code and repeat all tests, etc, etc, etc.
IF everything seems in order, I'd try a Li-Po at a low voltage, maybe 3.5V to confirm nothing funny happens.
I'm sure others will add to those suggestions, but that's what I'd consider a minimum before releasing a Candidate.
@hwestbrook, I believe I remember one of the reasons was an attempt to have the Boron and Electron’s charging characteristics more aligned. And the ability to operate a Boron 2/3G without a Li-Po.
That is a great little unit test you’ve laid out @Rftop. I have the requisite hardware kicking around - could I convince you post a couple of code snippets to save me bumbling through it this weekend? Coding is my weakest area. Come to think of it, I’m not sure what my strong area actually is
So pleased to see progress on this topic. I’ve been very nervous with only a month or so to go before I need solar to be rock solid, and not on 1.1.0 - @Backpacker87 there are other firmware fixes (that were mentioned above) that make v1.3 a necessity in area of poor coverage.
@epbwhiz, I'm guessing that this will all change next week when Particle incorporates DeviceOS 1.5.
See the Pull Request that @avtolstoy linked to in Post #11.
I haven't studied the proposed SystemPowerConfiguration yet, but it appears the intent is to have it manage/police the PMIC settings in the future.
I performed a few preliminary Solar tests w/ 1.5.0 RC-1 on a Boron LTE.
SystemPowerConfiguration does appear to behave with Solar Panels.
I’ve only tested Li-Po recharging while operating, and with EN pin Shutdown.
I perform my own Curve Traces for each Solar Panel, with a High Powered LED test Stand.
For Instance:
A 0.5 W Seed Studio Panel will produce at 480 mW at 5.1Volts on my test stand during a Curve Trace (max power is actually at 6V, but the PMIC doesn’t have a setpoint above 5.08V).
The Boron LTE on 1.5.0 rc1 will manage the Li-Po charging Current to keep the panel at 5.1 volts [based on conf.powerSourceMinVoltage(5080)] .
After connecting the 0.5 W panel to the Boron Vusb Pin, the Power entering the Li-Po was measured at 390 mW. Once you add the 64 mW that the Boron consumes, that’s 454 mW being harvested from the 500 mW “rated” solar Panel. That’s very close to the 480 mW from the Solar Panel’s Curve Trace for my test stand…or ~95% efficiency.
The tests used a discharged Li-Po at 3.82V resting for Re-Charge.
A 1W Seed Studio Panel charged the Li-Po at 760 mW.
A 2W Voltaic Panel charged at 1055 mW.
These were just quick tests, so I may be hitting the current limits of my quick wiring, so don’t let the 1W and 2W results discourage you.
I haven’t measured charging currents during or after Sleep events yet.
The charging does work with EN Pin shutdown, like the good-ole days.
SYSTEM_THREAD(ENABLED);
void setup() {
SystemPowerConfiguration conf;
conf.powerSourceMaxCurrent(900) // Set higher than I need
.powerSourceMinVoltage(5080) // Most important for Solar Panels.
.batteryChargeCurrent(1024) // Set higher than I need
.batteryChargeVoltage(4208) // Be Careful here.
.feature(SystemPowerFeature::PMIC_DETECTION)
.feature(SystemPowerFeature::USE_VIN_SETTINGS_WITH_USB_HOST);
int res = System.setPowerConfiguration(conf); // returns SYSTEM_ERROR_NONE (0) in case of success
} // end setup()
void loop() {
}
Update: I haven’t found any problems with Li-Po Recharging using Sleep Modes yet (on 1.5.0.rc1 )
The bug with a Boron waking from Deep Sleep when the Solar Panel output cycles (clouds) appears to be gone also.
I’ll start a new thread in a few days with test results for anyone interested.
Thanks so much Ryan for the updates, and thanks @avtolstoy for getting this done! Yes please do start a new thread with the State of Solar on 1.5 so it doesn’t get mixed up with this history. Cheers
How can I use the new API to turn on and off charging based on temperature? Can I implement this concept with power manager, or do I need to disable power manager and then manage 100% with my application?
@hwestbrook I too would love to see some example code using the new 1.5.0 methods to dynamically enable/disable charging on the fly. I am thankful that Particle has given this the necessary attention it deserved and soon will have time to try-out 1.5.0-rc1