Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

モーターを低速で定速で動かしてみる

5,292 views

Published on

マブチモーターをセンサレスで定速制御するための回路例と考案したアルゴリズムの紹介と実験結果

Published in: Software
  • Be the first to comment

モーターを低速で定速で動かしてみる

  1. 1. モーターを低速で定速で動かしてみる 酒居敬一
  2. 2. 自己紹介  兵庫県姫路市出身、1970年生まれ  ハード屋を目指していたソフト屋  どっちも中途半端だけど、低レイヤ大好き  測定器はそこそこ持ってる  数年前までは自作の55cmの望遠鏡で遊んでた  旋盤も直流溶接機も持ってる  大学の先生もやってた  ソフト作ってるほうが面白いので辞めた  午後の人(SSEとかLinuxとか担当だけど) 2
  3. 3. (本題とは関係ないけど)OS歴  Sun-3(68K), Sun-4(SPARC), Solaris-2.x 〜 8(SPARC)  NEWS OS (Sony CISC NEWS, 68K)  DG/UX (Data General AV4000だったっけ?, M88K)  Luna OS (オムロン, 68K)  DOS/V  Windows 3.1  Digital UNIX (DEC Alpha AXP 61064)  Linux 1.0.x 〜  Windows XP/Vista/7 3
  4. 4. 動機  天文機材の高級化に逆らいたい  できるだけチープな材料を使いたい  高額機材を「買って使ってポイ」には馴染めず  25cm望遠鏡は30年近く前に自作  55cm望遠鏡は15年前に自作  タミヤのギヤボックスで恒星時追尾する  地球の自転速度が1/1436rpm  1000rpmくらいでモーターを回せたらいけそう  高価なもの複雑なものは人に任せたい 4
  5. 5. 定速制御  角速度のPI制御を使う  角速度は目的位置との変位から計算  恒星時追尾時の制御ループは二重になる  角速度は一定とする  導入の補助のときは変位は気にしない  角速度の検知をどうするか?  タコジェネを使うなんてありえない  位置の検知をどうするか?  ロータリーエンコーダなんてもっとありえない モーターを検出用に追加する? センサレス制御しかありえない? 5
  6. 6. 回転数検出の原理  Back-EMF(Back ElectroMotive Force)  磁界中をコイルが動くと 電圧が発生する  発生電圧は角速度に比例  リップル  1回転で6回波打つ  2[極]×3[スロット]=6  数えることで位置を検知 6
  7. 7. 上側の駆動用モーター 入力電圧: 約1500mV 消費電流: 325mA前後 下側のBack-EMF測定用モーター 出力電圧: 1000mV前後 リップルから回転数を計算可能で、 カーソルはモーター軸1回転 60000[ms]/10.88[ms/r]=5515[rpm] 5515/6600*1500=1253[mV] 7
  8. 8. 上側の駆動用モーター 入力電圧: 約500mV 消費電流: 250mA前後 下側のBack-EMF測定用モーター 出力電圧: 250mV前後 リップルから回転数を計算可能で、 カーソルはモーター軸1回転 60000[ms]/44.20[ms/r]=1357[rpm] 1357/6600*1500=308[mV] リップルがきれいな個体→ それでも形が少し違う 8
  9. 9. RE-260RA-2670のBack-EMF 平均Back-EMF[mV] 1回転の時間[ms/r] 回転数[rpm] 200 60.72 988 300 41.0 1463 400 30.8 1948 500 24.6 2439 600 20.8 2885 708 17.6 3409 802 15.6 3846 平均Back-EMF電圧が表の値になるようにモーターを回して回転数を測定しました。 回転数とBack-EMFが低い回転数までそこそこ比例します。 無負荷無損失回転数からの推定値は、実測のBack-EMFのピーク値くらいのようだ。 9
  10. 10. PWMによる回転数制御  CCM(Continuous Conduction Mode)を使う  巻線のインダクタンスにより電流が途切れない  上下のスイッチを適度に速く交互にON/OFFする T = TON +TOFF DI = V1 -V2 - IR1( ) L TON DI = - V2 + IR1( ) L TOFF モーター電流は数百mA V1=5V, V2=0.2V, ΔIがおよそ30mAのとき、 TOFF=30mA*0.34mH/200mV=0.051ms ※ R1を無視した概算です 電池 1.8V〜5.4V モーター 10
  11. 11. インダクタンスと抵抗 インダクタンス[μH] 抵抗[Ω] miniモーター 1200 5.0 ミニモーター多段12速付属品 FA-130RA-2270 340 0.68 RE-260RA-2670 340 0.58 RC-260 340 遊星ギアセット付属品 Torque Tune Motor 145 0.33 Power Dash Motor 49.7 0.17 RE-280-20120 1200 RDO-501付属品 RE-280RA-2865 266 0.64 11
  12. 12. 制御と検出の違い  実はパルス幅を変えるだけ  DCM(Discontinuous Conduction Mode)に持っていく  上下スイッチをOFF, 電流=0まではダイオードを使う  電流=0のときに、モーター端子にV2が見える I = - V2 +VF( ) L TOFF モーター電流を仮に640mA V2=0.2V, VF=0.3Vのとき、 TOFF=640mA*0.34mH/500mV=0.44ms ※ R1を無視した概算です IR1は無視して、 Back-EMF 12
  13. 13. スイッチング素子はFET?  低電圧ではFETが使いやすい  マイコン直結で速度的に折り合えば特に  VGSが低い分Qgは減るので、低電圧でも使えそう  最近の世代はRDSに対するQgが小さい  最近は1.8VでRDSを規定するメーカーが増えた  ニッケル水素電池2本でも動かせるのはありがたい  マイコンがハーフブリッジ駆動をサポートしてる  デッドタイムをソフトで設定できる  ソフトで自由に駆動方法を変えられる 13
  14. 14. ch1: p-MOS Gate ch2: モーター端子 ch1: n-MOS Gate ch2: モーター端子 1 2 3 3. 上側(p-MOS)がON 2. 上下のFETがOFF ダイオードによる還流 1. 下側(n-MOS)がON FETによる還流 14
  15. 15. ch1: p-MOS Gate ch2: モーター端子 ch1: n-MOS Gate ch2: モーター端子 1 2 3 1. 上側(p-MOS)がON 2. 上下のFETがOFF ダイオードによる還流 3. 下側(n-MOS)がON FETによる還流 15
  16. 16. ※ 機械損・鉄損に対応する抵抗は省略 モーター始動時は、Back-EMFが0Vなので、 (電源電圧 ÷ 巻線抵抗)に相当する電流が流れます。 モーターが回転している時はBack-EMFが発生します。 ですので、流れる電流は((電源電圧 - Back-EMF)÷巻線抵抗)です。 トルクは電流に比例ですので、高トルク時は回転が下がります。 Back-EMFが下がった分だけ電流が流せて、トルクがでます。 電流は巻線に加わる電圧に依存して増減します。 インダクタンス分があるため、電流はいきなり増減しません。 dI dt = V L 16
  17. 17. ※ 機械損・鉄損に対応する抵抗は省略 還流状態に入った時、電流は時計回りに流れています。巻線の自己インダクタンス によりただちに電流が0になったり、Back-EMFにより逆方向になったりはしません。 モーターが回転しているとBack-EMFが図のとおりの電圧源として機能します。 巻線には電流を減らす方向に電圧がかかりますので、時間と共に電流が減少します。 十分な時間が経過すると、電流は反時計回りに流れるようになります。 モーターが高速で回転している時は、Back-EMFが大きいですから、 大きな逆向きの電流(-Back-EMF ÷ 巻線抵抗)が流れます。 逆向きですから電磁ブレーキですね。 この(時間が経過した)状態を指してブレーキモードと呼ぶ場合があります。 17
  18. 18. ※ 機械損・鉄損に対応する抵抗は省略 還流状態に入った時、電流は時計回りに流れています。 このとき、ダイオードにも電流が流れるのですが、ショットキバリアダイオードで 0.3Vから0.5V程度、シリコンPN接合ダイオードで0.6Vから1V程度電圧が必要で、 損失(電流 × 電圧)分だけ早く電流が減りますし、電流量によっては発熱します。 電流の源ですが、巻線(の自己インダクタンス)に蓄えられていた電流です。 十分な時間が経過すると、巻線に蓄えられていた電流は0になります。 この(時間が経過した)状態を指してフリーモードと呼ぶ場合があります。 18
  19. 19. 駆動系まとめ  効率・目的を考えるとハーフブリッジ  上側ON, 両方OFF, 下側ONを組み合わせる  駆動  還流  測定  これらをタイミングよく切り替えればよい  ECCPによるPWM  割り込みによるECCPの制御  イベントトリガによるADC起動・割り込み起動 19
  20. 20. マイコンを使った制御 20
  21. 21. 試作品  両面基板を安く作ってくれるところがあった  ハーフブリッジ  p-MOSのゲート駆動はPIC出力を2本束ねた  n-MOSのゲート駆動はPIC出力を1本 21
  22. 22. 駆動系設定など  PWM周波数は20kHzでよさそう  可聴域より上、SW速度的には数十kHz以下  FETのデッドタイムは250nsで大丈夫そうだった  MCUクロックは4MHzを発振し4逓倍する  1.8Vから動くはず  ADCのAVDD+はFVRを2048mV設定で使う  Back-EMFを200mV程度まで狙うと100LSBくらい  谷検知は周期が長いのでTimer1を割り当て  PWMはTimer2+ECCP 22
  23. 23. 制御ループ  谷の数とBack-EMF  一定周期でPWM駆動を停止  巻線電流が0になるまで待つ  Back-EMFを20us間隔で4回サンプル  最大値と最小値を捨て、2サンプルの平均値を使う  Back-EMFサンプル列から谷を検出し、数え上げる  電源電圧で補正  Back-EMFはADCのVrefに2048mVを使い測定  制御値はこの電圧に基づき電圧値として計算  電圧値を電源電圧で除することでDuty比に変換 23
  24. 24. Verror t( ) =Vtarget t( )-VBackEMF t( ) Vcontrol t( ) = KpVerror t( )+ Ki Verror t( ) t=0 t å Dcontrol t( ) = Vcontrol t( ) Vpower t( ) 概略の計算式 比例ゲインと積分ゲインは定数なので、ループ展開することとし、 アセンブラのマクロを使って定数の乗算を実装 目標のBack-EMF電圧を、回転数相応な値と谷の数の増減から計算しておく 目標値と現在値から誤差を計算し、PI制御する 電源電圧で除算することでデュティー比に変換 除算は非回復法で実装している 24
  25. 25. Back-EMFサンプリング  20us周期で4回サンプリング  PWM駆動に切り替える前に4回サンプリング  電源電圧3.6V, Back-EMFは0.3V程度 逆起電力と呼ばれるもの 自己インダクタンス由来 Back-EMF由来 ch1: 測定用モーター ch2: 制御対象モーター 25
  26. 26. Back-EMF検出 • PWM駆動後20us周期でずっとサンプリング – 巻線の自己インダクタンスによる電圧==0を待つ • それまではダイオード経由で還流しているので-VFが見える。 – ショットキダイオードのVFは0.3V前後(電流による) ch1: 測定用モーター ch2: 制御対象モーター 26
  27. 27. 谷検出のためのサンプリング  制御したいリップル周期の3倍でサンプリング  谷検出周期に合わせてPWM駆動をやめる  同期整流もやめてダイオード整流による還流に切り替える  Back-EMF検出・選択・平均値取得  PWM再開  谷検知 ch1: 制御対象モーター ch2: 測定用モーター 27
  28. 28. 谷検出  PWM周波数 20kHz  リップル周波数 115.6Hz, 1156rpmの場合を示す  リップル1周期あたり、3サンプル取得  Back-EMFが、下がる-上がる、で谷通過と認識 ch1: 制御対象モーター ch2: 測定用モーター 整流子切り替わり 28
  29. 29. まとめ  演算能力が足りない  PWM開始時に電流を速く立ち上げたかった  フィードフォワード制御するだけの余裕がない  高速(3000rpm程度)で回したいときこそ補正したかった  せめて乗算命令が欲しい  キャリー付き加減算があるだけマシだけど。  思ったより安定してフィードバック制御できた  ブラシの接触が微妙なときは全然ダメだった  Back-EMFが200mV(100LSB)あればいける  低速なので電気を食わない 29
  30. 30. 30
  31. 31. 31
  32. 32. 32
  33. 33. 33
  34. 34. 単三eneloop3本で 30時間連続稼働できます モーター回転数が低いので、 3.6Vで60mA前後です。 34
  35. 35. 35
  36. 36. 36

×