ししかわです。
社員研修の一環で、マイクロマウスを自作して大会に出場しました。
全日本大会2020は終わりましたが、ブログはもうちょっとだけ続きます。
前回はElecrowのPCBAサービスを使って基板を発注しました。
1ヶ月ほど経ち、発注した基板が届きました!
届いた基板
届いた基板がこちらです。

基板表面

基板裏面
電源基板とマイコン基板が繋がった状態で、うまく実装できているように見えます。赤い基板に白いウサギマーク(アールティのロゴ)が映えますね!
導通チェックの結果、ショートしている箇所もありませんでした…が、基板を眺めながらなぜか胸騒ぎを覚えました。何かが間違っている…?
悪い予感は的中しました。火入れの過程で基板の間違いを6箇所見つけました。
どこだかわかりますでしょうか?
基板の間違いとリワーク
正解はこちらです!

基板の間違い(表面)

基板の間違い(裏面)
軽微なものから致命的なミスまでさまざまです。
基板のデータを直して再度発注するのが理想的ですが、工期の都合上この基板を使って開発しなければ大会に間に合いません。したがってこれらの間違いは手修正(リワーク)してなんとかまともに動くようにする必要があります。
以下、間違いと対処を順番に説明します。
IMUのMOSIとMISOが逆
今回最も致命的なミスです…。IMUとSTM32はSPI通信で接続しますが、MOSI(ICの入力側)とMISO(ICの出力側)を逆に繋いでしまいました。
これは回路図の時点で間違えていました。次の図中のグローバルラベル(SPI1_MISOとSPI_MOSI)はマイコンの正しいピンに割り当てられていますが、マイコンのピンとICのピンの接続が逆になっています。MOSIはSDIに、MISOはSDOに繋ぐのが正しいです。

回路図の間違い。MOSIはSDIに、MISOはSDOに繋ぐのが正しい。
STM32のペリフェラルの制約上、ソフトウェア的にピンアサインを変更するなどの対処はできません。残された道はパターンカット(基板の銅箔を削って切断する)からのジャンパ配線(PCBの配線と独立して銅線をはんだ付けする)をするしかありません。
パターンカットはMOSI、MISOそれぞれの銅箔パターンを、カッターで薄く削って切断します。幸いどちらも切りやすい場所を通っていたので難なくできました(パターンがICの下を通っていると手が出せなくて詰む場合もあります)。
問題はジャンパ配線。0.5mmピッチのICのピンに細い銅線を直接はんだ付けします。とにかく細かい作業で目が痛くなり、何度も失敗してくじけそうになりました…。
しかし先輩の犬飼さんも過去に同じミスをしたことあると知って励まされたりしながら、なんとか修正に成功しました!

ジャンパ配線
配線した後は切断を防ぐためにホットボンドで固めました。

ホットボンドによる固定
分圧のための抵抗が逆
これは火入れ中「電源電圧が正しく降圧されない。3.3Vが0Vになっている」という不具合を調べる過程で気づきました。
こちらもDCDC周辺の回路のミスです。データシートに従ってR2/R3の値を計算しましたが、抵抗値を入れる際に逆になってしまっています。

回路図の間違い。R2とR3の抵抗値が逆になっている。
こちらの修正はIMUと比べると、いくらか楽です。チップ抵抗はとても小さいので、ピンセットなどで力を加えながらはんだごてで温めると簡単に外れます。ただし外す瞬間や入れ替える際に部品を無くしやすいので注意して進めます。

表面実装の抵抗の修正
抵抗を入れ替えて再び通電すると、7.4V、5V、3.3Vの3通りの電圧を正しく出力できるようになりました。
SWDコネクタの向きが違う
写真のSWDコネクタは本来水平(Horizontal)の向きで、機体の外側に向かってピンが生えているはずですが、垂直になっていました。

部品選定の間違い。水平と垂直を間違えて指定してしまった。
原因はElecrowに送付した部品表のミスです。Kicadのフットプリントでは正しく水平のコネクタを選んでいましたが、その後部品表を作る段階で誤って垂直のコネクタの型番を指定してしまいました。Elecrow側では素直に指定された部品を実装するだけで、親切に間違いを指摘してくれたりはしません。シビアですが実装サービス利用時特有の間違いといえます。
修正は単純で、部品を外して正しい部品を実装し直すだけです。はんだ吸い取り器を使う際や部品を外すときにランドも一緒に剥がれないよう注意が必要です。

修正後(水平)
基板の隙間に電池が入らない
M5Mouseはマイコン基板と電源基板の隙間に電池を収める設計でしたが、DCDC等の部品の高さを考慮していなかったために基板の隙間に電池が入りきらなくなってしまいました。
2枚の基板間は5ピンのピンソケットとピンヘッダで接続します。どちらかの背を高くできれば隙間も広がるので収まりそうです。
暫定対処として、両方長いピンヘッダの一方のピンに黒いプラスチック部分を重ねて、背が高いピンヘッダを自作しました。

黒い部分(正式名称がわからない)を2段重ねにした、背の高いピンヘッダ
M5Mouse自体の背も高くなりましたが、これでなんとか電池が収まってくれました。

ピンヘッダにゲタを履かせた状態
M5Stackと基板を繋ぐピンヘッダの背が高すぎる
M5Stackと電源基板を繋ぐ30ピンのコネクタの背が高すぎました。M5Stack純正品は、通常のピンヘッダよりもピンが短いのです。これを見落としていて実装サービスのやりとりの中で代替品の使用をOKしてしまいました。
長過ぎたなら切ればいいということで、暫定対処としてニッパーを使って1本ずつピンの高さを揃えました。

切ったピン(左)と切る前のピン(右)
特別な仕様の部品は純正品を使ってもらうのが確実ですね。部品を自分で入手して後で手実装でもよいですし、Elecrowに送付して一緒に実装してもらう手もあります。
UARTのピンヘッダが車輪と干渉する
こちらも組立時の考慮が足りず、UARTのピンヘッダがわずかに車輪と干渉しました。同様にピンヘッダを切って対処しました。
間違いから得た教訓
以上、紹介してきたようにたくさん間違えてしまいましたが、次のような教訓を得られました。
- 組み立てた時の干渉のミスが多かった。電池も含めて全てのパーツの干渉をCADで確認する。
- 部品表は何度もレビューしたが間違いがあった。型番とフットプリントの整合性確認は自動化するのが望ましい。
- MOSIとMISO、TxとRx、SDAとSCLは何度確認してもやりすぎということはない。あるいはこちらも自動チェックできるとよい。
- スルーホール部品ピンヘッダ等のスルーホール部品は実装サービスを使わず自分で実装するのもあり。
- 一発で間違いの無い基板を作るのはかくも難しい。業務では、可能なら発注→基板の実物をレビュー→設計修正→再発注、のサイクルを複数回回せるようにしたい。
経験者から見るとどれも初歩的なミス=見えている地雷だと思いますが、見えている地雷を1個ずつ丁寧に踏み抜くことで、どれくらい痛いのかを体感し、危険予知ができるようになります。これも研修の良い所ですね。
基板の修正に研修の1週間分(約13時間)を使ってしまいましたが、なんとか動作する基板が作れて、通電からLチカの実行まで確認できました。

修正後の基板でLチカしている様子
次回はこの基板を使ってファームウェアの開発をしていきます。