Single Cell Lithium-Ion Battery Management Module (4056) Schematic
After drawing up schematics of circuit boards salvaged from hair clippers for KiCad schematic practice, I decided to increase the difficulty with a single cell lithium-ion battery management system (BMS) module built around a 4056 chip. Since this is a popular module made by many vendors, I know publicly available schematics already exist. I don't see my KiCad exercise as duplicate effort. I see those existing schematics as an answer key for me to check against!


In my earlier look, I found many chips from different vendors under the 4056 designation, all of which seem to be mostly compatible with each other. Since then, I've come across several pointers to NanJing Top Power's TP4056. Either they were the first or they have been the most successful vendor of this solution. The modules I have on hand are not genuine TP4056, but one of the competitors marked 4056H.
I was also unable to read any markings on component marked U2 before. Thanks to my new polarized light macro photography solution, I could now make out its faint markings as DW01A. This is a battery protection chip that guards against over-charging (cut off at 4.3V), over-discharge (cut off at 2.5V) and over-current (150mV? That doesn't make sense.)
Armed with this information, I drew up my own schematic symbols for the 4056 chip and the DW01A. They're probably available in a KiCad part library somewhere, but I wanted the practice with KiCad symbol editor. It took me a while to figure out how to label inverted pins. Eventually I found this KiCad forum thread telling me to put the name inside curly brackets and prefixed by tilde. So for the inverted STDBY pin I had to type in ~{STDBY}.
I ran into an ambiguity with surface-mount resistors on this board. There were several labeled with 102 (meaning 1K Ohm) or if I should read them upside-down as 201 (meaning 200 Ohm). In this case I was able to measure them at 1K Ohm but I won't always have that luxury. How to I figure out which way is up?

I drew my schematic with dotted lines marking the two major feature areas: to the left is the battery-charging circuit driven by the 4056 chip, to the right is the battery-protection circuit under control of the DW01A chip. I traced through most of the 4056 side earlier, because I was looking to adjust charging rate and found I could do so by replacing R3 with resistor of a different value. This time I was more curious about the over-current protection side of the module. Looking at my schematic, I thought R6 would be a promising lead for current control, but at 1000 Ohms its resistance was far too high to be a current-sensing shunt resistor. Plus, it wasn't in line with the load path. I didn't understand how it could work or how it related to the 150mV current-sensing value listed in the DW01A data sheet.
Thinking I probably made a mistake in my schematic, I went online to check against others and it seems to match. One of those schematics was attached to this Electronics StackExchange thread, which also explained how over current protection works in this design. The details are a bit over my head, but supposedly works through the dual N-channel MOSFETs already present to handle over-charging and over-discharging. Sounds like the engineers behind DW01A were clever enough to get over-current protection without using a current-sensing shunt resistor, and that's why I couldn't find one. This is very interesting and I wished I was familiar enough with these components to fully understand how it works. Maybe I can come return to this topic later after I've learned more electronics.
What is clear to me, though, is that I wouldn't be able to change the over-current limit by changing a resistor. I would have to find a dual N-channel MOSFET with different characteristics to trigger protection at a different limit. And if I want to do it on this board, I would have to find one with a footprint compatible with the 8205A chip used here. That would be a project well beyond the scope of today's KiCad exercise so I set the idea aside and moved on.
This KiCad learning project is publicly available on GitHub