TECHNICAL NOTES

小さなマイコン基板のための開発環境を作る — CraftVia開発記録 #3

  • CraftVia
  • STM32
  • オープンハードウェア
  • 回路設計

マイコン基板を小さくすると、装置へ組み込みやすくなります。一方で、USB接続や書き込み用のデバッガ、動作確認用のLEDまで省くと、そのままでは開発しにくくなります。

今回は、小さなマイコン基板を差し込み、電源供給、プログラムの書き込み、消費電流の測定を行う開発用ベース基板を設計します。

これは、試作で得た設計資産を、実際の装置や次の開発へつなぐ「CraftVia」プロジェクトの一環です。

CraftViaでは、マイコンとその動作に必要な基本回路をまとめた基板を「Core」、書き込み・計測などを担う開発用ベース基板を「Station」と呼びます。ここからは、この二つの名前を使って説明します。

前回の記事では、STM32G031を搭載する25.40 mm角の「Core-S G031 Rev0」を設計しました。今回は、その開発・評価に使う「Station-S」の仕様を決めました。

この記事では、初号機(Rev0)に必要な機能と主要部品、電源・計測の構成を決めるまでを紹介します。具体的な回路図と部品配置は、次回の記事で扱います。

CraftVia Station-S Rev0の構想図。開発対象と制御用のマイコン基板、デバッガ、計測回路、操作部を示す
CraftVia Station-S Rev0の構想イメージ。開発対象と制御用の2つのマイコン基板、STLINK-V3MODS、電流計測回路、OLED表示器、操作部、ユニバーサル基板エリアを表しています。外観・部品形状・部品上の表記は説明用であり、完成品や正確な部品仕様を示すものではありません。画像を選択すると、別タブで拡大して確認できます。

Coreに必要な開発機能をStationへまとめる

一般的な開発ボードには、マイコンのほかにデバッガ、USB-UART、LED、ボタン、電源回路などが一枚の基板にまとまっています。開発中は便利ですが、そのまま装置へ組み込むと、開発時にだけ使う部品も一緒に持ち込むことになります。

そこで、CraftViaでは装置へ組み込むマイコン基板「Core」と、開発用の機能をまとめて手元に残す「Station」を分けることにしました。CraftViaの考え方と構成は、プロジェクトの立ち上げを紹介した記事で詳しく説明しています。

Stationには、次の機能を持たせます。

  • Coreへの電源供給
  • ファームウェアの書き込みとデバッグ
  • RESET、BOOT、UARTの操作
  • ボタンとLEDによる簡単な動作確認
  • 開発対象の電圧・電流・電力測定
  • GPIOへのアクセスと追加回路の試作

開発中はここへCoreを差し込み、動作を確認できたら、組み込み先の基板や装置へ移します。開発用の機能を繰り返し使いながら、装置に必要な部分だけを小さく保つのが狙いです。

接続相手の外形と端子配置を先に固定する

Stationを設計するには、差し込むCoreの形と端子位置が決まっていなければなりません。そのため、先に設計したCore-S G031 Rev0のデータをいったん固定しました。

固定したのは、25.40 mm角の外形、2.54 mmピッチの接点位置、電源・GNDと書き込み用端子の配置、4層構成、および回路図・PCB・製造データです。設計ソースと製造用ファイルを用途別にまとめ、SHA-256チェックサムも記録しています。

この「設計凍結」は、試作に使う基準を残すためのものです。実物で挿抜のしやすさや電源品質などを評価し、必要な修正は次の改版へ反映します。

初号機ではSTM32の書き込み・デバッグを優先する

将来的には、STM32以外のMCUを搭載したCoreにも対応することを目指しています。そのため、Stationも、MCUに応じた書き込み・デバッグ環境を用意できる構成へ発展させたいと考えています。

例えば、USB Type-CをPCとの接続口とし、USBハブの下流へ複数のデバッグプローブを接続する構想があります。対応するMCUに合わせてプローブを使い分けられれば、開発用の設備を共通化できます。

ただし、初号機からすべてを入れると、USB、電源、デバッグ信号、制御ファームウェアが互いに依存し、問題の切り分けが難しくなります。そこでRev0はSTM32G031を対象とし、次の順に機能を成立させます。

  1. ファームウェアの書き込みとデバッグ
  2. RESET、ボタン、LED、UARTによる動作確認
  3. 開発対象の電圧・電流・電力測定
  4. 測定値の表示と操作機能
  5. GPIOやユニバーサル領域での追加回路の試作

まずはCoreを差し込めば、STM32開発ボード(Nucleo)に近い感覚で使えることを目指します。書き込み・デバッグは計測や表示の機能から独立させ、付加機能が未完成でも基本の開発を続けられるようにします。

この第一段階を担当するデバッガとして、STMicroelectronicsのSTLINK-V3MODSを選びました。STM32向けの書き込み・デバッグに使える小型モジュールで、Stationへ固定搭載し、モジュール上のUSB Micro-BコネクタをPCへ接続します。

Coreへは、書き込み・デバッグ用のSWDIO、SWCLK、リセット用のNRST、ターゲット電圧を接続するT_VCC、シリアル通信用のVCP UART TX/RX、GNDを接続します。

Rev0では専用のUSB Type-CやUSBハブは搭載せず、まずこのモジュールでSTM32向けの開発環境を立ち上げます。他のMCUへ対応する段階で、それぞれに適したプローブや書き込み方式を追加する方針です。

測定・表示を担当するマイコンにもCoreを使う

書き込み環境の次に考えたのは、電流測定や表示をどのマイコンで制御するかです。

専用MCUをStationへ直接実装する方法もありますが、今回は制御側にもCoreを使うことにしました。Station自身も、CraftViaの開発基盤を使って育てていくという考え方です。

Stationには、開発対象用と制御用の二つのCoreソケットを設けます。

ソケットの表示役割
DEV/DUT(開発対象)書き込み・デバッグ・消費電流測定の対象となるCoreを挿す
CTRL(制御用)計測・表示・操作を担当するCoreを挿す

DEV/DUTはDevelopment / Device Under Test、CTRLはControlを表します。デバッガは開発対象側へ接続し、制御用側は電流モニタINA226の読み出し、OLED表示、ボタン入力、状態LEDを担当します。最初は両方にCore-S G031を使う予定です。

開発用の道具で、その道具の機能を増やす

制御用のファームウェアも、このStationを使って書き込めます。

  1. 制御用にするCoreを、開発対象側のソケットへ挿す
  2. STLINK-V3MODSから制御用ファームウェアを書き込む
  3. 電源を切り、書き込み済みのCoreを制御用ソケットへ移す
  4. INA226、OLED、ボタン、LEDと組み合わせて動作を確認する
  5. 修正が必要なら、電源を切って開発対象側へ戻し、修正版を書き込む

最初はLEDを点滅させ、次にI2Cで電流モニタを認識し、測定値を取得して表示する。このように、先に立ち上げた書き込み環境を使って、Station自身の機能を段階的に増やせます。

測りたい電流だけを測るために、電源経路を分ける

電流測定を行うには、「どの回路の電流を測っているのか」を明確にする必要があります。

表示器や制御用マイコンの電流まで含めると、開発対象のプログラムによる変化が分かりにくくなります。そこで、電源の接続系統(ネット)を次の四つに分けました。

ネット名役割
STLINK_5VSTLINK-V3MODSから受け取る5 V
SYS_5VStation内部で使用する5 V
VDD_CTRL制御用Core、INA226、OLED、操作部・状態表示用3.3 V
VDD_TARGET開発対象のCoreと外部回路へ供給する、電流測定対象の3.3 V系統

構成は次のようになります。

STLINK-V3MODS
    │ STLINK_5V
    └─ 電源選択 ─ SYS_5V
                      │
                      └─ 3.3 Vレギュレータ ─ VDD_CTRL
                                                 │
                                                 ├─ 制御用Core
                                                 ├─ INA226
                                                 ├─ OLED
                                                 └─ 操作部・状態表示

VDD_CTRL ─ 外部電流計用ジャンパ ─ シャント抵抗 ─ VDD_TARGET
                                                   │
                                                   ├─ 開発対象のCore
                                                   └─ 外部回路用3.3 V出力

制御用Core、INA226、OLED、制御用の状態LEDはVDD_CTRLから給電します。これらをシャント抵抗の上流へ置き、Stationの制御系の電源電流を測定経路から除外します。

測定するのは、シャント抵抗を通ってVDD_TARGETへ流れる電流です。開発対象のCoreと外部回路を同時に接続すれば、両方の消費電流を合計した値になります。Core単体を比較するときは、外部負荷を外すなど測定条件をそろえます。

GPIO経由の電流も、接続先や給電方法によって測定値に影響します。開発対象につなぐUSER LEDや外部回路をどのように接続し、どこまでを測定対象に含めるかは、次回の回路図で整理します。

3.3 Vレギュレータと電源予算

3.3 VレギュレータにはTLV75533PDBVRを選定しました。固定3.3 V出力のLDOで、制御系と開発対象へ電源を供給します。

Rev0では、STLINK-V3MODSの5 V出力をStation全体の電源として使用します。メーカー仕様に従い、この5 V出力から取り出す電流を合計200 mA以内に収めることが条件です。開発対象だけに200 mAを割り当てられるわけではありません。

電源予算には、次の負荷が含まれます。

  • 制御用Core
  • 開発対象のCore
  • INA226
  • OLEDモジュール
  • 電源・状態表示LED
  • VDD_TARGETから給電する外部回路

給電できる電流は、制御用・開発対象のCoreに加え、OLEDや外部回路の消費分も含めて考える必要があります。Rev0では手持ちのSSD1306搭載小型表示モジュールを想定していますが、実装後に各ブロックの電流を測り、200 mA以内に収まることを確認します。

電流予算に加え、LDOの発熱も確認します。5 Vから3.3 Vへ降圧して200 mAを供給する場合、LDOの損失は概算で(5 − 3.3) × 0.2 = 0.34 Wです。実装後は各ブロックの消費電流とともに、レギュレータの温度上昇を確認します。

将来版では、Station専用のUSB-C電源、保護回路、負荷スイッチを追加し、デバッガ給電への依存を減らす予定です。

INA226と0.1 Ωシャントを選ぶ

開発対象の電圧・電流・電力を測るため、電流・電力モニタにはINA226AIDGSRを選びました。

シャント抵抗は0.1 Ωとし、初期候補には4端子構造のWSK2512R1000BEAを選定しました。電流を流す端子と電圧を検出する端子を分けやすく、Kelvin配線を構成しやすいためです。

0.1 Ωの場合、代表的なシャント電圧と損失は次のようになります。

シャントを流れる電流シャント電圧シャント抵抗の損失
1 mA0.1 mV0.0001 mW
10 mA1 mV0.01 mW
100 mA10 mV1 mW
200 mA20 mV4 mW
500 mA50 mV25 mW

500 mAの行はシャント抵抗の特性を示す計算例であり、Rev0の給電上限を超えています。200 mAもStation全体の電源予算なので、開発対象へ供給できる電流は制御系の消費分だけ小さくなります。

Rev0の目的は、µA単位の精度を保証する専用計測器を作ることではありません。INA226のデータシートでは、シャント電圧の最小刻み(1 LSB)は2.5 µVです。0.1 Ωでは電流換算で25 µAに相当します。また、入力オフセット電圧の最大±10 µVは、同じ条件で±100 µA相当になります。

これらは基板全体の測定精度を示す数値ではありません。実際にはシャント抵抗の誤差、配線、温度なども影響します。表示の桁数を増やしても、その桁まで正確に測れるとは限らないため、低電流域の値は慎重に扱います。

想定しているのは、次のような比較です。

  • 将来的な他MCU対応も含めた、M0+系、M4F系、RISC-V系などのCoreごとの傾向
  • クロック設定変更前後の差
  • LED、通信、演算処理を動かしたときの変化
  • RunからSleepなどへ切り替えたときの、測定可能な範囲での電流変化
  • INA226の値と外部電流計の比較

まずはRun時の電流や処理内容による変化の比較を中心とし、Stop時などの微小電流を正確に評価する場合は、必要な分解能と精度を備えた別の計測器を使います。また、INA226の変換時間や平均化設定より短い電流変化は、その波形やピークを捉えられるとは限りません。過渡的な変化を調べる場合も、必要な時間分解能に応じて測定方法を選びます。この初号機では、開発中に変化を見つけ、次に詳しく測るべき箇所を判断できることを目標にします。

外部電流計も直列接続できるようにする

INA226だけでなく、手持ちのテスターや電流計でも確認できるよう、シャント抵抗の上流に2ピンジャンパを設けることにしました。

通常時はジャンパキャップで短絡します。外部電流計を使用するときは、電源を切ってジャンパキャップを外し、二つの端子間へ電流計を直列接続します。

この構成では、外部電流計を接続してもシャント抵抗とINA226は回路内に残ります。同じ負荷を同時に観察できるため、INA226の設定や測定値を確認しやすくなります。ただし、外部電流計にも電圧降下があるため、接続時は開発対象の供給電圧が変わり、動作や消費電流へ影響する可能性があります。

誤操作を避けるため、基板上にはジャンパを外してから電流計を接続することと、通電中に抜き差ししないことを表示します。

初号機での検証を、次の設計へつなぐ

今回は、STM32の書き込み・デバッグを土台にして、制御用Coreと電流測定を加える構成にしました。USBハブと複数プローブへの対応、制御用ソケットへのデバッグ信号の切替、Coreの自動識別、可変電源、PC向けの計測アプリケーションは、初号機の完成条件に含めません。

他のMCUへの対応では、ソケットの形をそろえるだけでなく、端子の用途やデバッガとの接続も合わせる必要があります。将来のCoreが使う開発信号を宣言し、それに対応する経路だけを接続する方針とし、具体的な切替方法は今後検討します。

まずは電源供給、書き込み、計測が意図どおり動くかを確認し、その結果を次のUSB・電源・プローブ構成へ反映します。

次回、この構成を回路図にする

Coreに必要な開発機能を補うため、デバッガ、開発対象と制御用の二つのソケット、電源経路、電流測定方法を決めました。これで、各機能をどこにつなぎ、何から動作確認を始めるかが見えてきました。

次は、ジャンパの操作、信号方向、テストポイント、部品定数を具体化し、製造できる回路へ落とし込みます。電源・計測、開発対象のデバッグ、GPIO、制御用Core、操作・表示、制御用端子の引き出しという6ページに分けて回路図を作成する予定です。

次回は、Station-S Rev0の回路図と、140 mm × 90 mmの基板上へ部品を配置するまでを紹介します。

関連記事・資料