linux-hwmon.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Brüns, Stefan" <Stefan.Bruens@rwth-aachen.de>
To: Nicolin Chen <nicoleotsuka@gmail.com>
Cc: "jdelvare@suse.com" <jdelvare@suse.com>,
	"linux@roeck-us.net" <linux@roeck-us.net>,
	"linux-hwmon@vger.kernel.org" <linux-hwmon@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"corbet@lwn.net" <corbet@lwn.net>,
	"linux-doc@vger.kernel.org" <linux-doc@vger.kernel.org>
Subject: Re: [RFC][PATCH] hwmon: (ina2xx) Improve current and power reading precision
Date: Wed, 21 Nov 2018 22:16:09 +0000	[thread overview]
Message-ID: <1717545.GXSegKtrMu@sbruens-linux.lcs.intern> (raw)
In-Reply-To: <20181121194051.GA8902@Asurada-Nvidia.nvidia.com>

On Mittwoch, 21. November 2018 20:40:52 CET Nicolin Chen wrote:
> (Removing "m.purski@samsung.com" since it's not reachable any more)
> 
> Hi Stefan,
> 
> Thank you for the comments.
> 
> On Wed, Nov 21, 2018 at 04:13:01PM +0000, Brüns, Stefan wrote:
> > > === Problem ===
> > > Both methods simplify software routine by fixing one factor, which
> > > sacrifices the precision of the hardware measurement results.
> > > 
> > > Using ina226 for example, with method A, the current scale was 1mA
> > > and the power scale was 25mA.
> > > 
> > > With method B, calibration value is fixed at 2048 so the precision
> > > is decided by shunt resistor value. It sounds reasonable since the
> > > hardware engineers can use a larger shunt resistor when they need
> > > higher resolution. However, they often concern power burning across
> > > the resistor as well, so the resistor usually won't be so large: a
> > > typical value 1000 micro-ohms, which results in a current scale at
> > > 2.5 mA and a power sacle at 62.5 mW.
> > 
> > Power loss surely is a concern, but figures should be kept reasonable.
> > 
> > 1. You mention 1.8V bus voltage, and currents in the 30mA range. Using the
> > 1mOhm current shunt:
> > 
> > U_S = R_S * I_S 1e-3 Ohm * 30e-3 A = 30e-6 V  (30uV)
> > P_S = U_S * I_S = 30e-6V * 30e-3 A = 900e-9W = 0.9 uW
> > 
> > INA219 Power Supply (Datasheet)
> > Min operating Voltage: 3V
> > Quiescent Current: 0.7mA
> > -> Min power: 2.1mW
> > 
> > So the INA219 alone uses 2.1mW, 1000 times more than the shunt.
> 
> Chip can enter power-down or one-shot mode. Though this upstream
> driver doesn't have these two mode supports yet, I am working on
> it so they'll be added.

The power-down current is 6uA, so even if you never leave power-down mode, you 
are down to 18uW. But on top of that, you need power for the conversion, and 
you need power for communication.

> > Another concern may be voltage drop over the shunt, but for this case you
> > have a nominal voltage of 1.8V, so 30uV are 0.001%.
> > 
> > > When measuring a 1.8v voltage running a small current (e.g. 33 mA),
> > > the power value (that's supposed to be 59.4 mW) becomes inaccurate
> > > due to the larger scale (25mA for method A; 62.5 mA for method B).
> 
> Just found out that I have typos here: 25mW and 62.5mW.
> 
> > Another look into the datasheet reveals, even at full gain (PGA=1), the
> > LSB is 40mV / 2^12 = 40mV / 4096 ~ 10uV. So when the current ADC reads
> > out as 3*LSB, this anything between 25mA and 35mA. This is the best case
> > figure.
> Current read doesn't get affected a lot actually, since hwmon ABI
> also reports current value in unit mA. However, the power read is
> the matter here. With a 62.5mW power_lsb, power results are kinda
> useless on my system.

The reported current does not matter here, actually. Internally, the ADC value 
will have an uncertainty of 10mA (at PGA=1). At 1.8V, your uncertainty is 
18mW. And thats *only* the quantization noise. It wont get better than that.

Also note, you are apparently using the ina2xx hwmon driver - I strongly 
advise against it, you should either use the ina2xx driver from the IIO 
subsystem directly, or use the IIO driver via iio-hwmon.

1. INA219 is not properly supported by the hwmon driver, see the changes in 
the IIO driver.
2. The IIO driver has many more features:
  - setting the PGA (INA219)
  - setting the bus voltage range (INA219)
  - selecting the conversion time (INA219/226)

There is also always the possibility to read the bus and shunt voltage 
registers and calculate the power manually.

Regards,

Stefan

  reply	other threads:[~2018-11-21 22:16 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-21  1:26 [RFC][PATCH] hwmon: (ina2xx) Improve current and power reading precision Nicolin Chen
2018-11-21 16:13 ` Brüns, Stefan
2018-11-21 19:40   ` Nicolin Chen
2018-11-21 22:16     ` Brüns, Stefan [this message]
2018-11-21 22:57       ` Guenter Roeck
2019-01-05  1:26 ` Nicolin Chen
2019-01-05  1:26   ` Nicolin Chen
2019-01-17 22:38   ` Nicolin Chen
2019-01-17 23:13     ` Guenter Roeck
2019-01-17 23:16       ` Nicolin Chen

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=1717545.GXSegKtrMu@sbruens-linux.lcs.intern \
    --to=stefan.bruens@rwth-aachen.de \
    --cc=corbet@lwn.net \
    --cc=jdelvare@suse.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=nicoleotsuka@gmail.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).