« ダイソーReVOLTES単3 JIS C8708:2019充放電試験(-ΔV検出有) 500サイクル目で終わります | トップページ | 富士通HR-3UTHC 2450mAh JIS C8708:2019充放電試験 開始 »

2020年5月 9日 (土)

SDカードの消費電流と受信割込バッファの増大

ハイサイド電流測定回路を使ってArduino-UNO + SDカードでシリアルデータロガー 完成形 の消費電流(SDカードアクセスの時、瞬間的に電流が流れる)を見てみました。

9600bpsで垂れ流しの受信電文をログしています。
一時バッファ(まとめてSDカードに書き込むためのバッファ。シリアル受信割込バッファとは別)は320バイト。
ですんで、連続受信していると330msくらいでこの一時バッファがいっぱいになり、SDカードへのアクセスが発生します。
そして、その書き込みバイト数を数えていて、まとまったらSDカードの「フラッシュ」を実行。
この時に電流が流れて、少々長い待ち時間が発生します。

オシロ波形のch1がSDカードへのアクセスが発生した時に出すパルス。
ch2がそのアクセスランプ(Lで点灯)で、シリアルデータを読み取った時(Serial.read→一時バッファへ)にも光らせています。
ch3が電流波形で1divが20mA。

01_20200509091001
↑では、ざっと100msの処理時間が発生。
この間の受信処理は割り込みが頼りです。


アクセスしているところをちょい拡大。
02
9600ボーでの受信処理パルスが判別できます。
時間軸1div 20msに20発ほど。

SDカード処理完了直後を拡大してみると・・・
03_20200509091101
カード処理完了直後、処理中に受信バッファに溜まったデータをまとめて読み出して一時バッファに保存している様子が見えます。

ここでの問題。
・SDカードアクセス処理中のシリアル受信データの確保は、
 受信割り込みに頼るしか無い。

・受信バッファのデフォルトが64バイト。
 1文字1msとしてざっと64msぶん。

・SDカード処理時間以上の受信割込バッファサイズの増大が必要。
 さもないと受信データを失ってしまう。

・SDカードの処理がどのくらいの時間か調べてみると・・・
  ・昔の1G、2GのSDカード 100~140ms
  ・x4速のSD HC  30~35mS
  ・x10速のSD HC  15~20mS (瞬間的な電流が増える)
    ※遅いカードは64msをはるかに越える。
     カードにあるフォルダやファイルの状態でも
     処理時間が変わる(長くなる方向で)

・受信割込バッファサイズの増大方法、ネットであれこれ調べたら・・・
   HardwareSerial.h の中の
   SERIAL_RX_BUFFER_SIZE の設定値を大きくすれば良い。
   どこにある HardwareSerial.h を触れば良いかが問題。
   私とこの現状環境では、
   C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino
   だった。 ※これ、あれこれあるみたい
   うまく行ったかどうかは↓として確認出来る。
    Serial.println(SERIAL_RX_BUFFER_SIZE);

SDカードの処理区分ごと(busy待ち)に受信処理を走らせる、自前のSDカード処理を書けば良いのでしょうが・・・
受信割込バッファサイズを大きくするより方法がありません。
現在256バイトに設定しています。


◆ネットにあるArduinoのSDカードロガー製作例を見て感じる問題点を少々。

・SD.begin(chipSelect))をsetup()内で一回きり。
だもんで、
・運転中はカードは抜いてはいけない。
・カードを抜くのはいったん電源オフしてから。
・電源をオンしたままでのカード挿入もできない。
・カードの交換も無理。
・ログの書き込み動作を一旦停止する方法があるか?
・もしそれがないと、いつ電源を切ったらよいの?
   (いつ書き込みが行われるのかわからない)
・シリアルデータを記録するものなら、受信データ線のコネクタ
 を抜いて対処か。

こんなあんなで、作ってみたのが
Arduino-UNO + SDカードでシリアルデータロガー 完成形
  ↑からも、エコーバックの有無を設定するジャンパーを増やしたりと、ソフトは変えてます。
エコーバックすると、送信側にも受信と同じだけの割り込み処理バッファが必要なので。

|

« ダイソーReVOLTES単3 JIS C8708:2019充放電試験(-ΔV検出有) 500サイクル目で終わります | トップページ | 富士通HR-3UTHC 2450mAh JIS C8708:2019充放電試験 開始 »

Arduino」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« ダイソーReVOLTES単3 JIS C8708:2019充放電試験(-ΔV検出有) 500サイクル目で終わります | トップページ | 富士通HR-3UTHC 2450mAh JIS C8708:2019充放電試験 開始 »