So-net無料ブログ作成
English Version

電源電流モニタの製作 2005年08月27日(データ復活版) [PIC]

ブラシレスモータを使った電動飛行機の製作(といっても機体はARF)を検討しています。

 ・モータ Hyperion Z-2209(26Turn)
 ・アンプ HP-TITAN-20-P
 ・リポ  PQ-XP1200-2S

の組合せで考えています。

 インターネットで色々調べてみると、ペラの選定では電流測定しながらの選定が必要なようでしかも普通のテスタは内部抵抗が大きすぎて使えないようです。

 セメント抵抗を使って両端の電圧を測定してもいいのですが、後々のことを考えるとアストロのワットメータやハイペリオンのEMETERのような電流、電圧、電力を測定できるものが欲しくなります。

 そこでPICを使った簡易ツールの作成を検討中です。

 主な特徴は

1)内部抵抗は0.01Ω
 →秋葉で見つけた0.03Ω3Wのセメント抵抗を三個並列で使用する。
  9Wとなるので定常状態で30Aまで(瞬時ならその数倍まで可能と
  思う)。測定分解能は100mA
          ┏━━━━━━━━┓
   ┌───○──╂────────╂──○─→
  ━┷━     ┃電流測定ツール ┃  アンプへ接続
   ┯      ┃  0.01Ω ┃
   └───○──╂───VVVV───╂──○─→
          ┗━━━━━━━━┛

2)電圧は20Vまで測定可能(測定分解能は10mV)
3)16文字2行のLCD表示(SC1602BS)を使用し、電流、電圧、
 (積算)電力を表示する。
4)測定データはRS−232Cでパソコンへ送信可能とする。
5)専用の電源は不要とする(電池側から数mA頂き動かす・・なるべく
 省電力設計する)
6)使用するPICは10bitA/D機能付きのPIC16F88

で回路図まではできました。手持ちの部品では丁度良い値の抵抗等、不足部品があるので土曜日に秋葉へ買い物に行く予定です。

ケース加工、ソフト開発等考えるとまだまだ時間がかかりそう・・でもこれが楽しいんですよねぇ ^^
ニックネーム さと at 02:40 | Comment(5) | TrackBack(0) | 日記
nice!(0)  コメント(1)  トラックバック(1) 

nice! 0

コメント 1

さと

以下googleのキャッシュから復活させたコメント
--------------------------------------------------

 ハードが概ね出来上がり、ソフト作成に取り掛かっています。
 今回は放熱を考えてアルミケースを使っていますが、穴あけのためにハンドニブラを購入しました(大きな穴あけがかなり楽になりました)

 今回はCで作成しようと思いBKDのCC5Xフリーバージョンを使っています。
 「最初の目標は」のコメントの中ではPICC−Liteの方がいいような書き方をしましたが、対応するPICが少ないと言う致命的な欠点があることとBKDよりもアセンブラレベルでのディバッグがしづらかったことからBKD社のものを使っています。

 まずはLCD表示処理を進めていたのですが、表示データをstring配列にした場合、うまく動かず調べて見たらコンパイラのバグでした。 TT
 一応、サポートの方へ下記のメール(サンプルソース付き)で報告しておきました(フリー版は未サポートだがバグ報告すれば次回バージョンでは改善されるかも・・というようなことがHPに書いてあったので)
 バグはでましたが、BKD社のコンパイラはやはり素晴らしい・・

 LCD表示ができたのでA/D処理の試験に進もうかというところです(エミュレータではHW繋いだ状態での確認ができないので)。
 LCDとは4bitモードで接続していますが、F88でVref+、Tx,Rxを使うと連続した4ビットのポートの確保ができないのでデータビットがばらけてしまってます^^;
 LCD側の未使用の下位4ビットは色々調べた結果、グランドには落とさず、未接続にしておく方が良いみたいです(タイムリーというか・・9月号のトランジスタ技術にも同様のことが書いてあった)

 また、単電源オペアンプを使用すれば、電流値の解像度アップができそうなのでHWの方もまだまだいじくりまわしそうです。

----- Original Message(2005/09/07 00:07:06) -----
From: T-Satoh@NetLaputa.ne.jp
To: support@bknd.com
Subject: compiler(CC5X 3.2G free) bug report


hello. My name is T.Satoh. I'm Japanese and not be good at English.

I report compiler(CC5X 3.2G free edition) bug which was found in
my hobby usage.

The compiler assigns constant datas to top of code area.
When I use "#pragma updateBank 0" statement near the top of source,
the compiler generates _const procudure with "#pragma updateBank 0".
So the constant datas can't be accessed because compiler doesn't generate
bank switch codes.

----- Original Message(2005/09/07 00:07:06) Ends -----

Posted by さと at 2005年09月07日 00:41

--------------------------------------------------

 BKD社Cコンパイラのバグ報告はネムネム状態(メッチャ眠い)で書いたので後で見直したらあちこち変な英語でしたが^^;報告内容は伝わったようで早々に下記の返事を頂きました。
 次回バージョンで対応するとのことです ^^

----- Original Message(2005/09/07 22:31:52) -----
From: "Bengt Knudsen"
To:
Subject: Re: compiler(CC5X 3.2G free) bug report


Hello T.Satoh,

It is easy to understand your English.

Yes, the compiler assumes that the bank updating is switched on when
generating the _const data access function. It is possible to switch bank
updating off manually, and there should have been an error message.

The compiler will be improved for the next version.

Thank you very much for the bug report.


Best regards
Bengt Knudsen

B Knudsen Data
E-mail: bengt@bknd.com
WEB: http://www.bknd.com
Fax: (+47) 73 96 51 84



----- Original Message -----
From:
To:
Sent: Tuesday, September 06, 2005 5:07 PM
Subject: compiler(CC5X 3.2G free) bug report


> hello. My name is T.Satoh. I'm Japanese and not be good at English.
>
> I report compiler(CC5X 3.2G free edition) bug which was found in
> my hobby usage.
>
> The compiler assigns constant datas to top of code area.
> When I use "#pragma updateBank 0" statement near the top of source,
> the compiler generates _const procudure with "#pragma updateBank 0".
> So the constant datas can't be accessed because compiler doesn't generate
> bank switch codes.
>


----- Original Message(2005/09/07 22:31:52) Ends -----

Posted by さと at 2005年09月09日 00:39

--------------------------------------------------

単電源オペアンプを使おうと思っていましたが、
 ・オペアンプのために数mA余分に電流が必要なこと
 ・0V付近のリニアリティに不安があること(どうなんでしょう?)
からオペアンプ無しで進めています。

16F88に内蔵のA/Dは優秀でスペック的には
 ・Vref+ − Vref- > 2V
 ・Vref+ > Vdd − 2.5V
なのですが、今回はVref- = Vssとしていて Vref+が0.5V程度でもそれなりにA/D変換してくれるようです。

 そこで
1.電流
 解像度を0.05Aとすると
 0.01Ω*0.05A*1024=0.512V ←Vref+
 Vref+は5Vを39K,3.9K+56Ωで分圧→5*(3.9+0.56)/(39+3.9+0.56)=0.513V
 最大電流は0.05*1024=51.2A
2.電圧
  16Vまでとすると10K、330Ωで分圧
  16*0.33/(10+0.33)=0.511V
  0.511/1024*(10+0.33)/0.33=0.0156V ←電圧解像度

に仕様変更しました(笑)

 分圧抵抗自体の精度がそれ程高くないので(一応金色ですが)、ソフト補正をかけるつもりです。
 補正値は設定変更できるようにしますが、一次式(y=ax + b)のa,bをEEPROMエリアに保存します。補正のために浮動小数点(24bit)を使う予定なのですが、浮動小数点を使うと一気にプログラムサイズが増え、そろそろ1KBでは危なくなってきました(BKD社Cコンパイラfree版はコードサイズ上限が1KB TT)。
 リロケータブルコードを生成しMPLABのLinkerでリンクしようと試みているのですが、なかなかうまくいきません(BKD社Cの生成するcodepage名がMPLAB側の16F88.lkrのものと違うので修正したり色々やっているのですが)。これができればCのソースを複数ファイルに分けて作れるので、BKD社Cの1KB制限を克服できるのですが・・・

Posted by さと at 2005年09月13日 01:03

リンクの問題はクリアし、補正は整数補正y=axのaのみとしました。
測定値は20ms毎に測定した値を16回分平均をとることで安定するようになった^^
測定値のシリアル出力は、即時出力とフラッシュメモリの後半2KBに保存したものを出力するように設計していましたが、保存部分までたどり着きシリアル出力実装まえにフラッシュメモリの前半2KSを使い切ってしまったTT)
ん〜 どうしよう・・・

Posted by さと at 2005年10月02日 02:41

--------------------------------------------------

 一応完成しましたぁ^^

送信機能を入れてなるべくプログラムサイズを小さくした結果、やはり2KB以上となってフラッシュメモリへのデータ保存は 0x08e0〜0x0fffになりました。
 製品版のコンパイラを使えば15%程度コードサイズが減るので2KB以内になったかもしれません。製品版での最適化は主にバンク切り替えコードの最適化のようなのでマクロを用いて手動で最適化も試みましたが関数の頭でコンパイラがWレジスタセーブしてしまう等が障壁となり途中でめげました^^;

試しにLiPo2セル(満充電ではない)を放電器で放電した時のデータを測ってみた結果が

  http://www.netlaputa.ne.jp/~T-Satoh/pic/image/lipodischarge.gif

です。

 測定データは14分間程度であればflashメモリに保存できるので、電源を切ってから後でPCに転送でき、楽チンです。(^^)
 また、測定中は1秒毎にシリアル通信でPCへ送信することもできます。PC側でスペースキーを押すことでデータ送信のオン/オフ制御もできます。

 回路図などの詳細は

    http://www.netlaputa.ne.jp/~T-Satoh/pic/pictop.html

こちらをご覧下さい。

Posted by さと at 2005年10月09日 15:53
by さと (2008-01-04 02:44) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 1