« ROBOBASIC講座(AD, RCIN) | トップページ | 横浜のパーツ屋 »

ROBOBASIC講座(低電圧検出ルーチン)

今回は電源電圧の検出についてです。前回出てきたADポートの6番がそれに割り当ててあります。電圧が下がると暴走を始めるので、組み込んでおきたいルーチンですよね。しかし私は、この辺り全然試していないので、以下に上げた参考資料をもとにまとめたものです。

《参考資料》

  1. ロボットのいる生活。
    ROBOZAK(ROBONOVA-I)用低電圧検知回路を作りました。 しかし・・・
  2. RoboZak奮戦記
    電源検出電圧の実測値と計算値
  3. 週刊ロボザックお助け掲示板
    低電圧とプログラム暴走の関係
  4. Overall Template Program (コード下記:1)
  5. action_auto.bas (コード下記:
  6. HERO'S Download
    ATmega128/128L日本語翻訳データシート
  7. ROBONOVA-I 日本語マニュアル

《ROBONOVA-Iのマニュアルでは》
ハイテックのサイトからダウンロードできるROBONOVA-I 日本語マニュアルのP95に「(7) LOW-VOLTAGE WARNING設定方法」という項目があります。ここには以下のように書いてあります。

Screensnapz006

《個体差がある》
avalonさんは151くらい
(1、3)、fkさんは155くらい(3) 、Overall Template Programでは148、action_auto.basでは160でチェックしていて、個体差があるようです。あと、ADアダプタと、バッテリでも値が異なるようです(2)。


《電圧を求める式は》

ATmega128/128Lのデータシート(6)のA/D変換器の項目(p153〜)を読んでみたけど難しいですねsweat01avalonさんが(1)と(3)の中で、電圧とAD(6)の値の関係は「Overall Template Program」のrobot_voltageに式が書いてありますが、少し間違っており、以下のようにおっしゃられています。

----------------------------------
式は恐らくこうだと思います。
Value = (Voltage/基準電圧 × 1/2) × 256 - 1
→ 5.8V / 5 × 1/2 × 256 - 1 ≒ 147
※256はADポートの分解能
※-1は0〜255までなので
※1/2は分圧回路・・・精度はここまでないと思います。
※基準電圧は約5Vですが、これが下がるとValueが大きくなってしまいます。

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

《robo_voltageを使う場合は》
one以前、ハイテックにあったテンプレートについて(1)で書きましたが、Overall Template Programにあるrobo_voltageのルーチン(以下)はENDIFがないので、このままでは変なことが起きてしまうかもしれませんので、このルーチンを使う場合は、ENDIFを書き加えて下さいね。

twoそれから毎回呼ぶ必要もないなぁという場合は、例えば以下のように動かす前だけチェックするようにしてもいいのかもしれません。

IF RR<>0 THEN GOSUB robot_voltage
ON RR GOTO MAIN,K1......
.....

IF A<>0 THEN GOSUB robot_voltage
ON A GOTO MAIN,K1......
.....

threeあと、好みですが、例えば以下の様にアレンジすると、電圧が下がると点減回数が増えるようにできますね。

CONST kLED=52
CONST
kLowVolt=155
CONST kStopVolt=151
A=AD(6)
IF A<kStopVolt THEN
    END

ELSEIF A<kLowVolt THEN
    FOR v=A TO kLowVolt
        OUT kLED, 1
         DELAY 200
        OUT kLED, 0
        DELAY 200
    NEXT v
ENDIF
RETURN

《電圧検出用ルーチン》

いちおうハイテックさんのページにあったコードの中にあった、電圧検出用ルーチンを書いておきます。

1, Overall Template Programより
'================================================
robot_voltage: ' [ 10 x Value / 256 = Voltage]
    DIM v AS BYTE

    A
= AD(6)

    IF A < 148 THEN ' 5.8v

    FOR v = 0 TO 2
        OUT 52,1
        DELAY 200
        OUT 52,0
        DELAY 200
    NEXT v

    RETURN

2, action_auto.basより
'================================================
robot_voltage: ' [ 10 x Value / 256 = Voltage]
    A
= AD(6)
    TEMPO 230
    IF A < 160 THEN MUSIC "G" ' 6.25 Volt
    RETURN

----------------
にほんブログ村 科学ブログ 
ロボットへ
にほんブログ村

|

« ROBOBASIC講座(AD, RCIN) | トップページ | 横浜のパーツ屋 »

ROBOBASIC講座」カテゴリの記事

工作・改造・解析」カテゴリの記事

コメント

この話題とは直接関係ないですが、ATmega128LのA/Dコンバータは本来10bitの分解能なので、本当はもっと細かくデータ取れるハズなんですよねー(×4倍)
roboBASICのByte型で扱いたいんで落としている様な気がします。

それから、また脱線しますが、ちょっと面白い情報が手に入りました。近いうちにブログに書きます。(笑)

投稿: avalon | 2008年4月 6日 (日) 05時45分

はい、面白い情報楽しみにしてま〜すsign01
って、avalonさんの情報はいつも面白いから、どれがその情報なのか区別がつかないかも。。。(笑)

投稿: micono | 2008年4月 6日 (日) 14時49分

コメントを書く



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




トラックバック

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

この記事へのトラックバック一覧です: ROBOBASIC講座(低電圧検出ルーチン):

« ROBOBASIC講座(AD, RCIN) | トップページ | 横浜のパーツ屋 »