電池の検討とLチカ

ogochan
ロボットネズミ

さて、だいたいのボードの配置の検討をしたところで、他のボードや電池について考えてみます。

とりあえずこんな感じにしてみることを考えます。

冒頭の画像が検討した結果です。

電池の検討

配置は大きなものや制約の大きなものから考えて行きます。Maix Bitの配置を最初に考えたのは、そういった事情ですね。

次に大きい部品は電池なので、電池のことを考えます。

必要な電源

電池のことを考える前に、必要な電源について検討しましょう。

まずは、モータを駆動する電池です。

これは元々の「ねずみ」の仕様として1.5V電池が使われています。そして、注意書きとして随所に「ニッケル水素電池は使用できません」と書かれています。これはおそらくエネループを想定したことなのだろうと思います。電池単体で購入できる充電可能な電池として一般的な存在ですからね。

ニッケル水素電池はブランドによりますが、だいたい1.3V程度が定格電圧です。

モータの型番が公式のスペックシートに書かれていないのではっきりしたことは言えませんが、モータの回転具合や執拗なほどの「ニッケル水素電池は使用できません」という注意書き、形状等をを見るに、モータはマブチのFA-130RA-2270かその互換品ではないかと思います。

FA-130RA-2270

となると定格電圧は1.5V、電圧範囲は1.5〜3.0Vということになります。

前にも書きましたが、1.5Vだとノロノロという感じで動くので、「チョロッ」という感じで動いてもらうには、もうちょっと高めの電圧が良いんじゃないかと思います。また、モータドライバの最低電圧が2.75Vということも考えると、モータの電源としては3Vくらいを用意した方が良いのではないかと思います。ということで、3Vということに決定しておきます(あくまで暫定です)。

次はMaix Bitの電源です。

Maix Bitのデータシートを見ると4.8V〜5.2Vということになっています。要するに5.0V程度という要求なのでしょう。

5Vとなると結構厄介です。有線なものであれば、USBから持って来れば簡単なんですが、「ねずみ」は有線では動かしたくありません。ですから、電池ということになります。

電池で5Vとなると一番簡単なのは「モバイルブースタ」を使うことです。サイズが問題にならない時、そしてそこそこ電流のある時であれば、モバイルブースタを使うと便利です。しかし、今回の「ねずみ」は割と小さ目の筐体なので、モバイルブースタを入れることができません。改造とかすればいいんでしょうけど、そこまでやるなら別のソリューションを考えた方が良いです。

次に考えるは、モータで使っている3Vを元に5Vを作る昇圧モジュールを探すということです。ここで考えるべきことは、Maix Bitはいくら電流が必要かということです。

データシートを見ると、「600mA以上」ということになっています。おそらくフルスペック動作するとこれくらい食うのでしょう。実測してみると、後述のLチカで50mA程度、カメラを動かして200mA程度です。Lチカのならまだしも、普通に「らしく」使うと結構食うようです。

これを頭に入れておいて、秋月の商品を探すと、

XC9306使用同期整流昇降圧DC/DCコンバータキット5V版

というのがあるのを発見しました。3.3V電源からだと500mAまで行けるっぽいので、使えそうですね。

しかし、ここで別のことを考えてみます。それは「リチウムイオン電池では動かせないのか?」ということです。

Maix Bitの回路図を見てみます。そうすると、RY1303Aという電源チップが使われていることがわかります。

Maix Bitの電源回路

このチップについて調べると、

RY1303A 3×Buck, 2.5-5.5V, 1.5A, 1.5MHz, VFB 0.6V, QFN20-3×3

という、おそらくメーカのサイトが見つかります。データシートが欲しいなぁと思って探すと、SiPEEDのダウンロードにありました。

https://dl.sipeed.com/shareURL/MAIX/HDK/Chip_DS

これを見ると、

  • 降圧コンバータ
  • 入力は2.7V〜5.5V
  • 出力電圧は0.6V〜入力電圧まで
  • 最大2A
  • 出力は3つ設定可能

といったことがわかります。回路図を見ると、0.9V, 1.8V, 3.3Vを出力しています。データシートにより、この出力電圧は、SWとFBとGNDとの分圧によって決定されるようです。

となれば、降圧コンバータであることを考えると、最高出力電圧である3.3Vよりも高い電源電圧であれば、何も5Vでなくても動かせるのではないかという期待が持てます。つまり、リチウムイオン電池(定格3.7V)であれば駆動できるのではないかと考えられるわけです。

このことはMaix Bitのデータシートには書かれていないことなので、試してみる必要があります。

とりあえず、Maix Bitの電源としては

  • 5V程度が必要
  • 秋月には3V程度から5Vに昇圧するコンバータがあって使えるかも知れない
  • でも、もしかしたら5Vでなくて3.7Vくらいなら駆動できるかも知れない

ということが言えます。

Maix Bitの電源を実験する

ということで、Maix Bitの電源としてリチウムイオン電池が使えるか試してみましょう。

このためには、まずMaix Bitを動かしてみる必要があります。

MaixPy IDEを試す

Maixを動かすには、いくつかの方法があります。

  • MaixPyを使う
  • Arduinoを使う
  • Native SDKを使う

です。動かすだけならどれでも良いのですが、今回はMaixPyを使うことにします。と言うのも、

  • MaixPyはすぐ動かせる(最初からファームとして入っている)
  • Pythonなので、もしかしたら他の自動運転系のファームの流用が可能かも知れない
  • 実はSiPEEDが一番力を入れているのはMaixPyと思われるフシがある

ということからです。どれもちょっと試して上手くやるには都合が良いですね。問題は私が

Python使ったことない

ことくらいです。いやー、実際自分で「書く」ってことはなかったので、ほぼ初心者なんですよ。読む分にはJupyter noteとかのコード読んでたりはしますが、読むのと書くのとは別のスキルですからね。まぁ、使ったことがなければ使えばいいだけのこと。どうせすぐに使えるようになりますよ。

「他の自動運転系ファーム」ってのは、実は世の中結構あって、Autowareのような本物の自動運転を目指すようなもの以外にも、

挙げて行くとキリがないくらいあります。多くはPythonでコードが書かれています。なので、このような遊戯をやるにあたって「Python使ったことない」とか甘えと言っても良いですね。なんかツバみたいなのが降って来ましたけど。

また、3番目のSiPEEDが一番力を入れているフシがあるというのは、ドキュメントの量を見るとわかります。力が入ってます。Pythonは高級言語ですから、Pythonで使える機能は全てそれよりも低レベルの言語ではちゃんと使えて当然なんですが、使い方のドキュメントがちゃんとしてないとユーザにとってはないも同然です。幸いなことにPythonについてだけはちゃんと書かれている感じなので、多分安心して良いのでしょう。

ということで、私の経験の有無のことはとりあえず忘れて、Pythonを使って行くことにします。他の言語やプラットフォームについては、余裕や必要性が出て来たらにしましょう。個人的にはいずれJavascriptを動かしてみたいです。割り込み処理とか書きやすいので。

そして、Pythonを使うのに一番簡単な方法は、MaixPy IDEを使うことです。

MaixPy IDEのインストール

まずはMaixPy IDEのインストールをします。その前にUSBドライバをインストールしなければならないようです。

Maix Bit USB Driver Installation

これは要するにMaix Bitの上のUSBシリアルのチップのドライバは入ってないかも知れないからという事情です。私はWindowsで入れた覚えがないので、もしかしたら今のWindowsにはあるのか、あるいは他のボードの時に入れていたかだと思います。USBポートにMaix Bitをつないで手応えがなければインストールします。

また、MaixPyを使う前にボードの上のファームを更新した方が良い旨書いてあります。

Update MaixPy firmware

した方が良いんだろうなと思いますが、手元にあるボードのファームのバージョンを表示させると、0.6.2でSiPEEDのサイトにあるファームも0.6.2なので、細かいバグのこと以外は気にしなくても良いのかなと思ってます。まぁ何かあったら更新しましょう。

ということで、MaixPy IDEのインストールです。まずはダウンロードします。

https://api.dl.sipeed.com/shareURL/MAIX/MaixPy/ide/v0.2.5

ここのreadme.txtにはファームは0.4.0_44以上のバージョンにしろということが書いてあります。手元のボードは0.6.2ですから心配無用ですね。

Windows上であれば、普通のインストール手順でインストール出来てしまいます。

SiPEEDにあるインストール手順には、インストールできたら試してみろ的なことが書いてあるので、試してみましょう。

何となくちゃんと動いてくれます。

Lチカを作る

デモのプログラムが結構いい感じで動いてくれたのですが、これで電池のテストは出来ません。なぜなら、このプログラムの動作を見るためにはUSBケーブルがつながっている必要があるからです。

USBケーブルがつながっていれば電源はUSBケーブルから供給されてしまうので、電池動作のテストにはなりませんね。じゃあどうすれば良いかと言えば、USBに頼らないで動作を確認することを考えれば良いわけです。それが「Lチカ」なわけです。LEDの点滅が確認できる限り、ボードが動いているんだということがわかります。

Lチカ(その1)

とりあえずLEDをつけてみましょう。

最初ということで、GPIOを自分で制御して点灯させてみます

from fpioa_manager import fm
from Maix import GPIO

io_led_red = 13
io_led_green = 12
io_led_blue = 14

fm.register(io_led_red, fm.fpioa.GPIO0)
fm.register(io_led_green, fm.fpioa.GPIO1)
fm.register(io_led_blue, fm.fpioa.GPIO2)

led_r = GPIO(GPIO.GPIO0, GPIO.OUT)
led_g = GPIO(GPIO.GPIO1, GPIO.OUT)
led_b = GPIO(GPIO.GPIO2, GPIO.OUT)

led_r.value(1)
# led_g.value(1)
# led_b.value(0)

SiPEEDのwikiにあったものをちょっといじりました。

真ん中あたりのfm.registerは何やら単なる言い換えみたいな面倒臭いことをやっているなという感じでしょう。これは、前回書きましたが、K210(MaixのSoC)は任意のピンに任意の機能をマップできるようになっていて、そのマッピングを行っているわけです。

左下のボタンを押すと動いてくれます。

Lチカ(その2)

その1はちゃんとLEDを点けてくれるのですが、点けたままだと仮にCPUが動かなくなってもSoC内のドライバがONであれば点いたままだったりしてイマイチ状態が良くわからないので、チカチカさせてみます。「チカチカ」をCPUで制御してやれば、チカチカしている限りCPUが動いているってことになりますからね。

とりあえず雑にサンプルはないかと探してみると、ドキュメントwikiにありました。

machine.PWM
4.1. Routine 1 (breathing light)

このコードを試してみます。

from machine import Timer,PWM
import time
from board import board_info

tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
ch = PWM(tim, freq=500000, duty=50, pin=board_info.LED_G)
duty=0
dir = True
while True:
    if dir:
        duty += 10
    else:
        duty -= 10
    if duty>100:
        duty = 100
        dir = False
    elif duty<0:
        duty = 0
        dir = True
    time.sleep(0.05)
    ch.duty(duty)

実行すると、何やら怒られます。どうやらboard_infoがないようです。

「board_infoとは何ぞ?」という疑問があると思いますが、説明があります。

Board

雑なことを言えば、「その1」のコードの真ん中付近にあった、ピンや機能のマッピングを定義したものです。具体的には、Maix Bitの場合は、

import json

config = {
  "type": "bit",
  "board_info": {
      'BOOT_KEY': 16,
      'LED_R': 13,
      'LED_G': 12,
      'LED_B': 14,
      'MIC0_WS': 19,
      'MIC0_DATA': 20,
      'MIC0_BCK': 18,
  }
}

cfg = json.dumps(config)
print(cfg)

try:
  with open('/flash/config.json', 'rb') as f:
    tmp = json.loads(f.read())
    print(tmp)
    if tmp["type"] != config["type"]:
      raise Exception('config.json no exist')
except Exception as e:
  with open('/flash/config.json', "w") as f:
    f.write(cfg)
  import machine
  machine.reset()

という感じのもののようです(正確には上の方のconfigだけで、後は保存のためのコードです)。要するに、「名前のついたピン」が実際にどのピンに相当するかということが書かれているファイルを生成して、これを読み込むようです。このコードはそのファイルを生成するものですね。

説明によると、このコードを実行すると、ボード情報はよしなにしてくれるようです。

ということで、この作業をするとちゃんとコードが動いてくれるようになりました。

起動時実行

さてLチカが動いたのでこれで実験ができると思ったのですが、どうもそうは行きません。

というのも、MaixPy IDEで実行したコードは揮発性です。つまり、Maix Bitをリセットしたりすると消えてしまいます。

電池のテストをするのであれば、プログラムを書いて、電池をつなぎ換えて... ってやるわけなので、どうしても一度リセットがかかります。回路を工夫すれば、USBを切った瞬間に電池に切り替わるということもできますが、ダイオードでやると順方向電圧降下のせいで0.5Vくらい落ちてしまい電源電圧が足りなくなってしまって都合が悪く、FETスイッチにすると大袈裟なことになってしまうということで今回は手で切り換えることにします。

そうなると、「リセットしてもプログラムが動く」ようになっている必要があります。

このための方法が、

boot script

に書かれています。具体的には、/flash/sdboot.pymain.pyに置いてやれば、ここにあるコードを実行してくれるようです。

具体的には、

「ツール」のところにある「Save open script to board(boot.py)」というのをクリックします。そうすると、表示されているコードがboot.pyに保存されます。

これをやった後にUSBケーブルを抜いて、再度USBケーブルを差してみると、Lチカが始まります。

リチウムイオン電池をテストする

ということで、雑に試してみます。電源に使った電池は、200mAhのものがその辺にゴロゴロしていたので使いました。特に意味はありません。

左下の青いLEDがテスト用です。

静止画なのでわかりませんが、ちゃんとPWMでチカチカしてくれました。

と言うことで、Maix Bitは5Vバスにリチウムイオン電池をつないでも、ちゃんと動いてくれることがわかりました。実際に使う時には、もうちょっと大き目の電池にすると良いかも知れません。何ならモータの電源にも使ったら良いのかも知れませんね(要検討)。

追試したい人に注意しておくと、この状態はUSBのVBUS(5V)と電池が直結しているので、絶対にUSBケーブルをつないではいけません

配置

一番厄介そうな電池の問題が解決してくれました。電池については、

  • モータは3Vにして単三電池を2本
  • Maix Bitはリチウムイオン電池を1セル

ということです。ボードを起こした時には電源回路をどうこうすることはあるかも知れませんが、当面はこれで実験することにします。

今回モータドライバは秋月で出来あいのものを買って来ました。

DRV8830モータードライバモジュール

チップ単体で買うより安かったですね。

このボードが素晴しいとか絶対オススメとか、そういったことはありません。どうせいずれは基板起こすと思うので、仮の配線が簡単に出来れば良いという程度の意識で「何でもいいから安いの」という判断です。まぁ、秋月はすぐそこなんで、待たずに入手できるのもあるわけですけど。

「とりあえず」ということで、モータの上に置いてみました。そのうち書きますが、モータにつながった線と言うのは「ノイズのアンテナ」みたいなことになるので、なるべくドライブ回路はモータの近くに置いてやって、「アンテナ」を小さくしてやろうという考えです。

こんな感じに並べてみました。何となく綺麗に納まっているように思いますが、どうですかね?

次回はモータ周辺をいじってみましょう。