Blog Archives

shotaのマイクロマウス研修17 回路設計⑤:ESP32ソフト書き込み基板と間違い

こんにちは、shotaです。
社員研修として、オリジナルマウスを製作しています。

[前回の記事]ではモータドライバとエンコーダについて書きました。
今回は

  • マウス基板のその他モジュール(モーションセンサ・インジケータ・ソフト書き込み)
  • ソフト書き込み基板の回路
  • LiPoバッテリー充電回路
  • 回路の間違い
  • について書きます。

    マウス基板のその他モジュールについてはサラッと流して、ソフト書き込み基板をメインに説明します。

    マウス基板
    その他モジュール ブロック図

    ブロック図はこのようになりました。

    点線から左側は外部回路で、ソフト書き込み基板があります。
    点線から右側が内部回路で、左からソフト書き込みコネクタ・ESP32・モーショントラッキングセンサ(6軸加速度・ジャイロ)・LED x2があります。

    ソフト書き込みコネクタには、データの送受信をするTx/Rxと、書き込み時にESP32のモードを切り替えるBOOT/ENを接続します。
    モーショントラッキングセンサとESP32はSPI通信でやり取りします。インジケータ回路にはLEDを2つ用意します。

    モーショントラッキング回路については、回路流用元の[HM-StarterKit]と同じ構成です。
    ESP32特有の部分は、ソフト書き込みに使う信号(Tx/Rx/BOOT/EN)です。

    それでは、それぞれの回路図について説明します。

    モーショントラッキング回路

    回路図はこのようになりました。


    この回路は、[ICM-20648データシート]の推奨回路と一致しています。

    インジケータ回路

    回路図はこのようになりました。


    ESP32のI/Oピンで、LEDの点灯させます。

    ソフト書き込み回路

    回路図はこのようになりました。

    回路図と言ってもコネクタがあるだけです。
    ソフト書き込み必要な信号(Tx/Rx/BOOT/EN)とGNDを接続しています。

    ソフト書き込み基板

    続いて、ソフト書き込み基板について説明します。
    ソフト書き込み基板も回路流用元の[HM-StarterKit]と同じ構成ですが、一部ESP32特有の回路があります。

    回路ブロック図はこのようになりました。

    ソフト書き込み基板には、ソフト書き込みと、バッテリ充電の2つの機能があります。

    左側の外部回路にはPCとバッテリが、右側の外部回路にはマウス(ロボット)があります。
    内部回路左上のUSB Micro-BコネクタはPCと接続されます。USBの信号は、真ん中のIC(FT232RL)でシリアル信号に変換され、外部のマウスに送られます。

    変換ICからはDTR/RTSも出力され、この信号を用いてBOOTとENをON/OFFし、ソフトを自動で書き込みます。また、手動でBOOT/ENをON/OFFできるようにタクトスイッチも接続されています。

    内部回路左下がバッテリ充電ブロックで、USBの電源(VBUS)を用いて、外部のバッテリを充電します。

    それでは、それぞれの回路図について説明します。

    USB-Serial変換回路

    回路図はこのようになりました。
    USB-シリアル変換は[FT232-RLのデータシート]の推奨回路を参考にしました。
    また、自動ソフト書き込み部分については、[ESP32-Devkit-V4の回路図]流用しました(ここ重要)


    まず、Micro-Bコネクタから必要な信号を取り出します。IDは使用しません。


    USBの信号をシリアル変換IC(FT232RL)へ接続します。ICからは、LEDに接続するTXLED/RXLEDと、シリアル通信のTXD/RXDとDTR/RTSが出力されます。大事なことなのでもう一度、DTR/RTSが出力されます。


    続いて、ソフト書き込み用のスイッチ回路です。
    左側は手動ソフト書き込み用のスイッチ回路で、それぞれBOOTとENに接続しています。BOOTとENは、マウス基板側でプルアップされています。
    ESP32ではソフト書き込み時に、プルアップされたBOOTとENをON/OFFしなければなりません。

    そもそもBOOTとENの役割は何なんだ?ということで、[ESP-IDF Programming Guide]を見てみましょう。

      EN: Reset button.

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修


    マイクロマウス研修(kora編)[26] エンコーダ用磁石の取り付け

    こんにちは。koraです。

    今回は、モータマウントにエンコーダ用の磁石を取り付けます。

    エンコーダの構成

    現在製作中のマイクロマウスに使用しているエンコーダは、MA702という磁気式エンコーダです。通常、磁気式エンコーダは磁石の回転軸とエンコーダが一直線になるEnd-of-Shaft Mountingという配置になるのですが、MA702はSide-Shaft Mountingという軸がずれたような配置にも対応しています。後者であれば、エンコーダの基板だけ別パーツにして垂直にたてる、という苦労がなくなるはずです。

    エンコーダのメーカーサイトに、磁力を計算するツールがありますので、これを使って磁石を選定しました。

    磁気シールド

    実際に組み上げてみると、モータと磁気式エンコーダが隣り合わせになるため、モータ内部の磁石とエンコーダ用の磁石が引き合ってしまいます。安定走行どころか磁石と軸の固定も厳しいです。
    対策としては、磁石の周りに磁気シールドを配置すると良いらしいです。しかし、Side-Shaftではエンコーダを遮ってしまうのでそういうわけにはいきません。代わりにモータの周りに磁気シールドを巻いてみます。

    以下、モノタロウで手あたり次第購入した磁気を遮ってくれそうな何か。

    • Sunhayato 磁気ガード(アルミ箔)
    • 寺岡製作所 シールド粘着テープ(導電性布+導電性粘着剤)
    • ハヤシ シムプレート(ステンレスロール)
    • 岩田製作所 シムプレート(ステンレスシート)
    • 岩田製作所 シムプレート(SPCC相シート)

    この中では、SPCC相のシムプレートが最も効果がありました。
    考えてみれば当たり前ですが、アルミは高周波のノイズを遮蔽する用途のもので、永久磁石のシールドには使えません。またステンレスよりも普通鋼のSPCCの方が効果がありました。

    ただ、最も効果のあったものでも完全に磁力を遮蔽することはできませんでした。結局、今回選定した磁石が強力すぎたようなので、もっと小さいHM-StarterKitの磁石を使用することにしました。

    次回

    かなり弱い磁石を使うことになったので、本当にエンコーダが機能するか、次回確認したいと思います。

    続きを読む ›

    Posted in DCマウス研修


    マイクロマウス研修(kora編)[25] モータマウント取り付け

    こんにちは。koraです。

    今回は、マイクロマウス基板にモータマウントを取り付けます。

    モータマウントの作成

    以前、Fusion360でマイクロマウスの車体3Dモデルを作成していました。

    これを、DMM.makeの3Dプリントサービスを使って出力します。選べる素材のうち一番精度の良いアクリル(Xtreme Mode)を選択します。

    選択した素材のデータルールに従って、DMM.makeにアップロードする3Dデータファイルを作ります。1つのファイルに最大10個のパーツを配置できるようです。造形サイズやパーツ間のクリアランスなのど仕様を考慮して、パーツをまとめます。

    配置出来たら、コンポーネント全体を選択して、右クリックから「STL形式で保存」を行います。

    これでCADデータから3Dデータに変換できたので、DMM.makeにアップロードして発注します。

    モータマウントの取り付け

    発注から1週間ほどで届いたものがこちらです。

    これに、モーター、ベアリング、ピニオンギアなどを取り付けます。ちなみにモーターはMK06-4.5、ピニオンギアはモジュール0.3、歯数9の精密切削ピニオンギヤです。

    組上がったユニットを、低頭ねじで基板にねじ止めします。タイヤもつけて、なんとなくマイクロマウスらしさがでてきたと思います。

    次回

    次回は、エンコーダ用のネオジム磁石を取り付けて、エンコーダの値を読み取りたいと思います。

    続きを読む ›

    Posted in DCマウス研修


    shotaのマイクロマウス研修16[回路設計④ モーダドライバ・エンコーダ回路]

    こんにちは、shotaです。

    社員研修として、オリジナルマウスの製作しています。

    [前回の記事]では物体検出センサ回路(壁センサ)について書きました。

    今回はモータドライバ・エンコーダ回路について書きます。

    モータドライバ・エンコーダ回路 ブロック図

    モータドライバ・エンコーダ回路のブロック図はこのようになりました。

    ブロック図中央のモータドライバは、ESP32から送られてくる正転・逆転や回転速度(PWM Duty)の信号を、モータ出力電圧に変換します。ブロック図下のエンコーダは、マウスのホイールに取り付けられた磁石の磁気を読み取り、ホイールの角度を出力します。

    モータにはMK06-4.5を使用します。[アールティWebショップ]から購入できます。

    この構成は、回路流用元の[HM-StarterKit]とほぼ同じですが、エンコーダのMA700が新規設計非推奨だったため、後継機のMA702に変更しています。

    モーダドライバ回路図

    回路図はこのようになりました。

    モータドライバ回路は、モータドライブIC [DRV883のデータシート]に書かれている参考回路とほぼ一致します。それとは別に、モータ電流を滑らかにするためにインダクタ(L1, L2)を追加しています。

    マイクロマウスで使うモータは小さいため、電気的時定数が小さい傾向が有ります。その場合、PWM入力に対して電流が反応しやすくなるため、電流スパイクが発生しやすくなります。この電流によりモータが発熱したり、制御が不安定になるという問題が有ります。

    インダクタを追加した理由は、モータ電流を滑らかにし、モータの発熱と制御の不安定さを抑えるためです。

    参考:[パルス出力ステージ(PWM)とチョークコイル – マクソンアカデミー]

     

    ESP32と接続するピンは、PH(正転・逆転の切り替え)、EN(モータ出力制御(PWM))、SLEEPの3つです。PHとENは、右・左モータで独立しています。SLEEPは右・左共通です。

     

    ESP32のピンアサインについては後ほどまとめて記事にしますが、ここでESP32のPWM機能について簡単に触れておきます。

    ESP32 MCPWM機能について

    ESP32でモータ制御をする場合、MCPWM機能を使います。MCPWMはMotor Control Pulse Width Modulator (MCPWM)の略です。まさに、モータ制御のための機能ですね。

    MCPWM機能の全容は[ESP32のTechnical Reference Manual]を参考にしてください。MCPWMのAPIは[こちら]のページに書かれています。また、サンプルコードが[GitHub]に公開されているので、先にコードを読んだほうが機能を理解しやすいかもしれません。

    ここでは、APIのドキュメントからMCPWMの機能をざっくりとまとめてみます。

    ※ここに提示している画像は[ESP-IDF Programming Guide]内のものを使用しています

    • MCPWMユニットは2つあり、それぞれのユニットが3つのペア(A,

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修


    マイクロマウス研修(kora編)[24] STM32マイコンでSPI通信

    こんにちは。koraです。

    今回は、新型マウスのSPI通信を設定します。

    CubeMXの設定

    今回製作したマイクロマウスは、STM32F732マイコンに搭載されている3つのSPIのうち2つを使用します。左右のエンコーダがSPI1に、ジャイロセンサがSPI2に接続してあります。

    Pinoutの設定

    ピンの設定画面でSPI1とSPI2の設定を行います。

    • MISO (Master In Slave Out)
    • MOSI (Master Out Slave In)
    • SCK (Serial Clock)

    SPI通信では、マスタが通信相手を切り替えるためのCSピン (Chip Select あるいは SS: Slave Select) が必要なので、GPIOピンを割り当てます。同時に、System Core → GPIO → Configurationを開いて、GPIOにわかりやすいラベルを付けます。

    • CS_ENCR (右側のエンコーダ)
    • CS_ENCL (左側のエンコーダ)
    • CS_GYRO (ジャイロセンサ)

    このときGPIO output level (GPIOピンの初期状態) はHighにしておきます。CSピンはアイドル状態がHigh、通信中がLowとなるためです。

    SPI Modeの設定

    ピンの設定が済んだら、SPI1とSPI2のModeを設定します。

    • Mode: Full-Duplex Master (受信と送信を同時に行えるモード)
    • Hardware NSS Signal: Disable (ソフト的にCSピンを使う)

    SPI1 Configurationの設定

    エンコーダMA702のデータシートを読むと、次のような仕様になっています。

    • Data order: MSB first
    • Clock rate: 最大25MHz
    • SPI mode: Mode0とMode3をサポート※

    そこで、SPI1のConfigurationを次のように設定します。

    • First Bit: MSB first
    • Baud Rate: 13.5 MBits/s
    • Clock Polarity: High
    • Clock Phase: 2 Edge

    SPI2 Configurationの設定

    ジャイロセンサICM20648の仕様に合わせます。データシートによると、

    • Data order: MSB first
    • Clock rate: 最大7MHz
    • Clock Phase: クロックの立ち上がりでデータ受信

    となっていますので、次のように設定します。

    • First Bit: MSB first
    • Baud Rate: 6.75 MBits/s
    • Clock Polarity: High
    • Clock Phase: 2 Edge

    ※SPI通信は、クロックの極性 (クロックのアイドル状態) とクロックの位相 (データ受信のタイミング) について4つのモードが定義されています。
    参考:ANALOG DEVICES AN-1248 アプリケーション・ノート

    クロックの極性
    クロックの位相

    Mode 0
    アイドル状態がLOW
    クロックの立ち上がり(1番目のエッジ)にデータ受信

    Mode 1
    アイドル状態がLOW
    クロックの立ち下がり(2番目のエッジ)にデータ受信

    Mode 2
    アイドル状態がHIGH
    クロックの立ち下がり(1番目のエッジ)にデータ受信

    Mode 3
    アイドル状態がHIGH
    クロックの立ち上がり(2番目のエッジ)にデータ受信

    ジャイロセンサの動作確認
    SPI通信用の関数

    CubeMXのGENERATE CODEボタンを押すと、今回設定したSPI関連のコードが生成されます。

    SPI通信でマイコンからデバイスへ送信するには、HAL_SPI_Transmit()関数を使います。第一引数がSPIハンドラ、第二引数がデータバッファ、第三引数がデータバッファのサイズ(バイト)、第四引数がタイムアウトの時間(ms)です。反対にデバイスからデータを受信するとき、HAL_SPI_Receive()関数を使用します。引数はさきほどと同様です。
    なお、通信を開始する前にHAL_GPIO_WritePin()関数で、通信したいデバイスのCSピンをLowにして、通信を終えた後Highに戻します。

    ジャイロセンサ用のモジュール

    これを踏まえたうえで、ジャイロセンサのモジュールを作ります。まず、Srcフォルダに以下のようなgyro.cというファイルを作ります。

    gyro_init()関数を呼び出せばジャイロセンサの初期設定がまとめて行われ、gyro_update()関数を呼び出せばジャイロの角速度情報をまとめて読み込めます。

    次に、Incフォルダにgyro.hというファイル名でヘッダーファイルを作ります。他のソースファイルでこのヘッダーファイルをインクルードすれば、gyro_init()関数とgyro_upate関数を呼び出せるようになります。

    最後に、main.cに次のコードを追加します。

    ジャイロセンサ動作確認プログラムの実行

    ビルドしてCubeProgrammerでマウスに書き込みます。
    TeraTermに次のような角速度が表示されると成功です。

    次回

    ジャイロの値は取れたので、次回はエンコーダを試してみたいと思います。モータマウント・タイヤ・磁石などを取り付けて、エンコーダの動作を確認します。

    続きを読む ›

    Posted in DCマウス研修


    マイクロマウス研修(kora編)[23] STM32マイコンでシリアル通信

    こんにちは。koraです。

    今回はシリアル通信を使ってマイコンからPCにデータを送れるようにしたいと思います。

    HALを使ったシリアル通信

    HAL_UART_Transmit()関数を使用します。第一引数がUARTハンドル、第二引数が送信データバッファへのポインタ、第三引数が送信するデータのバイト数、第四引数がタイムアウトの時間です。

    この例では、まず送信データバッファとして1バイト符号なし整数uint8_tの配列msg[]を作り、文字列”hello world!”と改行コード”\n\r”で初期化しています。
    次にUART1のハンドルのポインタと、配列msg[]のポインタを指定し、strlen()関数でバッファのバイト数を求め、100msをタイムアウト時間として指定しています。

    マウスに書き込んで実行すると、Tera Termに次のように表示されます。

    printfを使ったシリアル通信

    HAL_UART_Transmit()を使ってもいいのですが、引数がたくさんあって毎回書くのは面倒です。というわけで、お馴染みののprintfを使えるようにします。

    まず、main.cにstdio.hのインクルードを追加します。

    次に、標準出力をUARTに出力する関数を定義します。ちなみにこのとき、Srcフォルダにsyscalls.cファイルが必要です。

    setbuf()は入出力に使用するバッファを設定する関数です。ここでは標準出力stdoutにNULLを指定してバッファを使わないよう設定しています。こうしないとprintfがうまく動かないようです。

    無限ループの中で、printf()を呼び出します。今度は”hello printf!”が表示されます。

    実行した結果、目論見通り”hello printf!”が出力されました。

    次回

    次回からはマウスに搭載した各種センサの動作確認をしたいと思います。

    続きを読む ›

    Posted in DCマウス研修


    shotaのマイクロマウス研修15[回路設計③ 物体検出センサ回路]

    こんにちは、shotaです。

    社員研修として、オリジナルマウスの製作しています。

    [前回の記事]では電源回路について書きました。

    今回は物体検出センサ回路(通称:壁センサ回路)について書きます。

     

    物体検出センサ回路

    物体検出センサ回路のブロック図はこのようになりました。

    点線から左側が内部回路で、上半分が発光回路、下半分が受光回路です。

    点線から右側が外部回路です。回路はありませんが、赤外線を反射する壁があります。

     

    物体の検出にはフォトリフレクタ[LBR-127HLD]を使用します。

    フォトリフレクタには赤外線発光ダイオードとフォトトランジスタが内蔵されており、ダイオードが発光した赤外線が壁で反射し、フォトトランジスタで受光されることで壁を検出できます。

    壁がない場合は、赤外線が反射されず、フォトトランジスタが受光できません。

     

    回路図はこのようになりました。

    自分のマイクロマウスには、この検出回路が4つ搭載されます。それぞれ、前(左)・左・右・前(右)の壁を検出します。

     

    それでは発光回路・受光回路について説明します。

    発光回路

    回路図は[HM-StarterKit]を流用していますが、より詳しい発光回路の動きについては[マイクロマウスのセンサについて②]を参考にしました。

     

    参考記事に書いてあるとおり、環境光による壁の誤検知を防ぐため、発光ダイオードをパルスでON/OFFさせます。パルスの周波数は1kHzとします。

    発光ダイオードを1kHzでON/OFFすると、それに伴い電源電流が変動します。この変動をなだらかにするためにローパスフィルタを搭載しています(回路図のR5とC11)。

    素子の定数はHM-StarterKitの値をそのまま使用しています。電源ICがHM-SterterKitのものから変わっているので、実際に動かした時の波形を見て定数を変えようと思います。(もしかしたらフィルタ回路が不要かもしれません。)

     

    ON/OFFするパルスは、ESP32から出力します。発光した赤外線が別の受光部に入らないように、4つのダイオードを別々のタイミングで発光させたいです。

    そのためには、パルスの出力端子も4つ必要ですが、ESP32の端子数が足りないため出力端子を2つに減らしています(回路図のIRLED_R_FLと、IRLED_L_FR)。

    本来は別々に点灯させる、RとFLを同時に点灯させます。同じようにLとFRも同時に点灯させます。

    RとLのセンサは角度が傾いているので、センサRとFL、LとFRのペアで発光すれば、誤検知しません(おそらく)。

    受光回路

    こちらも、HM-StarterKitの回路図を流用します。

    フォトリフレクタに内蔵されているフォトトランジスタは、ベース電流の入力が光の入力に置き換わったトランジスタです。

    [赤外LEDとフォトトランジスタ –

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修


    マイクロマウス研修(kora編)[22] STM32マイコンでLチカ

    こんにちは。koraです。

    前回、CubeMXでSTM32の初期化コードを作成しました。今回はそれを使ってLEDを点滅させます。

    Lチカプログラムの作成
    コードのインポート

    CubeMXで生成したコードをSW4STM32にインポートします。

    SW4STM32を起動して、FileメニューからImportをクリックします。

    Existing Projects into Workspaceを選択してNextをクリックします。

    Import Projectsウィンドウが開くので、Select root directoryのBrowseボタンをクリックして、CubeMXで生成したコードが入っているフォルダ(前回作成したblink_led)を選択します。

    Import ProjectsウィンドウでFinishボタンをクリックすれば、インポートされます。
    画面左側のProject Explorerにblink_ledプロジェクトが追加されているので、横の「>」をクリックして中身を開きます。Srcフォルダの下にmain.cファイルがあるので、ダブルクリックして画面中央のエディタに表示します。

    Lチカコード追加

    CubeMXで生成されたmain.cファイルには、次のようなループが書かれています。

    /* USER CODE BEGIN ○○○ */ と /* USER CODE END ○○○ */ に挟まれている部分は、CubeMXで再度コードを生成したときに上書きされません。

    なので、次のように書き加えます。

    頭に「HAL_」とつく関数はSTM32の機能を使いやすいようにあらかじめ用意されたものです。(マニュアルはこちら
    HAL_GPIO_TogglePin()はGPIO出力に設定されているピンのHigh/Lowを切り替えることができる関数です。LEDとつながっているGPIOのポート(GPIOC)とピン番号(GPIO_PIN_15)を指定します。
    HAL_Delay()は指定した数字の分だけミリ秒単位で待機する関数です。上の例では100ms待機します。

    ビルド

    ProjectメニューからBuild Allをクリック、あるいはCtrl + Bでビルドします。問題なければ画面下部のコンソールにBuild Finishedと表示され、実行ファイルであるelfファイルが生成されます。

    Lチカプログラムの実行

    STM32マイコンへの書き込みには、CubeProgrammerを使用します。

    CubeProgrammerのインストール

    CubeProgrammerはSTM32にプログラムを書き込んだり、デバッグができるソフトウェアです。こちらのページからダウンロードします。
    ※最新版でないと新型のマイコンに書き込めないことがあります。今回はバージョン2.0.0をインストールしました。

    接続&書き込み

    USBシリアル変換モジュールとマウス基板を接続します。STM32F7は電源を入れる時orリセット時にマイコンのBOOTピンをHIGHにしていれば、書き込み可能になります。この基板では書き込みボタンを押しながら電源を入れます。

    CubeProgrammerを起動して、接続方法としてUARTを選択し、「CONNECT」ボタンを押します。

    接続に成功したら、画面左端の「↓」ボタンを押して「Erase&Programming」画面に切り替えます。次に「Browse」ボタンで先ほど生成した実行ファイルを選択して「Start Programming」ボタンで書き込みを開始します。

    「Run after programming」がチェックされていると、書き込み完了と同時にLチカプログラムが実行され、LEDが点滅を始めます。

    次回

    次回は、シリアル通信でマイコンからPCに文章を表示してみたいと思います。

    続きを読む ›

    Posted in DCマウス研修


    マイクロマウス研修(kora編)[21] STM32マイコンの初期設定

    こんにちは。koraです。

    今回は、新型マイクロマウスに使うマイコンの初期設定を行います。

    SW4STM32のインストール

    HM-StarterKitではRenesasマイコンの開発環境としてCS+を使っていました。新型マイクロマウスに搭載しているSTM32マイコンの開発環境としては、SW4STM32(System Workbench for STM32)を使用します。

    SW4STM32のインストーラをダウンロードするには、OpenSTM32 Communityにログインして、左端にあるMenu欄の「System Workbench for STM32」からダウンロードページを表示します。Windows版はWindows7のみ対応のように書いてありますが、一応Windows10でも動くらしいです。

    ダウンロードしたインストーラを起動してインストールします。インストール完了後、SW4STM32を起動すると、workspaceを選択するように求められます。ここで選択したフォルダの下に、ソフトウェア関連のファイルを保存していくことになります。

    STM32CubeMXのインストール

    STM32CubeMXはSTM32マイコンの初期設定を視覚的に行うことができるソフトです。UARTやSPIやADCといった機能の初期設定用のコードも生成してくれます。こちらのページからダウンロードできます。ダウンロードが終わったらインストーラの指示に従ってインストールすればOKです。

    プロジェクトの作成

    CubeMXを起動したら、File → New Projectをクリックし、「New Project」画面を開きます。
    検索欄に今回使用するマイコン名「STM32F732RE」を入力し、選択欄で「STM32F732RE」をクリックして、右上の「Start Project」ボタンをクリックします。

    プロジェクトを作ったら、File → Save Project Asで、SW4STM32のworkspaceにプロジェクト名(今回はblink_led)を付けて保存します。

    ピンの設定

    プロジェクトが作成されると、まず「Pinout&Configuration」タブが表示されますので、回路図に合わせてピンひとつひとつにGPIOの出力やSPIのクロックといった機能を設定します。

    クロックの設定

    「Clock Configuration」タブを開いて、クロックの設定を行います。
    できるだけ処理速度を高めたいので、CPUクロック(HCLK)を最大値の216MHzにします。この値が大きいほどマイコンの消費電力も大きくなるらしいですが、それは今後の動作を見て調整しようと思います。

    コードの出力

    「Project Manager」タブを開いて、「Toolchain/IDE」をSW4STM32にします。また、「Generate Under Root」にチェックを入れます。

    次に、「Code Generator」ページで「Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral」にチェックを入れます。これにチェックを入れない場合、初期化コードがmain.cにまとめて書かれてしまい、ファイルが長くなって読みにくくなるためです。

    設定が終わったら、画面右上の「GENERATE CODE」ボタンを押します。これで、STM32の初期設定が書かれたC言語のコードが出力されました。

    次回

    今回出力したコードから、LEDを点滅させるプログラムを作りたいと思います。

    続きを読む ›

    Posted in DCマウス研修


    shotaのマイクロマウス研修14[回路設計② 電源回路]

    こんにちは、shotaです。

    社員研修として、オリジナルマウスの製作しています。

    [前回の記事]では回路ブロック図について書きました。

    今回は電源回路について書きます。

     

    マウスの回路ブロック図(振り返り)

    マウスの回路ブロック図は以下のとおりでした。

    今回は、この左上部分の電源回路について書きます。

     

    電源回路の回路ブロック図

    電源回路のブロック図はこのようになりました。

    点線から左側が外部回路で、LiPoバッテリが接続されます。

    点線から右側が内部回路で、コネクタから始まり、スイッチやLDO、その先にはESP32マイコンやモータドライバが接続されます。

     

    それでは、各ブロックの役割を左から順に説明します。

    LiPoバッテリ

    LiPoバッテリは、電源回路(広く言えばマウス回路)の電源供給源です。バッテリがなければ回路は動きません。

    どのLiPoバッテリを使用するかは、動かしたい回路の電源電圧や消費電流などから選定します。

    今回は[HM-StarterKit(通称ハムスター)]で使用しているバッテリ 3.7V 150mAhを使用する予定ですが、容量を何mAhにするかは実際に動かしてみて決めたいと思います。

    ESP32はWiFiやBluetoothが使用できるので、150mAhでは容量が足りないことを懸念しています。

     

    別のLiPoバッテリ使用する場合は、[Amazonで”lipo 3.7V”と検索]したり、模型屋さんでドローン用のバッテリを調べたりして入手しようと思います。

     

    電源コネクタ

    電源コネクタは、使用するバッテリのコネクタ形状に合うものを選びます。

    今回はハムスターで使用しているものと同じ、JSTのZHコネクタを使います。

    [ZHコネクタ データシート]

    ケーブルが車体外に飛び出ないようにトップ型を選びます。

    また、ケーブルを繰り返し抜き差しすることを想定して、スルーホールタイプ(表面実装タイプではない)を選びます。

    (私はケーブルを外すときに、表面実装のコネクタを剥がした経験があります)

     

    続きを読む ›

    Posted in DCマウス研修, ブログ, 研修