ZenFone 5 (A500KL)のリチュームイオン充電池の放電容量

ZenFone 5 (A500KL)内蔵のリチュームイオン充電池の放電容量を測定してみました。

この電池は以前に電池の持ちが悪くなったという家人申告により交換した時の元々の電池です。

ZenFone 5 (A500KL)のリチュームイオン充電池の放電容量

10オーム負荷で1751mAhでした。ZenFone 5 (A500KL)のスペックでは2110mAhです。
それほど劣化しているとは思えないのですがね。


スポンサーサイト

C++ 名前マングリング(Name mangling)(備忘録)

「名前マングリング(Name mangling)」について、実機で挙動確認をした時のメモです。



名前マングリング(Name mangling)


■C++の場合、シンボル名に「名前マングリング(Name mangling)」と呼ばれる処理が施される為に、
共有ライブラリーを利用する時には、関数名の指定はその「名前マングリング」された名前を指定しなければならない。

もしくは、共有ライブラリー側で「名前マングリング」を抑止(デマングル)し、関数名のママとする必要がある。

■C言語の場合は、名前マングリングは行われない。



先にまとめ


■名前マングリングの結果
0000067c T _Z9SOtest005c ← SOtest005はこのようになる
00000680 T _Z9SOtest006i ← SOtest006はこのようになる

目的はオーバーロードの実現の為と思われる。



■デマングル
ヘッダファイルをCとC++で共有するために
#ifdef __cplusplus
extern "C" {
#endif
ここにexternの定義をする。複数可能。
#ifdef __cplusplus
}
#endif

結果は
00000668 T SOtest002
00000670 T SOtest003
00000678 T SOtest004
のように「名前マングリング」されない。



■CPP側のextern指定
ヘッダファイル側とCPPファイル側の両方でextern指定をすると、「名前マングリング」の抑止(デマングル)指定をしても、
「名前マングリング」された事があった。ただし、再現できなかった。記憶の片隅に置いておく事にします。



■extern指定なしのシンボル名(今回は関数名)
FreePascal側で宣言している

function SOtest006(a : integer) : integer; cdecl; external 'RaspbianSOtest001' name '_Z9SOtest006i';

はCPP,h側では extern は指定していない。
しかし、利用出来る。
ただし、シンポル名は「名前マングリング」された名前となる。



■FreePascal側でのオーバーロード

(1)宣言
function SOtest002(a : integer; b : integer) : integer; cdecl; external 'RaspbianSOtest001' name 'SOtest002';
function SOtest002(a : integer) : integer; cdecl; external 'RaspbianSOtest001' name 'SOtest007';

(2)呼び出し
c := SOtest002(3,6);
memo1.lines.add('SOtest002(3,6) : ' + inttostr(c));

c := SOtest002(2);
memo1.lines.add('SOtest002(2) : ' + inttostr(c));

(3)結果
SOtest002(3,6) : -3
SOtest002(2) : 702

この事から「デマングル」はしない方がよいかもしれない。



環境


■Eclipse IDE for C/C++ Developers
Version: Neon.3 Release (4.6.3)
Build id: 20170314-1500
(Windows 10 64bitで実行)

■ハード:Raspberry Pi 3 Model B V1.2

■pi@rp3a:~ $ uname -a
Linux rp3a 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux

■Lazarus
バージョン #:1.2.4+dfsg2-1
FPCバージョン 2.6.4
(Raspberry Pi 3で実行)




テスト


■ソース
(1)共有ライブラリー
xxx.cpp
#include "RaspbianSOtest001.h"

int SOtest002(int a,int b) {return a - b;}
int SOtest003(void) {return 3;}
extern void SOtest004(void){}
void SOtest005(char a){}
int SOtest006(int a){return a + 600;}
int SOtest007(int a){return a + 700;}



ヘッダファイル
RaspbianSOtest001.h

#ifdef __cplusplus
extern  "C"  {
#endif
extern int SOtest002(int a,int b);
extern int SOtest003(void);
extern void SOtest004(void);
//extern int SOtest007(int a);
#ifdef __cplusplus
}
#endif

extern void SOtest005(char a);
extern "C" {int SOtest007(int a);}




(2)共有ライブラリーを使用するFreePascal
unit u_app;

{$mode objfpc}{$H+}

interface

uses
  dl,
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

function SOtest002(a : integer; b : integer) : integer; cdecl; external 'RaspbianSOtest001' name 'SOtest002';
function SOtest006(a : integer) : integer; cdecl; external 'RaspbianSOtest001' name '_Z9SOtest006i';
function SOtest007(a : integer) : integer; cdecl; external 'RaspbianSOtest001' name 'SOtest007';
function SOtest002(a : integer) : integer; cdecl; external 'RaspbianSOtest001' name 'SOtest007';


type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  lib : pointer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  c : integer;
begin
  c := 123;
  //c := SOtest002(10,5);
  //SOtest004;

  c := SOtest002(3,6);
  memo1.lines.add('SOtest002(3,6) : ' + inttostr(c));

  c := SOtest006(6);
  memo1.lines.add('SOtest006(6) : ' + inttostr(c));

  c := SOtest007(70);
  memo1.lines.add('SOtest007(70) : ' + inttostr(c));

  c := SOtest002(2);
  memo1.lines.add('SOtest002(2) : ' + inttostr(c));

end;
begin
end.




■実行結果
Memo1
SOtest002(3,6) : -3
SOtest006(6) : 606
SOtest007(70) : 770
SOtest002(2) : 702




■シンボル名確認 nm libRaspbianSOtest001.so 実行結果
root@rp3a:/usr/lib# nm libRaspbianSOtest001.so
00000668 T SOtest002
00000670 T SOtest003
00000678 T SOtest004
00000688 T SOtest007


0000067c T _Z9SOtest005c
00000680 T _Z9SOtest006i




リチュームイオン充電池 18650 2000mAh(300円充電器内蔵電池) 放電容量

300円充電器の充電能力が低いため、内蔵電池の放電容量を測定しました。

ZenFone Go ZB551KLへの充電の場合、1A近く充電電流が流れます。
電池側では1.38Aと重い負荷となるので、2600mAh(ヴァストマートSHOP)と比較の為に10オーム負荷、
ZenFone Go ZB551KL充電時に近い負荷として2オーム負荷、
参考に3オームの負荷の三種類を測定しました。


リチュームイオン充電池 18650 2000mAh(300円充電器内蔵電池) 放電容量
2600mAh(ヴァストマートSHOP)と比較の為の10オーム負荷の時



リチュームイオン充電池 18650 2000mAh(300円充電器内蔵電池) 放電容量
負荷による放電容量の変化をみるための参考として3オーム負荷の時



リチュームイオン充電池 18650 2000mAh(300円充電器内蔵電池) 放電容量
ZenFone Go ZB551KLの充電状態に近い2オーム負荷の時


結果


ZenFone Go ZB551KLへの充電時に近い2オーム負荷の時の容量は1249mAhでした。
これを前回の実測時に式に当てはめると、

(1249mAh×0.92×0.8×0.85)÷3010mAh = 0.259(25.9%)
の充電が可能となり、下記の事を考慮すると実測とほぼ合っています。

テストは抵抗負荷で電池の電圧が降下すると電流も減りますが、
実際のスマホ充電時は一定電力の負荷なので、電池の電圧が降下すると、逆に電流は増えます。
この為、さらに実際の放電容量は低下し20%程度の充電能力になると思われます。

感想


この内蔵電池は軽負荷用のリチュームイオン充電池と思われます。
電池表記の2000mAhは軽負荷時では表記通りになるのではないでしょうか。

嘘ではないが購入した人が使う環境では期待と異なるというケースなんでしょう。
150mAで充電してくれるスマホがあれば、
2000mAh×0.92×0.8×0.85=1251.2mAhとなり、
3010mAhのZenFone Go ZB551KLでは、41%UPの充電が出来るのではないかと想像されます。


重要なお断り


300円充電器のリチュームイオン充電池の交換」やここで書かれている何%UPするかの計算式は、充電する側とされる側の電池が共にリチュームイオン充電池と同じ種類で、その電圧は同じ。そして、さらに充放電中の電圧は一定との「みなし」をしています。

最終的な消費者であるスマホ回路は同一の仕事をするのに一定の電力を要求するのか、一定の電流なのか?
バッテリーの容量(残量)とは電力量(mWh)なのかmAhなのか?
多くのスマホが表示している残量とは電圧を無視し、mAhで換算しているのか?
私は知りません。
両端の電池が同じ種類で一定電圧と仮定する事により、mWhでもmAhで同じ結果になるだろうという思いで、簡易なmAhでの計算としました。



300円充電器のリチュームイオン充電池の交換

欲しかったリチュームイオン充電池を使った300円の充電器が手に入りました。

早速、ZenFone Go ZB551KLを充電してみましたが、20%UPするだけでこれでは頼りない。
内蔵しているリチュームイオン充電池の容量は2000mAhと書かれています。
最近作った2600mAhの電池を使った充電器では50%UPしたので、38%UPを期待していました。

300円充電器のリチュームイオン充電池の交換
パッケージ

300円充電器のリチュームイオン充電池の交換
本体外観(3個かったので、これはその内の黒バージョン)


能力不足の原因調査


能力不足の原因がバッテリーにあるのか、それともDC-DCコンバーターにあるのか調査する為、
DC-DCコンバーターの変換効率を測定しました。

調査方法は、入力側と出力側の電圧電流を測定して、供給電力と出力電力の比率を測ります。
ZenFone Go ZB551KLの充電では約0.9Aの電流が流れていた為、5オームの抵抗負荷で測定しました。

■条件
電池の開放電圧・・・4.12V
負荷抵抗・・・5オーム

■測定結果(DC-DCコンバーター)
入力電圧・・・4.04V
入力電流・・・1.38A
供給電力・・・5.575W

出力電圧・・・5.08V
出力電流・・・1.016A
出力電力・・・5.161W

変換効率・・・5.161/5.575=0.926 (92.6%)

結果、DC-DCコンバーターは意外に高効率で92.6%もありました。
原因はバッテリーだろうと判断し、
DC-DCコンバーターはそのまま使う事にして、バッテリーを前述の自作充電器で使った2600mAhの電池を使う事にしました。

電池交換後の充電結果


電池交換後にZenFone Go ZB551KLを充電した結果50%以上の充電が出来ました。


オマケ写真(電池交換前)


300円充電器のリチュームイオン充電池の交換


300円充電器のリチュームイオン充電池の交換


300円充電器のリチュームイオン充電池の交換

充電停止電圧は4.21Vと少し高めで、
放電打ち切り電圧は3.2V付近です。
生セルのリチュームイオン電池でも安心です。


感想


2600mAhのバッテリーで、3010mAhのZenFone Go ZB551KLのバッテリーを充電して52%の充電能力は妥当か。

(1)充電器のDC-DC変換効率は0.92
(2)スマホ内の充電回路の効率は 4/5=0.8 (電圧ドロップ方式の充電回路で、5Vを入力とし充電池の電池端子電圧が平均4Vとして)
(3)リチュームイオン充電池自身の充電/放電効率を 0.85 とすると。

(2600mAh×0.92×0.8×0.85)÷3010mAh=0.54(54%)

と54%の充電能力という事になり、実測とあっています。

この2600mAhの電池は260円で買ったのですが、今はもう売っていません。
もう、10本程買っておけばよかったと、大いに後悔しています。

※この結果から、500円程度で売っているものなら50%UPの能力があるかもしれないと思うようになりました。

Lazarus と FreePascalのインストール(Raspberry Pi)(備忘録)

雨降りセンサーや郵便投函センサーのサーバーとして現在PCはEZGO(手のひらサイズPC)とIP Powerを組み合わせているのですが、
これをRaspberry Pi 3に置き換えてみようと挑戦中です。

この記事は、開発言語としてWindowsとRaspbianの両方で使えるFree Pascal(FPC)を試す事にしてLazarusのインストールを試みた時の備忘録です。
古いバージョンなら比較的簡単にインストールできましたが、出来るだけ新しいバージョンを狙うとなかなか苦労します。

前提


■OS
Raspberry Pi 3のOSはRaspbianで、

RASPBIAN JESSIE WITH PIXEL
Image with PIXEL desktop based on Debian Jessie
Version:April 2017
Release date:2017-04-10
Kernel version:4.4

ここからダウンロードしました。

■開発言語とライブラリー
Free Pascal and Lazarus と indy10を使用する。



LazaFree Pascal and Lazarusのインストール


こちらについては、下記のサイトで非常にわかりやすく書かれています。(感謝)

Tweaking4All.com - How to install Lazarus Pascal on Raspberry Pi 2 (Raspbian)

■ただし、記事は2015年に書かれたものなので、最新のFree Pascal(FPC)をコンパイルする為に必要なFPCのバージョンが古く、コンパイルできませんでした。
この為、Step4に書かれている fpc-2.6.4.arm-linux.tar を fpc-3.0.2.arm-linux-eabihf-raspberry.tar に置き換えて実施しました。

fpc-3.0.2.arm-linux-eabihf-raspberry.tarはこちらからダウンロードしました。

■もう一迷った箇所は、
Step4で、fpc-3.0.2をインストールする時に、問い合わせがあります。
ideとかドキュメントなどインストールするかなどです。
これは、全て「n」で応答しました。....この記事を記述時点ではこの選択の影響は不明です。

■重要なポイント
「Increase the swap file size (required)」で書かれている、スワップファイルの拡張はRaspberry Pi 3でも必須です。
これをしないと、地獄を見ます。私のように。
※ 設定値は記事の通り、 CONF_SWAPSIZE=500 で成功しました。


参考にした記事が非常によく書かれていて、これ以上メモって置くことはありません。改めて感謝感謝です。


モバイル充電器の作成(18650一本)

中国渡来の格安部品でスマホ用のモバイル充電器を作ってみました。

※ただし、ZenFone Go ZB551KL充電時の充電電流は部品の規格を超えた電流が流れる可能性があり、発火等の恐れがあります。
ご自身で作成される場合は自己責任でお願いします。

モバイル充電器の作成(18650一本)

■電池(写真上)
18650リチュームイオン充電池(保護回路なし) 一本(写真なし)
18650電池ケース(保護回路なし用)


■本器リチュームイオン充電池の充電用部品(写真左下)
HiLetgo 5V 1A 18650 リチウムバッテリー チャージボード Micro USB チャージモジュール プロテクト [並行輸入品]

このモジュールはバッテリーの保護回路がある模様なのでこれを選択しました。
使用するリチュームイオン電池は保護回路がない生セルなのでこの機能は必須でした。
目的通り、2.5V付近で放電停止し、バッテリーを開放してくれました。

microUSBから充電しますが、歪んで取り付けられていました。さすがです。

※このモジュールはバッテリー接続後、バッテリーの充電状態とは無関係に一回充電する事により、OUT端子にバッテリーが接続されます。
充電しない状態ではOUT端子の電圧は0Vです。


■スマホUSB充電用部品(5VへのDC-DC昇圧器)(写真右下)
SODIAL(R) DC-DC 0.9-5V 600MA電圧ステップアップブーストモジュールUSB充電器ブルー

入力電流の制限が600mAとなっています。
ZenFone Go ZB551KLへの充電では出力電流は0.43A程度流れていましたので、入力電流はさらに大きいと思われます。
規格を超えている可能性があります。(今回、測定はしていません)

※5V側にLEDランプがあり、通電状態を表示するようになっています。
この為、待機電力を喰うのでLEDは取り外してあります。


テスト


2600mAhの18650リチュームイオン電池を使用して、
ZenFone Go ZB551KL(バッテリー容量 3010mAh)への充電をした場合、
50%強の充電が出来ました。
※条件
充電開始時のスマへの電池残量は20%付近から。
充電中もスマホの電源はONのまま。
本器のバッテリー放電終了による充電打ち切り時のスマホ残量は72%でした。


感想


写真はありませんが、バッテリーケース裏側に各部品を貼り付けて、PP版を周囲に巻きつけてケース代わりにしました。

暫くテストしてみて、問題ないようなら緊急用の充電器にしようと思っています。

お知らせ
■注意:Google Chrome以外のブラウザでは動作しない事もあります。
お好みに応じて
画像だけの表示でいいよ
やっぱり全部表示して
背景は黒がいいな
背景を元に戻して
サブジャンル
メモリアルマップ
My Favorite Photo
検索フォーム
プロフィール

otsu.usiwakamaru

Author:otsu.usiwakamaru
五条の橋でひらりひらりと欄干を飛び渡る牛若丸のように、興の向くまま電子回路にプログラミングに写真にと飛び回っています。

プロフィール詳細

カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
キーワード
クリックしたキーワードの記事のみ表示します。

電池 試み IXY デザイン  改造 3D ミッキー 

最新記事
月別アーカイブ
全記事表示リンク

全ての記事を表示する

おすすめプログ(新着記事)
リンク


にほんブログ村
カテゴリ
ART (1)
橋 (0)
PIC (2)
カウンタ
訪問者数(UU)

アクセス数

現在の閲覧者数

tael no013用