こんにちは、ものづくり担当のうこ(@ukokq)です。 先日、無事にプロトアウト1期生が卒業されました。おめでとうございます! そこで今回は、プロトタイピングからさらなる量産へつながる第一歩として、自分だけのオリジナルマイコンボードを製造する方法を解説してみます! ある程度電子回路がわかる人向け(中級レベル)の内容となりますのでご了承ください。

PCBAのすすめ

PCBAとは「Printed Circuit Board + Assembly」のことで、日本語に直すと「プリント基板 + 組み立て」という意味になります。

1

ブレッドボード上などでプロトタイピングをしていて、いい回路ができた! この回路を量産したい! と思うことはありませんか?
こういうときに、ブレッドボードのまま大量に作って販売や配布をするわけにはなかなかいきませんよね。そこで、部品の位置と配線を確定して貼り付けてしまった、その「いい回路」専用の基板を作るという方法が考えられます。

2

このように、確定された回路の配線が記録されている基板のことを、一般的に「プリント基板」(PCB)と言います。
プリント基板は1枚の板状の基板のことだけを指し、自分で薬品を使って生基板からプリント基板を作成するか、専用のプリンタを使うか、あるいは基板製造業者に依頼して作ることになります。現在では、大量生産をする場合は業者に依頼することが主流ですが、小ロット(10枚前後)であっても中国の業者であれば送料込みで数千円から、一週間程度で手元に届くなど、非常に手軽に作れることが魅力です。

3

とはいえ、実際に回路として成立させるためには、プリント基板に部品を実装することが必要となります。
この場合は、自身でプリント基板に部品をはんだづけするか、チップ部品のような細かな部材の場合はリフローという加熱装置を用いた方法で一気にはんだづけするなどのさらなる手間が必要ですが、大量製造の場合はひとつずつ自分でやっていては大変です。また、大量製造しないとしても、リフローのための装置を導入するのは初心者にとっては大変ですし、チップ抵抗のはんだづけも慣れないとなかなかできません。
そこで、プリント基板の製造から部品実装(組み立て)まですべてやってくれる「PCBA」を今回は試してみたいと思います。組み立てなしのPCBと比べて金額や入手までの時間などコストはかかりますが、PC上でデータを作成して送るだけで実際に動作するオリジナルの回路が届くというのはとても魅力的です。

前置きが長くなってしまいましたが、早速作ってみましょう!

全体の流れ

  1. 作りたい基板の仕様を決める。
    今回はESP32をベースとしたマイコンボードを作ってみます。
  2. 基板設計用のソフトウェアを使って回路データを作成する。
    今回はAutodesk Eagleの無償版を利用します。
  3. PCBAを扱っている業者を決定し、そのサービスに準じた製造レギュレーションのチェックを行う。
    今回はElecrowのPCBAサービスを利用します。
  4. ガーバーデータ出力、部品の選定とリストの作成、実装指示書などの製造に必要なデータ類を準備する。
  5. メールまたはWebのフォームから必要データを送り見積もりをもらう。
  6. 代替部品の提案や製造枚数、発送方法などを相談し、確定したら製造を開始してもらう。
  7. 約1ヶ月で完成品が到着!

4

今回作成した基板のパターン図と実際の完成品はこのようなものになります。いきなり作成手順を追いかけてもイメージしづらいと思いますので、こちらの完成品を参考にしつつ読み進めてみてください。

基板設計ソフト「Autodesk Eagle」について

5

回路設計ではよくKiCadが利用されることが多くネット上での紹介事例も多いですが、ここは僕個人の好みでAutodesk Eagleを使ってみることにします。
大きな特徴として、基本的にマウス操作だけで回路設計を進めることができる点と、「AutoRouter」という強力な自動配線ツールが利用可能である点が挙げられます。
ここではPCBAの全体の流れを解説するので、Eagleの細かな操作方法までは触れません。
以下のサイトが、操作方法を非常に親切に説明されているので参考にしてみてください。

今回の環境は、macOS上で動くAutodesk Eagleのバージョン9.5.0となっています。
古いバージョンのEagleや、Windows上で動作させている場合と一部手順やUIが異なる場合がありますので、予めご了承ください。

おおまかな構成を考える

「こんな基板を作りたいな」という夢をどんどんメモしていきましょう。
今回は、以下のような特徴を仕様案として考えました。

  • メインチップにESP32を使いたい
  • PCとの接続はUSB-C端子を使いたい
  • Grove端子を使いたい
    • 3.3Vと5Vの電圧切り替えができたらいいな
  • 最初から基板についている入出力として欲しいもの:
    • 出力:白色LED・フルカラーLED・赤外線LED
    • 入力:ボタンスイッチ・明るさセンサ

そのほか、開発用マイコンボードとして必須の機能を担保するために、以下の要素も考慮します。

実際に設計してみよう!

部品データ(ライブラリ)の準備について

Eagleには「部品ライブラリ」というものがあり、ここから部品ひとつひとつを回路図の上に配置し、結線して、回路を作成してゆきます。
LEDや抵抗といった一般的な部品は、最初からEagleの中に用意されています。しかし、「ESP32」や、シリアル変換ICの「FT231XS」のような特徴的な部品は準備されていません。
そこで、そういった部品のデータをあらかじめ用意しておく必要があります。
部品のデータは自身で作成することもできますが、インターネット上から検索してダウンロードすることができます。

6

SnapEDA | Free PCB Footprints and Schematic Symbols

今回は上記の「SnapEDA」というサービスを使って、以下のパーツのデータをダウンロードして利用します。

  • ESP32
  • USB-C端子
  • WS2812B(フルカラーLED)
  • LDL1117S33R(電源IC)
  • NJL7502L(明るさセンサ)

また、Eagle内のライブラリマネージャからは、公式のオンラインサービスからダウンロード可能なライブラリが表示されます。今回はその中から「SparkFunライブラリ」と「Seeedオープンパーツライブラリ」をそれぞれ全てダウンロードします。これらのライブラリは汎用的なパーツ類が豊富に揃っており非常に有用です。このライブラリ群からは、以下のパーツのデータを取り出して利用します。

  • 赤外線LED
  • ピンソケット
  • Groveソケット

ライブラリマネージャから直接ダウンロード可能なライブラリはこれ以外にもたくさんあるため、必要に応じて好きなだけ取り込んでいってください。
これらライブラリの具体的な取り込み方は後ほど詳しく説明します。

プロジェクトの新規作成

それでは早速Eagleを触っていきましょう!
プロジェクト内には大きく分けて「Schematic」と「Board」の2つの画面があり、まず前者で部品同士の電気的な配線を決定し、回路図を作成します。次に後者に移り、実際の基板サイズを決めて部品を物理的に配置し、具体的なボードの見た目を作成します。
また、先述した部品ライブラリを作ったり、ダウンロードしたものを読み込ませる機能がありますが、こちらは一旦プロジェクト作成をしなければ実行することができません。前準備として「Schematic」の新規作成まで進めましょう。

7

Eagleを開いて、はじめにメニューの「File」→「New」→「Project」と進み、新しい空のプロジェクト(Empty Project)を作成してください。その次に、「File」→「New」→「Scematic」を開き、新しい空の回路図を作成します。さてここで、回路図を作成する前に、まずは必要な部品ライブラリを読み込ませてみましょう。

新しいライブラリの読み込み方

8

SnapEDAで検索する場合は、まずユーザー登録をしましょう。迷惑メールは特に来ませんのでご安心を。登録後、検索画面から例として「ESP32」と打ち込むと、ヒットしたライブラリのリストが表示されます。リストには、似たような型番や亜種などがたくさん表示されるため、自分が使いたいと思っている部品と間違っていないか必ず確認してください。今回のESP32の場合、技適の通っているものと通っていないもの、メモリ容量の違いなどで多数がヒットします。

9

10

今回は、メモリが多めで技適も通っている「ESP32-WROVER-B」モジュールを選択しました。Eagleの部品ライブラリには、部品1点に対し数種類のデータが存在しますが、少なくとも回路図で使う「Symbol」と、パターン図で使う「Footprint」の2つのデータが含まれたものが必要です。上記画像で丸で囲ってあるところにどのデータが含まれているか示されているので、最低限この2つが含まれたデータを選ぶようにしましょう。
どのライブラリを利用するか決まったらダウンロードボタンをクリックし、Eagle用のファイルを選択してダウンロードします。

11

Eagleに戻り、メニューの「Library」→「Open Library Manager」でライブラリマネージャを開きましょう。
ライブラリマネージャのウインドウ内の「In Use」のタブを選択し、真ん中あたりにある「Browse...」ボタンをクリックするとファイル選択ウインドウが開くので、先ほどSnapEDAからダウンロードしたライブラリを開きます。すると部品データとして読み込みが行われます。

12

また、「Available」タブを選択すると、公式のオンラインサービスから直接ダウンロード可能なライブラリが表示されます。今回は先述のとおり、名前の先頭に「SparkFun-」とついているもの(SparkFunライブラリ)と「OPL_」とついているもの(Seeedオープンパーツライブラリ)全てをここでクリックして選択状態にしたのち、右下の「Use」ボタンを押すことでダウンロードとプロジェクトへの自動読み込みを行います。

回路図を作成する

13

「Schematic」画面に戻りましょう。初期状態では、「untitled.sch」というファイルが生成され開いている状態となります。

14

15

基本的な操作としては、左メニューの「Add Part」をクリックして出てくるウインドウから部品を選び、回路図に貼り付け、「Net」で部品を部品を繋げてゆくという操作になります。具体的な操作方法については他の詳しいサイトが多数ありますので、ここではArduino開発環境でよく使われるマイコンボードの基本設計にあたってコツとなるポイントを解説してゆきます。

グリッドと「mil」単位の設定

基板のホール間隔や電子部品の端子間隔は、特殊なものを除き2.54mmであるものが多いです。これはインチ基準で設計されていることが理由であり、2.54mmはちょうど0.1インチにあたります。
そのため、基板設計においても長さの基準をインチにしたほうが都合がよい場合が多いのですが、インチでは単位としては細かい値を示すのに向いていません。そこで「mil」(ミル)という単位がこの分野では利用されることが多いです。

1mil = 1/1000inch = 0.0254mm

この単位を使うと、端子間隔2.54mmは100milに相当します。

16

mil単位で設計を行うために、まず最初に「グリッド」を「mil単位」で設定することで、milの間隔で部品を配置することができます。上記のように設定しておくと、部品がちょうど点状のグリッドにスナップされるようになり、綺麗に配置することができます。ここでは回路図を示しているためあまりmil単位は重要ではありませんが、この回路図設計の次の「パターン図作成」(実際の基板のデザイン)では実際の部品の間隔をこのグリッドで決めていくため非常に重要となります。

共通のVCCとGNDを最初に配置しよう

17

デフォルトで利用可能なパーツの中に、図のような「5V」や「GND」といった表記のものがあります。これは共通のVCC(電源の+)やGND(電源の−)を示すもので、USBや外部電源などからの電源線は、この記号に線を接続することで、共通の電源に電気を供給できるようになります。逆にICなど電源を必要とする素子は、この記号から線を引くことで電源をもらって駆動することができるようになります。
実際にはVCCやGNDは全て接続されているのですが、回路図上でその通りに結線してしまうと非常に見づらくなるため、このように共通の記号で「結線している」とみなしています。

これらの電源系の記号は、Add Partsウインドウの中の「supply1」および「supply2」のグループの中に格納されています。

18

同様の理由で、VCCやGND以外にも、「端子ラベル」を同じに設定することで回路図上では離れていても電気的に結線するように指定することができます。これを行うには、部品末端から「Net」を少しだけ出してから止めておき、「ラベル」で末端をクリックして同じ名前を指定すると結線することができます。

部品サイズや端子間隔を示す「パッケージ」に注意

電子部品には「パッケージ」という外形の規格が存在します。
参考:よく利用される電子部品のパッケージ(DesignSpark)

基板製造においては、ブレッドボード上でプロトタイプの回路を作るときと違い「表面実装部品」を多用することで小型・低コスト化することがほとんどです。表面実装部品といっても、例えば同じ機能を持つトランジスタであっても、サイズの異なるパッケージが多数提供されていたりします。これらは、「Schematic」で編集する回路図の上では等価の記号を持ちますが、のちに「Board」で編集するレイアウト図(実際の部品配置)を行う際に部品のサイズや端子の位置が変わってきます。
部品のライブラリを導入するときは、これらパッケージの違いを意識して行うようにしましょう。

表面実装で最もよく使う部品は、チップ状のLED、抵抗器、コンデンサなどです。これらは、上記のパッケージ一覧とは別で、4ケタの数字によってサイズが示されていることが多いです。 参考:チップ抵抗器 サイズ | 抵抗器とは? | エレクトロニクス豆知識 | ローム株式会社 - ROHM Semiconductor

電源ICを使って電圧を2系統にする

Screen Shot 2019-12-30 at 23.01.06

多くのマイコンでは、電源電圧に5Vまたは3.3Vを採用しています。今回作成するマイコンボードのESP32は3.3V駆動ですが、USBによる電源供給は5Vのためそのまま電源を接続することができません。そこで「レギュレータ」と呼ばれる、電源を変換してくれるICを利用します。レギュレータには、入力電圧・出力電圧・出力電流などによってたくさんの種類がありますが、今回はチップ仕様にあわせ5Vから3.3Vに変換してくれるものを選びました。さらに、ESP32はWiFiとBluetoothを同時に扱えるため、比較的大きな電流を必要とします。そのため、レギュレータも出力電流が最大1.2A対応という、少しだけ大きめのものを選びました。 また、レギュレータを使うと電源線が3種類(変換前VCC・変換後VCC・GND)となり電源が不安定となる場合があるため、図のようにダイオードやコンデンサを使って電源回路全体を構築する必要があります。

今回とは異なりますが、Arduino UnoのAtmega328Pのような5V系のマイコンはUSBから直接駆動する場合に限ってはレギュレータは不要ではあるものの、3.3Vで動作するセンサをあとで接続したいときのために3.3Vレギュレータを搭載しておくと便利な場合があります。

USB - シリアル変換IC - マイコン の接続方法

Screen Shot 2019-12-30 at 23 11 17

マイコンとの通信やプログラム書き込みは基本的にシリアル通信を介して行いますが、近年のPCではUSB接続が主流のため、USBとシリアル接続を変換するICが必要です(変換機能を内蔵しているマイコンもあります)。USBは差動ペアという2本の信号線で送受信しますが、シリアル通信は受信専用線と送信専用線に加え、送受信側それぞれにデータが受け入れ可能かどうかを示す端子まで用意されています。難しそうに見えますが、基本的には図のように、USBシリアル変換ICを中央に配置し、USBの信号線はプラス同士、マイナス同士で接続します。シリアルの信号線は、変換ICのRXはマイコンのTXに、変換ICのTXは、電流制限抵抗を通してマイコンのRXに接続します。

なお、USBのType-Cの場合は、USBの差動ペアが2対ありますが、挿入方向によってどちらか片方のペアしか利用されません。そのため、プラス同士とマイナス同士をそれぞれ結線してしまってかまいません。

マイコンの起動モード選択ボタン

Screen Shot 2019-12-30 at 23.20.16

マイコンとPCの間は基本的にシリアル通信にて行いますが、プログラム書き込みとプログラム内でのデータ送受信を区別するために、起動時に特定のピンの電圧レベルを読み取りその値に応じてモードを切り替える機能が備わっています。
(厳密にはシリアルデータをROMに書き込むかそうでないかを選択しています)

今回のESP32などの多くのマイコンは「プルアップ」という回路で特定のピンが常にHIGH(VCCと同じ電圧)とされる前提で設計されており、電源投入時にそのピンが「LOW」(GNDと同じ電圧)になっていた場合のみ、プログラム書き込みモードとして起動するといった仕様となっています。また、同様のプルアップ回路を用いて、常にHIGH状態となっているもののLOWになったらどんな場合でもマイコンを再起動させる「リセットピン」というものがあります。

このプルアップ回路をスイッチボタンを介してGNDに接続することで、ボタンを押したときだけLOW状態に移行させるような回路を構成することができます。これを用いると、「特定のピン」をLOWにしたままリセットボタンを1度押すだけですぐにプログラム書き込みモードに移行できるような機能をもつ回路が実現できます。
ESP32においては、この「特定のピン」は「IO0」というピンに相当しますので、今回の基板では「RESET(ENABLE)」ピンと「IO0」ピンのそれぞれにプルアップとボタンスイッチを実装します。

シリアル自動書き込み装置

(書き込み装置) Screen Shot 2019-12-30 at 23.40.43

Arduino開発環境で扱うことのできるマイコンボードは、ほとんどがこの「自動書き込み装置」を搭載しています。
「自動書き込み装置」とは、上述した「起動モード選択」をすべて自動で行ってくれる回路のことです。この装置の詳しい挙動については以下のリンクを参照してください。

参考:プログラミングな日々: ESP8266にDTRとRTSで自動書き込みをする

自動書き込み装置があるならボタンは不要では? と思われますが、これらのボタンは単純にマイコンの動作をリセットするのに使えたり、IO0をユーザープログラムで扱ったりすることができたりと非常に有用ですので、実装は残したままとしています。

マイコンの個別のピンの機能の確認

ESP32-WROVER ピン配置図

今回設計したマイコンボードのESP32のピンには、基板上で直接LEDやセンサに接続しているものもあれば、自由に利用可能なGPIOとしてピンソケットに接続されているものもあります。
ここで注意が必要なのが、ピンによって「入出力の両方に対応」「入力専用」「PWM対応」「起動時のピン状態でモードが変わる」など、利用可能な機能が決まっていたり特定の役割が備わったりしている点です。センサ類への接続やGPIOへの引き出しは、どのピンを使うのか適切に選択しなければいけません。
例として、ESP32のIO35ピンは入力専用ピンのため、基板上のビルトインLED(出力)と接続しても光らせることができなくなります。またIO0ピンは入出力ともに可能ですが、起動時にセンサが接続されたままなどの理由でプルダウンされていると、プログラム実行モードに移行できずにマイコンを全く動作させられなくなってしまいます。

電気的エラーチェック

Screen Shot 2019-12-30 at 23.53.07

回路の設計が終わったら「ERC(Electrical Rule Check)」を行います。これは名前の通り電気的に間違っている接続がないかをチェックしてくれるもので、左カラムの最下部にあるアイコンをクリックすると別ウインドウが表示されチェック結果が表示されます。結果一覧にはかなり多くの数の警告が表示されますが、5VとGNDが直接接続されているといったような危険なものを除くと、ほとんどが問題のないものとなります。

Screen Shot 2019-12-31 at 0.16.59

エラーのうち、電源周りで「出力と供給が同じ3V3ピンに接続されている」というようなものは無視してかまいません。
仕様上、5Vや3V3などの「SUPPLY」のラベルと、VOUTのような「OUTPUT」のラベルがつながっているとエラーになりますが、電源回路においては「OUTPUTがSUPPLYに向かって電源を流す」という構造なので、これで問題ありません。
それ以外にも未接続ピンのエラーがありますが、これも全てのピンを接続する必要性はありませんので、無視してしまって構いません。しかしそれ以外でエラーが出たりした場合は、実際に製造したあとに電源を入れた途端に壊れるといった可能性もあるため、十分に確認するようにしましょう。

警告については「値が設定されていない」といった軽微なものに対して指摘をするものがほとんどとなります。こちらも大半は気にしなくてよいものですが、設計ミスのもととなる警告も入っている可能性があるため十分に確認しましょう。

実際の基板レイアウト(パターン図)を作成する

Screen Shot 2019-12-31 at 0 21 25

ERCまで完了したら次は実際の基板上における部品の配置を行いましょう!
個人的には一番テンションがあがる工程です。
上部の「SCH/BRD」と書かれているボタンをクリックすると、パターン図ファイルが新規で生成され「Board」画面が開かれます。パターン図の生成直後は、デフォルトサイズの基板と「Schematic」画面にある部品類が雑多に配置された状態となっています。この状態から、部品類を基板の上に配置して配線を行うことで基板全体をデザインしてゆきます。
なお、Eagleの無償版では作成可能な基板のサイズは80㎠までとなっていますが、例としてArduino MEGAの大きさでも約54㎠となりますので、個人で小規模な基板を作る限りではあまり気にする必要はありません。

部品の配置条件を考える

部品にはさまざまなものがありますが、自身で「この部品はここに配置したい!」と思っていても、ある程度配置位置が固定されてくるような部品があります。このような条件が適用されるものとして、基板の外寄りに配置したほうがよい以下の部品類があります。

  • USBコネクタ
  • 指向性のある赤外線LEDや受光素子など(水平方向を向いている場合)
  • ボタン類
  • 表面実装型アンテナ
  • GPIOピンソケット

このように、外部との物理的なやりとりが発生する素子は基本的に外寄りに配置します。
これを踏まえて、実際に部品を配置してみましょう。
まず、「Move」ツールを利用してデフォルトサイズ基板の上に部品を配置していきますが、次の順番で左下寄りに詰めるように配置していきます。

  1. 外側に配置するべき部品を置く
  2. マイコンチップ等の比較的大きな部品を内側寄りに置く
  3. チップ抵抗などの小さいものを、上記1と2の隙間に置く

Screen Shot 2019-12-30 at 22.42.23

以上の条件のもとで部品配置を行うとこのようになりました。

自動配線

配置が完了したら、次は部品同士の配線作業です。
上記の配置完了時点で各部品の端子間に黄色の細い直線が結ばれていますが、これは最初の「Schematic」で編集した部品のうち、電気的に接続されている部分を示しています。「Board」画面においてパターン図上に実際の線を書いて実際の配線を示すことで、この黄色い線が消えてゆきます。 ひとつずつ手で配線するのがセオリーですが、今回はEagleの目玉機能ともいえる「自動配線」の機能を使ってみます。

Screen Shot 2019-12-30 at 22.42.39

自動配線を示す「AutoRouter」ツールボタンをクリックすると、小さいウインドウが出てきます。このウインドウで上記と同じように設定し、「Continue」ボタンを押して次のウインドウに行くと、自動配線の計算候補が挙がったウインドウに移動します。ここで「Start」ボタンを押すと、様々なルールに従った配線が順番に自動で計算されてゆきます。

Screen Shot 2019-12-30 at 22.43.27

基本的にはこのリストの一番上の候補(TopRouter)を選択して「End Job」をクリックすることで配線が完了となりますが、配線率が100%となっていない場合はどこかに配線しきれなかった部分があります。今回のマイコンではUSB-C端子の真下部分がそうなっており、配線できなかった端子同士が配線前と同じ黄色い細い線で結ばれたままになっています。このような場合は、手動でうまく配線をつなげていき、黄色の線がなくなるようにしなければいけません。

また、複数の配線候補が100%となっている場合は、どの候補も利用可能ではありますが、「Vias(ビア)」の数が極端に多すぎたりすると実際に製造依頼をするときに値段が上がったりすることがあるようです。

設計完了!

ここまで進めることができれば、マイコンボード制作のためのコアとなるデータは完成です! 次回では、実際に基板制作業者への発注と、そのために必要な補助的なデータの作成について説明します。場合によっては、先ほど行った「配線」を再度やり直す必要もあるので、ぜひ覚えておいてくださいね。