04 ハードウェア・基板編 - drmus0715/trinitybullet GitHub Wiki

執筆者:うっちー(基板担当)


目次

ハードウェア構成

概要

"Trinity Bullet"のハードウェアは以下の3つで構成されます。

  1. パネル制御部
  2. パネル本体
  3. HPゲージ&残り時間表示ディスプレイ

各部の詳細については後述。

設計

使用CAD : Autodesk Eagle 9.4.1

学生時代からEagleに使い慣れているということもあり、今回もこれを使用して設計しました。全体的なこだわりとして、

  • CANバスは等長配線にしている
  • GNDのベタパターンはビアを多数配置して電流量に対して十分な幅をもたせるよう心がけた
  • 電源パターンは十分なパターン幅を確保している

また、設計した基板は中国深センの基板外注サービス"Elecrow"を利用して外注しました。100mm×100mm以内の大きさであれば5枚4.9ドルからできるので、コスパも十分です。

パネル制御部

  • Panel_MASTER基板で構成される
  • パネル本体およびHPゲージ&残り時間ディスプレイの制御を行う
  • Wi-Fi搭載マイコン"ESP32"を使用し、PCとのデータ送受信を行う
  • ゲームプレイ時の効果音(パネル押下音、カウントダウンなど)を鳴らす

基板:Panel_MASTER

Panel_MASTER基板は、ESP32とパネル基板、HPゲージ&残り時間表示ディスプレイとの通信を行います。

通信インターフェイス

CAN (パネル制御部 - パネル本体 間)

CAN(Controled Area Network)は、差動伝送を採用しており、耐ノイズ性に優れた通信プロトコルです。Trinity Bulletでは、パネル制御部と各パネル間の通信に採用しています。

  • CANを採用したわけ
    • パネル本体からパネル制御部まで配線の距離が長くなっても安定した通信を実現したい
    • ゲーム中パネルに強い衝撃がかかるので、ノイズに対しても強い通信方式が良い

I2C (パネル制御部 - HPゲージ&残り時間ディスプレイ 間)

I2C(Inter-Integrated Circuit)は、オープンコレクタでデータ伝送を行うため、長距離の通信には適していません。そこで、高ドライブ電流I2Cバスバッファ"PCA9600D"を使用しました。

パネル本体

  • Panel_main基板・パネル接点・RGBシリアルLED(Neopixcel)で構成される
  • 各パネルごとにこれらが搭載されるため計25セットある。製作の作業量がエグい。マイコンやCANコントローラなど比較的高価なICもそれだけ用意する必要があるため、かかったお金もエグい。

基板:Panel_main

  • 回路図

  • 概要

    • マイコンには、AVRマイコン"ATmega328"を使用。16MHzの外部クロックで動作し、Arduinoブートローダを書き込んでいる
    • パネル制御部と通信するためのCANコントローラ回路を搭載 (後述)
    • DIPスイッチでPanel IDを設定できる。パネルごとにプログラムの書き換えが不要になる
    • パネル接点の入力を安定するためヒステリシス付きコンパレータ回路を搭載 (後述)

CANコントローラ回路

各パネルに搭載されたAVRマイコンと、パネル制御のマイコン(ESP32)の通信に用いる回路です。

  • CANコントローラIC:MCP2515
  • CANトランシーバIC:MCP2561

以上のICを使用しました。MCP2515は8MHzの外部クロック駆動としました。AVRマイコンとSPIバスで接続されています。CANバスは差動伝送となるため、基板上で配線長に差が出ないよう、等長配線としています。また、終端となるPanel_main基板(Panel ID = 25)には、終端抵抗120Ωを実装します。

パネル接点入力回路

パネルが押下の検出はパネル内部に仕組まれた単純な接点で行なっていますが、チャタリングの影響が大きくなる可能性があったため、ヒステリシス付きコンパレータ回路をマイコン入力の前に組み込みました。ヒステリシスを設けることで、パネル入力に多少の電圧変動があっても、出力を安定させることができます。

HPゲージ & 残り時間表示ディスプレイ

  • 自分のHPと残り時間を表示する。
  • Panel_MASTER基板からI2C通信によりHPと残り時間のデータを逐次受信し、データをそのまま表示する。
  • 長距離でI2C通信を実現するために高電流ドライブI2CバスバッファIC"PCA9600D"を採用

基板:HPTLDB_MPU

  • 回路図

  • Panel_MASTER基板からの残り時間・HPのデータを受信する

  • HPゲージはフルカラーシリアルLED(Neopixcel)を使用

  • 残り時間表示は、3ケタの7セグを7セグドライバ"TM1637"で制御

高電流ドライブI2Cバス

  • 高電流ドライブI2CバスバッファIC"PCA9600D"を使用し、長距離でのI2C通信を実現
  • Panel_MASTER基板との接続にイーサネットケーブルを使用

基板:HPTLDB_7SEG

  • 回路図
  • 超大型7セグ1ケタにつき1つの基板を使用
  • 基板を並列に接続して7セグの桁数を増やせる(最大6ケタ)
  • 超大型7セグは12Vで点灯するので、TM1637単体では電流が足りないので、ドライブ回路を搭載

7SEGドライブ回路

TM1637はアノードコモン7セグ用のドライバICなので、各ピンはオープンドレインとなっています。そのため無理矢理インバータIC(74HC14)とFETでスイッチングしています。

電源回路

  • パネル基板は基本的にDC5Vで動作しますが、基板の数が25個もあるため、基板ごとに電源回路(3端子レギュレータ等)を搭載すると、それだけでかなりのコストがかかります。そこで、高出力のDC/DCコンバータに集約しました。
  • Panel_Console基板により、DC12V主電源、パネル基板、パネル制御部、HP&残り時間ディスプレイの電源をリレーで入り切りし、コンソールで操作できるようにしました。
  • リレー入の状態を保持するためにラッチ回路を使用。(モーメンタリタイプのスイッチを使用できる)
  • スイッチに付いたLEDによって各回路のON・OFF状態を示す。

基板:5VPB

  • 回路図
  • ACアダプタのDC12Vを入力し、パネルやパネル制御部で使用するDC5Vを生成する基板
  • 最大3A出力のDC/DCコンバータ"HRD5003"を使用
  • ノイズ除去性能に優れた導電性高分子アルミ固体電解コンデンサー(OS-CON)を使用

基板:Panel_Console

  • 回路図
  • この回路では不具合が発生しました。(後述)
  • 大元の12V電源、パネル、HP&残り時間ディスプレイ、パネル制御部の電源をそれぞれ個別に入り切りするためのリレーを搭載(大元の12V電源のみ外部パワーリレーに接続)
  • ラッチ回路によってスイッチを押した状態を保持する(モーメンタリタイプのスイッチを使用した)
  • スイッチのLEDを点灯させる
  • 手動動作用のトグルスイッチを搭載

ラッチ回路(トランジスタ)

※ ON31~ON34 : ONスイッチ接続コネクタ (31,32:スイッチ , 33,34:LED) ※ OFF31~OFF34 : OFFスイッチ接続コネクタ (31,32:スイッチ , 33,34:LED)

  • 動作
    • ON32がHIGHになる(ONスイッチ押下)と、FET2がONとなり、リレーがONとなる
    • ラッチ回路によってON32がLOW(ONスイッチ離し)となってもFET2はONのまま
    • OFF32がLOW(OFFスイッチ押下)となると、FET2がOFFとなる
  • この回路は大元の12V電源、パネル、HP&残り時間ディスプレイ、パネル制御部用に4系統ある。それぞれの電源を個別に入り切りできる
  • 不具合等
    • どれか一つのONスイッチを押した瞬間に全系統のリレーが動作してしまう
    • どれか一つのOFFスイッチを押した瞬間に全系統のリレーが釈放してしまう
    • 本番では手動操作用に用意したトグルスイッチ(回路図SW3)を使用した
    • EMERGENCYスイッチ(緊急時に瞬時に全系統をOFFできる)が未実装
  • 参考:EDN Japan -電池動作機器の電源オンを確実にする-

さいごに

 今回は、学生時代を含めても、今までで一番ハードウェア的に複雑で、信頼性も要求されたと思います。CANやI2C(長距離)など初めての試みが多い中で、成功と言えるレベルまで達することができたのは本当に良かったです。しかし、最後までCAN関連の多少のバグは残ってしまっているので、原因を追求して完璧にできたらなと思います。

 ただ、動作テストなどで基板を発注したあとに回路図のミスを発見し、修正作業(しかも大変)が発生したり、パネル本体へ基板を固定する方法を明確にしていなかったので、メンテ性が最悪になってしまったなどの反省点もあります。学生時代から繰り返してばっかりなので、いい加減なおさなきゃですね...。

 あとは、パネルごとに基板を作ったので、作業量が膨大になってしまいました。更に、それに伴って部品点数も増えたことから、電子回路だけでも相当なコストがかかりました。次回は自分を苦しめないためにも(笑)、作業性やコストの事も考えながら作っていきたいと思います。

 最後に、さまざまな困難を乗り越えてTrinity Bulletを一緒に作り上げたメンバー、プレイしてくれた方々を始め、支えてくださったすべての方々に感謝申し上げます。

 次は、今回よりももっと、作って、遊んで楽しいものを目指します!

⚠️ **GitHub.com Fallback** ⚠️