ただ今の日時:

単・ブラシレスモータの駆動制御

Brushless Motor Controller

 2008年6月25〜27日に東京ビックサイトで開催されていた「第12回 機械要素技術展」で「日本電産コパル梶v社さんが出展されていた「 ブラシレスモータ」が私の目にとまり、モータ駆動回路がモータ内部に内蔵されいて、ロジックレベルで駆動するだけと言う、非常に簡単なモータに感動し、「これはすぐに入手して実験したい」と早速、私の家の近くに(たまたまです! え(゚○゚)!)代理店さんがおられたことを思い出し、注文して入手しました。・・・・ところが忙しさのあまり何もしないまま1年経ってしまいました・・・情けない! ?c(゚.゚*)エート。。。 今回やっと手が付けられるようになったのでご報告申し上げます。

2021年1月現在・・・その昔はコパル電子鰍ニ言う会社があり、このモータはそこで開発されたモータでしたが、会社が日本電産鰍ノ吸収され、今は「日本電産コパル梶vと言う社名に変わっています。
 今回の「22H055C030」のモータは製品リストから除外されていて、入手できるかは不明です。直接、日本電産コパルと言う会社、または代理店等に問い合わせてください。ちなみに「日本電産コパル梶vに掲載されていたブラシレスモータはこちらです。

https://www.nidec-copal-electronics.com/j/product/list/015001/#

 当時、使用したモータは右写真のもので型式が22H055C030と言うものです。値段は3,500〜4,000円
くらいだったと記憶しています。今ではネット上からも入手できるようです。 駆動電源は
DC8V〜15V、定格回転数は5300rpm・・・あとの仕様は上記のサイトを参照してください。
 注目したいのは回転信号とし
FG出力信号があり、1回転に6パルスのデジタル出力信号が
あります。これを使って回転数の安定化制御できそうなので早速作り上げたいと思います。

 駆動の基本は
PWM制御です。駆動周波数は推奨値として15kHz〜25kHzとされています。
これであれば8ビット系のマイコンのPICで制御できそうです。

 ソフトウェアのコーティング前に動作概要を申し上げます。先ほど、基本駆動は「PWM」と言いました。これは変わりありません。 と言うかそれしかないですね! ヽ(´〜`; ォィォィ
 回転数を設定して、その通りの回転をさせるのにフィードバック信号が必要になります。それが先ほど申し上げました「FG出力信号」( エンコーダパルス信号)です。この信号の周期を読み取り、回転数を計算しLCDに表示させます。
 回転数の安定化制御は、読み取った回転数と設定した回転数を比較して、PWMのデューティーを可変させます。
従ってマイコンに必要なものはPWM機能と周期を読み取るキャプチャ-機能の2つの機能が内蔵されたものになります。私の手元にそれらしいものとして、PIC16F866-I/SPがあり、 2つのCCPを持っているのでこれを使うことにします。

1. 完成日付
2009年7月8日
2. テーマ
2つのCCP機能(PWMとキャプチャ-)を同時に使い、ブラシレスモータを制御する。
3. 使用したPICマイコン
PIC16F886-I/SP    190円/@  ※ 2009/06現在  鰹H月電子通商 価格
4. 電源電圧とシステムクロック
電源:CPU:DC5V、クロック:16MHz外部クロックモジュール仕様
5. 開発環境
ハードウェア:ICD-U64(CCS)、ブレッドボード(鰹H月電子通商)
 ソフトウェア:ソフトウェア:PCWHD Compiler Ver4.093(CCS)
6. 回路図
ここにあります!
7. プログラム
圧縮したZIPファイルとしてここにあります。 ※ 2010年1月 諸事情によりソフト掲載を割愛します。
8. 参照した主な書籍とWebサイト
改訂版「C言語によるPICプログラミング 入門」 後閑哲也 著者 葛Z術評論社 発行・・・文献1
 実験配線内容

 ケースにしっかり入れてから報告しようと思ったのですが、なぜか「ノリ」気がなく、ブレードボードでの実験報告となりました。  (*_ _)人ゴメンナサイ 実験風景を下記に示します。

相変わらず汚い風景ですがご容赦を! ヾ(^-^;) ゴメンゴメン
ざっと見て、お分かりかと思いますが、ブレードボードに赤い
押釦
がありますが、 これがスタートスイッチです。回転方向
決めるスイッチがありませんが、ブレードボードにしっくり入ら
ないので、配線変更レベルで対処しました。

 もう一つの操作スイッチ部は上記左の写真のもので、下にある黒い二つの押釦は、左が回転途中で停止させるスイッチです。このスイッチは例えばメカ的にトルク検出をした時のセンサー信号を割り当てるなどして、 モータを停止させる時に役に立ちます。右のスイッチは、回転数設定時の編集(EDIT)スイッチです。モータが停止している時でないと動作しません。
 中央にある小さな4つの押釦は、数値変更の編集時の桁移動や数値の上下などに使いますが、運転中は(上)と(下)のスイッチが有効になり、上または下のスイッチを1回押すたびに、回転数が100rpm可変 させることができます。
 モータのシャフトには回転数を計測するためのジョイントと、それに黒いビニールテープを数回巻き付け、アルミホイールを5cm角に切ったものを両面テープで、回転計の反射センサー用に貼り付けています。

 ソフトウェアーの要点

 ソフトウェアーをコーティングするにはいくつかの要点がありますが、ここでは私の備忘録としての情報を載せておきます。
まず、PWMの周波数を決めるには、データシートやWeb情報、文献1などから・・・

デューティー比 = t-H / t

周期およびパルス幅の式は、データシートやWebサイト、文献1などから確認できます。
Tosc=CLOCK・・・内蔵であればメインCLOCK値、外付けであれば水晶などのCLOCK値

CCS-CではPWMを動作させるために以下の関数が用意されていて、簡単に設定が行なえます。

  setup_ccp1(ccp_PWM);  @
  ・・・・・
  setup_timer_2(T2_DIV_BY_prescaler,period,postscaler);  A
  ・・・・・
  setup_pwm1_duty(duty);  B

 例えば今回は駆動周波数を25kHzと決めました(カタログより)。その時のAの「prescaler」と「period」は次の様に算出します。
メインクロック
は回路図から外ずけに16MHzのクロックモジュールで供給しています。これより・・・

priod = TMR2のプリスケーラ値
Tosc = メインCLOCK
t = 1/駆動周波数


TMR2のプリスケーラ値は、「16」から選択できますが、今「 」を選択します。この時のTMR2の「period」は、上記の式より

従って・・・
 setup_timer_2(T2_DIV_BY_1,159,1); と記述すれば、
25kHzの周期がCCP1の端子から出力されます。
なお、「postscaler」はPWMでは使わないので、必ず「」に設定しておいて下さい、


次に、パルス幅(t-H)について、算出します。計算式は上記に出ているので、数値を当てはめてみます。
なお、CCPxCON<5:4>については、説明が長くなりますので、下記のサイトを参照してください。

http://www.kimurass.co.jp/pic/1025.htm
http://hobby_elec.piclist.com/pic7_4.htm#1

 デューティー100%のときのCCPR1Lの値は下記計算では「640」になりますが、100%であれば直流になり、 今回のモータ制御には使えなくなりますので、639以下で使うことにします。

上の式より、(40us×1)/(1/16MHz)=640  従って、例えば99%のデューティにするには・・・
 setup_pwm1_duty(633); と記述すれば、
パルス幅(t-H)は、40us×0.99=39.6usとなります。


これらの設定を行うには、いくつかの注意点があります。

  1. 上記の例ではCCP1を使いましたが、2つ搭載する場合は、それぞれのチャンネルに合わせて設定して下さい。
  2. PWMモードを使う場合、使用する端子は、set_tris_c(0bxxxxx0xx); コマンドで出力設定にしておくこと。
    (※ この場合PIC16F886の場合でCCP1を使う場合の設定です)
  3. setup_pwm1_duty(duty); の赤字部の「duty」は変数です。今回分解能を10bitとして使いたかったのですが、
    計算上、9bit 強になり、このまま使うことにします。従って変数の方は「int」ではなく「long」で宣言して下さい。
 ケースに入れてみました!

 このページを作成したのが6月16日、実は本業が忙しくなって止めていました。ちょっと時間が出来たのでマイコン部をユニバーサル基板で組立たの後、ケースに入れてみました。 下にその外観を示します。右側は動作のための接続写真です。

 右側の写真では水色のケーブルがあります。これは片端D-SUB9Pinコネクタで、その反対側はRJ-45の8極になったちょっと変わったケーブルを使っています。 このケーブルは秋葉原のジャンク屋で1本100円で売っていたので、つい買ってしまったのはいいけれど、手持ちがなかったことと、使い道がなかったので今回採用しました。おかげでRJ-45側の方は、 変換基板が必要になり、結果的にはあまり安くなっていないことになりました。 「(゚ペ)ありゃ?
 また右下にある基板は「中継基板」です。ここにはモータ用電源端子(3Pin)とモータ接続端子(6Pin)、RJ-45変換基板端子(8Pin)、モータからの 信号チェック端子(5Pin)、そしてDC+5V電源回路(使っていませんが)が載っています。
 一方回路図でお分かりかと思いますが、このシステムには二つの電源を使っています。コントローラ側(上左写真の分)にはDC+5Vが要り、モータ側にはDC+12V(実際はDC8〜15V)が必要になります。 二つの電源を用意しても良いのですが、たまたま手持ちに未開封のUSB-IDE変換の箱があり、そこに添付されていた電源が+5V/2A+12V/2Aと言う都合の電源だったので、それを使うことにしました。コネクタはハードディスクやCD-ROMドライブの後方で差し込む従来の 4Pinコネクタメスと反対側にはFDD用の4PInコネクタオス2本付いた分技ケーブルを使いました。 FDD用の1本は中継基板のモータ電源端子のピンヘッダーに直接差し込みました(電圧と極性に注意します)。もう1本は、3Pinヘッダーφ2.1のDCプラグ変換ケーブルを作り、上左写真の +5V電源入力端子に接続しました。

@ DC5V/DC12V電源A 分技ケーブルB 3Pin:φ2.1プラグケーブルC 3Pinヘッダ-との接続
D 中継基板E RJ-45-8Pin変換基板F 中継基板にコネクタ接続G コントローラー側接続
 上記のFの中継基板赤い小さなタクトスイッチが1個載っています。
これは外部ストップスイッチで、このスイッチが押されると、 回転中のモータは瞬時に停止します。
 コントローラー


↑ 左から、全体操作表示面、回転数を設定するジョグスイッチとモータ回転RUN/STOPスイッチ、回転方向を切り替える CW/CCWスイッチと一番右端のスイッチが電源スイッチです。一番右の写真は、電源ON後の表示画面です。

 運転と操作

 初期の回転数は「1,000rpm」になっています。この決め方は手抜きです。ヾ(~∇~;) コレコレ 本来であるなら電源OFF直前の設定回転数をEEP-ROMに記憶させて呼び出すのがプロですが、 手抜きしました。RUN/STOPスイッチを押すと左写真の様にLEDが緑色に点灯し、設定された回転方向と回転数でモータはまわりだします。モータ軸は若干ですがスロースタートさせています。 設定回転数になれば同時に現在の回転数も同時に表示します。この数値はFG出力信号から読み取って演算して表示しています。RUN/STOPスイッチを離すと、LEDは消灯し、モータは停止します。


 回転方向を切り替えるスイッチを操作すると左写真の様に「CW」または「CCW」と表示切り替わります。 もし、運転中にこのスイッチを操作すると、モータは瞬時に停止し、変更された回転方向になって再び回り始めます。この操作は本来であるなら禁止事項で、マイコン側で約0.3秒ほど停止させています。

 ジョグスイッチの中央を1回押すと、回転数を編集するモードになり左写真の様になり、一番右の桁がブリンクします。 左右の矢印キーを使い、変更したいに移動させ、上下の矢印キーで数値を変更します。現行のプログラムは、「1〜9999rpm」の設定が行えます。 モータの仕様に合わせた範囲で設定を行って下さい。コントローラはこの辺りは自由度を優先して考慮していません。最後にもう一度中央のスイッチを一回押して設定完了です。なお、この編集モードは、モータが停止している時でないとできません。


 モータの回転中に、ジョグスイッチ上下スイッチを操作することにより、100rpmステップで回転数を変えることができます。 ある意味便利な機能です。但し、下限値100rpmまでで、上限値9900rpmまでです。一回の変更都度、モータは スロースタートから始まりますので、高速回転になれば少し違和感があるかもしれません。
 このモータの場合、モータ電圧12V時では5200rpmあたりが上限値の様ですが、モータ電圧を上限の15V付近まであげれば、6,000rpm 位まで上がると思われますが、やっていません。ヾ(~∇~;) コレコレ


 モータの回転中に中継基板にある赤いスイッチ「EXT-STOP」を押すと、モータは瞬時に停止し、上写真の様に 橙色のLEDが点灯します。この信号は緊急停止センサー検出などの信号を使って入れてやれば面白い動作が期待できます。

 ちなみに今回のモータの場合、モータ電圧12Vで、最低回転数はおよそ500rpmくらいが実用範囲だと思われます。

 コントローラー側ではモータのFG信号を読み取り、設定回転数を表示すると同時に、万一、モータ軸に負荷が掛かり回転数が低下すると、PWMの幅を変えて 、回転数を上げる制御をします。つまり設定回転数になるよう制御されます。

 軸の回転数を計測

最後に2009年5月25日に掲載した回転計を用いて、モータ軸の回転数を計測したデータを載せておきます。

 ↑左側が本器(ボード実験中)で、「999.0prm」と表示しています。右側が回転計が示す値で、「 997.02rpm」と表示しています。設定回転数1,000prmです。

 ↑左側が本器(ボード実験中)で、「2993.5prm」と表示しています。右側が回転計が示す値で、「 2992.07rpm」と表示しています。設定回転数3,000prmです。

 ↑左側が本器(ボード実験中)で、「4986.8prm」と表示しています。右側が回転計が示す値で、「 4989.70rpm」と表示しています。設定回転数5,000prmです。

 総  評

 課題であったジョグスイッチのノブ部の取り付けは、スイッチのわずかな突起部にM1.7mmのタップを立てることに成功し、 φ5mmの透明アクリル棒M1.7×3.5mmの皿ネジが入るよう、ザグリ加工をして取り付けます。慣れるとタップ空けは失敗することなくうまく空きます。何個かやりましたが失敗はありませんでした。取り付け時はねじロックを施した方がいいでしょう。 詳細については別の機会に紹介します。
 やっぱりケースに入れると見栄えしますね!!結構面倒ですが、ワンパターンなので、出来るだけケースに入れるようにしたいと思います。
 今回使った日本電産コパル社のモータは、もう少し回転数の高いものがあったので、機会があればこちらも入手して実験してみたいと思います。コパル社さん、いいものをありがとうございました!<(_ _*)> アリガトォ!・・・ このモータは何に使おうかな?