All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Belisko <marek.belisko@open-nandra.com>
To: sre@kernel.org
Cc: robh+dt@kernel.org, linux-pm@vger.kernel.org,
	linux-kernel@vger.kernel.org, hns@goldelico.com, pavel@ucw.cz,
	Marek Belisko <marek.belisko@gmail.com>
Subject: [RFC PATCH 4/5] power: Add formula for computing LiIon State of Charge from Voltage
Date: Tue,  1 Aug 2017 22:55:25 +0200	[thread overview]
Message-ID: <1501620926-22669-5-git-send-email-marek.belisko@open-nandra.com> (raw)
In-Reply-To: <1501620926-22669-1-git-send-email-marek.belisko@open-nandra.com>

From: Marek Belisko <marek.belisko@gmail.com>

The formula appears to be known in RC model communities.
We did find the first reference on the web in a a forum post
by "SilverFox" from 04-16-2008:

http://www.candlepowerforums.com/vb/showthread.php?115871-Li-Ion-State-of-Charge-and-Voltage-Measurements#post2440539

Some other posts attribute it to Sanyo.

The linear interpplation below 19.66% was suggested by Pavel Machek.

Signed-off-by: Marek Belisko <marek.belisko@gmail.com>
---
 include/linux/power/generic-fuel-gauge.h | 38 ++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 include/linux/power/generic-fuel-gauge.h

diff --git a/include/linux/power/generic-fuel-gauge.h b/include/linux/power/generic-fuel-gauge.h
new file mode 100644
index 0000000..2da7825
--- /dev/null
+++ b/include/linux/power/generic-fuel-gauge.h
@@ -0,0 +1,38 @@
+#ifndef PWR_GENERIC_FUEL_GAUSE_H
+#define PWR_GENERIC_FUEL_GAUSE_H
+
+/* calculate remaining fuel level (in %) of a LiIon battery assuming
+ * a standard chemistry model
+ *    The first reference found on the web seems to be a forum post
+ *    by "SilverFox" from 04-16-2008. It appears to be attributed to Sanyo.
+ *    http://www.candlepowerforums.com/vb/showthread.php?115871-Li-Ion-State-of-Charge-and-Voltage-Measurements#post2440539
+ *    The linear interpplation below 19.66% was suggested by Pavel Machek.
+ *
+ * @mV: voltage measured outside the battery
+ * @mA: current flowing out of the battery
+ * @mOhm: assumed series resitance of the battery
+ *
+ * returns value between 0 and 100
+ */
+static inline int fuel_level_LiIon(int mV, int mA, int mOhm) {
+	int u;
+
+	/* internal battery voltage is higher than measured when discharging */
+	mV += (mOhm * mA) /1000;
+
+	if (mV == 0)
+		return 0;
+
+	/* apply first part of formula */
+	u = 3870000 - (14523 * (37835 - 10 * mV));
+
+	/* use linear approx. below 3.756V => 19.66% assuming 3.3V => 0% */
+	if (u < 0) {
+		return  max(((mV - 3300) * ((3756 - 3300) * 1966)) / 100000000, 0);
+	}
+
+	/* apply second part of formula */
+	return min((int)(1966 + int_sqrt(u))/100, 100);	
+}
+
+#endif /* PWR_GENERIC_FUEL_GAUSE_H */
-- 
2.7.4

  parent reply	other threads:[~2017-08-01 20:56 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-01 20:55 [RFC PATCH 0/5] Add formula for LiIon batteries to compute capacity Marek Belisko
2017-08-01 20:55 ` [RFC PATCH 1/5] dt-bindings: power: Add battery types Marek Belisko
2017-08-02 11:38   ` Pavel Machek
2017-08-02 11:43   ` Pavel Machek
2017-08-02 11:47     ` Belisko Marek
2017-08-01 20:55 ` [RFC PATCH 2/5] power: generic-adc-battery: Parse more properties from DT Marek Belisko
2017-08-02 11:56   ` Pavel Machek
2017-08-02 11:57     ` Belisko Marek
2017-08-29  9:45   ` Sebastian Reichel
2017-08-01 20:55 ` [RFC PATCH 3/5] power/generic-adc-battery: Add support for temperature and add check for charge from iio current channel Marek Belisko
2017-08-29  9:54   ` Sebastian Reichel
2017-08-01 20:55 ` Marek Belisko [this message]
2017-08-01 20:55 ` [RFC PATCH 5/5] power: generic-adc-battery: Add capacity handling Marek Belisko
2017-08-29 10:11   ` Sebastian Reichel
2017-09-08 11:32     ` libbattery was " Pavel Machek
2017-09-08 13:15       ` H. Nikolaus Schaller
2017-09-08 13:15         ` H. Nikolaus Schaller
2017-10-18 12:28       ` Pavel Machek
2017-10-18 12:28         ` Pavel Machek
2017-10-18 12:28         ` Pavel Machek
2017-10-18 12:48         ` H. Nikolaus Schaller
2017-10-18 12:48           ` H. Nikolaus Schaller
2017-10-18 12:48           ` H. Nikolaus Schaller
2017-10-18 13:09           ` Pavel Machek
2017-10-18 13:09             ` Pavel Machek
2017-10-18 13:22           ` Tony Lindgren
2017-10-18 13:22             ` Tony Lindgren
2017-10-18 13:56             ` Pavel Machek
2017-10-18 13:56               ` Pavel Machek
2017-10-18 15:52               ` H. Nikolaus Schaller
2017-10-18 15:52                 ` H. Nikolaus Schaller
2017-10-18 16:13                 ` Pavel Machek
2017-10-18 16:13                   ` Pavel Machek
2017-10-18 16:48                   ` H. Nikolaus Schaller
2017-10-18 16:48                     ` H. Nikolaus Schaller
2017-10-18 15:47             ` H. Nikolaus Schaller
2017-10-18 15:47               ` H. Nikolaus Schaller
2017-10-18 15:47               ` H. Nikolaus Schaller
2017-10-19 16:24               ` Tony Lindgren
2017-10-19 16:24                 ` Tony Lindgren
2017-10-19 16:55                 ` H. Nikolaus Schaller
2017-10-19 16:55                   ` H. Nikolaus Schaller
2017-10-19 17:06                   ` Tony Lindgren
2017-10-19 17:06                     ` Tony Lindgren
2017-10-19 17:20                     ` H. Nikolaus Schaller
2017-10-19 17:20                       ` H. Nikolaus Schaller
2017-10-19 17:33                 ` Ladislav Michl
2017-10-19 17:33                   ` Ladislav Michl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1501620926-22669-5-git-send-email-marek.belisko@open-nandra.com \
    --to=marek.belisko@open-nandra.com \
    --cc=hns@goldelico.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=marek.belisko@gmail.com \
    --cc=pavel@ucw.cz \
    --cc=robh+dt@kernel.org \
    --cc=sre@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.