ArkEdge Space Blog

株式会社アークエッジ・スペースの技術要素多めのブログ

インターンで衛星に搭載する基板の設計から試験までを経験させてもらった話

こんにちは。 株式会社アークエッジ・スペースのインターンで、 半年間働いていた id:gpioblink です。

今回は、インターンの振り返り記事ということで、私が半年間取り組んできた課題の中から、「人工衛星に搭載する基板の設計とその試験」について紹介します。

私は宇宙の知識ゼロから入ってきた人間なので、働く上で宇宙環境特有の現象や用語など色々と分からないことがありました。できるだけ宇宙に関することは詳しく説明していきます。最後までお付き合いいただけると幸いです。

f:id:gpioblink:20220401225208j:plain

インターンの参加動機

まずは本題に入る前に、インターンの参加動機について説明させてください。

私は今までWeb系のインターンに複数社参加してきましたが、私の興味が「低レイヤー」と「それ以外」の間をつなぐ部分にあることに気づき、ハードウェアを扱う会社を見てみたくなりました。

このことに気づいたのは大学の夏休みでした。経験上低レイヤの仕事は短期間で出来るものではないと感じていたため、長期で関わりたいと思っていました。そこで大学の制度にある特別休学を使い、大学を休んでフルタイムで参加しました。

そんな中、アークエッジ・スペースでは衛星を開発していて、低レイヤーの仕事も多くあると知り、インターンに参加させてもらうことにしました。

個人的な目標は以下の通りでした。

  • そもそも低レイヤーの仕事には、どんな業務があるのか知りたい
  • 低レイヤーの仕事をする場合の働き方を知りたい

取り組んだタスクの説明

設計する基板について

今回私が開発したのは、外付けのOBC (On-Board Computer) ボードに電源供給をしたり他基板との通信をするためのインターフェースを提供をしたりする基板になります。

OBCボードは、宇宙機に搭載するコンピュータボードです。 簡単に言えばArduinoのようなもので、CPUや周辺機器があり、そこに多くの入出力インターフェースが接続されていて自由に使えるイメージです。

私はそのOBCボードに取り付ける、Arduinoでいえば、入出力インターフェースに接続し機能を提供する、シールドを開発したことになります。

ただし、宇宙機では、たくさんのセンサや制御基板に接続するため、多くの入出力インターフェースが必要です。 Arduinoやラズペリーパイに使われるようなマイコンやSoCでは、I2CやUARTなどのインターフェースのために専用回路が載せられていますが、専用回路の数が決まっていて自由度が高くありません。 そこで、今回開発した基板ではFPGAベースのOBCボードを搭載することで、UARTをたくさん載せるなどの自由な構成が可能になっています。

今回は、Space CubicsさんのOBCボードを載せるための電源供給や他基板との通信をするためのインターフェースやペリフェラルが載った基板を作りました。

f:id:gpioblink:20220401225059j:plain

この写真で、上のFPGAが載っている基板がSpace CubicsさんのOBCボードで、 下の、ねじ止めされていて、たくさんのコネクタがある基板が、私が開発したインターフェース基板です。

このSpace Cubics OBCは、様々な衛星で使えるよう汎用的に設計されています。 そのため、基板から直接インターフェースが提供されていません。下部にある80pinの基板間コネクタから別の基板に接続し、インターフェース等を提供するように設計されています。

このインターフェースを提供する基板が、今回開発する基板となります。

以下、この下の基板を「下駄基板」として話を進めていきます。

基板の搭載場所

この基板は、6Uサイズ(30x20x10cm)の小型衛星に使われる基板の1枚です。 以下の図(これは実機ではなくモックアップ)で縦に複数枚載っている基板のうち1枚が、今回搭載する下駄基板になるイメージです。

f:id:gpioblink:20220401225211j:plain

なぜこのように基板が複数載っているのかというと、コンポーネントごとに複数の基板を搭載したほうが、 複数人での開発や、他社のモジュール等の導入がしやすく開発しやすいためです。 また、小型衛星の限られたスペース活用の観点からも複数枚に分けて開発されています。

以下の図の中では、下駄基板は「ミッション」に関する基板となります。

f:id:gpioblink:20220401225214p:plain

そのため、実際に搭載するときは、このように複数ある基板の一枚として載せる形になります。

開発する基板の考慮点

今回基板を作るに当たっては、以下のようなことに注意する必要がありました。

  • まわりのインターフェースに沿った下駄基板を開発する
    • 設計前に必要なすべての情報が出揃っているわけではないため、他のコンポーネントなどと調整し、徐々に使用を固めていく必要がある
  • 電源には過電流保護機能を搭載し、宇宙ならではの放射線問題等への対処を行う
  • 各インターフェースにはバッファ用のICを載せ、過電圧・電流からOBCボードを保護する機能を搭載する
  • 宇宙では打ち上げ後に回路の修正ができないため、地上で十分な動作試験をする

この問題にどう向き合っていったかは、ここから時系列で作業内容を説明しながら、記事中に記載していきます。

作業内容

どのような内容の基板を作るか明確にする

そもそも、最初の段階では、この下駄基板にUARTピンをいくつ出すか、I2Cピンをいくつ出すかといった基本的なことも未決定でした。

まずは、メンターの柳田さんや id:meltingrabbit さんにお願いして、ある程度の仕様検討をしてもらいました。

ここでの仕様検討で決定されたのは、細かいICの型番レベルではなく、UARTやGPIOの数といった、ざっくりとしたペリフェラルの要件でした。 そのため、この仕様を元にコンバータICやバッファIC、電源ICなど設計に必要な細かい素子は私が選定する必要がありました。

宇宙環境で使える基板ということになると、真空上での発熱や放射線によるラッチアップで壊れないかなど、通常の回路設計よりも様々な検討するべき要素があります。過去の事例も共有してもらいつつ、素子を選定して行きました。

製造まで素子の挙動を試せない分、データシートを注意深く読む

今回開発する基板は、パーツや他の基板がまだ手元に一切ない状態でした。そのため、データシートを読んだり、不足する情報を尋ねたりして、情報を集めていきました。

個人で基板設計する際は、設計の前に実物を買っていて、ブレッドボードに挿して使ったことのあるケースが大半でした。例えば、ピンアサインが間違えていればブレッドボードの段階で分かっていて、基板は常に動いている実態を元に開発していました。

しかし、実際は、発注したとしても、素子を選定してから手元に来るまで時間のかかる素子があったり、 素子が届いたところで、簡単に試せない足のない素子だったりします。基本はデータシートのみを頼りに注意深く設計しなければいけません。

今回の基板では、取り付けのための穴が空いていますが、届くまで実物を確認できないため、この情報を集めたりなど並行して設計に不足する情報の収集も行っていきました。

バッファICの準備

宇宙環境に限らず、UARTやGPIOのような外部と接続するICでは、ノイズや過電流、過電圧から回路を保護するため、バッファIC等を挟むべきです。私は、当初全くバッファICの効果を知らずに、そもそもバッファICが何をしているかの下調べから始めました。

バッファICの役割を1つ紹介すると、バッファICのIOピンには基本的に、ESD保護回路(クランプダイオード)が搭載されています。 最大定格にInput Diode CurrentやOutput Diode Currentといった記載があると、規定以上の電圧が流れた際に電流をVCCやGNDに電流を逃がす機能があります。これにより、ノイズや別基板の故障等で発生した電圧から接続されている基板を保護できます。

f:id:gpioblink:20220401225217p:plain

(https://www.ti.com/lit/ds/symlink/cd74hc4049.pdf , https://training.ti.com/jp/clamp-diodes?context=1136218-1139414-324432 を参考に作成)

このような保護機能のあるICを探したり、余裕を持った最大定格のパーツを選定するなどして、出来る限り障害に強く、障害が発生しても影響範囲ができるだけ狭くなる設計に勤めました。

電源部分の設計

特に、電源を生成する素子であるスイッチングレギュレータを実装するための計算は、時間がかかるものの1つでした。

また、計算が出来たところで、キャパシタの容量やコイルのインダクタンスさえ合っていれば、どの素子を選んでもいいということはありません。温度特性、DCバイアス特性、最大定格電流など、様々な条件が宇宙環境や回路の要件に合致しているか調べたうえで素子を選定する必要があります。

そのため、データシートを読み、インターネット上の資料を調べながら検討しました。

最終的にはそこまで複雑な計算をする必要はありませんでしたが、

  • 動作周波数の決定
  • インダクタの選定
  • Cin(入力コンデンサ)、Cout(出力コンデンサ)の選定
  • 出力電圧決定のための抵抗の選定

等を時間をかけて丁寧に行なっていきました。

計算のログは、社内Wikiにまとめ、情報を残すように勤めていきました。

レビューを受け、基板設計を修正

私はこれまでも趣味レベルでは基板設計をしていましたが、業務で使うような基板設計は初めてでした。そのため、ノイズ対策など、基板設計をする上で分からないことが数多くありました。

初めて基板設計したときは、考えて設計したつもりではありましたが、完成して社内で基板設計の経験がある、 柳田さんや柿原さん、船曳さんに一度見てもらったところ、多くの改善点が見つかりました。

改善点の内容は、「部品の配置位置が良くなく、配線が基板の一部分に密集している」といった初歩的な問題から、「誤作動の防止のためにスイッチングレギュレータの動作周波数を変更する」といった技術的なものまで様々ありました。

アークエッジ・スペースでは、ソフトウェアに関わらず、ハードウェアの作業でもGitHubのissueで管理しています。 随時「〇〇を直す」というような細かいissueを立てていき、抜け漏れがないように修正作業をしていきました。

また、もともと社内で基板設計をされていた方々に、ノイズ対策や基板設計のベストプラクティスについての情報を紹介していただき、参考にしながら最終的な基板を開発していきました。

このような情報は次に新しい基板設計者などが来た時に参考になるよう、随時社内Wikiにもまとめて行きました。

レビューを受けた基板で1回目の発注

ここまでで、レビューも終わり、ひととおり私の最初の基板設計が完了しました。

まだ、電源側の過電流保護機能などは実装しきれていませんでしたが、一部未確定の仕様もあったため、動作試験をかねて業者に基板発注や製造をお願いしました。

このとき、メンターの柳田さんが言っていた、「1回で完璧に動く基板はまずできないから、最初から2回サイクルを回すことを前提とする」という話は印象的でした。正直、丁寧に選定しすぎて時間を掛けすぎたという気持ちもあり、全体のバランスを考える必要があったことに気づきました。

当たり前ですが、ソフトウェアと違い、物理的な物が必要なハードウェアは設計してすぐ試験というわけにはいきません。

実装から発注まで約2週間のリードタイムがあり、ソフトウェアの開発用にSpace Cubics OBCから全てのピンを出すブレイクアウトボードを開発したりなど、別の作業をしながら準備を進めていきました。

f:id:gpioblink:20220401225111j:plain

実物を使った試験

2週間後、実物がオフィスに到着しました。すぐに基板にSpace Cubics OBCを挿してアプリケーションレベルの動作チェックができるわけではなく、試験時の電源やテスター確認をするための用意をしたうえで、機能の確認を行っていきました。

f:id:gpioblink:20220401225127j:plain

今回の試験は初回のこともあり、ケーブルの図等も書きながら試験に必要な資材を揃えていきました。

個人で実験といえばブレッドボードでジャンパ線を出してということもありますが、作業の効率化や確実性のために、今回の基板ではコネクタ類に関して一度D-Subに出してから試験する形を取りました。 まずはこのケーブルを作成する作業に2日ほどかかり、地味に大変な作業でした。

また、このケーブルを作成する中で、基板設計の仕組みの中には、まだまだ自動化できる対象が多そうだなという印象を強く持ちました。これについては、後の感想でまとめて述べようと思います。

f:id:gpioblink:20220401225140j:plain

あらかじめ作成しておいたチェックリストを元に、電源ピンとGNDがショートしてないかを始め、12Vから生成している3.3Vや5Vの電源が正しいか、各UARTやGPIOの素子は正しい挙動をしていそうかを確認していきました。

すると、念入りに設計を行ったつもりではいたものの、次のような問題が発生していました。

  • 業者に発注する際のパーツリストに間違いがあり、実装された抵抗値のミスが発覚し手作業で修正した
  • 一部のコンバータICの素子の動作電圧を間違えており、素子を外して対応した

この問題に関しては、問題のあった個所をドキュメントにまとめつつ、2サイクル目の基板で修正しました。

他にも、電源に関する波形についてオシロでログを残したり、ソフトウェア側を担当している id:koba789 さんに作ってもらったツールを適用したりしてアプリケーション経由での動作テストを行うなどして、ひととおりの試験を済ませました。

2サイクル目の基板設計

2回目の基板設計もレビュー時と同様に、修正すべき個所にissueを立てつつ進めていきました。また、修正と同時に、1サイクル目で未確定だった細かい安全対策についても検討していきました。

この中で、私が悩んだのは、宇宙ならではの放射線問題への対応でした。

宇宙では、放射線などによりICがいきなり誤作動を起こし、高電流が流れる現象であるラッチアップが起こる可能性があります。

高電流を流さないという意味では、例えば、消費電力や電圧降下を無視すれば、全てのバスに数十オームくらいの抵抗を入れるなど、考えられることは数多くあります。

ここでは、安全にとは言いつつも、どこまで考慮するべきかを定める必要がありました。

チームを超えて、中澤さんなど通信事業部の専門家も交えた議論の上対処を決定しました。 最終的にはこの基板に電源を供給する、上流の別の基板で大電流からの保護があることを踏まえつつ、 下駄基板での安全対策の範囲を明確にした上で対処を決定しています。

2サイクル目の試験

1サイクル目の基板実装が完了し、2サイクル目の試験を実施しました。 1サイクル目と同様の方法で設計を進め、特に大きな問題等発生せず、全ての機能試験も問題なく完了しました。

感想

ただやるだけのタスクではなく、コミュニケーションや細かい検討が重要だった

全体を通して、最初は、「基板設計のタスク」と言われたら、素子が決まっていてデータシート通りに配置していくイメージでしたが、実際はそうではありませんでした。曖昧な要件を元に、関連する知識や経験を元に素子を選定したり設計したりする必要がありました。

また、一度宇宙に飛ばしたら回路を修正できないこともあり、設計については深くまで議論を進めていきました。例えば、GPIOの信号用の抵抗1つ取っても、プルアップやプルダウンのどちらにするかの議論があったりしました。作業内容で書いた電流制限の話は、上流の基板の仕様など、今回の担当範囲以外も分かっていないと進められないものでした。他のチームが作った部分や、熱制御や姿勢制御といった別の基板についても考える必要があります。

そのため、ハードウェア設計は、ただ目の前にあるものを作るというイメージではなく、まわりの基板や環境もマクロな視点で全体像を把握したうえで、ミクロな各素子レベルの基板設計が初めてできるのだなと言うことが分かりました。

ソフトウェア開発だと、読みにくいとしても最悪はコードをたどれば、論理的にはそのコードの意味が分かると思います。 しかし、回路図や基板は、成果物としてのパラメータの情報しか持っていません。思考過程の部分が最終の成果物から失われている分、より周りのことを把握して設計を進める必要があると感じさせられました。

今回、周りと議論したり、データシートを深くまで読んだり、計算をしたりしながら、今まで私が経験していなかった、業務での基板設計を体験することができました。

ハード界隈にはまだまだ手作業でやっている処理が多かった

今回、作業していて強く感じたことの1つとして、低レイヤーではまだまだ自動化されていない要素が多いなという感覚があります。

特に今回は、基板の素子管理や発注管理にも携わらせて頂いたのですが、自動化できそうだが手作業といった処理が多い印象を受けました。

例えば、回路設計CADの出力する素子リストのCSVファイルを、会社独自のスプレッドシートに書き直して管理を行っていました。これはCADのメーカーやパーツの販売者ごとに様々なフォーマットの情報があり、統一して管理しにくいという理由もありますが、特に素子管理には、自動化できそうなものの手作業といった処理が多かったです。

素子管理に手作業が多いのも、基板設計業界全体の問題で、何人かの電子回路系のビジネスをしている知人に聞いても、スプレッドシートか、あまり使い勝手のよくない社内システムで頑張っているかでした。

これまでは、パーツが足りなければ買えばすぐ届くのが当たり前でしたが、今は世界的な素子不足も相まって、一般的な素子でも半導体不足で納期が何か月ということもざらにあります。そのため、素子管理を確実に行う需要は確実に高まっていると思います。

今回の作業を通して、今回は時間がありませんでしたが、今後、個人でも低レイヤー系の作業をしていくときは、社会全体の課題を解決できるような手法を意識しながら、開発時に必要と思ったツールを作るなどして、日頃の開発を行いたいという気持ちになりました。

ちなみに、他の低レイヤー系の作業として、ケーブルのピンアサイン情報もスプレッドシートで管理されていましたが、こちらに関してはアークエッジ・スペース社内で指定のフォーマットでピンアサインを記載することで、自動で配線情報が表示される仕組みの開発が進んでいます。私もまた機会があればこのような作業に携わりたいと考えています。

目標が達成されたか

最後に、この半年間のインターンを通して、記事の冒頭に書いた、私の目標は達成されたのかを見ていきます。

そもそも低レイヤーの仕事には、どんな仕事があるのか知りたい

今回働いていく中で、予想以上に多岐に渡る仕事があり、私の想像していた低レイヤーの世界が狭すぎたと実感しました。

例えば、メンターであり今回の下駄基板の搭載される衛星のプロジェクトマネージャーをしている柳田さんは、関係各所との調整からから素子調達までこなしていました。ただ作るだけが仕事でなく、基板設計に必要な段取りを整える仕事も数多く存在することが分かりました。

また、直接は関わっていない作業も多いですが、インターン期間中にSlackで議論を見たり、オフィスでの話を聞くなどして、 熱や通信など、私が思いもしなかった様々な低レイヤーの検討項目や作業があることを知ることが出来ました。

もしパーツリストがある状態からの基板設計だけやりたい、ハンダ付けだけやりたいであれば、専門の業者があるのでそこに行くべきなんだろうなと感じています。実際、今回も基板製造や素子のハンダ付けは専門の業者に任せています。どこかで聞いた、「専門の業者があるというのは、そこに需要があるということ」との話に実感を持ちました。

結果、どんな仕事があるか知る意味では、正直、私の知らないほどの多岐の世界があるというのが結論です。ただし同時に、アークエッジのような企業で働けば、包括して低レイヤー関連の様々な業務に携われるんだという肌感を掴むことができました。

低レイヤーの仕事をする場合の働き方を知りたい

まず、要件の定義から最終的な試験まで一通り経験させてもらえたので、基板設計者として働くことが、どういうことなのか知ることができました。その中で、基板設計のタスクでは、一口に作ると言っても、仕様をデータシートを見たり他社に相談するなど、コミュニケーションの時間も思っていた以上に必要になることが分かりました。

また、ソフトウェアの様に簡単に試せない分、計算したりシミュレーションを作るなどして、実物は数回の製造試験のサイクルで正しく動くように調整するのが重要なことが分りました。

さらに、この記事では基板設計にフォーカスしましたが、実際には、組み込みLinuxの調査や衛星搭載ソフトウェアのLinux移植のようなタスクも行っています。様々な業務を通して、ここは一人で進められて、これはチームで議論しないといけないといった、私に求められる行動についても理解することができました。ある意味、半年間フルタイムで勤務したこともあり、インターンで社会人1年目を経験させて貰ったような感覚です。

結論としては、どちらかというと低レイヤーの仕事というよりは、ベンチャーで働くという意味にはなるかもしれませんが、ハード系とはいっても「下回りだから上流から言われたことをただやるだけ」ではなく、様々な思考や提案をしながら、私に主体性を持って働ける仕事なのだなと思いました。

働く前は、上の要求はアプリケーションで決まっていて、下の要求も素子レベルで決まっていて、その中間のクリエイティブさもない単純作業という印象を持っていた面がありましたが、全くそんなことはありません。

それどころか、それぞれの社員が趣味や研究などで、得意な技術を持っていて、それぞれが議論や雑談をする上でそれを生かし、実現していくような働き方だったのが印象的でした。

実際、部署を超えて、基板製造では基板設計の経験が豊富な通信事業部の中澤さんに助けて貰ったり、 ソフトウェア開発でCIが欲しくなったときは、インフラに強いインターンid:sksat に助けてもらったりもしました。

これを受けて、私も中途半端になっている組み込みLinuxの技術をチョットワカルと言える程度まで育てていこうという気持ちになり、今後の私の方針を考えることができました。

最後に

今回は私は、基板設計だけでなく、社内にある様々な案件に携わらせて頂きました。

ソフトウェアからハードウェアまで、多岐に渡る仕事があるのが、この会社の魅力だとも思っています。

インターンシップ枠の求人もありますので、興味があればぜひ皆さんも応募してみてください。

herp.careers