前回製作したベンチを使って、モータの回転数を測定してみました。以降の検証用のツールとしては、まあままうまく作れたかも。今回はその測定結果と、回路およびプログラムの変更、調整点を紹介します。
回路とプログラム、両方とも変更
プログラムの前に、まず回路変更から。実際にモータを回して動作確認をしたのですが、どうもおかしい。モータの回転数相当のアナログ電圧が出力されるところ、時々電圧が上下にジャンプします。たぶんアレということで、パルス検出の入力にコンデンサ100pFをを追加しました。無事解消、以下の接続図です。

プログラムをGitHubにアップロードしておきました。
自転車のホイール速度測定用のプログラムに対し、より速い速度に対応させるため前回パルスからの無効時間を2msecに短縮しました。さらに、グラフ化した際に横軸をMCU自身が持つ経過時間データを使うよう、パルス取得時のタイムスタンプを記録するようにしました。GPTタイマーのクロックは0.333μsec、元々速いのでそのまま使いました。パルスの検出を立ち下がりに変更しています。これは立ち下がりパルスのほうが立ち下がりにくらべて急峻なので、より正確に時刻を取得できるだろうと考えたためです。
アナログ出力は、最初にalalogwrite(DAC, 0)で初期化し、loop()での結果出力はレジスタ直接アクセスを使っています。シリアルモニタではタイムスタンプ、パルス幅、回転数を表示しています。モータ1回転毎に取得したデータをモニタで表示するとともにDACへ送り、フィルタ処理などはしていません。
測定してみよう
FA-130RAモータの回転数のアナログ電圧をオシロスコープで観測しましたので、それを動画で示します。モータが止まっているところから定電圧電源の3Vを接続し、無負荷回転数になったら電圧を外しています。上の黄色線が回転パルス、下のピンク色が回転数の電圧出力で5000rpm/divです。
慣性マスが付いているといっても、意外に速く回転が上がりますね。モニタのほうはモータ1回転につき1行なので回り始めると激しく表示が更新されますが、さすがUSB-CDCで取りこぼしはなさそうです。GitHubに動画の時の数値データをCSVファイルでアップロードしました。クロックの分解能など、データをより具体的に見てもらえるかと思います。横軸が経過時間sec、縦軸がモータ回転数rpmでグラフ化したものを示します。

補足
モータ回転のデータが1回転毎に取れますので、回転上昇の加速度がわかります。これにトータルの慣性マスがわかれば、その1回転の間の瞬時トルクが計算できるはず。取り付けた真鍮の円板は寸法が既知ですので慣性マスは計算できますが、モータのロータの慣性マスは机上計算が簡単そうです。モータ状態での実測は、ブラシの影響があったりして容易ではなさそう。
プログラムでは、シリアルモニタ出力→DAC更新の順で実行しています。これはパルス入力とDAC出力の間にあるUSBアクセスの時間をオシロスコープで観測するためで、それによれば130モータではまだまだ余裕ありです。より早く電圧を更新するために、DACの更新を先にするか更新を割り込み内で実施することもできます。
ミニ四駆はやらないのでなんですが、うまく応用すれば各種モータの違いが定量的に測れるかもしれませんね。クロックが速いので無負荷回転数30000rpmのモータにも対応できそうですが、設定した無効時間2msecのさらなる短縮も必要です。あのモータの販売終了が惜しまれます。