ブラシレスモータの制御 2007.01.28(日)〜![]()
著作者名: 中野 良知 作成開始: 2007.01.28(日) 更新 : 2007.01.29(月) 1) マイコンの項目を追加。 : 2) AUTO時の一時停止を増速間隔切換えに変更。 : 2007.01.30(火) 1) キー入力のチャタリング防止項目を追加 : 2) BLモーター回転テストの項目を追加。 : 2007.02.12(月) 1) MEMORYモードの操作を変更。 : 2) ポートマップ変更。 : 3) 回路図変更。ポート変更。リセットコンデンサー削除。 : 4) スピンドル ON/OFFの項目を追加。 : 5) 回路基板の製作の項目を追加。 : 6) プログラムの項目を追加。 : 2007.02.14(水) 1) 機能、操作性等の変更の為、プログラムの項目を削除 : 2007.03.18(日) 1) VR調整方式の項目を追加。
目次 1. 目的 2. 概要 3. マイコン 3.1. ATTiny26L 3.2. プログラム開発環境 3.3. デバッグ環境 4. サーボ信号 5. モータ始動 6. 回路図 7. 表示 8. スイッチ・ポートマップ 9. 機能 9.1. 増速 9.2. 減速 9.3. 停止 9.4. 自動増・減速 9.5. スピンドル ON/OFF 9.6. メモリー 9.7. クロック発振調整 10. タイマー 10.1. タイマー0 10.1.1. プリスケーラー 10.1.2. タイマー0割込み 10.2. タイマー1 10.2.1. プリスケーラー 10.2.2. タイマー1割込み 11. LED 11.1. モータ回転数表示 11.2. モード表示 12. スイッチ入力 12.1. フローチャート 13. クロック調整関数 13.1. フローチャート 14. キー入力のチャタリング防止 14.1. タイミングチャート 15. 回路基板の製作 16. BLモーター回転テスト 16.1. パルス幅と回転数 16.2. 温度上昇 16.3. タコメーター 17. VR調整方式 18. 法律条項 1. 目的 CNCの実験で切削用スピンドルモータを高速回転のブラシレスモータに換装する事が 目的です。 検討に使用したブラシレスモータは、回転速度が30,000rpmにも達するもので、主に ラジコン飛行機のプロペラの駆動用として用いられています。 2. 概要 ブラシレスモータ(以下BLモータと記す)を制御するには、受信機とBLモータ用サーボ アンプが必要です。上:BLモータ用サーボアンプ。30A。 下:BLモータ。アウターローター。三相巻き線。磁極数12?。 系統図 ┌─────┐ │ ラジコン │ │ 送信機 │ └─────┘ │ ┌┘ ↓ ┌─────┐サーボ ┌──────┐ ┌────┐ │ ラジコン │信号 │BLモータ用 │ │ │ │ 受信機 ├────┤サーボアンプ├────┤BLモータ│ │ │ │ │ │ │ └─────┘ └──┬───┘ └────┘ │ ┌────┐ └───┤ 電源 │ └────┘ 電源は、BLモータ用サーボアンプから受信とBLモータにそれぞれ供給されます。 ラジコンの送信機と受信機が無い環境でモータを回す為に、 受信機の出力と同等のサーボ信号を、AVRマイコンのATTiny26Lで発生させます。 ┌─────┐サーボ ┌──────┐ ┌────┐ │AVR │信号 │BLモータ用 │ │ │ │マイコン ├────┤サーボアンプ├────┤BLモータ│ │ATTiny26L │ │ │ │ │ └─────┘ └──┬───┘ └────┘ │ │ ┌────┐ └───┤ 電源 │ └────┘ マイコンの電源は、BLモータ用サーボアンプから供給されます。 3. マイコン 3.1. ATTiny26L
アトメル社のATTiny26Lを使用しました。 主な特徴 パッケージ 20PIN。DIP。2.54ピッチ I/O 16ビット。個別にI/O設定可 ROM 2Kバイト RAM 128バイト EEPROM 128バイト(100,000回書き換え可) TIMER 0,1の2系統 クロック 8MHz。内蔵RC発振器(校正機能付) リセット 回路内蔵 電源 2.7V−5.5V 3.2. プログラム開発環境 WinAVRを使用しました。 コンパイラーの入手先、インストール、コンパイルの方法等は、 AVRマイコン工作室をご覧下さい。 3.3. デバッグ環境 コンパイルした結果のHEXデータを、テスト回路に実装したマイコンのフラッシュROM に書き込んでデバッグします。 書き込み方法は、 AVRライタをご覧下さい。
赤の枠内がプログラムデバッグ中の回路です。枠外は以前に検討した回路の名残りです。 エアコン用のブラケットをカットしBLモータを取り付けて、バイスに固定しています。 電源には、7.5V 2AのACアダプターを使用しました。 4. サーボ信号 ラジコンで用いられるサーボ信号は下記のタイミングになります。 →┼───────────┼← 20msec →┼┼← 1msec →┼──┼← 2msec ┌┐ ┌┐ ┌──┐ ─┘└──────────┘└─── ─ ─ ─ ───┘ └─── パルス幅は1msecから2msecの範囲で可変です。0.9msecから2.1msecを許容範囲として いる文献もあります。 パルスの周期は20msecで一定です。一説に50Hzから60Hzの許容範囲があるようです。 BLモータの場合、パルス幅が1msecで停止、2msecで最大回転速度で、停止から最大回 転速度までを任意に制御できます。 5. モータ始動 使用したBLモータ用サーボアンプは、電源投入時サーボ信号により動作が切り換わり ます。 1) 電源投入時に1msecが供給されていると、通常の回転モードになります。 2) 電源投入時に2msecが供給されていると、プログラミングモードになります。 今回は、1)の通常の回転モードのみを使用します。 始動の手順 1) サーボアンプに電源を供給します。 2) マイコンからパルス幅が1msecのサーボ信号を出力します。 3) BLモータからビープ音が聞こえます。 4) ビープ音が鳴り止んだら、マイコンの入力のスイッチを押してサーボ信号のパルス 幅を徐々に広げて行きます。 やがてBLモータが回転を始めます。 6. 回路図 ATTiny26L ┌─────┐ │ VCC├ 5──●─────── +5V │ AVCC├15──┘ │ │ ┌┐ ┌┐ │ PORTB0├ 1────────── サーボ信号出力 (─┘└────┘└─) │ PORTB1├ 2─────┐ │ PORTB2├ 3─────┼──────────────────────┐ │ PORTB3├ 4─────┼──────────────────┐ │ │ PORTB4├ 7─────┼──────────────┐ │ │ │ PORTB5├ 8─────┼──────────┐ │ │ │ │ PORTB6├ 9─────┼──────┐ │ │ │ │ │ PORTA7├11─────┼──┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ LED│ │ │ │ │ │ │ │ │ ┌┴┐ │ S1 │ S2 │ S3 │ S4 │ S5 │S6 │ │ │ │ ○ │ ○ │ ○ │ ○ │ ○ │ ○ │ │ XRESET├10 ├─┤ ├ ├ ├ ├ ├ ├ │ │ └┬┘ ○ │ ○ │ ○ │ ○ │ ○ │ ○ │ │ │ │ │MEMO- │SPIN- │AUTO │STOP │(+) │(-) │ │ │ │ RY │ DLE │ │ │ │ │ │ R220 │ │ │ │ │ │ │ AGND├16─┐ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ GND├ 6─●───●──●───●───●───●───●───●─ └─────┘ GND 7. 表示 LEDでマイコンが動作中を表します。 パルス幅1msecの時はゆっくり点滅します。 パルス幅を広げ、モータの回転速度が速くなるに従って点滅が速くなります。 S4(MEMEOTY)スイッチで、出力中のパルス幅の保存や、マイコンのクロック発振周波 数を微調整したデータを保存します。 このときLEDを点灯又は点滅させて操作状況を 知らせます。 8. スイッチ・ポートマップ 端子名称 PORT 用途 ----------+------+----------------------------------------------------- POUT B0 サーボ制御信号を出力します。 LED B1 モータ回転速度に対応して点滅します。 S6(-) B2 モータを減速します。 S5(+) B3 モータを増速します。 S4(STOP) B4 パルス幅を1msecにしてモータを停止させます。 S3(AUTO) B5 メモリーで設定した速度まで、増・減速します。 S2(SPINDLE) B6 CNCソフトによるSPINDLEのオン・オフ。 S1(MEMORY) A7 現在のパルス幅をEEPROM(内蔵)に保存します。 9. 機能 9.1. 増速 (+)スイッチ押しでモータ回転が増速します。 タイマー0設定用変数の値をデクリメントすることで、パルス幅が広がります。 (+)スイッチを連続して押すと、20mesec毎にデクリメントします。 タイマー0カウンターが0x00の時、パルス幅は256×8usec=最大2.048msecになります。 タイマー0カウンターはアップカウンターです。 9.2. 減速 (-)スイッチ押しでモータ回転が減速します。 タイマー0設定用変数の値をインクリメントすることで、パルス幅が狭くなります。 (-)スイッチを連続して押すと、20mesec毎にインクリメントします。 タイマー0カウンターが0x83(131)の時、パルス幅は156×8usec=最小1msecになります。 9.3. 停止 STOPスイッチを押すとモータが停止します。 タイマー0設定用変数の値を、パルス幅1msecに相当する値に設定することでモータが 停止します。 9.4. 自動増・減速 AUTOスイッチを押すとMEMORYスイッチで設定した回転数になるまでモータ回転速度を 増速又は減速します。 EEPROMにデータが保存されていればその値、保存がされていなければパルス幅最大値 に相当する値になるまでタイマー0設定用変数の値を自動的に増減します。 タイマー0設定用変数の値は 20msec間隔:通常の増減速。 60msec間隔:モータ始動時の回転停止防止の為ゆっくり増速。 で増減します。 AUTOスタートで、パルス幅が1msecから1.5msecまでの増速間隔を60msecに、 1.5msecから2msecまでの増速間隔を20msecにします。 増 速│ 速 │ ┌─────── 間 │ │ 隔 遅├───────┘ └───────┴───────┴─ 1msec 1.5msec 2msec パルス幅 ├←─────→┼←─────→┤ ゆっくり増速 通常の増速 ゆっくり増速と通常増速の切換えポイントの、デフォルトは1.5msecです。 MEMORYと(-)スイッチの同時押しで変更可能です。 9.5. スピンドル ON/OFF 1) スピンドルスイッチをオンにすると、パルス幅を2msecまで徐々に拡張します。 2) スピンドル回転中は、スイッチをオンし続けます。 3) スピンドルスイッチをオフにすると、パルス幅を1msecにします。 4) スピンドル停止中は、スイッチをオフし続けます。 ───────┐ ON ┌─────── SPINDLE SW OFF └─────────────┘ OFF 2msec 1msec ┌ ─ 徐々に拡張 ─ ─ ──┐ 1msec パルス幅 ───────┘ └─────── 9.6. メモリー MEMORYスイッチを2秒以上押し続けるとメモリーモードになり、LEDが点灯します。 MEMORYスイッチを押しながら下記の操作が可能です。 1) (+)スイッチを押すと、現在出力中のパルス幅が、AUTO動作の増減速の最終値にな ります。 値はEEPROMに保存します。 EEPROMに保存後、LEDが点滅します。 2) (-)スイッチを押すと、現在出力中のパルス幅が、AUTO動作の増速間隔の切換えポ イントになります。 値はEEPROMに保存します。 EEPROMに保存後、LEDが点滅します。 3) AUTOスイッチを押すと、クロック設定モードになります。 MEMORYとAUTOの両スイッチをオフにした後に、(+)または(-)スイッチでパルス幅を 調整します。 調整後にMEMORYスイッチを押すと、発振校正データをEEPROMへ保存します。 EEPROMに保存後、LEDが点滅します。 9.7. クロック発振調整 MEMORYスイッチを2秒以上押してメモリーモードに入り、AUTOスイッチを同時押しに するとクロック発振調整モードになります。 MEMORYとAUTOのスイッチをオフにし、(+)又は(-)スイッチでクロック発振周波数を微 調整します。 クロック発振調整手順: 1) サーボパルス出力をオシロスコープで観測します。 2) (-)をLEDが点灯するまで押し続けてます。 3) MEMORYを2秒以上押し続けるとLEDが点灯します。 4) MEMORYとAUTOを同時に押します。 5) MEMORYとAUTOをオフにします。 6) (-)を押す毎に、パルス幅が狭くなります。 OSCCALレジスターの値を1カウントづつインクリメントします。 7) S3(+)を押す毎に、パルス広くなります。 OSCCALレジスターの値を1カウントづつデクリメントします。 8) パルス幅が1msecに最も近くなるように 6)または7)で操作します。
9) MEMORYを押すと、クロックの調整値をEEPROMに保存し、LEDが点滅します。 10) スイッチが5秒以上押されないと、クロック発振調整モードを終了します。 10. タイマー 10.1. タイマー0 パルス幅を決定します。8ビットレジスターでカウンタークロックでインクリメント され、255から0になった時にタイマー0割込みが発生します。 10.1.1. プリスケーラー タイマー0プリスケーラーは1/64に設定し、カウンター用クロックは8usec周期です。 したがって、1msecのパルス幅に必要なタイマー0のカウント値は、 256 - (1msec/8umsec) = 131 です。 10.1.2. タイマー0割込み 1) パルス出力をリセット。 2) タイマー0カウント禁止。 を行います。 10.2. タイマー1 パルス周期を決定します。8ビットレジスターでカウンタークロックでインクリメント され、255から0になった時にタイマー1割込みが発生します。 10.2.1. プリスケーラー タイマー1プリスケーラーは1/2048に設定し、カウンター用クロックは256usec周期で す。 したがって、20msecの周期に必要なタイマー1のカウント値は、 256 - (20msec/256umsec) = 約178です。 10.2.2. タイマー1割込み 1) パルス出力をセット。 2) タイマー0カウンターをセット。 3) タイマー0カウント許可。 4) タイマー1カウンターをセット。 5) タイマー1割込みカウント変数をインクリメント。 6) LEDフラッシュ変数をインクリメント。 を行います。 11. LED 11.1. モータ回転数表示 通常LEDは、パルス幅に対応した周期で点滅します。 パルス幅 ON時間 OFF時間 モータ回転 -----------+------------+--------------+--------------- 1msec 1msec 664msec 低速 2msec 2msec 39.6msec 高速 ON時間はパルス幅と同期して変化します。 OFF時間はパルス幅と逆比例的に変化します。 LEDのONは、 タイマー1割込みカウント変数の値が、(タイマー0設定用変数の値 ÷ 4 + 1) の 値よりも大きくなった時に行います。 タイマー0設定用変数の値が小さくなるに従って(高速回転になる)LEDのON周期が 速くなります。 LEDのOFFは タイマー0の割込みで行います。 11.2. モード表示 1) (+)スイッチでパルス幅が最大値になると点灯します。 2) (+)スイッチでパルス幅が最小値になると点灯します。 3) AUTOスイッチを押すと0.2秒間LEDが点灯します。 4) MEMORYスイッチを2秒以上押すとLEDが点灯します。 5) AUTO最終値、AUTO時の増速切換えポイント、クロック発振調整値をEEPROMに保存 すると、0.2秒周期で点滅します。 12. スイッチ入力 main()関数内で、スイッチ押しをテストし、各スイッチに割り当てられた機能に従っ た処理を行います。 12.1. フローチャート (スタート) │ <STOP>on───────┐ │ │ │ 自動フラグリセット │ │ │ タイマー1割込みカウント変数=0 │ │ │ タイマー0設定用変数=1msec値 │ │ ├←────────┘ │ < + >on───────┐ │ │ │ 自動フラグリセット │ │ │ タイマー1割込みカウント変数=0 │ │ │ タイマー0設定用変数デクリメント │ │ ├←────────┘ │ < − >on───────┐ │ │ │ 自動フラグリセット │ タイマー1割込みカウント変数=0 │ │ │ タイマー0設定用変数インクリメント │ │ ├←────────┘ │ <AUTO>on ──────┐ │ │ ├←─────no<AUTO ON> │ │yes │ 自動フラグセット │ │ │ <現在パルス幅 >= 増速切換えポイント>no─┐ │ │yes │ │ 増速切換え間隔 = 3 │ │ │ │ ├←────────┘ │ │ │ │ ┌─────────────┘ │ │ │ 増速切換え間隔 = 1 │ │ ├←────────┘ │ <自動フラグセット>yes ─┐ │ │ ├←─no<タイマー1割込みカウント変数 >= 増速切換え間隔> │ │ │ タイマー1割込みカウント変数=0 │ │ │ <タイマー0設定用変数 > 最終値>no────┐ │ │yes │ │ タイマー0設定用変数デクリメント │ │ │ │ │ ┌────────┘ │ │ │ │ │ │ ┌─────────────┘ │ │ │ │ │ <タイマー0設定用変数 < 最終値>no────┐ │ │ │yes │ │ │ タイマー0設定用変数インクリメント │ │ │ │ │ │ └───────→┼←────────────┘ │ │ ├←─no<タイマー0設定用変数 = 増速切換えポイント> │ │yes │ 増速切換え間隔 = 1 │ │ ├←─────────┘ │ <MEMORY>on──────┐ │ │ │ 自動フラグリセット │ │ │ タイマー1割込みカウント変数=0 │ │ ├←──no< MEMORY ON で2秒経過 > │ │ │ ├←─────────────────┐ │ │ │ │ < (+)と同時ON >no────────┐ │ │ │yes │ │ │ AUTO最終値をEEPROMへ保存 │ │ │ │ │ │ │ LEDをO.2秒で点滅 │ │ │ │ │ │ ├←────────┘ │ │ │ │ │ │ ┌─────────────┘ │ │ │ │ │ < (-)と同時ON >no────────┐ │ │ │yes │ │ │ 増速間隔切換えポイントをEEPROMへ保存 │ │ │ │ │ │ │ LEDをO.2秒で点滅 │ │ │ │ │ │ ├←────────┘ │ │ │ │ │ │ ┌─────────────┘ │ │ │ │ │ < AUTOと同時ON >no────────┐ │ │ │yes │ │ │ クロック調整関数呼び出し │ │ │ │ │ │ ├←────────┘ │ │ │ │ │ │ ┌─────────────┘ │ │ │ │ ├←────yes< 5秒経過 >no──────────────┘ │ │ < − >on───────┐ │ │ │ 自動フラグリセット │ │ │ タイマー1割込みカウント変数=0 │ │ │ ├←────────┐ ├←──── off< − > │ │ │on │ │ LED通常点滅 │ │ │ │ │ <5秒経過>no──────┘ │ │yes │ クロック調整関数呼び出し │ │ ├←────────┘ │ LED通常点滅 │ (スタートへ戻る) 13. クロック調整関数 マイコンのクロック発振周波数を調整します。 13.1. フローチャート (スタート) │ <5秒間スイッチ操作無し>yes─────(終了) │ < + >on───────┐ │ │ │ 1ステップクロックダウン │ │ │ ├←───────┐ │ LEDを点灯 │ │ │ │ ├←────yes<5秒経過> │ │ │no │ ├←─────off< + >no ─────┘ │ < − >on───────┐ │ │ │ 1ステップクロックアップ │ │ │ ├←───────┐ │ LEDを点灯 │ │ │ │ ├←────yes<5秒経過> │ │ │no │ ├←─────off< − >no ─────┘ │ <MEMORY>on──────┐ │ │ │ クロック校正値をEEPROMへ保存 │ │ │ LEDを0.2秒で点滅 │ │ (スタートへ戻る) │ (終了) 14. キー入力のチャタリング防止 スイッチの特性や劣化、ノイズ(電源、静電気放電)などの影響を受け難くする為に、 キー入力のチャタリング処理を行います。 ポートからのキーデータ入力とチャタリング処理は、マイコンのタイマー1割込み のなかで実施します。 実施の間隔は20msecです。 チャタリング処理は1回一致で確定とします。 14.1. タイミングチャート │ │ │ │ │ 20msec ──┴─────┴─────┴─────┴─────┴─── ─────┐ AUTO KEY │ on └──────────────────────── (1) (3) ──┬─────┬─────┬─────┬─────┬─── key_new │ 0xFC │ 0xEC │ 0xEC │ 0xEC │ 0xEC ──┴─────┴─────┴─────┴─────┴─── (2) ─────────┬──────────────────── key_old 0xFC │ 0xEC ─────────┴──────────────────── (4) ───────────────┬────────────── key_fix 0xFC │ 0xEC ───────────────┴────────────── (5) if((key_fix & 0x10)) == 0){ // AUTO スイッチオン auto_flg = 1; } (1) ポートを入力し、キー以外のビットをマスクしkey_newへ格納します。 (2) key_new(=0xEC)とkey_old(=0xFC)を比較し、 一致しない為,、key_newの値をkey_oldへ代入します。 (3) ポートを入力し、キー以外のビットをマスクしkey_newへ格納します。 (4) key_new(=0xEC)とkey_old(=0xEC)を比較し、 一致する為、key_newの値をkey_fixへ代入します。 (5) キー押しを判定する場合は、key_fixを参照します。 15. 回路基板の製作 ユニバーサル基板にサーボ信号発生回路を組み込みました。
スイッチは左から(-)(+)(STOP)(AUTO)です。 SPINDLEとMEMORYとは未マウントです。 部品間の配線には、0.26mmのUEW線を使用しました。
16. BLモーター回転テスト 16.1. パルス幅と回転数 電源は公称7.5V 2AのACアダプターです。 パルス幅 モータ モータ 回転数 [msec] 電圧[V] 電流[A] [rpm] 備考 ---------+---------+---------+----------+------------------- 1.10 8.09 0.25 2,083 回転開始 2.10 7.31 1.85 24,000 フルスロットル 16.2. 温度上昇 BLモータを約1時間連続回転しました。 電源は公称7.5V 2AのACアダプターです。 回転数 電流 温度 [rpm] [A] [℃] 備考 --------+----------+-------+--------+-------------------------------------- 始動時 24,000 1.8 18.7 室温 1時間後 24,000 1.8 26.1 停止後 28.6 停止後数十秒間は温度が上昇
回転中は温度センサーに、アウターローターが巻き起こす風が当り、強制空冷状態に なっているようです。 BLモータ用アンプの温度上昇はほとんどありません。 16.3. タコメーター 簡易タコメーターを製作しました。 回路図 フォトリフレクタ(レンズ付。GP2S05) ┌─┐A │ ├─●─────────────●───── 4.5V-6V │←│PD├─┼─┐ │ │ ├─┤ │ │ 2SC1815 R10K │→│PT├─┘ │ ┌──┐ │ │ ├───┼──R47K──┤B │ │ └─┘E │ │ C├─●───── オシロスコープへ R150 ┌─┤E │ │ │ └──┘ └────●──────────── GND BLモータと回転センサー
センサーをBLモータの回転面から約4mm離して固定。 回転面に黒いマジックを塗った紙、幅約10mmを貼り付けました。 タコメーター出力のパルス周期をオシロスコープで測定します。
1÷2.5msec×60=24,000[rpm] 24,000rpmでは、検出用に貼った紙で重心のランスが崩れて、回転中の振動が大きく なるようです。 17. VR調整方式 サーボパルス幅を可変抵抗器で微調整するようにしました。
1) ブッシュスイッチは左から [1MSEC] [1.5MSEC] [2MSEC] スイッチを押すと直ちに指定のパルス幅になります。 2) 右のブッシュスイッチは、マイコン発振周波数校正やパワーオンスタート時の パルス幅の設定用[SET]です。 3) VRでパルス幅を1msecから2msecまで任意に調節出来ます。 VRの右隣のスナップスイッチをオンにして使用します。 スナップスイッチをオンからオフにすると、パルス幅が1msecになります。 スピンドルのオン・オフ信号でBLモータの回転を制御できます。 4) パワーオンスタートしたときのパルス幅を、1msec、1.5msec、2msecのいずれかを 選択設定出来ます。 動作テスト: 小型のRCサーボモーターの回転軸に矢印を貼り付けました。 [1MSEC]で+60度、[1.5MSEC] で0度、[2MSEC] で-60度に回転します。 VR方式回路図です。 18. 法律条項 この資料により生じたいかなる障害や損害に対し、著者は全てを免責されるものとします。 この資料は、著作権法の下で保護され、入手先、著者、日付、法律条項を含んだ場合にのみ複製が可能です。 複製をする場合は著者まで連絡をお願いします。
ページのTopへ:2007.01.28〜 CNC製作資料のTopへ:2006.01.23〜 CNCの実験へ:2005.09.04〜2005.12.31
サイトのTopへ