クラシックマウスを作ろう!(6)~必要な回路の抽出とGPIO、シリアル通信~
初めましての方は初めまして、そうでない方はお疲れ様です。
前回までで機械設計の話はほぼ終わったので今回からは回路編に突入します.
まず先に言っておくと、本シリーズでは回路CADの使い方は言及しません.
自分はEagleとKicadを使っていますが、Eagleを学んだのは数年前なのでリンクは少々古いかもしれません…
今だったらYouTubeで探せば幾らでもあると思うので、使い方は勉強してみてください.
Eagle勉強用:
Kicad勉強用:
今回はまず必要な回路機能の抽出とそれに伴うマイコン選定を行いたいと思います.
目次は以下の通り.
マイクロマウスに必要な回路機能
一般的なロボットは「アクチュエータ」「センサ」「コントローラ」の3要素で構成されます.
とりあえず使いそうなのを列挙して詳細は後の項で触れます.分からない単語連発してたら検索してみてください.
まずは必要な「アクチュエータ」から考えていきます.これは間違いなくDCモータ、このシリーズで言えば1717モータでありましょう.これを動かすにはモータドライバ回路又はICが必要ですね.
さらに、アクチュエータを「ロボットから外界へ向けた出力装置」と考えれば一部のインタフェースもこれに当てはまります.
操作や調整のためにブザーやLEDがあった方が便利ですね.
次に「センサ」.
前の記事で述べたLEDとフォトトランジスタを用いた壁センサは決めた個数だけ必要です.
また、車輪移動ロボットは角速度や加速度を測るIMU(いわゆるジャイロセンサ)、移動距離や速度を測るエンコーダは欠かせません.
みんな大好きInvensane社のリンクはこちら:
検索結果 | センサおよびセンサシステム - モーション/イナーシャルセンサ - IMU (イナーシャル・メジャーメント・ユニット) | TDK プロダクトセンター
センサを「ロボットが外界の情報を検知するための入力装置」と考えればタクトスイッチやトグルスイッチも含まれます.これらがあると操作性が上がるでしょう.
マイクロマウスでは実装面積を小さくしたい要求からスイッチをできるだけ排して、エンコーダやジャイロを用いたインターフェースを利用している方もいます.
外から見ると手を横に振ったりしているのはジャイロセンサを用いて入力しているだけです.挙動不審なんて言わない
最後に「コントローラ」ですが、これはやる事の複雑さや機体の大きさを考えるとマイコン一択になるのではないでしょうか?
マイコンを使う前提だと書込み回路や電源生成や場合によってはレベル変換(電圧信号の最大値の変換)が必要だったりします.
本来はアナログ回路でフィードバック回路を組んでも良いですし、積めるならPC積んでもいいですがマウスでやるには現実的ではないでしょう.(本当に?)
はてさてこれらを動かすには電源と電源回路も必要ですが、それは以降の記事にお任せしましょう.
がんばれ、未来の自分.
以降では、各回路の詳細を詰めていきます.
ペリフェラルと回路
ペリフェラルとは本来なら周辺機器を表す語です.ことマイコンに関してだと「マイコンの諸機能」ぐらいの認識で大丈夫だと思います.(ほんまか?)
例を挙げるとGPIOやタイマー、UART、SPI、ADCとかですね。1番基本となるのがGPIO(General Purpose Input / Output)で、デジタル電圧の入力/出力ができます。LED光らせたりスイッチの読み取りができます.
詳細についてはメーカーのリンクを参照してみてください.
必要なものについてはほとんど説明してくれています.
リンク:
この辺の機能は全部を完璧に扱おうとすると沼なので必要なものをリストアップして新しく必要であればその時に覚えるぐらいの雑さでいきましょう.
前項の必要な機能とそれに対応するペリフェラル、もしくは必要なICは次のように上げられます.あくまで自分が利用した一例です.
「そこの兄ちゃん!FETはICに含まれますか!?」等の異論はあるとは思いますが無視します.
・アクチュエータ
DCモータ => モータドライバーIC、PWM、GPIO
表示用LED => GPIO
ブザー => PWM
・センサ
エンコーダ => TIMやMTUなど[マイコンにより呼び方が異なる]
ジャイロセンサ => SPI 又はI2C
スイッチ => GPIO
壁センサ発光 => GPIO
壁センサ受光 => ADC
・あると便利(任意だがほぼ必須?)
PCとの通信 => UART
マイコンによって名称が異なる場合もありますがエンコーダ以外は一般的な名前かなと思います. それぞれの原理はどのマイコンでも変わらないと思うので1回は必ず勉強しておくことをお勧めします.
LEDとスイッチ
GPIOはマイコンの最も一般的な機能です.使いようとしてはマイコンロジック電圧をHIGH、ロジックGNDをLOWとしてそれらを入出力する機能です.
さらにはマイコン内部プルアップ、プルダウンを利用できるものも多く、ハードウェアとしての回路を省略して実装面積を節約できたりして嬉しいです.
マウスでの使用用途はインターフェースLEDとしての出力、操作用のスイッチとしての入力に使われます.
プルアップ、プルダウンとは何ぞや???って思った方は以下のサイトへ.
必要な個数はいくつか、と言うと難しいですね.
自分の場合はインターフェース用LEDで8つ、スイッチは使っていません.エンコーダを用いた入力方法を採用しているからです.
多いのはLED4つで2進数表記をさせるパターンですね.これで16パターンを表示できます.また、走行状態のデバッグのためにフルカラーLEDを追加している人もいます.
なぜ2進数なのかといえば、出力に対して表現できる情報が多いから .また、組込では通信で8bitの2進数を扱ったり16進数で扱ったりする機会が多いので慣れておいた方がいいのかなと思います.
シリアル通信
「通信」は主に2種類の系統があります.
信号の情報量だけ通信線が増える「パラレル通信」と少数の通信線でHIGH, LOW切り替えて通信する「シリアル通信」です.
電子工作で主に用いられるのは「シリアル通信」なのでそこに重点を置きます.
シリアル通信は簡単に言うとモールス信号の長符と短符のように電圧のHIGHとLOWを用いて情報のやり取りをする方式です.情報の切れ目の方式や諸々で複数の種類があります.
マイクロマウスで用いるのはUART, SPIがメインで人によってはI2Cを使ったりもしています.それぞれの違いは以下のリンク参照.
主にPC−マイコン間通信にはUART, ジャイロセンサにはSPIです.
PCはUSBポートが生えてるのでUSB−UARTの変換器が必要です.自分は下の変換器のお世話になっています.
ジャイロセンサはみんな大好きInvensane社のMPUシリーズかその後継のICMシリーズが多い印象です。自分はICM20689を使っています.
STM32でCubeHALを使ってる人は以下のブログが参考になると思います.
自分も大変お世話になったブログです.
Renesas社マイコンでレジスタ直打ちならe−learningが参考になった気がするけど今もそうなのかな…?
対応していればスマートコンフィグレータ使うのもいいかもです。PDGは…ノーコメントで.
UARTの配線の注意点は
のようにクロスするような配線にする事です.
Transmit - Transmit みたいなのだと情報の投げ合いになってどちらも受け取れません.
Receive - Receiveだと情報のやり取りがありません.
いまだに気を抜くとやらかすミスなのでよくご確認ください.
SPIはSCLK、MISO、MOSI, CS同士をそれぞれ繋ぎます.
CSはSSとも表記されたりしますね.
Chip SelectとSlave Selectなので意味はどちらも同じです.
使用するICによってコンデンサの容量やピン番号は異なります.
データシートに推奨回路が載っているのでそちらを参考にしてください.
ADC
日本語だと「AD変換」として知られている変換を行う機能です。Analog Digital Converterの頭文字をとっています.
そもそもADCって何?って方向けに以下のリンクを.
リンク:
さっくり言うと、中途半端な電圧を読みとって0~100%で取得できるって感じです.
マウスでは壁センサ受光部の電圧を読み込んで、壁との距離を計測しています.
使いたい壁センサの個数だけADCのチャンネル数があるマイコンなら用は足ります.
4チャンネルあれば最低限は足りる…はず!
ここでマイコンのADCに関してソフトウェア的にハマった点があります.
この辺の詳細は発光回路と受光回路の話でまた触れようと思います.
がんばれ、未来の自分!
さて、まだタイマの話が残っていますが、文字数が倍ぐらいになりそうなので次回に回そうと思います….
それではまた.