こんにちは、ショウです。
前回部品選定をしたので今回から回路図を作成していきます。
配置図とピン設定
回路を作るにあたって最初に配線の取り回しが良くなるように大まかな部品配置とピン設定行います。
実際に基板があるので基板に直接書きましたが、最初に基板外形と主要部品のおおよその位置関係を書いた図を作っておきます。
この配置を基準にしてピンに機能を割り振っていきます。
特に設定できるピンの少ないデバッガやSPI、USARTを決めてからセンサなどのAD変換のピンを設定していきます。あとは残りのピンでPWMやGPIOを設定していきます。
できるだけピンの位置と配置部品が近くなるように配置します。
今回使用するピンの機能とピン数を書いていくと
機能 | ピン数 |
ST-Link(SWD) | 2ピン |
SPI×2 | 3ピン×2 |
SPI用GPIO×3 | 1ピン×3 |
UART | 2ピン |
壁センサ用ADC×4 | 1ピン×4 |
壁センサ用GPIO×4 | 1ピン×4 |
電源監視用ADC | 1ピン |
モータ用PWM | 2ピン |
モータ用GPIO | 2ピン |
吸引用PWM | 1ピン |
LED用GPIO | 6ピン |
スイッチ用GPIO | 2ピン |
のようになります。これを最初から機能が決められているピンを使わないように気をつけながら配置していきます。
ピンの位置と配置がクロスしているとアートワーク時に配線が表裏を行き来したり、配線距離が長くなるので可能な限りクロスにならないように調整していきます。
実際にアートワークをしていくと思い通りに行かずにピン配置の変更もしていたので、下の図のピン配置は最終的な配置になります。
マイコンの向きが90°横を向いているのは上をマウスの前と見た時の配線を考慮しながら配置をしたためです。イメージしている機体の向きに合わせて向きを回してあげると実際の配線がイメージしやすく、配置が少しやりやすくなると思います。
回路図作成
回路はKicadを使って作成していきます。
マイコン
まずはマイコン周りの回路を引いて行きます。
各ピンにはMXで設定した機能を割り振っています。
ラベルを使っており、ラベルは入出力を意識して設定していくとミスが少なくなります。
データシートを確認するとPB8-BOOT0にはプルダウン抵抗、PG10-NRSTには0.1uFのコンデンサを入れるように書かれています。
BOOT0はマイコン起動時のモード選択で使用します。起動時にピンがHIGHになっているとUARTなどの書き込みモードとして起動します。ST-Linkを使う場合には書き込みモードにする必要がないので気にする必要はありません。
NRSTはマイコンをリセットするスイッチです。NRSTにプッシュスイッチをつないでおくとマイコンが暴走した時に電源を落とさずにリセットをかけられます。私はマイクロマウスで使う場合には電源を落としてしまってもいいと思っているのと、実装スペースが足りないのでNRSTにはスイッチをつないでません。
電源には0.1uのパスコンを入れて電源を安定させています。特にVDDAとVREF+はAD変換の基準になる電源なので1uFのコンデンサも入れてより安定するようにしています。
UI
UIとしては今回プッシュスイッチ2つとLED6つを使うことにしました。プッシュスイッチはモードカウントアップとモード決定に使用する2つを用意しています。プッシュスイッチの片方はUART書き込みのためのスイッチと兼用しています。書き込みモードに変更するBOOT0ピンにはプルダウン抵抗がついているので、そちらに合わせてプッシュスイッチはプルダウンで使用する形にしています。LEDは1つは電源監視用に使用し、残りの5つのうち2つを基板の両端に設置して壁切れタイミングの表示などに使えるようにしました。他のLEDは主にモードの表示に使用します。
電源周り
lipoバッテリーの出力する4.2Vからマイコンなどで使用する3.3Vを作るためにレギュレータを使います。
レギュレータ周りはデータシートに合わせて作成しています。
マイクロマウス競技で使用するスイッチは小型でモータなどに供給するための電流を流せないため、PchのFETを使って電源をオンオフします。
FETのゲートがGNDに接続するとソースとゲートの間に電位差が発生し、ソースからドレインに電流が流れるようになるという構造です。
ただしFETにはリーク電流が存在し、スイッチをオフにしていても少しずつバッテリーを消耗していきます。そのため長時間使用しない時にはバッテリーを外しておく必要があります。
また、一番最初に電源を投入した時に正常に電源が出力されているのか確認するためにUI用とは別にLEDを用意しています。(回路図一番右)
lipoバッテリーの電圧の監視するための分圧回路を用意しています。マイコンのADCは3.3Vまでしか測定できないので分圧をして測定しています。4.2Vを1kと2kの抵抗で2/3にしてマイコンに入力しています。
lipoバッテリーは電圧が3V以下になると充電できなくなるので、電圧が下がりすぎないようにADCの値を監視してアラートを出すようにしています。特にマイクロマウスは開発に集中しているといつの間にかバッテリーを消耗していることが多いのでアラートは大切です。アラートにはUI用のLEDで出しています。
また、lipoをつなぐコネクタにはZHコネクタを使用しています。これは前回の機体でSHコネクタを使用してコネクタ圧着が大変だっただけでなく、一度コネクタがハウジング内部で接触してショートした経験から一回り大きいコネクタに変更しています。(即座に塩水の中に入れたので燃えることはありませんでしたがヒヤヒヤしました。注意:lipoバッテリーの廃棄方法は自治体によって異なるので事前に確認をしてから廃棄してください。一般的に塩水で放電してから廃棄することが多いです。)
壁センサ
壁センサは赤外線LEDとフォトトランジスタを使います。壁に反射した赤外線をフォトトランジスタで受光します。マイコンのAD変換値で壁の近さや有無を判定します。
上の図がLEDの発光をする回路で、下がフォトトランジスタで受光する回路です。赤外線LEDを点灯させるためにはマイコンからの出力だけでは十分な輝度が出ないので、FETを使用しています。使うFETは1パッケージに2つFETが入ってるDMG1024UV-7というFETを使っています。最初はBSS138というFETを選定していたのですがDMG1024のほうがパッケージが小さいので実装面積を削減できると教えてもらい変更しました。
フォトトランジスタは光を電流に変える素子です。しかし、マイコンは電流を直接測定することができないので、抵抗をGND側に設置して電流を電圧に変換しています。
長くなるので今回はここまでとして次回続きの回路を作成していきます。