【STM32備忘録】STM32CubeIDEにおけるプロジェクトの作成方法
はじめに
STM32の使い方を自分用の備忘録として残していこうと思います。
まずはプロジェクトの作成から。何回もやる操作ではないので、忘れないように操作方法をメモ。
プロジェクトの操作方法
プロジェクトの新規作成
「File」 → 「New」 → 「STM32 Project」をクリック。
以下のような画面が出るので「Board Selector」を選択し、「Commerical Part Number」の欄に使用したいボードの型番を入力。「Boards List」に検索で引っかかったBoardが表示されるので使用したいものをクリックし、「Next >」をクリック。マイコン単体の場合は「MCU/MPU Selector」で同様の手順を行えば良いと思う。
「Project Name」を入力し、「Next >」をクリック。「Opition」はC++で開発したいなら「Targeted Language」は「C++」を選択、CubeMXでGenerate Codeをしたい場合は「Targeted Project Type」は「STM32Cube」を選択すれば良いと思う。
デフォルトのまま「Finish」をクリック。
以下のような表示が出たら「Yes」クリック。
プロジェクト作成完了。Nucleo Boardを選んでプロジェクト作成すると既にいくつかピンの設定がされている状態になってた。
フォルダの新規作成
フォルダを新規作成したい階層で右クリックし「New」→「Folder」をクリック。
「Folder name」にフォルダ名を入力し、「Finish」をクリック。
フォルダが新規作成される。
ファイルの新規作成
ファイルを新規作成したい階層で右クリックし「New」→「File」をクリック。「File from Template」から作成すると作成ファイルの頭にコメント文で作成日などが自動で入る。
「File name」にファイル名を入力し、「Finish」をクリック。ファイル名は拡張子まで入れると自動で何のファイルか認識してくれる。
ファイルが新規作成される。
ファイルのインポート
ファイルをインポートしたい階層で右クリックし「Import」をクリック。
「General」→「File System」を選択し、「Next >」をクリック。
「Browse...」でインポートしたいファイルがあるフォルダを選択するとその中にあるファイルが表示される。インポートしたいファイルにチェックを入れて、「Finish」をクリック。
ファイルがインポートされる。プロジェクトにコピーが作成されている感じなので元のフォルダからインポート元のファイルが消えることはない。
インクルードパスの追加
新規作成したフォルダにあるファイルはインクルードパスが通っていないので、そのままだとビルドエラーになる。
インクルードパスに追加したいフォルダで右クリックし「Add/remove include path...」をクリック。
デフォルトの状態で「OK」をクリック。
ビルドが通るようになった。
おわりに
一通りプロジェクト作成における操作をまとめました。次はGPIOの設定をやります。
やりました↓↓↓ sbasami-tech.hatenablog.com
NchMOSFETだけのハーフブリッジ回路のハイサイド駆動について
はじめに
BLDCモータの駆動回路を見るとハーフブリッジ回路を3つ使用してると思いますが、この時のハーフブリッジ回路の構成としてはPchMOSFETとNchMOSFETを使用したもの、NchMOSFETだけを使用したものがあります。
NchMOSFETだけでハーフブリッジ回路を構成する場合、ハイサイドの駆動には「電源電圧より高い電圧が必要になる」という文言をよく見るのですが、なんで高い電圧が必要なのか自分で理解しきれていない部分があったので今回まとめてみます。
NchMOSFETの動作
ハイサイド駆動について書く前にNchMOSFETの動作について整理します。FETの動作は様々なサイトで既に説明がたくさんありますので、ここでは簡単に書きます。スイッチング用途でNchMOSFETを動作させるにはゲート・ソース間電圧(Vgs)にゲートしきい値電圧(Vth)以上の電圧を印加するとON、しきい値電圧以下の電圧(基本的には0Vかな?)を加えるとOFFになります。
ゲートしきい値電圧(Vth)は基本的にデータシートに記載されており、手元にあったサンケン電気のEKI04047のデータシートを見ると以下のようになっています。この場合は2.5V以上の電圧を印加すればNchMOSFETがONになると思われます。
エンハンスメント特性について
ゲートしきい値電圧(Vth)に関連するものとしてエンハンスメント特性というものがあります。エンハンスメント特性とは「ゲート・ソース間電圧(Vgs)に印加する電圧が大きくなるほど流せるドレイン電流(Id)が大きくなる」というものです。ここでまた、サンケン電気のEKI04047のデータシートを見るとドレイン電流Idとゲート・ソース間電圧(Vgs)電圧は以下のようになっています。
上図を見るとゲート・ソース間電圧(Vgs)によって流せるドレイン電流Idが変わっていることが分かります。電気的特性の表に書いてあったゲートしきい値電圧(Vth)の2.5Vを印加しただけではドレイン電流Idにはそこまで大きな電流が流せないこともこの表から読み取れます。実際にEKI04047を使用する場合はゲートしきい値電圧(Vth)ギリギリの電圧を印加するのではなく5V程度にするのが良さそうですね。
注意点としてゲート・ソース間電圧(Vgs)に印加できる最大電圧も決まっています。EKI04047のデータシートを見ると絶対最大定格の表には±20Vまでとなっているのでこれ以上の電圧をゲート・ソース間電圧(Vgs)に印加すると壊れます。
更に余談ですがEKI04047はホームページを見ると「新規設計非推奨」になっています...。
NchMOSFETのハイサイド駆動
それでは本題です。以下に簡単なハーフブリッジ回路を示します。上側のMOSFETをハイサイド、下側のMOSFETをローサイドといいます。図中のNchMOSFETはEKI04047と思ってください。
ローサイドのNchMOSFETの駆動ですが、これはソースがGNDに接続されているため先程のNchMOSFETの動作で説明した内容でどう動くか分かると思います。
ハイサイドのNchMOSFETの駆動ですが、ここからは自分の推測など入ってます。段階的にハイサイドの状態を追っていきます。
- IN_H、IN_Lが共に0Vとすると、"OUTPUT"の電圧は抵抗を介してGNDに接続されているので0Vです。
- ここでIN_Hに5Vを印加するとゲート・ソース間電圧(Vgs)はゲートしきい値電圧(Vth)以上になるためハイサイドのNchMOSFETがONになります。
- NchMOSFETがONになると"OUTPUT"の電位は電源電圧の5Vに引き上げられます(実際にはMOSFETのオン抵抗RDS(ON)があるので多少ので電圧降下はあります)。
- "OUTPUT"が5Vになるとゲート電圧とソース電圧が同電位となりゲート・ソース間電圧(Vgs)は0Vになります。
- 結果としてゲート・ソース間電圧(Vgs)はゲートしきい値電圧(Vth)以下となりハイサイド側のNchMOSFETはすぐにOFFに戻ってしまいます。
この現象を回避する方法としては、NchMOSFETのゲートに印加する電圧を"電源電圧+ゲートしきい値電圧(Vth)"以上にする必要があります。これはつまり「電源電圧より高い電圧が必要になる」ということだと理解しました。
おわりに
今回はNchMOSFETでハイサイド駆動する場合に「電源電圧より高い電圧が必要になる」理由についてまとめてみました。正直書いたことが正しいか不安ですが、自分の中ではこう考えて理解したってことになります。
ここまで来たら次はどうやって電源電圧より高い電圧を作り出すかってことになりますが、方法としてはブートストラップ回路等あるようですがまだ理解が追いついていない状況です。
BLDCモータを駆動させる道は長い...。
参考文献
NchMOSFETの動作について
NchMOSFETのハイサイド駆動について
【自作ドローンの製作Ⅱ】第2回:製作中止のお知らせ(嘘)
はじめに
第1回では自作ドローン2号機を作るぞ!ということで製作にあたっての構想をまとめました。
第2回は残念ながら制作中止のお知らせです。
制作中止の理由
機体のフレーム設計で行き詰まってしまいました。とりあえず不格好でも動くもの作れればいいかなとか思ってましたが、モチベーションが保てなかったです。
一応基板とか作ってたんだけどね、パーツも買ってたんだけどね...。
おわりに
なんだかんだ電子工作やりたい欲はあるので、時間を開けてまた何か作れれば良いなと。自分が納得行くマイクロマウスとドローンをいつか作りたい...。
中止なんてしなかった、ハードウェアできました↓↓↓
【自作ドローンの製作Ⅱ】第1回:機体の構想
はじめに
以下の記事で自作ドローンを製作し、飛行させることはできましたがまだまだやりたいことはあるので2号機の製作に挑みたいと思います。
今回のテーマはズバリ「チルト機構を有するドローン」です。チルト機構?なんじゃそりゃ?と思う方が多いと思いますが、実際に作りたいドローンは以下の記事にあるようなものです。
つまりは、モータ等で推力方向を変えることができる機構を持ったドローンを作りたいのです。これの何が魅力的かというと傾いた状態や垂直状態など色々な姿勢で飛べるという点です!!!すごい!!!
第1回ではドローン製作にあたっての現時点での構想をまとめておこうと思います。
構想
今回のドローンのイメージを以下の図1に示します。現状はロッドの部分にサーボモータを取り付けて推力方向を変えることができれば良いかなと思っています。
サーボモータについては以下の記事で自作したことがあるのでそれを使います。過去の知識を活かしていきたい。
また、以下の記事でKISS ESCとDSHOT通信をすることが出来たので、テレメトリー機能で回転数をフィードバックしてBLDCの回転数制御も実装したいですね。
後は前回のドローン製作では出来なかった位置制御にも挑戦する予定。使用予定のモジュールは前と同じ。
おわりに
簡単ではありますが自作ドローン2号機の構想を書きました。未知な部分が多いので完成させることができるか怪しいですが、ぼちぼちやっていくつもりです。
次回は何について書くかなあ...
制作中止となってしまいました...↓↓↓
Teensy4.1でKISS ESCとDSHOT通信する
はじめに
最近のBlHeli32やKISSなどのESCファームウェアはテレメトリ機能が搭載されており、回転数や電圧、電流をフライトコントローラ側に返すことができるようになってきました。また、フライトコントローラからESCへの指令値もPWMだけでなくDSHOTと呼ばれるデジタル信号のものが出てきています。
ESCのプロトコルについて興味がある方は以下のサイトが参考になります。
正直、これらの機能を使う一番の近道は市販のフライトコントローラを買ってくることだと思いますが、自分は何故かフライトコントローラの自作に拘っているので、なんとかTeensyとかのマイコンでDSHOTとテレメトリ機能を使えないかとネットの海を彷徨っていました。
今回はteensySHOTと呼ばれるTeensy 3.5と4.0でDSHOT通信とテレメトリの受信が可能なプログラムが公開されていたのでこれを自分の環境で使用したらどうなったか書こうと思います。
teensySHOT
teensySHOTはGItHubで公開されています。
公開されているプログラムは大きく分けて4つに分類できます。
- DSHOT.cpp:DSHOT600通信を行うプログラム
- AWPID.cpp:アンチワインドアップPID制御を行うプログラム
- ESCCMD.cpp:TeensyとESCの双方向通信を行うためのプログラム
- ESCPID.ino:メインプログラム
プログラムの関係は下図のような感じです(あくまでも自分のイメージ)。
自分の場合、制御は自前で実装しようと思っていたのでTeensyとESCの通信関係のプログラムだけを使わせていただきました。なお、自分が確かめた限りではこのプログラムはKISSファームウェアのESCでしか動作しません。BlHeli32ファームウェアのESCも試してみましたが動作はしませんでした。
Teensy4.1でKISS ESCのDSHOTとテレメトリ機能を使う
使用部品
今回使用した部品は以下のとおりです。
プログラムはTeensy 4.0を対象としているようですがTeensy 4.1でも問題なく使えました。
回路図
回路図と呼べるほどのものではないですが一応示しておきます。
プログラム
実験で使用したソースコードを以下に示します。このプログラムはシリアルモニタで入力した数値(0~1999)に応じてモータが回転するというものです。ESCPID.inoを自分なりに改造した形になっています。
Teensy4.1でKISS ESCとDSHOT通信するプログラム
プログラム中のシリアル通信関連のコードは以下のサイトを参考にしました。
ここで示したプログラムは自分が書いた部分だけですが、動作させるにはGItHubで公開されている以下4つのプログラムも必要です
- DSHOT.h
- DSHOT.cpp
- ESCCMD.h
- ESCCMD.cpp
フォルダ構造としては以下のようにしてください。
以下の画像はプログラム動作中のシリアルモニタです。ESCの情報がTeensy 4.1で取得できていることがわかります。
おわりに
今回はTeensy4.1でKISS ESCとDSHOT通信する方法について書きました。テレメトリ機能も使えているようなので次回製作予定の自作ドローンにはBLDCモータの回転数制御を実装予定です。
個人的にはESCも自作してしまいたいのですが、BLDCモータは制御が難しい(そもそも情報が少ない)のとインバータ回路の知識も必要なのでハードル高いですね、いつかはやってみたいですが。
Teensy4.0でS.BUSを使う
はじめに
以下の記事でドローンを製作した時にTeensyでS.BUSを使用したのでそれについて書いていきたいと思います。
S.BUSとは
S.BUSを簡単に説明するとフタバが開発した独自のシリアル通信規格です。詳細については以下のブログがとても参考になります。
TeensyでS.BUSを使う
使用部品
今回使用した部品は以下の通りです。
回路図
実験の回路図は以下のようになります。S.BUSは信号をそのままマイコンのRXピンに入力することが出来ず、信号を反転させてやる必要があります。回路図のトランジスタ回路はこの為にあります。
R3206SBMは以下の画像に示すように赤、黒、白の線が出ています(緑はアンテナです)。
それぞれの線は以下の通り、信号線をトランジスタ回路を通してTeensyのRXピンに繋いでください。
- 赤:3.2~8.4V
- 黒:GND
- 白:信号線
使用プログラム
実験で使用したのソースコードを以下に示します。
以下の画像はS.BUSを受信した時のシリアルモニタです。T6L Sportは6chしかないのでその部分だけが変化しています。
おわりに
今回はTeensy4.0でS.BUSを使用する方法について書きました。今回示したプログラムでは1~16chの信号しか見てませんが、実はデジタルチャンネルの17ch, 18ch、通信がロストしたことが分かるFrame lostやFailsafeに関する信号も送られてきています。
この辺りも取り出して確認したい場合は以下のGitHubのコードが参考になります(SBUS.cppの73行目辺り)。
【自作ドローンの製作】第4回:機体のスペック紹介と飛行実験
はじめに
第3回は中間報告ということで進捗状況を軽くまとめ、今後のタスクを改めて確認しました。
第4回では完成したドローンのスペック紹介と実際に飛行している様子を紹介したいと思います。第3回で示したタスクはなんとか完了し、その勢いで機体製作も終わり、飛ぶところまで行っちゃいました。
製作したドローン
今回製作した自作ドローンを以下に示します。基板とモータはダンパで分離して振動対策しています(正直ダンパの効果とか使い方よく分かっていない)。ただ、SDカードに関してはBMI088と同時に動作できなかったので飾りになってしまいました...。
機体スペック
サイズ | 160×160×55mm |
重量 | 121g |
マイコン | Teensy4.0 |
ESC | RCX BS-15A Pro 4-In-1 BLHeli_S ESC |
姿勢センサ | BMI088 |
プロペラ | LDARC/Kingkong 1935-3S |
モータ | RCX RS1103 7800KV Micro FPV Racing Motor |
バッテリー | LDARC/KingKong FPV EGG Li-Polymer Battery 7.4V (2 Cells) 550mAh 80C |
受信機 | R3206SBM |
フレーム | 3Dプリンタ(ナイロン素材) |
その他外観
横から見た図。バッテリーはマジックテープで固定。モータのフレームとバッテリーのフレームは独立していて取り外せるようになっています。
前から見た図。養生テープで包まれているのが受信機です(同梱してあった熱収縮チューブをなくしてしまった...)。
飛行実験
機体を実際に飛行させた時の動画が以下になります。結構安定して飛んでいて自分でもビックリ。
おわりに
第4回では完成したドローンのスペック紹介と実際に飛行している様子を紹介しました。今回で【自作ドローンの製作】については最終回とします。
とりあえず当初の目標であった「自作ドローンを制作する」事を達成できたので今回のプロジェクトは成功と言えるでしょう。成功基準としてはフルサクセスの「ドローンをマニュアル制御で飛行させる」を達成できたので自分的にも満足です。
自動制御での飛行やSDカードへの書き込みなど出来なかったこともありますが、それは今後の課題ということで機会があれば挑戦したいです。