gnuplot

2022年8月29日 (月)

コードレス電話の充電池がアウト #3

新品のELPA製電池、1Ωの抵抗を直列に入れて、
ドロップ電圧を±値で記録します。
すると、充電だけでなく放電(電話機回路が食う電流)
の様子もわかります。

こんなグラフになりました。
Cap068

上側の赤いラインが1秒ごとの電流値。
左目盛です。
充電のピークが70~80mA。
記録開始直後に電話機を触ったんで、180mAほどの
放電電流のピークが見えています。
これが、電話機の消費電流かと。

緑色ラインはその平均値。
右側目盛で、平均的にざっと30mAほど。
30mA ÷ 600mAh = 5% = 1/20

トリクル充電の電流値にすると、ちょいと大きいような。
電池に対して直列に入れた「1Ω」の抵抗が影響しているの
かもしれません。

使ったデータレコーダはこんな具合に記録。
~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 01:06:25 3985 0.080 0.000 0.000 0.000
1 01:06:26 3986 0.081 0.000 0.000 0.000
1 01:06:27 3987 0.081 0.000 0.000 0.000
1 01:06:28 3988 0.080 0.000 0.000 0.000
1 01:06:29 3989 0.081 0.000 0.000 0.000
1 01:06:30 3990 -0.015 0.000 0.000 0.000
1 01:06:31 3991 -0.017 0.000 0.000 0.000
1 01:06:32 3992 -0.017 0.000 0.000 0.000
1 01:06:33 3993 -0.017 0.000 0.000 0.000
1 01:06:34 3994 -0.016 0.000 0.000 0.000
~~~~~~~~~~~~~~~~~~~~~~~~~~~

左から経過日時、連番、ch1~ch4の測定値。
1秒ごとの測定で、ch1の値が電流値です。

それをgnuplotに食わせてグラフを得ます。
~~~~~~~~~~~~~~~~~~~~~~~~~~~
#gnuplt 5.2で
set term wxt 0
set grid
set colorsequence classic
set title "ELPA電池 (1Ωの抵抗を直列に入れてドロップ電圧を記録)"
set y2tics
set xrange [0:21]
set yrange [-0.45:0.15]
set y2range [-0.1:0.3]
set xlabel "経過時間(時間)"
set ylabel "電流(mA)"
set y2label "平均値(mA)"
set xtics 2
set ytics 0.05
set y2tics 0.1
set ytics format "%4.2f"
set y2tics format "%4.2f"
set key right bottom
set label "充電" at 2.1, 0.12
set label "放電" at 2.1, -0.04
set label "平均電流(右目盛)" at 10.1, -0.18
plot "elpa2.txt" using ($3/3600):4 with lines lw 2 ti "電池電流(mA)",\
   "elpa2.txt" using ($3/3600):4 with lines lw 2 ti "電流平均値(mA)" axes x1y2 smooth bezier,\
   0 ti "",\
   -0.3 ti "
~~~~~~~~~~~~~~~~~~~~~~~~~~~

とりあえず、元の回路のまま(0Ωジャンパー)で使って
みます。
何年かはもつだろうし。

| | コメント (0)

2022年8月28日 (日)

コードレス電話の充電池がアウト #2

コードレス電話の充電池がアウトの続き。
まず、アウトになった「ROWA」の充電池、ゾンビ復活
させたんですが、その充電の様子をお手軽電力計 で記録
してみました。

計ったのは電池電圧、充電器からの電流(電池電流じゃない)、
充電器の電力。
Cap067
2時間半ほどの記録です。
ず~と、70mAほどの電流が流れてます。
これが全部電池に行ってるのかどうかは、調べてません。

そして、新たにやってきたのが「ELPA」の電池。
Cd1_20220828105701

昨日セットして帰宅。 日曜日朝に(さっき)データを回収。
まず、こんなグラフ。
Cap064_20220828105801
20時間ほど。
青線の電流値、平均化処理しています。
というのは5時間過ぎに、電流がパルス状になったのです。
Cap065
そのため、電流グラフが0mA~80mAを上下してしまい、
電力変化が埋もれてしまったのです。
そこで、電流値だけを平均化。

さらに拡大。
Cap066
これを見ると、
  ・1分サイクルで
  ・10秒間充電。
つまり、平均すると電流は80mAの1/6。
13mAほど。
電池の定格容量が600mAhですので、1/46。

スタンバイしている電話機の回路にも電流が行く
はずなので、これからそれを調べてみます。


お手軽電力計からのデータ。
~~~~~~~~~~~~~~~~~~~~~~
18525 0.71W 2.20V 0.38V 3.42Wh
18526 0.71W 2.20V 0.38V 3.42Wh
18527 0.71W 2.20V 0.38V 3.42Wh
18528 0.71W 2.20V 0.38V 3.42Wh
18529 0.71W 2.20V 0.38V 3.42Wh
18530 0.71W 2.20V 0.38V 3.42Wh
18531 0.71W 2.20V 0.38V 3.42Wh
18532 0.71W 2.20V 0.38V 3.43Wh
18533 0.71W 2.20V 0.38V 3.43Wh
18534 0.71W 2.20V 0.38V 3.43Wh
18535 0.70W 2.19V 0.00V 3.43Wh
18536 0.69W 2.19V 0.00V 3.43Wh
18537 0.67W 2.19V 0.00V 3.43Wh
18538 0.65W 2.19V 0.00V 3.43Wh
18539 0.63W 2.19V 0.00V 3.43Wh
~~~~~~~~~~~~~~~~~~~~~~
左から連番、電力、電圧1、電圧2、積算電力量

gnuploto
~~~~~~~~~~~~~~~~~~~~~~
#gnuplt 5.2で
set term wxt 0
set grid
set colorsequence classic
set title "ELPA電池"
set y2tics
set xrange [5.14:5.2]
set yrange [0:5]
set y2range [0:100]
set xlabel "経過時間(時間)"
set ylabel "電池電圧(V),消費電力(W)"
set y2label "電流(mA)"
set xtics 0.01
set ytics 0.5
set y2tics 10
set ytics format "%4.1f"
set y2tics format "%3.0f"
set key left center
plot "elpa1.txt" using ($1/3600):($3*1.98) with lines lw 2 ti "電池電圧(V)",\
    "elpa1.txt" using ($1/3600):2 with lines lw 2 ti "消費電力(W)",\
    "elpa1.txt" using ($1/3600):($4*200) with lines lw 2 ti "電流(mA)" axes x1y2
~~~~~~~~~~~~~~~~~~~~~~

plotの1行目「($3*1.98) 」の1.98は入力を抵抗分圧した時にの乗数。
実値と表示値で値を計算。 電圧に換算。
元の回路の入力最大値が4.096Vなので。

3行目の「($4*200) 」の200はINA199電流センサーのシャント抵抗と
ICのゲインで決まる値。 mAに換算。

| | コメント (0)

2021年12月13日 (月)

DHT11を使った出窓の結露対策用ヒータ制御回路試験

DHT11を使った出窓の結露対策用ヒータ制御回路 、10日(金)に
完成したんで、2日間、出窓の中に放置してみました。
  ※まだヒーターにはつながず、
   制御は無しで
1分間隔でこんなデータがシリアルで出力されます。
それを記録。
   1 19.4 59.0 3
   2 18.9 61.0 3
   3 18.6 62.0 3
    :
 3286 15.0 63.0 3
 3287 15.0 63.0 3
 3288 15.0 62.0 3
今朝、データを回収。

gnuplotでグラフに。
#gnuplt 5.2で
set term wxt 0
set grid
set colorsequence classic
set title "DHT11温湿度センサー テスト 2021-12-13"
set y2tics
set xrange [0:60] # 時間軸
set yrange [0:40] # 温度
set y2range [40:80] # 湿度
set xlabel "経過時間(時)"
set ylabel "温度(℃)"
set y2label "湿度(%)"
set grid
set xtics 6
set ytics 5
set y2tics 5
#set y2tics format "%3.2f"
set key right top
#set label "0.5C充電時間(分)" at 810,126
#set label "0.5C放電時間(分)" at 810,66
#set label "充電停止電圧(V)右目盛" at 810,36
#set label "2400サイクル目までの変化" at 1650,54
plot "h02.txt" using ($1/60):2 with lines lw 2 ti "温度(℃)" ,\
"h02.txt" using ($1/60):3 with lines lw 2 ti "湿度(%)" axes x1y2 ,\
"h02.txt" using ($1/60):($4*1) with lines lw 2 ti "on/off"

Cap004

湿度データ(緑線)が1%単位なので、デコボコ。
湿度だけスムージングすると、なめらかに。
"h02.txt" using ($1/60):3 with lines lw 2 ti "湿度(%)" smooth bezier axes x1y2 ,\
Cap003_20211213120401
ずっと暖かい天気が続いていましたんで、まだ結露は出ていません。
今週から寒くなるということで、今晩からヒーター制御を始めてみます。
ヒーターオンする湿度、とりあえず「70%」で試してみます。

 

| | コメント (0)

2021年11月16日 (火)

タクトスイッチを押してみる …何万回も その4

タクトスイッチを押してみる …何万回も その3の続き。
スケッチにちょっと手を加えて。

・先日の続きから。
   スイッチはそのままで換えていない。

・「10回」の接触不良検出(デジタル入力ポートでのオフ検知)
 (連続しなくても)で、異常発生と判定して停止。

・リングバッファに200回分のサイクルとA/D値をログ。
   記録するA/D値は「2以上のもの」(0と1は飛ばす)

・10bit A/D値のMSB部(空いている)を使って、接触不良
 回数を同時に記録。

・内蔵EEPROMに接触不良が生じたサイクル番号を記録。
   (10コ)

結果、こんなデータが得られました。
まず、リングバッファ(200データ)の様子。

#  cyc A/D off
 193378  2 リングバッファの先頭
 193382  3
 193904  2
  :
 193905  5
  :
 193934  4
 193936  2
 193938  4
 193939  2
 193942  5
 193945  2
 193963  2
 193988  6
 193989  6
 194016  2
  :
 199110  2
 199118  7
 199120  14
 199121  3
 199125  8
 199127  3
 199128  14
 199129  14
 199130  17
 199131  7
 199132  9
 199138  6
 199140  4
 199143  2
 199146  15
 199151  3
 199154  12
 199155  20
 199156  12
 199157  13
 199158  12
 199159  10
 199160  4
 199161  6
 199162  13
 199163  10
 199166  6
 199167  14
 199169  10
 199173  3
 199665  7
 199666  2
 199673  17
 200010  2
  :
 205996  3
 205998  2
 206005  5
 206298 1023  2 2回目の接触不良検出
 206500  2
 206510  2
 206517  2
 206518  2
 206549  2
 206668 1023  3 連続して接触不良が発生
 206669 1023  4
 206670 1023  5
 206671 1023  6
 206672 1023  7
 206673 1023  8
 206674 360
 206675 1023  9
 206676 1023 10 接触不良10回検出で停止

接触状況が悪くなっているのでしょう、2と3が多数出現
しています。(途中省略)
そして、 206668サイクルから連続して接触不良が起こりました。

EEPROMに記録した接触不良が生じたサイクル数。

#off   cyc
# 1  51745
# 2  206298
# 3  206668
# 4  206669
# 5  206670
# 6  206671
# 7  206672
# 8  206673
# 9  206675
# 10  206676

最初の接触不良、51745サイクルのは、リングバッファ内に
は入っていません。

出てきたデータをグラフにしてみました。
縦軸がA/D値。 対数目盛にしています。
右上端に固まって出ている「○」が異常検出のタイミングです。
Cap003_20211116094201
A/D値が接触抵抗を示すわけですが、今回検出したのは
大きくても2桁。

さて、新品のスイッチに換えて実験を継続します。

※スケッチ
  ・ダウンロード - sw_life_test3b.txt

※GNUPLOTのスクリプト
  ・ダウンロード - taktsw4.txt

※リングバッファのデータ:cyc数とA/D値
  ・ダウンロード - 20.txt

※試したタクトスイッチの中 (秋月の各色100コ入)
11_20211116115901
中心より外周がこすれている感じ。
12_20211116115901

このテストより先、すでにン十万回の開閉を行っています。
でも、異常停止するまでに、ちょいと回数がかかりました。
1回目と2回目の間も15万回。
なにかの拍子、接触状態が回復するのかも。
接触不良を検知した直後、ちょっとだけ開閉を休むとかしたら
もっと回数が伸びるとか。

ソレノイドの下端が押しボタンを押す力も影響しそうです。
   ※押し過ぎはきっと良くないでしょう。
「何グラムで押す」とか、うまく規制できれば良いんでしょうが、
メカ細工をどうしたものか・・・

どんなもんでしょね。

※11月17日 08時50分
昨日に交換した新しいスイッチでの試験、すでに30万回。
まだ大丈夫です。

発端はこのトラブル↓
2021年11月6日:トラブル遭遇:3点  スイッチ、プラグ、電線
回路試験用のジグで使っていた秋月のスイッチでの生じた
接触不良です。
普通に指先で押さえるんで、ン万回も押してません。
内蔵プルアップ抵抗という軽い負荷で接触不良が発生。
グニグニすればオンしていたんですが、普通の操作(指先でpush)
では反応しないということが続いたんで、交換。
そして、この実験につながりました。

なんなんでしょね。
単にon/off回数でもなさそうだし。
ハンダ付けの熱とも考えにくい。

新品スイッチの保管、ビニール袋に入れて部品箱に入れてます。
それを回路に組み込んだら、室内ですが、そのへんにほったらかし。
仕事場、そりゃたまにはパネルの穴開けで油も使いますし、潤滑剤
として「シリコンスプレー」も使います。
洗浄に「IPA」や「大阪魂」も使います。
置いてある基板には直接はかかりませんが、たまに室内で使うケミカル
用品のガスが悪さをしてるのかな?

それとも、ほんとにたまたま調子の悪いスイッチに遭遇してる?

| | コメント (2)

2021年8月11日 (水)

サーミスタ温度計、何ビットのA/Dコンバータがいるか?

サーミスタで温度測定するとき、
 ・A/Dコンバータの分解能の違いで、何度の桁まで測れるか?
あるいは、
 ・何度の桁まで計りたい時は何ビットのA/Dが必要か?

この答えのグラフがトランジスタ技術2012年1月号p89
図3に出ていました。
 ●特集:エレクトロニクス格言集
  3-6 抵抗分圧比をA-D変換する時の
  基準電源ICは無駄遣い  著者:星聡

Ad01
8ビット分解能でも1℃ステップで測れないことはない
というキャプション。

先日作った温度計で使った「103JT」サーミスタの
温度特性から、これと同じような表を作ってみました。

セミテック103JTの温度:抵抗値表

#SEMITEC 103JT 温度・抵抗特性
#温度 抵抗値
#℃ Ω
-20 71020.0
-10 43670.0
0 27700.0
10 18070.0
20 12110.0
25 10000.0
30 8301.0
40 5811.0
50 4147.0
60 3011.0
70 2224.0
80 1668.0
85 1451.0
90 1267.0
100 975.3
110 759.7
120 598.1


それを「gawk」に食わせて1℃ごとのテーブルを作成

#####   サーミスタ抵抗値計算プログラム    #####
# 下間憲行  jh3dbo@jarl.com
# 10℃ごとの温度,抵抗値テーブルから
# 1℃ごとの抵抗値データを作成
# メモ awkのlogは自然対数

BEGIN{
# 定数指定
K_273 = 273.15 # ケルビン温度
Rref = 10.0e3 # 直列抵抗 10kΩ
Aref = 65536 # 16bit A/D max
# タイトル表示
print("* サーミスタ抵抗値計算 (2015-06-10)\n") > "/dev/stderr"
nbr = 1 # 読み込みデータ数
}
# 「BEGIN」おわり (以下、ファイル読み出し処理)

##### 温度,抵抗値テーブルを読み出す #####
# 10℃ごとの温度と抵抗値を順に読む
{
if( $0 ~/^#/ ) next # 先頭文字が「#」ならコメント
# 数値入力
temp[nbr] = $1 # 温度
ohm[nbr] = $2 # 抵抗値
# printf("%d %s %s\n", nbr , temp[nbr], ohm[nbr])
nbr++ # 配列 +1
}
# ファイル処理おわり (以下、END処理)

##### 10℃ごとのB定数計算して1℃ごとの処理 #####
# ※基準は25℃なので、20~25~30℃となっているので注意
END{
# B定数計算 10℃ごと
print("# B定数")
for(i = 1; i < (nbr - 1); i++){
t1 = temp[i]
t2 = temp[i+1]
r1 = ohm[i]
r2 = ohm[i+1]
B[i] = (log(r1 / r2)) / ((1 / (t1+K_273)) - (1 / (t2+K_273)))
printf("# %d℃~%d℃ %3.1fΩ~%3.1fΩ B=%3.1f\n",
t1, t2, r1, r2, B[i])
}
# 1℃ごとの抵抗値を計算
print("# ℃ Ω")
m = 1 # 1℃ごと (0.1℃ステップなら10に)
for(i = 1; i < (nbr - 1); i++){ # 10℃のテーブル
n = (temp[i+1] - temp[i]) * m # 表の温度差
for(j = 0; j < n; j++){ # 1℃ピッチで
R = tohm(temp[i] + (j / m), temp[i], ohm[i], B[i])
ad = Aref * (R / (Rref + R)) # A/D値
printf("%6.1f %12.2f %6d", # 温度と抵抗値
temp[i] + (j / m), R, ad)
if(f){
printf(" %8.2f %8.2f", # 抵抗値とA/D値の差分
r0 - R, ad0 - ad)
}
printf("\n")
r0 = R;
ad0 = ad;
f = 1;
}
}
}

##### 温度による抵抗値計算 #####
# T1 = 計算する温度
# Tm = 基準温度
# Rm = 基準温度での抵抗値,
# Bconst:B定数, 273:ケルビン温度
# 1 1
# R = Rm * exp( Bconst * (--------- - -----------) )
# t1 + 273 Tm + 273
function tohm(T1, Tm, Rm, Bconst){
return(Rm * exp(Bconst*((1.0 / (T1 + K_273)) - (1.0 / (Tm + K_273)))))
}


その結果を「gnuplot」で処理

set term wxt 0
set ytics nomirror
set y2tics
set xrange [-20:110]
set yrange [0.001:10]
set y2range [0:800]
set title "A/D値が1LSB変化したときの温度変化 【サーミスタ103JT Rs=10kΩ】"
set xlabel "温度 (℃)"
set ylabel "1LSB変化したときの温度変化(℃)"
set y2label "16 bit A/Dでの1℃あたりの変換値変化"
set grid
set xtics 10
#set ytics 500
set key right top
set pointsize 0.5
set logscale y
set label "" at second -8, 770
set label "16bit A/D値変化(右目盛)" at second 2, 660
set label "8bit A/D" at second 11, 560
set label "10bit A/D" at second 12, 440
set label "12bit A/D" at second 13, 320
set label "14bit A/D" at second 14, 200
set label "16bit A/D" at second 15, 80
plot "ohm3.txt" using 1:5 with line lw 2 ti "" axes x1y2,\
"ohm3.txt" using 1:(1 / ($5/256)) with line lw 2 ti "",\
"ohm3.txt" using 1:(1 / ($5/64)) with line lw 2 ti "",\
"ohm3.txt" using 1:(1 / ($5/16)) with line lw 2 ti "",\
"ohm3.txt" using 1:(1 / ($5/4)) with line lw 2 ti "",\
"ohm3.txt" using 1:(1 / $5) with line lw 2 ti ""


こんなグラフが得られます。
Cap005_20210811095101
8,10,12,14,16ビットのA/Dコンバータを使った
時の分解能の変化を示しています。
   ※A/D変換器や周辺回路の精度が加味されますんで、
    1bitの変動でもきびしい状態が浮かんでくるかと。

10℃~25℃あたりが良くて、1℃あたりのA/D変換値変化量
が減る高温域(70℃を越える)になると分解能が悪化するのが
見えます。
  ※8bitA/Dで「水温・湯温」を計ろうとしたとき、
   0℃~40℃くらいまでは0.5℃ピッチで読めます。
   しかし、80℃を越えると1℃ピッチでの読みが
   しんどくなります。
   昔々・・・4bitマイコンで電気温水器の仕事をした
   ときは(東芝の8bit A/D内蔵品)、出てきた
   8bit値(256バイト)をそのまま1℃単位の温度に変換する
   テーブルを作って処理しました。
     水温が正しくない上下の値はエラー処理
     (氷温以下と沸騰温度以上)

分解能16bitのA/Dを使っても、A/Dの誤差を考えると「0.01℃」の
測定はなかなかむつかしいということで。


| | コメント (0)

2021年5月22日 (土)

お手軽電力計でeneloop単3の充電を見る

eneloop単3(BK-3MCC 1900mAh)を充電している様子を
お手軽電力計を使って記録してみました。
充電器は「BQ-CC21」。
電池電圧を観察できるようコネクタを付けてあります。
  (充電器にセットした左端の電池)

P31
それぞれの電池を1.0Vま放電して(すっからかんに)から
充電を開始。

10秒ごとにこんなデータが出てきます。
ピークを迎えて主充電を終えたあたりの様子です。
左から
 ・10秒ごとの連番  12500秒:3時間28分あたり
 ・計測した有効電力
 ・電池電圧 BQ-CC21に取り付けたコネクタから引き出し
 ・電池温度 電池側面にサーミスタを貼り付け
       1Vで20℃ 2Vで40℃
 ・電力量 電力値を累積

  :
 1245  5.94W 1.48V 2.03V 19.58Wh
 1246  5.95W 1.47V 2.03V 19.59Wh
 1247  5.95W 1.50V 2.03V 19.61Wh
 1248  5.95W 1.49V 2.03V 19.63Wh
 1249  5.95W 1.50V 2.03V 19.64Wh
 1250  5.01W 1.50V 2.03V 19.66Wh
 1251  4.44W 1.50V 2.03V 19.67Wh
 1252  4.49W 1.50V 2.03V 19.68Wh
 1253  4.51W 1.50V 2.05V 19.70Wh
 1254  4.45W 1.49V 2.04V 19.71Wh
  :

こんなグラフが得られました。

Cap006_20210522095201

電圧と温度、注目しているのは左端の電池だけ。
他の3本の状態は不明ですが、電力の変化を見ると
良く揃っているようです。
電池電圧のピークを検出。
-ΔVで主充電を止めて2時間ほど補充電に。

4本を充電する電力量が「約23Wh」。
電気代、1kWhが30円としたらざっと0.7円
充電を終えた後(補充電後)は「0.12W」で待機していました。

※BQ-CC21での充電の様子
http://act-ele.c.ooco.jp/blogroot/igarage/article/4406.html
http://act-ele.c.ooco.jp/blogroot/igarage/article/3667.html

※gnuplotでの描画

set title "eneloop単3 BK-3MCC 4本充電 充電器:BQ-CC21"
set y2tics
set xrange [0:9]
set yrange [0:10]
set y2range [0:50]
set xlabel "経過時間(時間)"
set ylabel "消費電力(W)"
set y2label "電池1外装温度(℃)"
set grid
set xtics 1
set ytics 1
set y2tics 10
set ytics format "%3.0fW"
set y2tics format "%3.0f℃"
set key left bottom
set label "電圧1.3V" at 7,4.25
set label "電圧1.4V" at 7,6.25
set label "電圧1.5V" at 7,8.25
plot 4 axes x1y1 lc rgb "cyan" ti "",\
6 axes x1y1 lc rgb "cyan" ti "",\
8 axes x1y1 lc rgb "cyan" ti "",\
"en1.txt" using ($1/360):(($3-1.1)*20) with lines lw 2 lc rgb "cyan" ti "電池1電圧(V)",\
"en1.txt" using ($1/360):2 with lines lw 2 lc rgb "red" ti "消費電力(W)" ,\
"en1.txt" using ($1/360):($4*20) with lines lw 2 lc rgb "green" ti "電池1温度(℃)" axes x1y2,\

 

| | コメント (1)

2020年10月28日 (水)

データロガーのサンプリング日時出力形式

Arduino-UNO 12bit×4chアナログ データロガーほぼ完成
記しましたが、データをサンプルした日時の出力をどうした
ものかと悩んでおりました。
GNUPLOTに食わせるんで食わせやすい書式で、1日を越えた
記録でも扱いやすくというのが要求仕様。

GNUPLOTをあれこれ触ってみて、なんとかなりそうなんで、
単純にこうしておきます。
 『 d H:M:S data1 data2 data3 data4』
先頭のdは1から始まる経過日
H:M:Sは時分秒。
最初のデータは「 1 00:00:00 data1~」からスタート。

GNUPLOTに食わせるサンプルデータ。

1 00:00:00  0.00
1 06:00:00 0.20
1 12:00:00 0.40
1 18:00:00 0.60
2 00:00:00 0.80
2 06:00:00 1.00
2 12:00:00 0.80
2 18:00:00 0.60
3 00:00:00 0.40
3 06:00:00 0.20
3 12:00:00 0.00
3 18:00:00 -0.20
4 00:00:00 -0.40
4 06:00:00 -0.60
4 12:00:00 -0.80
4 18:00:00 -1.00
5 00:00:00 -0.80
5 06:00:00 -0.60
5 12:00:00 -0.40
5 18:00:00 -0.20

まず、GNUPLOTの「set xdata time」での処理。
こんなスクリプト。

set grid
set xdata time
set timefmt "%j %H:%M:%S" # 「%j」の範囲が1~366
set xrange [0:"6T0:0:0"] # この「T」で日を指定
set xtics 3600*12
set xlabel "\nDate/Time"
set format x "%1dday\n%H:%M"
set yrange [ -2:+2]
set ytics format "%4.2f"
set ytics 0.5
set key right top
plot "L1.txt" using 1:3 with lines lw 2 ti "Test"

結果のグラフ。 X軸の目盛が日と時分に。

Cap001

次が「time」を使わずに、plotコマンドに書式指定を
導入して、日、時、分、秒に分けて、秒数を計算します。
日は1から始まるんで「-1」してゼロスタートに。
それがこれ。
X軸を「時間」にしています。

#秒で読んでから時間に直してみる
# 1 12:00:00 1.000
# $1 $2 $3 $4 $5
set grid
set xrange [0:120]
set xtics 12
set yrange [ -2:2]
set ytics format "%4.2f"
set ytics 0.5
set key right top
plot "L1.txt" using (((($1-1)*3600*24)+($2*3600)+
($3*60)+($4))/3600):($5) '%lf %lf:%lf:%lf %lf'
with lines lw 2 ti "Test"

「plot」のところの「'%lf~」が入力文の書式指定。
$1が日、$2~$4が時分秒。
$5からデータ部を続けます。
「%lf」は小数点付の数値指定。
そのグラフ。 X軸の単位は「時」に。
Cap002
これで、まぁ、なんとかなりそうです。

※追記 10/30
gnuplotで文字列変数に入れてある文をコマンドとして差し込む方法(@を変数名の前に付ける)
を見ますと、長ったらしいし式を略して記せるとのこと。
しかし現用しているgnuplot4.6にはまだ搭載されてませんでした。
で、新しいgnuplotをダウンロード。
ちょっとテスト。
データ列をもう一つ増やして・・・

Yデータが一つだと。
  plot "L1.txt" using (((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/3600):($5) '%lf %lf:%lf:%lf %lf' with lines lw 2 ti "Test"
二つになると、
  plot "L1.txt" using (((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/3600):($5) '%lf %lf:%lf:%lf %lf %lf' with lines lw 2 ti "Test1" ,\
     "L1.txt" using (((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/3600):($6) '%lf %lf:%lf:%lf %lf %lf' with lines lw 2 ti "Test2"
長い。
($6)に変わるのと%lfが増える。
それを、
  cc = "(((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/3600)"
  cs = "'%lf %lf:%lf:%lf %lf %lf'"
として、プロット実行で
  plot "L1.txt" using @cc:($5) @cs with lines lw 2 ti "Test1",\
     "L1.txt" using @cc:($6) @cs with lines lw 2 ti "Test2"
と。
短くなります。

・・・ところが・・・
想定してる電文、
  1 00:00:00 1.084 0.262 0.000 0.000
  $1 $2 $3 $4 $5 $6 $7 $8
これだと、$nは1~8まで。

8つのデータを取り出してグラフにしようとすると、
gnuplotがこんなエラーメッセージで拒否。
 『format must have 1-7 conversions of type double (%lf)』
1~7の7コまでやで! 8コはあかん。っと。

※例
JIS C8708充放電中の電池電圧とLM35による温度出力。
取り込むとこんなデータが出てきます。

  経過時間 電圧 温度:LM35(10mV/度)
1 00:00:00 1.084 0.262 0.000 0.000
1 00:00:10 1.084 0.262 0.000 0.000
1 00:00:20 1.083 0.262 0.000 0.000
  :
1 04:06:00 1.479 0.269 0.000 0.000
1 04:06:10 1.479 0.268 0.000 0.000
1 04:06:20 1.479 0.268 0.000 0.000

10秒サイクルで取り込んで4時間あまり放置。
それをこんなgnuplotスクリプトでグラフ化。
~~~~~~~~~~~~~~~~~~~~~~~~~~~
#秒で読んでから分に直す
# 1 00:00:00 1.084 0.262 0.000 0.000
# $1 $2 $3 $4 $5 $6 $7 $8
set term wxt 0
set grid
set xrange [0:250]
set xtics 30
set yrange [0.8:1.8]
set ytics format "%4.2f"
set ytics 0.1
set y2range [10.0:60.0]
set y2tics format "%.1f"
set y2tics 10.0
set xlabel "経過時間(分)"
set ylabel "電圧(V)"
set y2label "温度(℃)"
set key right bottom
cc = "(((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/60)" # 経過時間:分
cs = "'%lf %lf:%lf:%lf %lf %lf %lf'"
# $1 $2 $3 $4 $5 $6 $7 ($8がダメ)
plot "M10.txt" using @cc:($5) @cs with lines lw 2 ti "電圧",\
"M10.txt" using @cc:($6 * 100) @cs with lines lw 2 ti "温度" axes x1y2
~~~~~~~~~~~~~~~~~~~~~~~~~~~

出てきたグラフ。
21_20201030161301
  新しいgnuplot、これまでのと色がチョイ違います。

充放電電圧変化と電池側面の温度変化が2サイクル分。
-Δ検出の様子やその時の電池温度上昇が分かります。

チャートレコーダーのようにリアルタイムでは見られません。
けど、こまかいところを見ようとしたとき、データですんで
手があります。

※『set xdata time』だとこんなスクリプトに。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 1 00:00:00 1.084 0.262 0.000 0.000 memo...
# 1 2 3 4 5 6 7
set term wxt 0
set grid
set xdata time
set timefmt "%j %H:%M:%S"
set xrange [0:15000]
set xtics 1800
set format x "%H:%M"
set yrange [0.8:1.8]
set ytics format "%4.2f"
set ytics 0.1
set y2range [10.0:60.0]
set y2tics format "%.1f"
set y2tics 10.0
set xlabel "経過時間(時)"
set ylabel "電圧(V)"
set y2label "温度(℃)"
set key right bottom
plot "M10.txt" using 1:3 with lines lw 2 ti "電圧" ,\
"M10.txt" using 1:($4 * 100) with lines lw 2 ti "温度" axes x1y2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

短縮するための「@cc」や「@cs」は不要。
普通に書けます。
出てくるグラフはこんなの。
Cap001_20201031100601
「波」は同じですが、X軸の目盛が異なり「時:分」の
表現になっています。

とりあえず備忘録ということで。


| | コメント (0)

2020年3月12日 (木)

定電流回路の電流検出抵抗を試す

2020年2月17日:定電流回路の電流検出抵抗 で、電池の
充放電試験用定電流回路用電流検出抵抗の温度変化について
書きました。

その後・・・
「0.1Ω」の抵抗7種について、電流2Aと3Aを流した時の
抵抗値変化を調べてみました。
0.1Ωに2Aだと0.4W。
3Aにすると0.9W。
この電力で抵抗が発熱するわけです。

その熱で抵抗値が変化。 (たいていは値が大きくなる)
それが駆動電流の変化につながります。
変動の小さなものが理想ですが、抵抗の形状や材料により
その変動が変わります。
それを確かめてみました。

使ったのは「流し出し型の定電流回路」。
この「0.1Ω電流検出抵抗」を取り替えて、時間経過による
電流値変化を観察。
抵抗両端の電圧と出力電流から抵抗値を算出。
その変動10分間をグラフにしました。

使ったのは三和のテスター「PC700」を2台。
アダプタを使えばUSBでPCにつながります。
「光」で結合してるのでPCおよび各テスター間は
絶縁できるという仕掛けです。

実験中の様子
A2_20200312101201

右上の黒いのがFETのヒートシンク。
その下が出力負荷抵抗。
中央緑のが作った回路。
左に2台のテスター。

回路の拡大
A3_20200312101301

OP-AMPはMCP6072 。 入出力Rail-to-Rail。
こんな回路になってます。

A1_20200312101601
右上のR9が電流検出抵抗。
これをとっかえひっかえてテスト。
電流値はVR1で設定。
OP-AMPの電源がその基準になるので、その配線に注意です。
3A流すと、けっこう電圧ドロップしますんで。

これが調べた抵抗7種類。
C11j

5Wセメントと酸金のはパーツ箱のストックから。

RWM4X10 は昔々にデジキーで買った「ホウロウ巻線型」の3W。
カタログでは「Enamelled Wirewound Power Resistors」と。
温度係数が「+75 ppm/°C」とプラスであると明記されてます。
   普通は「±xx ppm/℃」っと表記

SMW5MPC74 は秋月で買いました。
MSR5 は先日の記事に出てきた「コの字状抵抗」。

さてその結果・・・ まずは電流2Aから。
Cap023
5Wセメント抵抗は10分経過してもまだ落ち着きません。

そして3A。 電流1.5倍で電力は2.25倍の0.9W。

Cap024

これを見ると、秋月で買ったMPC74がむちゃエエ。
この抵抗、全部で5つ買ったんで、個別の違いがあるか見てみます。

三和のテスター2台からこんなデータ列(CSV)が1秒ごとに得られます。
  (三和の専用ソフトが必要・・・ちょっと不便)
#セメント 5W 3A
00:00:04,3.018,DCA,,,300.2,DCmV,,
00:00:05,3.014,DCA,,,300.2,DCmV,,
00:00:06,3.011,DCA,,,300.2,DCmV,,
00:00:07,3.009,DCA,,,300.2,DCmV,,
00:00:08,3.007,DCA,,,300.2,DCmV,,
00:00:09,3.005,DCA,,,300.2,DCmV,,
00:00:10,3.004,DCA,,,300.2,DCmV,,

左端が測定開始からの経過秒数。時:分:秒。
電流値と測定レンジ、電圧値とレンジが続きます。

「GNUPLOT」のスクリプトがこんな具合。
「set datafile separator ","」で「CSV」に対応させます。

set title "電流を3A流した時の0.1Ω抵抗の抵抗値変化 (消費電力=0.9W)"
r1 = 300.2 / 3.018 # セメント5W (mV/A)
r2 = 300.3 / 2.958 # RWM4X10
r3 = 300.0 / 2.920 # SMW5
r4 = 300.3 / 2.985 # 酸金3W
r5 = 300.4 / 2.948 # 酸金5W
r6 = 300.3 / 3.011 # MSR5
r7 = 300.1 / 2.954 # MPC74
set term wxt 0
set datafile separator ","
set xrange [0:10]
set yrange [-0.5:2.0]
set xlabel "経過時間(分)"
set ylabel "抵抗値変化(%)"
set grid
set xtics 1
set ytics 0.5
set ytics format "%+3.1f"
set key right bottom
plot "3A_cmt5W.txt" using ($0/60):(100*((($6/$2)-r1)/r1)) with lines lw 2 smooth bezier ti "セメント5W",\
"3A_RWM4X10.txt" using ($0/60):(100*((($6/$2)-r2)/r2)) with lines lw 2 smooth bezier ti "RWM4X10",\
"3A_SMW5.txt" using ($0/60):(100*((($6/$2)-r3)/r3)) with lines lw 2 smooth bezier ti "SMW5",\
"3A_sk3W.txt" using ($0/60):(100*((($6/$2)-r4)/r4)) with lines lw 2 smooth bezier ti "酸金3W",\
"3A_sk5W.txt" using ($0/60):(100*((($6/$2)-r5)/r5)) with lines lw 2 smooth bezier ti "酸金5W",\
"3A_MSR5.txt" using ($0/60):(100*((($6/$2)-r6)/r6)) with lines lw 2 smooth bezier ti "MSR5",\
"3A_MPC74.txt" using ($0/60):(100*((($6/$2)-r7)/r7)) with lines lw 2 smooth bezier ti "MPC74"

いちばん最初の電圧電流から初期抵抗値を求めて、この値からの
変動を「%」で得ます。

「$0」はデータ列の順番。1行1秒なので1/60して分に。
「$6」「$2」はCSVのデータ順で、「$6」が電圧(mV)で
「$2」が電流(A)。


※追記
5つある「MPC74 0.1Ω」、これを「3A」で試してみました。
結果
Cap025_20200312141201

通電を開始して最初の5分間だけの変動ですが、むちゃイイ。
こうなると、「これの他の抵抗値はどうや?」を調べたくなります。
あと、通電後の表面温度変化も。
応答が良い温度センサーとなると熱電対なんですが、手持ちのは
表示だけしかできません。
シリアルで数値出力、あるいはアナログ出力できる熱電対対応
温度計を作らなあかんかなぁ。

※追記
MPC74・0.1Ω、1つ割ってみました。
11_20200313162401
板状の抵抗体になっていました。

一般的なセメント抵抗の中身はこちらを↓
2006年12月11日:壮絶死#2 5W51Ωと1Ω
2009年07月02日:壮絶死#6 10W10Ω
2009年07月07日:壮絶死#8 10W10Ω
2014年11月28日:壮絶死:裸になったセメント抵抗



| | コメント (1)