« MR-C3024でGP2D12(普及型測距センサーユニット)を試してみました。 | トップページ | ROBOZAK用の新MR-C3024は、低電圧検知回路を内蔵していた! »

2008/01/25

ROBOZAK(ROBONOVA-I)用低電圧検知回路を作りました。 しかし・・・

R00110271/26追記:また新しい事実が判明しました。次の記事を参照して下さい。
※一旦公開したものの色々怪しい現象が発生し、検証に3日もかかってしまいました。これによって衝撃の事実が判明しました。(・・・は、少し大げさか。)
以下、前半はほぼ前回のまま、後半は検証結果を踏まえて書き直したものです。

キーパッド作成で、手作りラダー抵抗を何セットか組みましたが、袋買いして200本もあるので、まだまだ死ぬほど余ってます。(笑) これを使って何か有効な回路を作ろうと思いいろいろ考えました。
そうだ! バグ対応したのに、またバグを作り込んでしまって有名になった「低電圧検知プログラム」に対応した「低電圧検知回路」にしよう!

・・・かなりイヤな性格です。(笑)
■プログラムを思い出してみましょう。

robot_voltage:                        ' [ 10 x Value / 256 = Voltage]
    DIM v AS BYTE
    A = AD(6)
    IF A < 148 THEN                 ' 5.8v
    :
■■
OUT 52,1
DELAY 200
OUT 52,0
DELAY 200 
・・・ ちなみにこの部分は、LEDの点滅です。
感覚的に逆ですが、OUT 52,1で消灯、OUT 52,0で点灯します。
これをループで繰り返しているので点滅して見えます。
このプログラムは、5.8V以下になるのを検知してます。つまり、サーボ用に出力されている電圧(6V)の検知をして5.8Vまで電圧低下することが見えればいいのです。

このルーチンのコメント「10 x Value / 256 = Voltage」は、実は間違っていて、5VのときADポートの入力値は最大値(=255)を示すので、正しくは、5 × (Value  + 1) / 256 = Voltage のハズで す。*1 では何故、5ではなく、10なのかというと、5V以上の電圧は検知できないので(壊れる)ので、電圧を1/2にしているからです。・・・力強く言い切っちゃいましたが推定です。(笑) ちなみに、5V側の電源はレギュレータによって電圧を生成しているので計測する前に停止します。(※自分自身は測れません。・・・この意味は後半でわかると思います。)

*1 : 実はこれも正しくないです。(笑) 何が違うかは最後に。
 
R0011044 そうすると、今回作るべき回路が見えてきます。6Vの電圧が1/2になる回路を作ればいいのです。
電圧を1/2にするには、抵抗を2本使えばできます。(昔中学だかどこかで習ったような気がします。)
※面倒なので段ボールに手書きしました(笑)
 
R0011035使う抵抗は、大き過ぎるとノイズが乗ったり正確に測れなかったりしますし、小さ過ぎると消費電力が多くなります。ここでは余っているものの利用なので10KΩとその倍数くらいしか選択肢がないので10KΩを使いました。 ちなみにこの回路に流れる電流をオームの法則に従って計算すれば、6V / (10KΩ×2)なので0.3mAです。
実際に作ったのが左の写真手前です。入力がサーボ用の電源(6VとGND)、抵抗を直列に繋いで、真ん中の電圧をADポート(ここではAD(6))の入力にして計測します。
 
R0011037もう少しわかりやすく接続部を写すと左の写真のようになります。
接続は、入力側をサーボの空いているポートに、出力をAD(6)ポートに接続します。 実際はどこでもいいんですが、プログラムがAD(6)なので。

ちなみに出力のGNDのケーブルは、同じ基板内なので省略しました。入力2本、出力1本です。(入力1本、出力2本でも同じことができます。)
 
R0011041 実際に値を読んだところです。
この回路の出力が3.22V。半分にしているので実際は、6.4Vです。
それに対し、AD(6)の値が、167なので約3.28Vです。 ほぼ同じです。

電圧が降下するまでサーボを繋がない状態だと恐ろしく時間がかかります。
丸2日間はこれに時間を費やしました。(不在のときは電源を切っていたので余計に)
 
R0011042 AD(6)が159、実測値が3.08Vです。
 
R0011043 AD(6)が156、実測値が3.01Vです。
 
R0011045 AD(6)が154、実測値が2.99Vです。

既にサーボへ給電する電圧は6Vをきってます。
 
R0011051 途中写真を省略します。
AD(6)が152、実測値が2.93V
AD(6)が150、実測値が2.89V
  :
AD(6)が149、実測値が2.88Vです。
実はあと1つで148、これより小さいとき(IF A < 148)というのが条件式なので147にならなければなりませんが、これ以上は小さくなりません。
これの検証に時間がかかってしまいました。理由は何でしょうか?
 
R0011056 サーボへの給電電圧を測ってみると、既に5.66Vになっていて、5.8Vは下回っています。
 
R0011053 理由はこれです。

ADポートの電圧を測ってみると4.8Vになっています。つまり分母が小さくなってしまったために、数字が大きくなってしまったのです。(数字は逆に149から150に増えていることがわかると思います。)
ADポートの電圧→Va , サーボの電圧→Vsとすると・・・
Va × (Value  + 1) / 256 = Vs
Value = Vs / Va × 256 - 1だからです。
 
■結論
回路が正しいという前提で結論付けるなら、今の低電圧検知のプログラムでは検知できないということです。実測値を参考にするなら、「151より小さい(IF A < 151)」くらいで見ておかないとダメですし、動きを完全に止めないとROBOZAKがゾンビみたいに復活する恐れもでてきます。
※MR-C3024のバージョンが変わっているようですし、個体差もあると思うので安易に間違っているとは言えませんが・・・。
 
■追記 (1/25 8:40)
R0011058 さっき見つけちゃいました。
無断で画像を使う訳にはいかないのでGoogleで「Robonova-I用 電圧センサーハーネス」を検索してみて頂きたいのですが、検索するとこれに相当する製品の画像が出てきます。同じ様に配置すると多分左の写真のような感じだと思います。(わかりやすいように並べただけで配線はしてません。)
この「ハーネス」を見てみると、コネクタ×2個+ケーブル1本に見えます。サーボ側のコネクタにここで作った抵抗を収容してしまうとADポート側に延ばすケーブルは1本で足ります。(少しもっこりしている方がサーボ用でコンパクトな方がADポート用ですね。)

 


■以下余談です。
(その1)
R0011046 こんなモノを作ってみました。
近々これについても書きます。
 
(その2)
MR-C3024は正確な時間計測ができないので時計を組み込もうと思ってます。
なるべく安く仕上げたいので、電波時計を分解してみました。
R0011022 R0011023_2
R0011020 R0011021
ん・・・ちょっとでかすぎ。
R0011019
電波時計はあきらめて、MR-C3024は、I2Cバスを持ってるのでリアルタイムクロック「RTC-8564NB」を使ってみようかと思ってます。 (既に入手済みです。)
上の写真はカシオのではないですが、カシオの目覚まし電波時計が安いので、2個買いました。980円です。 (昔、秋月電子通商で同じようなのが安く売ってましたね。アレも持ってます。)

ROBOZAK RZ-1 ROBONOVA-I RN-1 電圧チェックセンサーハーネス



■最後にお願いです。
最近ハード寄りの記事ばかり書いてますが、私はハードウェア技術者ではないので(実務経験は全くないド素人です)、実際に組まれる方は、その辺も踏まえて自己責任でお願いします。高価なボードを壊す可能性も十分ありますから。

ROBOZAK関連(過去記事)のダイジェストを表示する場合はこの行をクリックして下さい。

| このエントリーを含むはてなブックマーク fc2ブックマークに登録 Yahoo!ブックマークに登録 livedoorブックマークに登録


お探しの情報が見つからなかったとき、サイト内検索をしてみて下さい。

サイト内検索

  • Google


    WWW を検索
    このサイト内を検索

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/213795/17792813

この記事へのトラックバック一覧です: ROBOZAK(ROBONOVA-I)用低電圧検知回路を作りました。 しかし・・・:

コメント

コメントを書く



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


コメントは記事投稿者が公開するまで表示されません。