特性の分からない3相DCブラシレスモーターをソフトウェアエンコーダを搭載したTiのマイコンボードLAUNCHXL-F28069MとモータドライバBOOSTXL-DRV8305EVMを使って動かす(その4)
(編集中)
最重要ファイルであるところのmotorware_selecting_user_variables.xlsxのv2p1 2014-May-28版を見てみましょう。
MotorwareのResources->Training: User's Guides, Labs, Tutorials->InstaSPIN Projects Setting User Variablesの下にあります。
1. FILL IN THESE VALUES FOR YOUR USER.H, MOTOR, and INVERTER HW
(お使いのuser.h, モータ,インバータハードウェアに合わせて、これらの値を埋めてください。)
USER_SYSTEM_FREQ_MHz | 90 | [MHz] |
Maximum Bus Voltage | 24 | [V] |
Maximum Target RPM | 40000 | [RPM] |
USER_MOTOR_NUM_POLE_PAIRS | 2 | [PAIRS] |
USER_PWM_FREQ_kHz | 45 | [kHz] |
USER_NUM_PWM_TICKS_PER_ISR_TICK | 3 | [ticks] |
USER_NUM_ISR_TICKS_PER_CTRL_TICK | 1 | [ticks] |
USER_NUM_CTRL_TICKS_PER_CURRENT_TICK | 1 | [ticks] |
USER_NUM_CTRL_TICKS_PER_EST_TICK | 1 | [ticks] |
USER_ZEROSPEEDLIMIT | 0.002 |
sub-calculations:
Target Hz = (Maximum Target RPM) * (USER_MOTOR_NUM_POLE_PAIRS) / 60
POLE = 2 * (USER_MOTOR_NUM_POLE_PAIRS)
ISR_Hz = (USER_PWM_FREQ_Hz) / (USER_NUM_PWM_TICKS_PER_ISR_TICK)
CTRL_Hz = (ISR_Hz) / (USER_NUM_ISR_TICKS_PER_CTRL_TICK)
CURRENT_Hz = (CTRL_Hz) / (USER_NUM_CTRL_TICKS_PER_CURRENT_TICK)
EST_Hz = (CURRENT_Hz) / (USER_NUM_CTRL_TICKS_PER_EST_TICK)
2. The following are set by HW design, use defaults for TI EVM or your own HW
(次の値はハードウェアデザインによって決定されますので,Tiの評価ボードまたはお使いのハードウェアのための規定値をお使いください。)
USER_VOLTAGE_FILTER_POLE_Hz | 364.682 | [Hz] |
USER_ADC_FULL_SCALE_CURRENT_A | 33.00 | [A] |
USER_ADC_FULL_SCALE_VOLTAGE_V | 26.3147 | [V] |
3. THESE VALUES ARE RECOMMENDED FOR USE once TRUE checks are satisfied
(TRUEの確認が満たされると,これらの値は使用できます。)
Ideal USER_IQ_FULL_SCALE_FREQ_Hz for Motor
(モータのための理想的なUSER_IQ_FULL_SCALER_FREQ_Hz)
Target Hz with 10% buffer
(10%の余裕を加えた目標周波数)
Maximum allowed USER_IQ_FULL_SCALE_FREQ_HZ for HW
(ハードウェアのための最大許容可能なUSER_IQ_FULL_SCALE_FREQ_HZ)
4 * USER_VOLTAGE_FILTER_POLE_Hz [with 5% buffer]
(USER_VOLTAGE_FILTER_POLE_Hzの4倍から5%の余裕を持たせた値)
USER_IQ_FULL_SCALE_FREQ_Hz
Lower of Ideal and Maximum
(理想と最大のうち小さい方)
Maximum RPM Supported
(サポートされる最大回転数)
Rotor Hz can be 1.98 * USER_IQ_FULL_SCALE_FREQ_HZ; EST speed will roll-over outside boundary!!!!
(ローターの周波数はUSER_IQ_FULL_SCALE_FREQ_Hzの1.98倍を取り得るため,推定速度は境界の外に転がり出得ます。)
USER_MOTOR_FLUX_EST_FREQ_Hz
5-150 Hz; ~10% of Maximum Target Hz but use low as possible where Ls and Flux can be ID'd consistently
(5-150Hz; 最大目標周波数のおよそ10%、ただしLsとFluxが一貫して特定できる範囲で出来るだけ低い値を使ってください。)
USER_MAX_ACCEL_EST_Hzps
If USER_MOTOR_FLUX_EST_FREQ_Hz > 50 Hz must increase the acceleration during ID to avoid a timeout
(もしUSER_MOTOR_FLUX_EST_FREQ_Hzが50Hzよりも大きければ,タイムアウトを避けるためにIDの間の加速を増加してください。)
CURRENT Hz > MAX_Hz * 7
If FALSE increase CURRENT kHz or reduce MAX_HZ; Standard good practice for control systems
(もしFALSEならばCURRENT kHzを増加させるか、MAX_Hzを現象させてください。制御システムのための標準的な良い慣習値)
EST <= CTRL
If FALSE correct; No need to run the estimator if results are not being updated in control loop
(もしFALSEならば、制御ループ中に更新され無いことを意味するので、推定は実行されません。)
EST > 10 * USER_VOLTAGE_FILTER_POLE_Hz (+10% margin)
If FALSE increase EST Rate
(もしFALSEならEST Rateを増やしてください。)
EST > 8 * TARGET_Hz
If FALSE, increase effective EST Frequency using TICKs
(もしFALSEなら、TICKsを使って有効なEST周波数に増加さえてください。)
FLUX_EST_FREQ > ZEROSPEEDLIMIT * FULL_SCALE_FREQ
If FALSE, lower ZEROSPEEDLIMIT
(もしFLASEならば, ZEROSPEEDLIMITを減らしてください。)
USER_IQ_FULL_SCALE_CURRENT_A
Slightly >= 0.5 * ADC_FULL_SCALE_CURRENT_A
(0.5*ADC_FUKK_SCALE_CURRENT_Aよりわずかに大きい値にしてください。)
starting USER_IQ_FULL_SCALE_VOLTAGE_V
Initially set to bus voltage until flux is identified
(磁束が特定されるまで最初に設定されるバス電圧値)
4. Once Motor ID is attempted, update these as best you can and check IQ_V Scaling
(モーター特定を実行したら,これらの値を出来るだけ最適に調整して、IQ_Vの値幅を確認してください。)
USER_MOTOR_RATED_FLUX | 0.023 | [V/Hz] |
USER_MOTOR_Ls_d | 0.00005 | [H] |
sub-calculations:
Minumiu Flux Measurement = (new USER_IQ_FULL_SCALE_VOLTAGE_V) / (EST_Hz * 1000) / 0.7
= Minimum Flux that can be measured with new USER_IQ_FULL_SCALE_VOLTAGE_V (cell I20)
(=最小磁束はnew_USER_IQ_FULL_SCALE_VOLTAGE_Vで計ることができます。)
4. Check after valid USER_MOTOR_RATED_FLUX Identification
(有効なUSER_MOTOR_RATED_FLUX特定後の確認)
Minimum Flux Measurement < 0.9 * RATED_FLUX
(最小磁束測定値が0.9*RATED_FLUXより小さいこと。)
If FALSE, reduce new USER_IQ_FULL_SCALE_VOLTAGE as low as Bus Voltage / 2 + 10% buffer
(もしFALSEならば,new USER_IQ_FULL_SCALE_VOLTAGEを電源電圧の半分に10%の余裕を持たせた値よりも小さくしてください。)
IQ_VOLTAGE < RATED_FLUX * EST Hz
If FALSE, reduce new USER_IQ_FULL_SCALE_VOLTAGE or increase EST_Hz
(もしFALSEならば、new USER_IQ_FULL_SCALE_VOLTAGEを減らすか、EST_Hzを増やしてください。)
new USER_IQ_FULL_SCALE_VOLTAGE_V
Use larger of a) or b). Minimum of Bus Voltage / 2 + 10% buffer if required to make I18 & I19 TRUE
(a)またはb)の大きな方を使ってください。Minimum Flux Measurement < 0.9 * RATED_FLUXとIQ_VOLTAGE < RATED_FLUX * EST_Hzの条件を満たすためには、電源電圧の半分に10%の余裕を持たせた値にしてください。
a) Bus Voltage
(電源電圧)
Typical Minimum, but can reduce as low as Bus Voltage / 2 + 10% buffer
(形式上の最小値、ただしBus Voltageの半分に10%の余裕を持たせた電圧程度まで減りえます。)
b) Bemf Generated @ Target Hz + 10% buffer
(目標周波数+10%余裕における逆起電力)
5. Ideal Pole Design when you build wwn HW
(ユーザが自身のHWを作る際の理想的な極設計)
Minimum Pole | 200 | [Hz MIN] |
Ideal* Pole >= | 366.667 | [Hz] |
Half** Pole >= | 183.3333 | [Hz] |
* Use Ideal pole to keep Target Hz < USER_IQ_FULL_SCALE_FREQ_Hz but note that as pole Hz increases you are more susceptible to drift/error and should use higher precision Vph filter Capacitors
(理想的な極を使うためにTarget Hz < USER_IQ_FULL_SCALE_FREQ_Hzを維持してください。しかし,極周波数の増加は、ドリフトやエラーに影響されやすくするので高い精度のVphフィルタキャパシタを使うように、気を付けてください。)
** You may use a lower pole (down to half the value of the ideal) that is less sensitive to capacitor error/offset/drift. Set USER_IQ_FULL_SCALE_FREQ_HZ <= 4 * Lowered Pole * 0.95 buffer. Target Hz can reach +/- 1.98 * USER_IQ_FULL_SCALE_FREQ_Hz
Performance difference between the two is typically very marginal though. Do NOT use a filter pole < Minimum Pole!!!
user.hへの反映
マイコンボードとインバータボードに依存して、テンプレートのuser.hが用意されています。たとえば、LAUNCHXL-F28027F+BOOSTXL-DRV8305EVMの組み合わせの場合は、
C:\ti\motorware\motorware_1_01_00_16\sw\solutions\instaspin_foc\boards\boostxldrv8305_revA\f28x\f2802xF\src
にあります。この中から、編集可能な値をピックアップしてみます。
CURRENTS AND VOLTAGES
#define USER_IQ_FULL_SCALE_FREQ_Hz (800.0) // 800 Example with buffer for 8-pole 6 KRPM motor to be run to 10 KRPM with field weakening; Hz =(RPM * Poles) / 120
#define USER_IQ_FULL_SCALE_VOLTAGE_V (24.0) // 24.0 Set to Vbus
#define USER_ADC_FULL_SCALE_VOLTAGE_V (44.30) // BOOSTXL-DRV8305EVM = 44.30 V
#define USER_IQ_FULL_SCALE_CURRENT_A (24.0) // BOOSTXL-DRV8305EVM = 24.0 A
#define USER_ADC_FULL_SCALE_CURRENT_A (47.14) // BOOSTXL-DRV8305EVM = 47.14 A
#define USER_NUM_CURRENT_SENSORS (3) // 3 Preferred setting for best performance across full speed range, allows for 100% duty cycle
#define USER_NUM_VOLTAGE_SENSORS (3) // 3 Required
#define I_A_offset (1.210729778) // BOOSTXL-DRV8305EVM = 1.047175646
#define I_B_offset (1.209441483) // BOOSTXL-DRV8305EVM = 1.044038892
#define I_C_offset (1.209092796) // BOOSTXL-DRV8305EVM = 1.040363491
#define V_A_offset (0.5084558129) // BOOSTXL-DRV8305EVM = 0.5256254077
#define V_B_offset (0.5074239969) // BOOSTXL-DRV8305EVM = 0.5250559449
#define V_C_offset (0.5065535307) // BOOSTXL-DRV8305EVM = 0.5247237682
CLOCKS & TIMERS
#define USER_SYSTEM_FREQ_MHz (60.0)
#define USER_PWM_FREQ_kHz (45.0) //30.0 Example, 8.0 - 30.0 KHz typical; 45-80 KHz may be required for very low inductance, high speed motors
#define USER_MAX_VS_MAG_PU (0.5) // Set to 0.5 if a current reconstruction technique is not used. Look at the module svgen_current in lab10a-x for more info.
#define USER_EST_HANDLE_ADDRESS (0x600)
#define USER_VD_SF (0.95)
DECIMATION
#define USER_NUM_PWM_TICKS_PER_ISR_TICK (3)
#define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) // 2 Example, controller clock rate (CTRL) runs at PWM / 2; ex 30 KHz PWM, 15 KHz control
#define USER_NUM_CTRL_TICKS_PER_CURRENT_TICK (1) // 1 Typical, Forward FOC current controller (Iq/Id/IPARK/SVPWM) runs at same rate as CTRL.
#define USER_NUM_CTRL_TICKS_PER_EST_TICK (1) // 1 Typical, FAST estimator runs at same rate as CTRL;
#define USER_NUM_CTRL_TICKS_PER_SPEED_TICK (15) // 15 Typical to match PWM, ex: 15KHz PWM, controller, and current loop, 1KHz speed loop
#define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (15) // 15 Typical to match PWM, ex: 10KHz controller & current loop, 1KHz speed loop, 1 KHz Trajectory
LIMITS
#define USER_ZEROSPEEDLIMIT (0.5 / USER_IQ_FULL_SCALE_FREQ_Hz) // 0.002 pu, 1-5 Hz typical; Hz = USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz
#define USER_MAX_ACCEL_Hzps (20.0) // 20.0 Default
#define USER_MAX_ACCEL_EST_Hzps (5.0) // 5.0 Default, don't change
#define USER_IDRATED_FRACTION_FOR_L_IDENT (1.0) // 1.0 Default, don't change
#define USER_IDRATED_DELTA (0.00002)
#define USER_SPEEDMAX_FRACTION_FOR_L_IDENT (1.0) // 1.0 Default, don't change
#define USER_FLUX_FRACTION (1.0) // 1.0 Default, don't change
#define USER_POWERWARP_GAIN (1.0) // 1.0 Default, don't change
#define USER_R_OVER_L_EST_FREQ_Hz (300) // 300 Default for high speed motors, can reduce to 100 if RoverL from Motor ID is < 2000
POLES
#define USER_VOLTAGE_FILTER_POLE_Hz (344.62) // BOOSTXL-DRV8305 = 344.62 Hz
#define USER_OFFSET_POLE_rps (20.0) // 20.0 Default, do not change
#define USER_FLUX_POLE_rps (100.0) // 100.0 Default, do not change
#define USER_DIRECTION_POLE_rps (6.0) // 6.0 Default, do not change
#define USER_SPEED_POLE_rps (100.0) // 100.0 Default, do not change
#define USER_DCBUS_POLE_rps (100.0) // 100.0 Default, do not change
#define USER_EST_KAPPAQ (1.5) // 1.5 Default, do not change
Define each motor with a unique name and ID number
#define Anaheim_BLY172S 102
#define USER_MOTOR Anaheim_BLY172S
#define USER_MOTOR_TYPE MOTOR_Type_Pm // Motor_Type_Pm (All Synchronous: BLDC, PMSM, SMPM, IPM) or Motor_Type_Induction (Asynchronous ACI)
#define USER_MOTOR_NUM_POLE_PAIRS (4) // PAIRS, not total poles. Used to calculate user RPM from rotor Hz only
#define USER_MOTOR_Rr (NULL) // Induction motors only, else NULL
#define USER_MOTOR_Rs (0.3968007) // Identified phase to neutral resistance in a Y equivalent circuit (Ohms, float)
#define USER_MOTOR_Ls_d (0.0006708066) // For PM, Identified average stator inductance (Henry, float)
#define USER_MOTOR_Ls_q (0.0006708066) // For PM, Identified average stator inductance (Henry, float)
#define USER_MOTOR_RATED_FLUX (0.03433958) // Identified TOTAL flux linkage between the rotor and the stator (V/Hz)
#define USER_MOTOR_MAGNETIZING_CURRENT (NULL) // Induction motors only, else NULL
#define USER_MOTOR_RES_EST_CURRENT (1.0) // During Motor ID, maximum current (Amperes, float) used for Rs estimation, 10-20% rated current
#define USER_MOTOR_IND_EST_CURRENT (-1.0) // During Motor ID, maximum current (negative Amperes, float) used for Ls estimation, use just enough to enable rotation
#define USER_MOTOR_MAX_CURRENT (5.0) // CRITICAL: Used during ID and run-time, sets a limit on the maximum current command output of the pded Speed PI Controller to the Iq controller
#define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0) // During Motor ID, maximum commanded speed (Hz, float), ~10% rated
user.hとmotorware_selecting_user_variables.xlsxを並べて開いて、データを相互に編集してやる必要があります。
1.最初に、user.hからエクセルの黄色い枠の中にデータをコピペしていきます。モニターで黄色が見にくいのでこのページでは、赤になっています。
2.次に、エクセルの緑の枠の値をuser.hにコピーして持ってきます。USER_MAX_ACCEL_EST_Hzpsは変えるな、とuser.hに書いてあるので変えない方が良いでしょう。
3.実機でモータ同定を行ってから、両方の青枠のデータを更新します。モータ同定はうまくいかないことの方が多いので、うまく回るかどうかを確認してから反映してください。
4.水色で示したモータの巻き線抵抗や、インバータの電流電圧検出抵抗の値をuser.hに更新します。
Tiのホームページの素晴らしい宣伝文句とは裏腹に、おしゃれなGUIなどでは設定できませんので、エディタ等でテキストベースで設定を書き換えます。
(ここまで出来ていて、何故自動ソフトウェア化しないのだろう??)
実際のパラメータ決定法
上記の計算結果をuser.hに入れて、コンパイルして、実行しようとしてもまずうまくいきません。
USER_MOTOR_RATED_FLUXの値が下限リミットに引っかかってしまい、エラーで弾かれるか、まともに動かないという結果になりがちです。
解決方法としては、excelのUSER_MOTOR_RATED_FLUXを使わない、というのが本末転倒ですが現実的なようです。
GUI ComposerのInstaSPIN-FOC MotorWare Instrumentationタブの右下の方に、Variable Overflow Checksがあり、この中の
Flux * Full Scale Freq [V] <
の項目がうまく設定できているかどうかのカギです。
要するに、この項目が下限電圧値を示していてFull Scale Freqの値はエクセルシート上ですでに計算していますから、Fluxの値をこれから直接計算してしまいましょう。
下限電圧値は、「電源電圧の半分に10%の余裕を持たせた値」としていますので、バス電圧が24Vの場合
24[V]/2*1.1=13.2[V]
です。
USER_IQ_FULL_SCALE_FREQ_Hzはエクセルシートの右側で、例えば800Hzとか513.3Hzなんていうオーダーの数値になっています。
試しに513.3Hzとすると、
Flux = 13.2[V] / 513.3[Hz] = 0.02571596 [V/Hz]
となります。エクセルと10倍程度違ったり、自動同定で見つけさせた値とかけ離れていたりしますが、こちらの値の方が上手くいくことが多いです。
これが、InstaSPIN-MOTION用だとまた少し違う項目が出てきます。が、それはまた次に。
[1]parameter settings: http://www.ti.com/lit/ug/spruhj1f/spruhj1f.pdf
本日のモータ制御に役立つ文献~暫定版
最新版 モータ技術のすべてがわかる本 (史上最強カラー図解)
- 作者: 赤津観
- 出版社/メーカー: ナツメ社
- 発売日: 2012/09/04
- メディア: 単行本
- この商品を含むブログ (3件) を見る
- 作者: 見城尚志,木村玄,佐渡友茂
- 出版社/メーカー: 技術評論社
- 発売日: 2006/01
- メディア: 単行本
- 購入: 4人 クリック: 10回
- この商品を含むブログ (3件) を見る
高効率・高速応答!サーボ&ベクトル制御 実用設計 (トランジスタ技術SPECIAL)
- 作者: 渡辺健芳
- 出版社/メーカー: CQ出版
- 発売日: 2016/09/20
- メディア: 単行本
- この商品を含むブログを見る