こんにちは!はしもとです。
前回は、マイクロマウス研修の約半年を振り返って、何が原因で開発が遅れてしまったかを分析しました。
今回からは、まだブログに書ききれていない回路設計のところについて書いていきます。
STM32F405RGTのピン機能割り振り
まずは、マイコンのどのピンにどんな機能を持たせるか、ピン機能の割り振りを行います。
今回の自作マウスでは、マイコンはSTM32F405RGTを使用します。
以前のブログでもピン機能の割り振りは書きましたが、回路設計をするときに一部修正する必要があったので、最新のものを載せておきます。
STM32のデータシートを確認
STM32のアプリケーションノートAN4488とデータシートDS8626_STM32F40xxx.bookを参考に回路設計を行います。
日本語版のアプリケーションノートが知りたい方は、アプリケーションノートの中にあるAN4488の日本語バージョンを選択してください。
回路設計結果
回路設計した結果は以下のとおりです。STMマイコンの各ピンは前述したピン機能割り振りにしたがって設定しています。その他の機能の回路設計について詳しく書いていきます。
電源まわり
VDD
AN4488の2.2 Power supply schemes(P9 ~ )に書かれています。
Vddピンは4.7uF ~ 10uFの範囲のセラミックコンデンサを1つ、Vddの各ピンに0.1uFのセラミックコンデンサを1つ接続する必要があります。 また、電圧監視用のVBATピンも接続します。
VDDA(アナログ電源)
AD変換の精度を向上させるため、アナログ電源には独立した電源が供給されます。
AN4488に書かれている通り、ノイズ対策のための1uFと0.1uFのバイパスコンデンサ(通称:パスコン)を接続しています。パスコンについては以前のブログで解説しているので、よければ読んでみてください。
また、のりさんのブログを参考に、フェライトビーズを接続して高周波ノイズをカットしています。
ブートモード
ブートモードの種類
STM32マイコンでは、起動時にどのメモリからプログラムを読み出し始めるかを、ブートモードを設定することができます。AN4488では、4.4 Boot mode selection(P25 ~ )に書かれています。
ブートモードは3つのモードから選択でき、用途に応じて切り替える必要があります。
各モードが何を意味するか詳しく見ていきましょう。
メインFlashメモリ
メインFlashメモリは不揮発性のメモリなので、電源が切れてもデータを残すことができます。
マイクロマウスの場合だと、走行時の迷路情報をFlashメモリに保存します。
こうすることで、電源を落としても、前回走行時の迷路情報をもとに最短走行や重ね探索することができます。また、走行ログを保存しておき、走行後にPCにデータを転送して、走行ログをグラフに表示することが可能です。
実際にFlashメモリをどのように使うかイメージするときには、koraさんのブログを参考にしました。
システムメモリ
システムメモリは、ブートローダを内蔵しています。
ブートローダは、下記の表に書かれたUSART、CAN、USB等のシリアル・インターフェースを使用して、Flashメモリの再プログラムが可能です。プログラムを書き換えたいときは、ブートモードをシステムメモリに切り替える必要があります。
内蔵 SRAM
内蔵 SRAM(Static Random Access Memory)については、ししかわさんのブログで詳しく書かれています。今回は、SRAMブートは使用しないので、Boot1ピンはLowにします。
これらより、今回は、マウス走行時はBoot0をLowにしてメインFlashメモリからプログラムを実行します。一方で、プログラムを書き換えたいときは、Boot0をHighにしてブートモードをシステムメモリにします。なので、Boot0ピンにスイッチを接続して、これらのモードを切り替えられるようにしています。
外部クロック回路
STM32にはもともと以下の2種類の内部クロックを使うことができます。LSIはHSIと比較して低速で安定してカウントアップするので、リアルタイムクロック(RTC)やウォッチドッグタイマーに使用されます。一方でHSIは、高速で正確な計算処理やセンサーデータ取得に使用されます。
- LSI(Low Speed Internal)オシレータ・クロック
- マイコン内部に組み込まれたRC発振器(R: 抵抗、C:コンデンサ)によって生成される低速なクロック信号
- HSI(High Speed Internal)オシレータ・クロック
- マイコン内部に組み込まれたRC発振器によって生成される高速なクロック信号
しかしながらこれらの内部クロックは、周波数精度が悪く、例えば温度条件によっては、RC発振器の周波数が変動して誤差が生じることがあります(参考:マイコンの外部クロック【ARMコアSTM32】)。マイクロマウスで使用する分には内部クロックのこのような精度の悪さはあまり気にならないそうですが、今回は勉強のために外部クロックを使ってみます。精度の高い外部クロックを使用することで、外部機器と高速かつ正確に通信することができます。使用する外部クロックは以下の2種類です。
- LSE(Low Speed External)オシレータ・クロック
- HSE(High Speed External)オシレータ・クロック
データシートDS8626_STM32F40xxx.bookのClockの章を確認すると、LSEの周波数は32.768kHzとし、HSEの周波数は4-26MHzにする必要があります。
今回はLSEでは、32.768kHzの水晶振動子 WMRAG32K76CS3C00R0、HSEでは16MHzのコンデンサ内蔵のセラミック発振子 CSTCE16M0V53-R0を使います。このセラミック発振子の内蔵負荷容量(CL1/CL2)は15pFであり、データシートに書かれた推奨されているCL1、CL2:5~25pFを満たしています。
5 pF to 25 pF range (typ.), designed for high-frequency applications, and selected to match
the requirements of the crystal or resonator (see Figure 32).
DS8626_STM32F40xxx.book External clock source characteristics より
書き込み用のコネクタピン
今回は、STM32マイコンの書き込みにはNucleoボードのデバッガ基板を使用します。
上記のデバッガ基板とSTM32マイコンと通信するためにNucleoボードのデータシートに記載された下記の表に従って、STM32のマイコンにピン機能を割り振る必要があります。
外部機器との通信するためのコネクタピン
壁センサの情報をPC画面に出力するために、PCとSTM32マイコンとのUART通信用コネクタピンを用意しています。また、ESPマイコンとも通信するためのコネクタピンも作りました。
まとめ
今回はSTM32F405RGTの回路設計について書きました。今回勉強したことは他のマイコンまわりの回路設計をするときに役に立ちそうなので、詳しく調べられてよかったです。
今回は以上です、それではまた〜!