机上の空論主義者

-♰- 有言不実行の自信をブログ名で戒めろ -♰-

【ATMEGA328P-AU】M5Stackで4つのモータを動作できる基板を作成した件【基板設計編】

こんにちは。

先日、M5swarmという作品を各所のコンテストに応募しました。

protopedia.net

作品の実装の際に、M5stackを群ロボット化するための足回り基板を作成ました。機能としては、M5Stackからの命令を受け取るマイコン部分と、電源分離しながらモータ4つを独立に動作させられるものです。

今回は、そのモータを動作させるための基板実装について紹介していきたいと思います。


機能概要

足回り用の基板を設計する上で、モータ制御用のマイコンを搭載することで、制御ピン数の面で有利になると考えました。そのため、外部のメイン処理部分からシリアル通信で命令を受け取り、その命令を基に足回り専用のマイコンでモータを制御するようにしています。そして、利便性向上のため、半固定抵抗によるパラメータ調節の機能や、移動精度向上を目的としてエンコーダの追実装もできるようにしました。
搭載機能を列挙すると下記の項目があります。

  • ATMEGA328P-AUを用いた処理部分
  • 4モータを動作させられるモータードライバ
  • 各種シリアル通信(SPI、I2C)
  • 2相エンコーダ用ピン
  • 半固定抵抗2つ分
  • 電源分離


回路について

回路概要

はじめてATMEGA328P-AUを用いたため、その動作が正常にできるかが心配で、特別こだわった点はありません。ちなみに、ATMEGAに正常に書き込みできるようにと気を取られすぎて、PWM周りのピン割り当てをミスってしまいました。(ATMEGA328ってPWM用のピンが6個しかないのかよ... ESPに慣れすぎて全部のピンでPWMできる気でいたわ...!)

下図が実際に動作させた基板の回路図です。

f:id:ume-boshi:20211125081000p:plain
M5Swarmの足回り基板の回路図です。

回路図説明

適当な解説ですが、左下にあるのがATMEGA328P-AUです。プログラムを書き込むために必要なのは、マイコン右側にある7, 8番ピンのクリスタルと、29番ピンのRESET用ボタンです。クリスタルが必要な理由としては、ATMEGA328P-AUには内蔵クリスタルが8MHzのものしかなく、16MHzに変えたい場合などに使うためです。個人的には、今使っているY2の部品よりも、セラコンまで内蔵している3パッドのクリスタルのほうが、実装時の領域を削減できるのでオススメです(基板の説明箇所に製品リンク)。ちなみに、Arduino Pro miniでも3パッドのものが使われています。

リセットボタンについては、単純にプログラムを再動作するために必要です。さらにATMEGA328P-AUArduino Pro miniのブートローダを書き込む際にも29番ピンへの接続をしなければなりません。なので、ジャンパー線接続用のピンを1つ出しておくことをオススメします。

それ以外の要素として、左上がモータを動作させるための外部電源の供給と、3V3への降圧をしています。なんで降圧する必要があったかは、今見返すと不明なのです。
右下はモータドライバ動作用の箇所です。U19とU20がフォトカプラのアレイで、ここで電源分離を実現しています。U19の左側がマイコンで、右側がモータ側です。U19等の右側から、さらにU17とU18のモータドライバの方に接続しています。このモータドライバは1素子で2個のモータを制御できます。

右上の大量のピンについては、他の基板などと通信するための箇所です。J32とJ33はume-boshiオリジナル基板(メイン処理部)に、J34はFT232などの書き込み機に、J35はI2C用に、J28とJ31はエンコーダ用に配線しています。

回路設計の反省点

今回、はじめてATMEGA328P-AU用の基板を作成しましたが、ちゃんと動作しているか確認することにすごく手間取りました。というのも、Debug用のLEDを1つも配置しないという失態をしていたためです。状態の可視化は大切ですよね。

また、モタドラ基板としての致命的なミスとして、マイコンの選定そのものが間違っていました。ESP32感覚で全部のピンでPWM出力できるとなぜか勘違いしており、今回は適当に配線してしまいました。しかしATMEGA328P-AUはPWMの本数が6本しかありません…
4つのモータをPWMで制御しようと思うと、8本のPWM信号線が必要です。 滑稽なことにピン数が足りていないのです。結果、ソフトPWMを実装して乗り切りましたが、大失態を犯したのであります。

最後に、個人的には不要な回路があった点です。Encoder用のピンで4本確保していますが、そんなに要らない要素ですね。Encoderの代わりに、マウスに搭載されているようなイメージセンサを用いれば、軽量に2軸方向の移動が分かってしまいますし、それで位置推定するほうが良かっただろうなと後悔しています。




基板について

概要

特にこだわった点は無いです。しいて言えば、人生初のマイコン斜め配置に挑戦したぐらいでしょうか。5cm x 5cmの基板サイズでは配線に限界があったので、リフローが必要なレベルの表面実装部品が使えるようになりたいものです。あと、抵抗アレイも使ってみたいです。

f:id:ume-boshi:20211125081003p:plain:w400
基板図。こんなの見ても参考にならないですね。

主な使用部品

完成品

f:id:ume-boshi:20210522230836j:plain
M5Swarmの足回り基板写真。裏にATMEGA328P-AUがあります。

おわりに

研究活動が忙しくて、2か月くらい記事を書くのをめんどくさがっていました。でもいざ手を動かしてみると、以外にすぐ書けるものです。

次はATMEGA328P-AUArduino Pro miniのブートローダを書き込んで、一番最初のプログラムを書き込む話です。QiitaのAdvent Calendar用の記事。

では、皆さんお元気で。