マイクロマウス
"Zirconia"紹介
中川範晃�アールティマウス部
2024年6月22日発表資料
目次
自己紹介
会社の新製品や
ブログ紹介、展示会のお知らせなど
電源回路の
データなどを公開
会社で行った自作マウス研修の開発レポートや
大会参加レポートなどを公開
Zirconia(ジルコニア)とは?
Zirconiaは、通算8回の全日本MM優勝者であるまついさんが2019年にハードウェアの設計&製造情報を公開したマイクロマウスです。
Zirconiaは、シンプルなハードウェアで、過剰な軽量化や低重心化、高価な部品を必要としません。ロボトレースでプリント基板を起こして作ったロボットで出場したことがある、またはサークルに所属しマイクロマウスサイズ経験者が近くにいるなら作れるレベルのロボットであることをコンセプトにしています。
さらに、コヒロさんがサンプルプログラムとしてデバイスドライバを書いて上記のハードウェア情報もまとめてBitbucketにApache License 2.0で公開してくれています。
画像引用:まついのまうす製作録
Zirconiaコンセプト(2019年1月当時)
最新技術と部品も使いつつ、最低限をギュッと詰め込みシンプルで扱いやすく
1.最新技術
① 廃番予定の部品の更新(ジャイロ:MPU6500→ICM20468、エンコーダ:AS5050→MA300)
② DMMの3Dプリントサービスを利用(例えば歯車付きのホイールの場合、切削に比べ部品点数:3→1、コスト:1/3)
2.二輪という一番シンプルなハード
駆動の構成がシンプルなだけでなく
・組み立て、再分解が容易な機構でメンテナンスしやすい
・電子回路も、最小部品サイズ:1608(最近のトレンドは1005)として修理しやすい等、マイクロマウスのなかでは扱いやすい構成とした。
文章引用:ハードマニュアル.pdf
Zirconiaの想定の開発スタート方法
中川の例:
市販キット(Pi:Coシリーズ、HM-Starterkit等)で完走
→自作ロボトレース or 自作クラシックマウスで完走
→Zirconiaで完走
→自作マイクロマウスへ
基礎ロボット技術習得
回路・基板設計習得
制御関連習得
深い世界へ
Zirconiaのスペック
CPU クロック/ROM/RAM/DataROM | ARM系 / STmicro STM32F413CH 40[MHz] /1.5 [MB] / 320 [kB] / 0 [kB] |
バッテリー | CPU系: LiPo/ 1 [セルor本]/ 3.7[V]/ 50[mAh]/ Banggood モータ系: CPU関係と共用 |
走行用モータ | DCモータ 2 [個] Mk06-4.5 モータドライバIC:DRV8836 |
走行用以外のモータ | その他1無し その他2無し |
センサ | 赤外線センサ:4 [個] / OSI5FU3A11C+LTR-4206E / 距離センサ(反射光量をAD変換) / ジャイロセンサ:1 [個] / ICM20648 / デジタル値出力型 / エンコーダ:2 [個] / MA300 / 磁気式 / |
サイズ 長さx幅x高さ[mm] 重量[g] | 70x39x13 [mm] 12[g] |
動輪 補助輪 | 2輪/直径13mm 幅3.5mm 補助輪なし |
ロボット構造 | 左右(2輪)速度差方式 |
直進最高速度/加速度/旋回時速度 | 2[m/s]/ 8 [m/s/s]/ 0.75[m/s] |
開発環境 | STM32CubeIDE CAD:KiCAD |
Zirconiaの走行動画1 まついさん走行
Zirconiaの走行動画2 コヒロさん走行
Zirconiaの代表的な大会成績
2020年度全日本大会
上位の順位
全走行完走している
Zirconiaの設計情報公開先 Bitbucket
Zirconiaのサンプルプログラムコーディングルール
「初心者がわかりやすく使いやすいように、HALライブラリを使ってシンプルで使いやすいドライバを心掛けた。」サンプルコードを書くにあたって工夫したところ。
引用:Fノート 面倒くさがりのためのコーディングルールより抜粋・編集
関数名なら「ファイル名_動詞+〇〇」などの規則を決めて、変数の初期化ならreset、走行に関するものならrunなど。
スクロールしなくて済むように書く。書きづらくない程度の長さでそこそこ読みやすい短さに。
index.hを宣言すればどの関数も使えるし、説明書としてのコメントも書いたので、ここを見ればどの関数でも使える。
コメントを書かなくてもわかるくらいわかりやすくコードを書くのが最良。コメントを修正し忘れて間違ったコメントが残って後から混乱する。
できるだけコードを小さく。ファイル間を跨ぐグローバル変数を使わない、関係ないローカル変数が少なくなるように。管理する変数や関数が増えてくるとバグの温床となるので、生きている変数や関数がなるだけ少なくなるように。
ZirconiaのサンプルプログラムAPI index.h
URL:https://bitbucket.org/kohiro/zirconia_sample/src/master/software/Module/Inc/index.h
Zirconiaのハードウェアの設計情報一式
ガーバーデータ
基板実装部品表.csv
基板実装部品表.xlsx
PCBgogoへの実装依頼用データ
fusionPCBへの実装依頼用データ
KiCadデータ
回路図
発注用ガーバーデータzip
部品リスト
Zirconia(v.1.0)
回路図
センサ配置の解説
「半区画先を見るセンサを持ったマウスの場合、5つのターン(大径90度、180度、45度、135度、斜め90度)を組み合わせた斜め走行においては、すべてのターンの直前において壁切れ補正が可能です。どのような迷路パターンでも例外はありません。そのため、壁切れ前にターンに入ってしまうことを防ぐ機構がかなり有効になります。」
大会に出るために最低限必要なプログラム
Zirconiaを使ってみた中川所感
Zirconiaでの課題
Zirconia v.2.0の紹介
目次
Zirconia v.2.0での変更点
基板重量 0.98gUP
電池重量 約1gUP
足回り重量 約2gUP
Zirconia v.2.0のスペック
CPU クロック/ROM/RAM/DataROM | ARM系 / STmicro STM32F411CE 100[MHz] /512 [kB] / 128 [kB] / 0 [kB] |
バッテリー | CPU系: LiPo/ 1 [セルor本]/ 3.7[V]/ 100[mAh]/ 不明 モータ系: CPU関係と共用 |
走行用モータ | DCモータ 2 [個] NFP-D0612 モータドライバIC:DRV8836 |
走行用以外のモータ | その他1無し その他2無し |
センサ | 赤外線センサ:4 [個] / OSI5FU3A11C+LTR-4206E / 距離センサ(反射光量をAD変換) / ジャイロセンサ:1 [個] / ICM-42688-P / デジタル値出力型 / エンコーダ:2 [個] / MA730 / 磁気式 / |
サイズ 長さx幅x高さ[mm] 重量[g] | 70x39x13 [mm] 15.7[g] |
動輪 補助輪 | 2輪/直径13mm 幅3.5mm 補助輪なし |
ロボット構造 | 左右(2輪)速度差方式 |
直進最高速度/加速度/旋回時速度 | ??[m/s]/ ?? [m/s/s]/ ??[m/s] |
開発環境 | STM32CubeIDE CAD:KiCAD |
※Zirconia無印と違うところ
Down
UP
UP
Down
Zirconia v.2.0の特徴
Zirconia v.2.0の設計情報公開先 Bitbucket
フォークしてブランチを分けた
①
Zirconia v.2.0ブランチのダウンロード方法
①
②
③
部品表1 メカ系&DIP部品
部品表2 SMD部品
基板実装部品 Digi-key My Lists
Zirconia v.2.0
回路図A
Zirconia v.2.0
回路図B
KiCadフォルダ内に3D STEPデータ(メカ含)も同梱
自作する時に各パーツを流用するのもOK。
オンラインにも3Dデータを公開
最初からJLCPCBに表面実装依頼を想定
JLCPCBに標準在庫がないので
以下のSMD部品は手実装
他DIP品の手実装は別途必要
JLCPCBの部品&実装費(5枚実装時)
163.56ドル
25,721.85 円/5枚
+OCSから税関と手数料の請求書
2600円
↓
5,196円/枚
PCBgogoで基板実装
+OCSから輸入関税4800円
合計72912円/5枚
↓
14,582円/枚
Zirconia v.1.0と足回りの互換性あり
軽量化したい
人はこちらを
約2g軽量化
Zirconiaチルドレンを募集中
Zirconiaを使って開発をしてみませんか?
情報交換や相談などを目的とするメンバーとして
一緒にやる仲間を募集中です
開発資料参考
ブートモード時のピンの話
STM32F413
BOOTモード時に出力設定:
PA9(USART1-TX)、PD5(USART2-TX)、PB10(USART3-TX)、PB13(CAN2-TX)、
PA6(SPI1-MISO)、PC11(SPI3-MISO)、PE13(SPI4-MISO)、PA11&PA12(USB)
BOOTモード時に適正なレベルに保たないとBOOTモードが意図通りに機能しない:
PA10(USART1 RX)、PD6(USART2-RX)、PB11(USART3-RX)、PB5(CAN2-RX)、
PA5(SPI1-SCK)、PC10(SPI3-SCK)、PE12(SPI4-SCK)
STM32F411
BOOTモード時に出力設定:
PA9(USART1-TX)、PD6(USART2-TX)、PA6(SPI1-MISO)、PB14(SPI2-MISO)、PC11(SPI3-MISO)、PA11&PA12(USB)
BOOTモード時に適正なレベルに保たないとBOOTモードが意図通りに機能しない:
PA10(USART1 RX)、PD5(USART2-RX)、PA5(SPI1-SCK)、PB13(SPI2-SCK)、PC10(SPI3-SCK)
参考資料:STM32 microcontroller system memory boot mode
https://www.stmcu.jp/design/document/application_note/51328/
W谷さんからアドバイスいただきました
左壁距離測定用LED(PA6)のブートモード時の出力設定
STM32F413の時
STM32F411の時
同じように出力となるため、もともとこの問題を抱えていたらしい
W谷さんからアドバイスいただきました
書込&通信用SRコネクタケーブルの抜き差し時破損
1日で2回ほど千切れる
画像引用:JST SHコネクタカタログ、秋月電子通商
ケーブルアセンブリ ソケット
SRはSHコネクタもつかえるみたい
エンコーダデータが波打っている
サマコバ磁石(SS28)円柱型Φ1.9x1(mm)径方向 表面磁束密度:265 mT
磁気式エンコーダMA300 ICと磁石の隙間:?(0.5mmと想定)
サマコバ磁石(SS28)円柱型Φ3x1(mm)径方向 表面磁束密度:218 mT
磁気式エンコーダMA730 ICと磁石の隙間:0.5mm
Zirconiaはもともと定格を下回っている。IC変更により最低限必要な磁束密度が上がり、v.1.1ではどうやら悪化した...
固定Dutyで走らせてみたら、エンコーダデータが波打ってる...
参考資料:MPSオンラインマグネット計算ツール
エンコーダと加速度センサとの相補フィルタ
上位者に話を聞くと振動的なのはよくある事らしい。加速度センサと併用してフィルタリングによる速度推定を行うとのこと。
プログラムの書き込み速度
12.208秒
STM32CubeProgrammerを使った書込み
書込み用HEXファイル容量例:277KB
パラメータ調整時には
頻繁に書き込むので、
地味に時間が取られる。
プッシュボタンを頻繁に押すと潰れる
プログラム開発中は書込み頻度が高いため、プッシュボタンを頻繁に押すことになる。そうするとボタンが潰れてきて反応が悪くなる。
新品のボタン
反応の悪くなったボタン
磁気式エンコーダ:MA300→MA730
ABZインクリメンタル�10bit出力エンコーダ
ABZインクリメンタル�12bit出力エンコーダ
どうせ変えるなら同等品のMA302より
分解能が高いほうがええやろうと。
ディスコン
対応
IMU:ICM-20648→ICM-42688-P
ディスコン
対応
市場在庫はまだあるので、
変えなくてよかったのですが。
マイコン:STM32F413→STM32F411
STM32F413は市場在庫切れ
ピン互換のSTM32F411に変更
(Zirconiaの回路図にも記述あり)
FLASH:1.5MB→512KB
RAM:320KB→128KB
ブートモード時の不具合解消のためピン配置の変更
↑ブートモード時Highになるピン
表示LED
光る
壁センサ用LEDがON
大電流が流れる
入れ替えた
移動
SWD
追加
基板配線の都合で移動
Zirconia v.1.1
Zirconia v.2.0
ブートモード時の電流量(半ショート状態)解消
Zirconia v.1.1
ブートモード時:0.225A
Zirconia v.2.0
ブートモード時:0.032A
表示用LEDが電池に隠れて見えないのでLEDの位置変更
Zirconia v.2.0
Zirconia v.1.1
電池を上に
ずらして
覗き込む
表示用緑LEDの明るさアップ
緑LED型番:HSMG-C190
他色に比べてVfが大きい
→電流制限抵抗を減らす
画像引用:Broadcomデータシート
変更前(1kΩ) 変更後(470Ω)
基板配線の整理
Zirconia v.2.0
Zirconia v.1.0
マイコン下パッドからビアを排除
電源パワー系を下にまとめる
全ての実装部品を表面へ(IMU回路部品)
Zirconia v.2.0
Zirconia v.1.1
Zirconia v.2.0
Zirconia v.1.1
裏面には何も実装部品を置かない
ST-LINKの追加
USB-UART変換
+リチウムイオン電池充電
SWD(Serial Wire Debug)
+USB-UART変換
+リチウムイオン電池充電
Zirconia v.2.0
Zirconia v.1.1
SWD経由によるプログラムの書き込み速度アップ
1.778秒
書込み用HEXファイル容量例:227KB
Zirconia v.2.0
Zirconia v.1.1
12.208秒
デバッグ機能を使えるように
STM32CubeIDEのデバッグ画面
通信コネクタの種類を変更
Zirconia v.2.0
IDCコネクタを指で取る
Zirconia v.1.1
SR(SH)コネクタを爪で取る
抜き差しがしやすくなった
電池の充電速度微増
50mAで充電
(50mAhの電池を想定)
Zirconia v.2.0
Zirconia v.1.1
100mAで充電
(100mAhの電池を想定)
(ついでに低価格ICに変更)
磁石の変更と位置変更
エンコーダ基板の位置決め治具を兼ねたモータマウント
エンコーダ基板に実装されているセンサICがモータマウントに嵌るようにした
磁石をできるだけ
センサICに近づける
その効果:一定Duty比で回したときの速度推定
固定Dutyで走らせてみたら、
エンコーダデータが波打ってる...
Zirconia v.2.0
Zirconia v.1.1
大幅に改善されている
磁気式エンコーダICをMA302から分解能の高いMA730に
左右モータデューティ比0.2時エンコーダ計測速度(1kHz計測)
MA302の場合
MA730の場合
カクツキが減らせている
足回り:ベアリングホルダー方式
磁石
ベアリング
なおフィスさんの
「マイクロマウスの足回りについて ソフト屋さんが考えるシンプルな足回りの紹介」を踏襲。
基板配線都合による変更
Zirconia v.1.0
スリープモードで95nAの消費
レギュレータのEnableピンで電源ON/OFF
バッテリ電圧検出の
消耗をFETでカット。
※電圧検出用分圧抵抗は、ここに入れられるとよい
Zirconia v.2.0
他には、実装依頼を前提に
1608サイズ品から
1005サイズ品に変更
JLCPCB実装依頼方法
JLCPBC実装依頼1 データ
実装依頼で必要なデータは3つ
Zirconia_v.2.0.zip
ガーバーデータ
bom.csv
部品データ
positions.csv
部品配置データ
JLCPBC実装依頼2 ガーバーデータアップロード
Zirconia_v.2.0.zip
ガーバーデータを
アップロードした
直後の画面
JLCPBC実装依頼3 基板の厚み選択
0.6mmを選択
色は好みで選択する
納期や価格が増える
パッドに乗せる半田を、有鉛か無鉛か金メッキか
基板は3種類
本体、エンコーダ基板、
書込&充電基板
JLCPBC実装依頼4 実装枚数選択
ON
特に変更なし
画像の通りになってればOK
実装したい枚数を入力
デフォルトでは5枚
JLCPBC実装依頼5 カスタム設定
特に変更なし
基板の確認
次へ
部品データと位置データをアップロード
bom.csv
部品データ
positions.csv
部品配置データ
部品データの確認画面1
JLCPCBに在庫がある場合、候補部品が自動選択されるので、上に上がる
部品データの確認画面2
2x5ピンヘッダは部品が違うのでチェックを外す
部品データの確認画面3
部品に間違いがないかチェックしたら次へ
選択されてない部品は置かない
部品配置確認&編集画面1
部品配置確認&編集画面2
1ピンの向きが違うため
部品リストの実装向きを見ながら、部品の向きを修正していく
部品配置確認&編集画面3
1ピンの向きが違うため
部品リストの実装向きを見ながら、部品の向きを修正する
向きを変えるアイコン
部品配置確認&編集画面4
修正後の
画像
問題なければ次へ
費用確認画面
適当なものを選択
DIY「Robot」
金額に納得したら
カゴに投入
カゴの中身
チェックアウト
一週間ほど待つと...
こんな感じで
基板が届きます。
あとは残りの表面実装部品や
リード部品を頑張って実装する。