ロケット電装の作り方(4)
前回→
2.3.2 通信系統の設計
続いて通信系統の設計を行っていく。マイコンとセンサ、記録装置、コン
ピュータなどの間で用いられる通信方式には以下のようなものがある。
- I2C(アイツーシー、アイスクエアドシー) 9 軸、気圧センサ等
- SPI(エスピーアイ) SD カード
- UART(ユーエーアールティー、ユアート) GPS、通信装置
- USB(ユーエスビー、Universal Serial Bus) コンピュータとの通信
- シリアル通信 コンピュータとの通信
一般的に呼ばれている名称で記載したが、UART は定まった規格でなく部
品の名称であるとか、USB は通信方式の規格ではないとか面倒な話がある
ので専門家や詳しい人、細かいことを気にする人と話すときは注意する。通
信方式については説明事項が多いため重要なものについて個別に解説を加
える。
2.3.2.1 I2C
主にセンサで用いられている通信方式である。正式名称は I²C(アイス
クエアドシー)だが簡便に I2C(アイツーシー)と表記呼称されている。
通信の主である 1 つのマスターとそれに応答する複数のスレーブという
用語を用いて通信方向を表す。特徴はスレーブを数珠つなぎに配線でき
るため特にモジュール数が多い場合に配線本数が少なく済むこと、マス
ターが通信タイミングを指示できるためプログラミングが容易なことな
どである。逆に他の通信方式に比べて通信速度はそこまで高速ではない
(読み出すデータ量は少ない場合が多いので問題にならないが)。また数
珠つなぎにしたセンサのどれかが故障するとそれ以外のセンサとも通信
ができなくなるといったデメリットがある。
図は STM32 マイコンと 9 軸 MPU9250、気圧センサ BMP180 を I2C
で接続した例である。詳しい仕様は Wikipedia 等を参照していただきた
いが、I2C で必要な配線は信号のタイミングを伝える SCL(クロック)と
データを伝える SDA(データ)の 2 本のみである。ただし図のように 2
本とも 1k~47kΩ程度の抵抗でプルアップしておく必要がある。また当然
だがセンサの電源端子と GND 端子に適切な電圧の電源を供給する必要
がある。I2C ではモジュールごとにアドレスと呼ばれる番号が決まってい
る。また各モジュール内にレジスタという読み書きできる場所がある。モ
ジュールのアドレスとどのレジスタがどういう役割を持っているかはデ
ータシートもしくはレジスタマップに記載してあるのでそれを参考にす
る。
ここから先は仕組みの話なので知らなくても使うことはできるがデバ
ッグで役立つかもしれないので読んでおくことをすすめる。I2C では初め
にマイコン(以後マスター)が送信開始を伝える。すると接続されている
全モジュール(以後スレーブ)が受信状態に入る。続いてマスターがアド
レスを送信する(名前を呼ぶ)と、そのアドレスを持っているスレーブが
ACK と呼ばれる応答を返す。ACK を受け取ったマスターはレジスタの場
所と、その場所を読み取ろうとしているのか書き込もうとしているのか
を送信する。読み取りの場合、スレーブはそのレジスタの値を送信する。
書き込みの場合、スレーブは続けてマスターから送られてきた値を指定
のレジスタに書き込む。これによってアドレスが重複しない限り多数の
モジュールと 2 本の線で通信ができる。
2.3.2.2 SPI
SPI は I2C の欠点である速度の遅さを改善するためにできた規格であ
り I2C、SPI 両対応となっているモジュールも多い。相違点としてアドレ
スを送信してスレーブを呼び出すのではなく SS(スレーブセレクト)と
いう端子に信号を送って呼び出すようになったのと、データの送信と受
信を別の線で行うようになった。そのため合計で CLK(クロック)、MOSI
(マスターアウト・スレーブイン)、MISO(マスターイン・スレーブア
ウト)、SS で合計 3+モジュール個数分の配線が必要になる。ちなみに速
度は最大で I2C のおよそ 3000 倍程度である。電装における主な用途と
しては microSD カードへの書き込みに SPI が使われている。
図は MPU9250 と microSD カードを SPI モードで接続した例であ
る。プルアップは必要ない。SS はモジュールによって名称が異なるので
注意する必要がある。また SS はマイコン側に専用の端子がある場合も
あるが、電圧の HIGH、LOW 出力ができればよいのでソフトウェアから
制御する場合は空いている GPIO などを使う。
2.3.2.3 UART
非同期シリアル通信と呼ばれる方式で I2C や SPI と異なりモジュール
一つに対して受信(Rx)と送信(Tx)の 2 本ずつを配線する必要がある。
またマスターとスレーブという関係ではないので、データが突然送られ
てくる。そのためソフトウェアではデータを受信するたびに割込みをか
け次のデータが送られてくる前に割込みを完了させてまた待機、という
極めてハードウェアプログラミング特有の処理をすることになる。UART
は他の通信方式と違ってお互いの通信速度(baud rate ボーレート)を合
わせ てやる必 要がある。デ ータシー トに 9,600bps、19,200bps、
115,200bpsなどと記載してあるのでデータが文字化けしていたら確認し
て正しい速度を設定する。
図は STM32 マイコンに GPS/GNSS モジュール AE-GYSFDMAXB
と 920MHz 帯通信モジュール IM920 を UART で接続した例である。マ
イコンの送信線はモジュールでは受信線となるので Tx は Rx に、Rx は Tx
にクロスして配線する。
2.3.3 筐体の設計
筐体は少しイメージしづらいかもしれないが、基板や電池ボックス、配線
を固定し外部からの衝撃や接触から保護するためのものである。基板はその
ままの状態では配線が露出しているので、金属片を基板上に落としたり金属
製のテーブルの上に置いたりするとショートしてしまう。また配線が固定さ
れていないとどこかに引っ掛けた時に力がかかって断線する恐れがある。ま
た力をかけなくてもケーブルが揺れ動くと接合部分が劣化していく。ロケッ
ト電装の筐体はロケットの構造に安定して固定され、発射や着地の衝撃に耐
える強度を持つ必要がある。また基板で荷重を支える構造にならないように
注意する。筐体は基板の枚数や機体のサイズなどに制約を受けるのである程
度製作の見通しがたってから設計しても良い。途中で設計を変更する必要が
あるかもしれないので 3D プリンタで製作するのが手軽である。
2.4 ソフトウェアの設計
2.4.1 フローチャートの設計
フローチャートとは打ち上げのどのフェーズ、どの条件でどのような動作
をするのかを定めたものである。
図は海打ち機体のフローチャートである。条件分岐のひし形、動作の長方
形などを使い分けて設計していく。処理の途中で問題が生じたときにも無限
ループや未定義な動作をさせないようにする。上の図はかなりおおまかなフ
ローチャートだが、さらに詳細に具体的な処理について記載したフローチャ
ートを作成しても良い(多くの場合最も詳細なフローチャートはプログラマ
の頭の中にある)。また電装には様々な処理があるがそれらの優先順位を確定
させておく。最も重要なタスクはパラシュートの開放機構の駆動である。次は
機体回収のための GPS 位置送信である。逆にセンサの計測値の記録の優先度
はそこまで高くない。環境によっては現在実行中のタスクより優先度の高い
タスクが発生した場合に現在のタスクを中断して優先してタスクを実行する
機能を持つものがある。例えば RTOS や NVIC などである。さらに何度も繰
り返されるセンサのデータ取得や記録などは、その処理をどのくらいの頻度
で(なんミリ秒ごとに)行うのかも決めておく。
2.4.2 プロトコルの設計
プロトコルとは通信やデータを記録するときの規則のことである。通信や
記録をする際に必要以上に情報を入れようとすると時間がかかってしまう。
かといって数字の羅列だけでは人間が見た時に読みづらい。また PC でファイ
ルを開けるようにするには PC が対応したファイルシステムに従う必要があ
る。そのため SD カードの保存には Fat(File Allocation Table)のライブラリ
を用いる。拡張子としては、カンマ(,)区切りで数値表を表す CSV 形式が簡
便である。
次回→