工作の記録を残していきます。Virtual_Load現在配布しております電子負荷のファームウェアにあった不具合をFixしたファームウェアを作成致しましたので、以下にて公開致します。電流キャリブレーション中に途中で中断した場合に、中断後もキャリブレーション時の電流が出続けてしまう不具合を修正しました。bコマンドの不具合改修(再)bコマンドで表示される経過時間が、32767秒を超過すると時間表示が負になってしまう不具合を修正しました。修正後は、4,294,967,295秒まで拡張されています。適用の程宜しくお願い致します。さんに電子負荷用のGUIを作っていただきました。@honetさんありがとう!><https://launchpad.net/vloadctl現在配布しております電子負荷のファームウェアにあった不具合をFixしたファームウェアを作成致しましたので、以下にて公開致します。アボート機能の追加ご要望頂いていた、bコマンド・Pコマンドへのアボート機能を追加致しました。“Q”を入力する事により、測定を途中終了する事が出来ます。bコマンドの不具合改修bコマンドで表示される経過時間が、32767秒を超過すると時間表示が負になってしまう不具合を修正しました。修正後は、4,294,967,295秒まで拡張されています。測定時間間隔と、消費している電流から消費された容量を計算、mAh単位で表示します。適用の程宜しくお願い致します。Virtual_Load現在配布しております電子負荷のファームウェアにあった不具合をFixしたファームウェアを作成致しましたので、以下にて公開致します。変更内容は、電流キャリブレーションのデータを参照するブロックで電流指示値からD/Aコンバータへのデータに変換する処理において設定電流値全域で、5mA~25mAのキャリブレーションデータのみを使用していた不具合のFixとなります。設定精度に関わる変更となります、適用の程宜しくお願い致します。Virtual_Load先日、無事FPGA-Cafeさんに電子負荷4セットを納入させていただきました。TLの中で触れた最終仕様をblogの方にも掲載しておこうと思います。確度約0.1%)※設定・モニタ確度はキャリブレーションの精度に依ります。定電流出力モードバッテリ放電特性測定モード電源出力電流-垂下電圧測定モードPCとの通信:USB経由。Virtual_Load今までに見つかった全ての問題に対応し、基板の改版を行った。完成した電子負荷を使った測定例を以下に示す。最小分解能の1mAステップで変化、電圧は1mVステップで記録しています。Li-ionバッテリの放電特性測定。Tsukubaで頒布する予定です。価格・時期は追ってご連絡します。http://www.fpga-cafe.com/回路図・ソースコードは全て公開します。ソースについては、機能拡張等を行われた場合フィードバックを頂けますと助かります。Virtual_Load前回までで、電子負荷としての基本的な動作は概ねするようになった。今までは部品の理論値を使った式でDAC/ADCのデータ処理をしていたんだけどやはりどうしても誤差が出る。オフセットも無視出来ない。直線性は非常によく出ているのはチェック出来ていたのでこの3箇所について直線近似を実装してみた。結果、0~5000mAまで5mA程度の誤差に収まってくれた。キャリブレーションの動作を見ている中で、大きな電流に設定した場合そう言えば何だかモニタ値がバラ付いて電源が鳴くなーと思っていたらどうも発振していたらしく。定電流回路にデフォルトで突っ込んでいた位相補償用のコンデンサが過剰で動きがトロかったので、後で調整するつもりで外していたのでした。2200pと試したのが以下写真。素直に効いてくれているようで可愛い。25Wしか喰わせた事が無いのだけど、一度定格を喰わせたいなぁ。Virtual_Load連日、ソースを書きためている。足回りとなる、デバイスを動かす部分の実装が全て終わったのでそれを基礎に、組み合わせで機能を作っている状況。文章に書いてしまうと非常にシンプルに終わってしまうのだけどいくつかの不可解な現象に悩まされていたり、RAMが足りなくなってしまってどうにも前に進めないちょっと苦しい時期もありました。●不可解な現象1.プログラム中でPCに出力する文字列の一部が歯抜けになる。2.ある特定の文字列表示命令を外すと、プログラム自体が暴走する。結局、入力されたコマンドを解析して数値を得る関数のバッファをクリアする処理の所で、バッファの容量を超えてクリアしてしまっている所があってそれ以外の変数(もしかしたらプログラムかも)を壊していたのが原因だったよう。予想しない所での問題で、不具合現象の特定に時間が掛かってしまった。ある日、数値を渡さないコマンドでは不具合が出ず数値を渡すコマンドを実行した後から動きがおかしくなる事に気がつき特定に至った。電流値からDACコードを作ったり、ADCコードから電圧値・電流値を作ったり計算をし始めたところで、浮動小数点を使った直後からRAMの使用率が107%と上限を超えてしまった。ある所から拝借してきたuartのルーチンが原因なのは気がついていたのだけど1kByteしか無い貴重なRAM領域のうち、60%近い領域がUARTのバッファとして喰われるのを是正しようと、リングバッファの容量を少しでも減じると暴走してしまう。減じないと非常に安定に動作するのに。この問題は、ChaNさんが公開されているUARTモジュールをもとに若干の修正を掛けたものを使う事で回避する事が出来た。バッファも64byteと小さく抑えられて満足。今まで、UARTに文字列を送る場合は以下のようにして送っていた。Mode\r\n");固定の文字列はROMを参照しているものだと思い込んでいたのだけど実際はROM→RAMにコピーして、RAMの方を参照する作りとなってしまい無駄にRAMを食いつぶしてしまう事を知った。そこで、以下のように記述を改めた。Mode\r\n"));使っている関数がソースと違うが、それはまぁ無視してほしい。書くことでRAMを消費しないようになってくれた。これらの対策を行う事で、現在はRAM使用率37%前後となった。これならまだ機能を作り込めるぞ。いう事で、現時点で実装した機能は以下の通り。・PCから指定した電流を流す機能(CCモード)これは単純で、1A流してください。指定されたのを受けて指示通りの1Aを流し続けるモード。定電力(CP)モードを実装する予定。測定結果は右)定電流負荷を応用したもので、バッテリの両端電圧が指定の値になるまで、バッテリ電圧・負荷電流を定時記録するもの。今回は、Li-ionバッテリ(18650)のジャンクをCVCCで充電してそれの放電特性を調べてみた。測定間隔は10秒としたけど、1秒~18.2時間くらいまで1秒ステップで指定出来る。電流値は0~5Aまで1mAステップ、電圧は0~30Vまで1mVステップだ。テストに使ったセルは2並列2直列のものだったので放電終止電圧は3.0Vに設定した。設計しながら書いた原稿を貼っておきます。