4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自作BLDCモーターで音楽を奏でる方法2選

4
Last updated at Posted at 2025-12-25

もくじ

はじめに
BLDCモーターとは
自作BLDCモーター
方法1
方法2
おわりに
参考文献

はじめに

みなさんモーター演奏はしたことありますか。僕はあります。
よく見るモーター演奏は以下のようなDCモーターでのものです。

よくあるDCモーター演奏は解説記事がたくさん上がっており、ここで記事にしてもあんまり面白くないので、自作のBLDCモーターでの演奏を2種類の方法で実装します。

当記事は(非公式)鳥羽商船高専アドベントカレンダーの12/24担当の記事です!

BLDCモーターとは

B(Brush)・L(Less)・D(Direct)・C(Current)
その名の通り、ブラシ(整流子)がないモーターです。整流子部分の物理的接触がなく、メンテナンスフリー、駆動音低減(当記事ではわざと音を出すが)が売りです。
3端子のものが主流で、3相交流電圧をかけると内部で回転磁界が発生して磁石のついたローターがくるくる回ります。

fig4-sinusoidal-control-en.gif
引用:https://www.renesas.com/ja/support/engineer-school/brushless-dc-motor-02-inverter-pmw

自作BLDCモーター

ロボコンが終わって暇だったのでBLDCモーターを自作しました。
12極9スロットで、ステータのコアにはネジを使用しています。
固定用の穴とかホールセンサとかも全然つけてないので、とりあえずの試作です。コギングトルクも強すぎるので実用化は厳しい。
(いい感じに作り直してアクチュエータを作る可能性あり)

CAD
image.png
筐体を印刷

巻線まきまき

120度通電制御

BLDCドライバ(おまけ)

image.png
image.png
image.png

回ったは良いものの、このモーターではまともにロボットも動かせないので、音を出して遊びます。

方法1

単音の周波数と、その音の長さが入った配列をマイコンにぶち込んで、120度通電制御をする際のPWM信号の周波数を動的に可変させて音を出す方法があります。
MIDIファイルとかを音の周波数と長さに変えて出力するプログラムをpythonとかで組めばある程度簡単に実装が可能です。

STM32のHALで実装するなら下のような感じになります。

//呼び込みくんの音階の周波数と長さ(msec)が入った配列!
double sound_freq[118] = {440, 440, 493, 440, 369, 440, 440, 440, 493, 440, 369, 440, 293, 293, 329, 369, 293, 369, 440, 440, 293, 293, 293, 329, 369, 293, 293, 293, 329, 369, 329, 329, 293, 329, 369, 440, 391, 369, 329, 440, 440, 493, 440, 369, 440, 440, 440, 493, 440, 369, 440, 293, 293, 329, 369, 293, 369, 440, 440, 293, 293, 293, 329, 369, 293, 293, 293, 329, 369, 329, 329, 293, 329, 369, 440, 391, 369, 329, 440, 440, 493, 440, 369, 440, 440, 440, 493, 440, 369, 440, 293, 293, 329, 369, 293, 369, 440, 440, 293, 293, 293, 329, 369, 293, 293, 293, 329, 369, 329, 329, 293, 329, 369, 440, 391, 369, 329, 293};
double sound_interval[118] = {0, 214, 428, 214, 214, 214, 428, 214, 428, 214, 214, 214, 428, 214, 428, 214, 642, 214, 642, 214, 857, 214, 214, 214, 214, 857, 214, 214, 214, 214, 857, 214, 428, 214, 428, 428, 428, 428, 428, 428, 214, 428, 214, 214, 214, 428, 214, 428, 214, 214, 214, 428, 214, 428, 214, 642, 214, 642, 214, 857, 214, 214, 214, 214, 857, 214, 214, 214, 214, 857, 214, 428, 214, 428, 428, 428, 428, 428, 428, 214, 428, 214, 214, 214, 428, 214, 428, 214, 214, 214, 428, 214, 428, 214, 642, 214, 642, 214, 857, 214, 214, 214, 214, 857, 214, 214, 214, 214, 857, 214, 428, 214, 428, 428, 428, 428, 428, 428};
//current_time...msecを数えるやつ
//last_music_time...このif文を最後に実行した時間
//music_interval...何msec同じ周波数で音を出すか
//timer_clock...PWMを生成するタイマーの元の周波数
//counter_period...PWMを生成するタイマーのカウンターピリオド
//music_count...どれだけ音楽がすすんだか
if ((current_time - last_music_time) >= music_interval){
	htim3.Init.Prescaler = (int)( (timer_clock)/( (counter_period + 1) * (int)sound_freq[music_count] ) ) - 1;
	HAL_TIM_Base_Init(&htim3);
	music_interval = (int)sound_interval[music_count + 1];

	music_count++;
    last_music_time = current_time;
}

これでTIM3から出るPWM周波数は呼び込みくんの音になる。
あとはPWMを出すピンをいい感じに切り替え(120度通電制御)たらBLDCが音楽を鳴らしながら回転する。

フラワリングナイトを鳴らす動画(プチバズした)

方法2

D級アンプの雑魚版を作ってBLDCにぶち込みます。
はじめにで紹介した2つ目の動画でもほぼ同じ手法を使っています。
DCモーターでは割と簡単なのですが、BLDCモーターでは電流が流れる相を動的に切り替える必要があるので、デジタルでの制御を使う必要があります。

D級アンプって?

アナログ信号をパルス幅変調して、デジタル信号に直した後、MOSFETで構成されたハーフブリッジやフルブリッジを使って、増幅した信号をスピーカーを鳴らす方式のアンプです。
PWM信号はモータードライバと相性が良いので、この仕組みを使ってモーターを鳴らしつつ、回したいと思います。

D級アンプ的なのを作る

image.png
こんな構成にしました。
・3.5mmjackから取ったオーディオを三角波の振幅に合うように非反転増幅回路で増幅します。(Audioラベル)

・電圧比較回路と積分回路を組み合わせて三角波発生回路を作ります。(Triangle_Waveラベル)
三角波の周波数の理論値は

\frac{100 \times 10^3}{4 \times 1 \times 10^3 \times 0.47 \times 10^{-6} \times 1 \times 10^3} = 53191.48936...[Hz]

となりますが、実際に作ると30kHz程度でした。たぶんESRとかの関係でしょう。

・高速オペアンプのLM7171を使ってAudioとTriangle_Waveを比較し、パルス幅変調します。両電源動作なので、出力されるPWM信号のLOWの電圧は-12V程度に飽和しています。負電圧成分を取り除きたいのでむりやりダイオードを噛ましています。後述する回路でTTLレベルを使用するので1815をスイッチ代わりに使って5VのPWMに変換します。この時、論理反転しますが、LM7171でパルス幅変調する際、Audioをマイナス端子、Triangle_Waveをプラス端子に接続しておりもともとのPWMが反転しているので、1815のスイッチング動作により正しいパルス幅に戻ります。

・マイコンから出力されるU_EN,V_EN,W_ENと先で生成したPWM信号をAND回路で比較し、電流を流す相を指定します。

・U_PWM,V_PWM,W_PWMを使いおなじみのハーフブリッジ回路を動作させます。U_SD,V_SD,W_SDもマイコンからの信号です。NchMOSFETには余っていたTK100E06N1を使用しました。

以上の回路により、モーターに流す電流はパルス幅変調されたオーディオ、電流が流れる相はデジタルで制御、を実現することができます。
今思うと相の選択はPchMOSFETとかを使ったほうがトランジスタとか使わなくて済んだのになとか考えたりしますが、時間がなくて焦っていたので仕方が有りません。
使ってるオペアンプはSONYカスタムの4559とLM7171ですが、普通のD級アンプにも使えそうなくらいブルジョア構成ですよね。

PCBに起こす時間がなかったのでユニバーサル基板にシコシコはんだ付けします。

できた。
image.png

制御

これをやる。
fig3-the-changing-resultant-ja.gif
引用:https://www.renesas.com/ja/support/engineer-school/brushless-dc-motor-02-inverter-pmw

実際に、回してみた。

音が小さいですね。そもそもBLDCは音が小さいものなので音が小さいです。あとコギングトルクがでかすぎてブルンブルンする音も大きすぎます。
DCモーターで鳴らしたときほど迫力がなくてしょんぼりしました。

おわりに

投稿遅れてごめんなさい。言うほど最高のモーター演奏はお届けできませんでした!さいなら!

参考文献

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?