I am laying out my first full device, a fairly simple sensor-data logger, with these specs in mind:

  • I'm running microcontroller and sensor @ 3.3V, with load varying from 10 mA to 400 mA
  • device will be powered by a rechargeable Li-ion battery (4.2V maximum)
  • battery charged by USB (5V)
  • device's Power-On/Off are toggled by a pushbutton hold or upon a battery undervoltage condition (@ 3.2 V).

The below schematic shows the Power-related section of my circuit so far. Note that Microcontroller and Sensor are NOT shown here.

(EDIT: Schematic revised based on @Russell and @Madmanguruman's suggestions.)


Labels: Descriptions of a few of the labels I used in the schematic image above:

  • VCC: Voltage (5V) at USB power source used to charge battery
  • 3.3V: Voltage at which Microcontroller, sensor, etc. will run
  • UC-PIN[1-8]: Various pins of AVR microcontroller, including ADC-capable pin
  • REG-ENABLE: Enable/disable Signal sent from output pin of STM6601 IC to the enable-pin of TPS63001.

Short summary of my overall approach: From the battery's supply, a buck-boost regulator provides 3.3V for the uC/sensor. This 3.3V supply is enabled/disabled (PwrON vs PwrOFF) by a specialized controller IC, which monitors for either pushbutton event or battery-undervoltage. USB power is used to charge the battery (whose voltage is measured periodically by an ADC pin on the uC). That's it.

Or more specifically, as you can see above, I am using these four components below (with their datasheet links):

  1. MCP73871: Battery-charging IC that uses ConstantCurrent-then-ConstantVoltage approach to charge the Li-ion. I set the pins on the MCP73871 to power the charging with USB (5V) with 500 mA current.
  2. TPS63001: Buck-boost regulator, supplied by the battery, and with a fixed output of 3.3V (Also, I have enabled "Power-save mode" on this regulator to allow higher efficiency for the smaller-load case of my device)
  3. STM6601: Pushbutton-based ON/OFF controller IC

    • Initially when the STM6601 detects the pushbutton as held for a duration, then it sends out a HIGH signal, which is connected to the TPS63001, thus enabling it, and bringing the device to life.
    • When the STM6601 detects either that pushbutton is held again OR that the battery voltage falls below a 3.2V threshold, then the STM6601 automatically sends out a LOW, disabling the regulator.
  4. Loadswitch (FPF1008): Controls current going from Battery V+ into a voltage divider
    • The divider is used to bring down the battery voltage to within the 3.3V maximum allowed on the microcontroller ADC pin.
    • The ADC takes battery voltage measurements periodically, which is mapped to curve of discharge level, for a rough indication to device user.

MY QUESTION: Do you have any suggestions regarding this layout and approach?

I am interested in any feedback you might have. Given my non-experience with any professional layout, I am expecting there are at least a couple of things "wrong"! Or things that could be improved upon; so I'm frankly open to any suggestions that I can learn from, small or big, even if they require me having to re-think/re-build the circuit.

  • \$\begingroup\$ One thing missing in the schematic is refdes's (reference designators). It's hard to discuss things if you can't name them. And also, I don't know which EDA software you use, but you need a refdes to transfer from schematic to PCB; the refdes is what makes the link between a symbol and the physical part. \$\endgroup\$ – stevenvh Sep 11 '12 at 13:54
  • \$\begingroup\$ @stevenvh: Updated with refdes labels added this time! \$\endgroup\$ – boardbite Sep 11 '12 at 14:16
  • 2
    \$\begingroup\$ Note, it's improper to simply pull 500mA from USB VBUS. You first have to negotiate that, and it may not be available in some environments (topologies including bus-powered hub, for example). \$\endgroup\$ – Ben Voigt Sep 11 '12 at 18:13
  • 1
    \$\begingroup\$ @boardbite: See this question And look at page 23 of the FTDI datasheet which describes the PWREN# pin, used to let your circuit know when 500mA is available. \$\endgroup\$ – Ben Voigt Sep 11 '12 at 18:31
  • 1
    \$\begingroup\$ @boardbite - While it's "improper" to draw more then 100 mA from a USB connector without negotiation, in reality, very, very few USB hosts (at least in modern computers) complain if you draw too much power from the USB interfaces. As such, if this project is just for your own use, I wouldn't worry about USB power negotiation. On the other hand, if you plan to sell this data-logger widget, proper USB power negotiation is important. \$\endgroup\$ – Connor Wolf Sep 12 '12 at 2:47

Looks good. No obvious "funnies" at a quick glance.

You have set charge termination = 10 mA typical (PROG3 = 100k to ground).
This maximises your battery capacity at the cost of lowering cycle life. Unless you want absolute maximum capacity I'd choose the 100 MA current termination option (PROG3 = 10k)

500 mA charge current is fine as long as battery tolerates it.
LiIon typically allows 0.5C to 1C max charge rate (depends on manufacturers spec with some few higher. LiPo is usually higher. So this should be OK for 1000 mAh battery and probably for 500 mAh but do check battery data sheet.

Buck-Boost often have a nasty efficiency dip around the boost to buck transition point and TPS63001 is one such. Mainly evident at low Iout and not vastly bad power wise, but can be worth being aware of.


Be certain to use an internally protected battery pack.
While you hope to avoid "vent with flame" events, it is a bonus if you can locate the battery so it can "melt down" without destruction of itself or of the area it is housed in. While I have read a large amount about LiIon and LiPo destructive events I have never seen one and never met anyone who has experienced one personally. Percentage wise the incidence is probably very small. I once tried to induce some LiPo cells I have here to self destruct by applying gross over voltage - with no success.

The charger IC seems to come in 4.1, 4.2, 4.35. 4.4 Volt versions.
If you use the 4.1V version you decrease battery capacity, increase cycle life - perhaps significantly, and give yourself more safety margin. The table below is from the Battry University website (copied in this case from stack exchange "Charging affects battery life" which may also be useful. This suggests an ultimate capacity of about 87% of maximum possible just by dropping Vmax by 0.1 Volt! Affect on battery mechanical stress may be significant.

If you care about ultra long battery cycle life consider using LiFePO4 battery. This charger IC will not accommodate it. Vmax is 3.6V, most energy is delivered in the 3.0 - 3.3 V range so you would be boosting for most of the battery life to get 3.3V supply.

enter image description here

If using Lithium Ion you could consider the merits of using a linear LDO regulator for the 3V3. This means you "waste" the energy below about 3.4V which is about 75% capacity at 2C rate and 90%+ at 1C rate. If you use a 1000 mAh battery then 400 mA = 0.4C and you would get 90% + of battery capacity with a linear regulator. Here are some "typical" curves which need to be checked against temperature, load and actual cells used in your case. At 4V in a linear regulator is 3.3/4 = 82.5% efficient and at the lower load mean of about 3.7V it is 3.3/3.7 ~+ 90% efficient. Your buck-boost is quite possibly no more efficient across the battery range. Not discharging LiIon below 3.3V is going to greatly help its cycle life. IF you can tolerate the loss of capacity from using Vmax = 4.1V when charging and a linear LDO regulator you get a very long life battery with no switching regulator noise issues. Overall battery cost will be higher for a given capacity but the whole of lifetime battery costs may be superior due to the long cycle lifetimes. With LiIon you still need to contend with calendar life - the battery just "gets old" even if little used. Curve below copied from When to stop draining - which also may be worth reading.

enter image description here

You may wish to consider using a resistor diivder from Vin to the VPCC pin to provide low Vin shut down. This sets lowest Vin that will be tolerated. (Strapped to Vin at present which disables it. This is a valid option). May not be useful in your application.

You have battery thermal input going direct to P$5 at present - which is wholly valid. But, ensure battery used uses a 10k thermistor (as most do) and not some other value (as can happen) and consider whether you want to tailor the valid thermal range for you application by adding series R in the thermal sense line (covered in data sheet).

| improve this answer | |
  • \$\begingroup\$ Incorporated the 10K suggestion. Doing a quick real-life replacement on my board to test out the charge cycle; I think it also will have the added end-user benefit of more quickly declaring the battery-charging as "completed". As far as the TPS63001, the efficiency dip at the transition is indeed there looking at the curves, although it appears to be less pronounced for the Power-save mode in particular (versus Continuous current mode). \$\endgroup\$ – boardbite Sep 11 '12 at 15:08
  • \$\begingroup\$ Thank you for the new comments! (#1) Have indeed ensured the pack has internal protection. (#2) I like the idea of the MCP73871 with 4.1V cutoff, to increase cycle count as you suggest, and also to decrease charge time, given the near-plateau after 4 V. Moreover, I did a test on setting a 100 mA current termination last night and the end voltage of the battery was only 4.05 V, so I think 4.1 maximum is plenty either way. (#3) I have just updated the circuit above with the VPCC divider suggestion. I used 100K and 270K, which sets a comfortable 4.5 Volts as the lower-threshold on the USB VCC. \$\endgroup\$ – boardbite Sep 12 '12 at 6:55
  • \$\begingroup\$ (The LDO calculations above on the voltage window make sense, but I'm doing some research on the LDO regulator option, and will comment back on that if fitting.) \$\endgroup\$ – boardbite Sep 12 '12 at 7:09

The buck-boost circuit will introduce some ripple on the 3.3V supply by nature of the fact that it's a switching regulator. If you need the 3.3V supply to be squeaky-clean (if it's going to be used as an ADC reference, for example) you may need a separate LC filter to smooth it. (400mA is tough for a linear post-regulator to carry).

You may want to consider a picofuse in series with the battery positive feed, just in case something goes catastrophically wrong (a shorted battery won't power the logic to sense the temperature).

I assume the battery header will prevent accidental reversal of + and -.

| improve this answer | |
  • \$\begingroup\$ You're right; Supply polarity is indeed taken care of by the connector (the idea is that the device will have a one-time installed battery and that's all). The 3.3V is not used here for a precision reference, but I'll consider the LC filter idea anyway b/c I do take periodic ADC measurements of the battery voltage with the AVR's ADC (although I might use the internal reference; have to see). I've added the fuse, and will update the schematic image above. Thanks! \$\endgroup\$ – boardbite Sep 11 '12 at 17:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.