それに伴い、本ブログのURLはhttp://vvvf.blog.jp から http://blog.henden.netに変更しました。
旧URLからのアクセスの場合は自動転送されますがブログの内容に変更はございませんのでご安心ください。
電子工作の初心者がモータを演奏したりVVVF音を再現したりする方法を紹介するブログ ホビー向けの電子工作を基礎から書いていきます 記事のミス等のお問い合わせはTwitterにてお願いします。 当ブログを参考に製作をする際は必ず自己責任にて行ってください 当ブログを参考にしたことによる損害等の責任は一切負いません ドメイン取得につきURLを http://vvvf.blog.jp から http://blog.henden.net に変更しました
しばらくするとものすごい数の人が来ました。大阪のメイカーズバザールを優に超えるような勢いだったので説明もかなり疲れた…めむくろ@MEMchro
MFTかよ!?って長さの入場列になってて笑ってる #MFKyoto2019 https://t.co/tiCyYzgJUw
2019/05/04 12:02:08
ファンに続いて次はBLDCモータを演奏してみました。
BLDCモータは名前の通り整流子(ブラシ)のないモータでモータ自体は3相の同期電動機の一種です。ですので、制御を工夫すれば割といろいろなことができるのです。今回は作品を作るにあたって試した制御方法(主にパルスモード)のお話をしたいと思います。
まず初めにBLDCモータの駆動原理を紹介します。BLDCは普通のブラシモータやファンみたいにモータの端子に電圧をかけるだけでは全く駆動しないばかりか、過大な電流が流れて場合により電源回路やモータなどが破損します。BLDCではブラシの代わりに制御回路でモータを回転させるパルスを作り出す必要があるのです。
まずはモータの駆動方法を紹介します。
BLDCモータは下図のような構造です。
モータの回転軸には永久磁石、固定部に電磁石(コイル)が配置されています。回転部に電流が流れないのでブラシが不要になるというわけです。そして、固定部(この図では外周部)の電磁石にU→V→Wの順に回転するように電流を流すと、回転軸(この図では内部)の磁石が電磁石に引き寄せられる(反発する)ようにして回転を始めます。
具体的にはモータの各端子に以下のように電圧を印可させるとBLDCモータは回転を始めます。
印可されてる電圧は矩形波の三相交流です。BLDCモータは三相の同期電動機と同じ構造のためこのような波形で駆動するというわけです。ここでは、図の時間方向の1マス分を1単位として扱います。
BLDCモータは回転子の角度に応じて固定子の電磁石を制御しなければなりません。その制御の方法には大きく2つあり、1つは固定子の角度を読み取れるホールセンサが内蔵されたもの、もう1つはセンサが無くHIGH-Z状態端子に現れる電圧を監視し現在角度を読み取るものがあります。前者のモータの場合はセンサを制御マイコンに接続するだけ(プルアップ処理は要りますが)ですが、後者の場合周辺回路をいくつか組み込む必要があります。
なんですが、今回はBLDCでアクチュエータを動かすわけではなく音を奏でるのが目的です。演奏するには音階の周波数に合わせて電圧波形を生成するので回転角度を読み取ってもほとんど意味がありません。回転角度を読み取る制御にはコストがかかるのに加えて回転速度が音階に合わなくなる可能性もありメリットはほとんどありません。(脱調しないのはメリットですが…)そのため、今回は回転角度の読み取りは行いません。
次に演奏時のパルスモードです。BLDCを演奏する方法はファンや自作VVVFのようなモータの励磁音を利用する方式と、ステッピングモータのようなモータの回転音を利用する方式の2種類が考えられます。
まずは励磁音を利用するやり方です。励磁音を利用する場合でも回転速度を音階に関係ない速度にすると回転音がノイズとなってしまいます。そのため、回転速度と演奏PWMの速度を同期させたパルスを送る必要があります。パルス数は異なりますが自作VVVFの同期PWMと似たやり方です。実際の波形はこんな感じです。
この図の場合は1単位当たり2パルスでの駆動です。なお、出力される音は1秒間当たりのパルス数の音で1単位当たり2パルスの場合は回転数の12倍の周波数の音となります。
しかし、この方式の場合多くの音楽で使われる周波数帯域ではPWMの周波数が低いためモータが電流連続モードにならず過電流が流れてしまい、実運用ではとても使えるものではありませんでした…そのため、回転音を利用する方式へと方向転換しました
というわけで次は回転音を利用して演奏する方式です。
このモードではPWM周波数は高く設定し回転パルスとPWMを同期させません。自作VVVFでいうところの非同期モードに似たパルスモードです。この方式の場合はPWM周波数をモータが電流連続モードとなる10kHz以上にできるので過電流が流れにくくなります。
このモードではパルスの印可方法が2種類あります。本質的に大きく変わるものではありませんが…
1つめが非相補PWMモードです。
ローサイド側にはPWMを印可しません。また、ハイサイド側はPWMがOFFの時の出力はHIGH-Zになっています。
こちらもローサイド側はPWMを印可しませんが、ハイサイド側のPWMがOFFの時はLレベルに落とします。
この2つの使い分けはMOSFETのゲート駆動電源の都合になると思います。ブートスタラップ方式で非相補PWMにすると1/3回転分(2単位分)の時間のゲート駆動に必要な電力をブートストラップコンデンサに貯めておく必要があるため、非常に大容量なブートストラップコンデンサが必要となり現実的ではありません。それに対して相補PWMモードにした場合はPWM1パルスごとに充電できるため1パルス分に必要な電力をブートストラップコンデンサに貯めこめばよいため一般的なモータドライバと同じ小容量のコンデンサで済みます。そのため、今回は相補PWMを使い回転速度で音楽を演奏するシステムにしました。
なお、このパルスモードでは再生される周波数の音は実験を行ったところ回転速度の6倍(回転パルス数, 1秒間当たりの単位数)の倍の音が再生されました。
パルスモードのお話は以上です。続きは後編です。
今回はステッピングモータを演奏する基板以降で共通システムとして使ってる通信システムについて紹介します。
私の作ってる基板は原則分散型の処理にしているため基板ごとにマイコンを搭載しています。そしてそのマイコンが乗った基板(スレーブ)をマスター装置から指令を与えて特定の動作をさせています。今回はそのシステムについてのお話です。
マイコンの通信機能
一般的にマイコンに搭載されている通信機能はI2CやSPIそしてUARTなどがあります。この中でもI2CとSPIは標準でバス通信に対応していますが、I2Cは高機能ではあるものの基板内通信を前提に設計された通信のため基板外への通信となると安定性が悪化してしまいます。また、SPIはスレーブ1つにつき制御ピンが1つ必要となりスレーブの数が増えるとその分ピン数が増え不都合です。それに対し、UARTは標準ではマルチスレーブ機能に対応できませんが、RS485に比べると劣るものの基板外に出てもよほど長距離でなければ十分運用できる程度の通信の安定性があるのが特徴です。
アイデアの元
システムを考えていた時にふと目に入ったのがシリアル制御のサーボモータでした。シリアル制御のサーボモータはRS485やUARTでありながらIDを指定することでマルチスレーブに対応できるのが特徴です。システム的にはI2Cにも似ているのものの、ベースはUARTやRS485というだけで信頼性は十分にあります。そこで、UARTをID指令式で運用するという方針でシステムの設計を行いました。
ハードウェア構成
各基板同士を同一のシステムとして扱えるようにするためにハードウェアも共通化します。しかし、構造は非常にシンプルで回路図的には以下のような形です。
使用感覚としてはUSBのような感覚で使えるようにするためマイコン駆動の電源と通信線を同一のコネクタにまとめています。これによりコネクタ1つでロジック側の電源確保と通信回路が構成できます。また、ピンサインもUSBに近い形として1番ピンに電源、2,3番ピンで通信、4番ピンをGNDとしています。
また、配線量節約のため各基板に並列接続された2つのコネクタを設け数珠つなぎに対応させています。もちろんマスター側で分岐してからスレーブに接続することも可能です。
データはすべてRXピンから受信します。TXピンは将来的な拡張用でデータ異常時に再送要求を送る場合や、マスターから指示があった場合にスレーブから情報送信を出来るようにしています。
通信プロトコル
モタドラとして運用する場合の高い信頼性と演奏システムとして使う場合の大量送信を行うことを考え、連続的にデータを送信できてかつ受信データ抜けがあってもその後の通信には影響を与えないシステムを前提とします。そのため、特定のバイト数ごとにIDを送信するといったシステムは読み飛ばしなどで正しく動作しなくなるためNGです。つまり、何かしらの方法でIDデータを区別できるようにする必要があります。しかし、IDの前に間隔を置くと連続送信ができなくなるのでNGとします。
この条件をまとめると各データがIDなのかそうじゃないのかを区別する方法を考える必要があるというわけです。
ここで使うのが、MIDIのシステムの考え方です。MIDIは先頭のbitでチャンネル情報かそれ以外の情報かの区別を行っています。これと同様に先頭のbitが0か1かでIDデータの判別を行い。それに続くデータを送信内容(スレーブに送るデータ)にします。これにより、データの読み飛ばしがあった場合でも次のデータからは正しく読み込めるほか、連続したデータ送信にも対応できます。
bit番号 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
内容 |
ID判定 |
データbit {bit7 = 0 : 送信データ bit7=1:ID} |
このような構成にすることで複数バイトのデータ送信も簡単にできます。また、モタドラと演奏などIDごとに機能が違ってデータバイト数の違う基板を混在させることもできます。
さらなる信頼性向上
演奏の場合は通信速度の方が重要なので以上で紹介したシステムでデータ送信をしていますが、モタドラモードの場合はデータの化けやマスター側のトラブルなどで暴走などが起きると大問題になります。そのため、信頼性向上のためにさらに通信を拡張させています。拡張内容としては以下の2つです。
・パリティーチェック
・ウォッチドッグタイマー
まず1つ目のパリティーチェックについて紹介します。
このシステムでのパリティーは送信データ(ID以外)の各データをXORのbit演算を行ったものとしています。
まずは、マスター側で送信する各データをXORでbit演算し送信データの最後に付加します。
続いてスレーブ側では受け取ったデータをXORでbit演算し最後に送られてきたパリティーを比較して同一かの判定を行います。もしも異なった場合はそのデータは破損データとして無視する設定にしています。データ破損の場合は再送要求をするなどでさらなる信頼性向上も可能です。
続いてウォッチドッグタイマーです。
こちらは一定時間ごとにデータを送信し、一定時間以上データが途切れた場合にモータを停止させます。しかし、各モータの制御信号をウォッチドッグタイマリセット用に毎回送るとデータ量が非常に増えてしまいます。そのため、ウォッチドッグタイマリセット用のIDを別に作り、そのIDをマスターから送ることでデータ量を削減しています。スレーブ側は解除IDを受信すればウォッチドッグタイマーをリセットします。
以上で自分の演奏システムとかの通信関連のシステムとなります。
本ブログの記事のWORD版のデータです。こちらの方が見やすい記事も結構あると思います。
回路編第1~10回
https://www.dropbox.com/s/cj1y904u3lue8uh/%E5%9B%9E%E8%B7%AF1.docx?dl=0
回路編第11~13回
https://www.dropbox.com/s/m9rkc8nasnip4j3/%E5%9B%9E%E8%B7%AF2.docx?dl=0
KiCad編
マイコン編
https://www.dropbox.com/s/nvd7f7o4a08r5rr/%E3%83%9E%E3%82%A4%E3%82%B3%E3%83%B3.docx?dl=0
本データは趣味で電子工作を行う人向けの記事です。そのため、業務や研究、競技会などでの使用はご遠慮ください。また、記事の内容は自己責任の下で使用をお願いいたします。本記事を参考にして損害が発生した場合でも管理人は責任を負いません。
いままでに書いた、モータ演奏を行うための基礎事項の記事の目次です。
1.回路編
第1回 電子部品の概要
http://vvvf.blog.jp/archives/2366464.html
第2回 抵抗器
http://vvvf.blog.jp/archives/2369140.html
第3回 コンデンサ・コイル
http://vvvf.blog.jp/archives/2385100.html
第4回 ダイオード
http://vvvf.blog.jp/archives/2498755.html
第5回 半導体スイッチ
http://vvvf.blog.jp/archives/2571354.html
第6回 半導体スイッチの回路
http://vvvf.blog.jp/archives/2677434.html
第7回 MOSFETとIGBTの駆動回路
http://vvvf.blog.jp/archives/2677434.html
第8回 ゲートドライバ
http://vvvf.blog.jp/archives/3313214.html
第9回 トランジスタ
http://vvvf.blog.jp/archives/3466503.html
第10回 整流回路
http://vvvf.blog.jp/archives/3881339.html
第11回 ゲートドライバIC(L6384E)の使い方ver2 その1
http://vvvf.blog.jp/archives/6572197.html
第12回 ゲートドライバICの使い方ver2 その2
http://vvvf.blog.jp/archives/6620551.html
第13回 ゲート抵抗の選び方
http://vvvf.blog.jp/archives/6770493.html
2.KiCadの使い方
第1回 KiCadの初期設定
http://vvvf.blog.jp/archives/4052091.html
第2回 回路図エディタEeschemaの使い方 その1 回路図を描くチュートリアル
http://vvvf.blog.jp/archives/4283557.html
第3回 回路図エディタEeschemaの使い方 その2 PCB Parts Library の使い方
http://vvvf.blog.jp/archives/4305504.html
第4回 回路図エディタEeschemaの使い方 その3 ピン設定の変更
http://vvvf.blog.jp/archives/4380666.html
第5回 プリント基板エディタPcbnewの使い方 その1
http://vvvf.blog.jp/archives/4644669.html
第6回 プリント基板エディタPcbnewの使い方 その2
http://vvvf.blog.jp/archives/4724854.html
第7回 プリント基板エディタPcbnewの使い方 その3
http://vvvf.blog.jp/archives/4803088.html
第8回 プリント基板エディタPcbnewの使い方 その4
http://vvvf.blog.jp/archives/5087007.html
第9回 フットプリントエディタの使い方
http://vvvf.blog.jp/archives/5188288.html
第10回 ユニバーサル基板や切削基板でのKiCadの設定
http://vvvf.blog.jp/archives/5190101.html
3.制御編
第1回 マイコンのハードウェア
http://vvvf.blog.jp/archives/6080429.html
第2回 マイコンで使うビット演算
http://vvvf.blog.jp/archives/6216594.html
第3回 ビットシフト
http://vvvf.blog.jp/archives/6240219.html
第4回 AVRマイコンの環境づくり1 ライターのドライバとAtmel Studioのインストール
http://vvvf.blog.jp/archives/6261293.html
第5回 AVRマイコンの環境づくり2 AtmelStudioの日本語化とAtmel
Studioの初期設定
http://vvvf.blog.jp/archives/6262931.html
第6回 Atmel Studioでのファイル作成とFuse設定
http://vvvf.blog.jp/archives/6402405.html
第7回 AVRマイコンのデジタル入出力
http://vvvf.blog.jp/archives/7126511.html
第8回 マイコンのPWM出力 その1 可変周波数PWMの理論とパラメータ決定
http://vvvf.blog.jp/archives/7483091.html
第9回 マイコンのPWM出力 その2
http://vvvf.blog.jp/archives/7662206.html
第10回 マイコンのタイマー割り込み その1
http://vvvf.blog.jp/archives/7860243.html
第11回 マイコンのタイマー割り込み その2
http://vvvf.blog.jp/archives/7860414.html
第12回 AVRマイコンの割り込みのまとめ
http://vvvf.blog.jp/archives/8031672.html
第13回 AVRマイコンのシリアル通信
http://vvvf.blog.jp/archives/8456549.html