はじめに
ブラシレスDCモータは、産業用や自動車用メカトロニクス機器への採用が拡大しています。この成長を後押ししているのが、モータを制御するための電子機器の性能とコスト効果です。その好例が、Infineonの高集積3相モータドライバチップTLE9879QXA40です。この記事では、InfineonのBLDC_SHIELD_TLE9879評価ボードを使用してBLDCモータを回転させる方法を紹介します。
ハードウェア
- InfineonのBLDC_SHIELD_TLE9879品番BLDCSHIELDTLE9879TOBO1
- Arduino Uno品番A000066
- TrinamicのBLDCモータ品番QBL4208-41-04-006
このプロジェクトで使用したハードウェアは、InfineonのBLDC_SHIELD_TLE9879評価ボード、Arduino Uno、TrinamicのBLDC(QBL4208-41-04-006)です。BLDCシールドはArduino Unoと互換性があり、これらを組み合わせてTrinamicの3相BLDCモータを駆動します。
図1:BLDC_SHIELD_TLE9879
このシールドには、Infineonの3相モータドライバ(TLE9879QXA40)と、6個のNFET(IPC90N04S5-3R6)を含む駆動回路が含まれており、外付けの3相BLDCモータを直接駆動することができます。 シールドのTLE9879QXA40には、いくつかのモータ制御アルゴリズム(センサレスFOC、Back EMF、ホールセンサベースのブロック整流)がフラッシュされており、UnoからSPIで制御されるようになっています。シールドの電源は外部からの+12VDCで、シールドから供給されるモータ駆動電圧も+12VDCです。
TLE9879QXA40の詳細
TLE9879QXA40は、Arm® Cortex®-M3コア、6個のNFETドライバ、およびチャージポンプを集積したワンチップ3相モータドライバSoCです。その周辺機器には、電流センサ、PWM制御用のキャプチャ&コンペアユニットと同期した逐次比較型ADC、および16ビットタイマが含まれています。また、LINトランシーバも内蔵しており、多数の汎用I/Oとともにデバイスとの通信を可能にします。また、外部負荷に供給するためのオンチップ・リニア電圧レギュレータも内蔵しています。
ソフトウェア
Uno上のArduinoコードとフラッシュしたTLE9879シールドのコードが連動してBLDCモータを制御します。Unoはコントローラとして、モータの起動や停止などのハイレベルなコマンドをSPIでシールドに搭載されたTLE9879に送ります。TLE9879のコードは、Unoからのハイレベルなコマンドを翻訳して、パラメータの読み書き、LEDの制御、およびモータ制御機能を実行します。
Arduino
Infineonが提供するソフトウェアライブラリには、モータの制御、モータパラメータの設定、モータパラメータセットのロード/セーブ、およびSPI通信のテスト用LEDの制御を含むコマンド一式が含まれています。モータ制御のアルゴリズムは、それぞれ独自のパラメータセットを持っています。コマンドとモータ制御アルゴリズムのパラメータセットについてはBLDC Shield with TLE9879QXA40 for Arduino User Manualに記載されています。Arduinoのライブラリ、サンプルコード、および関連ドキュメントは、下記参考資料セクションのリンク先のGithubで公開されています。
TLE9879QXA40シールドのモータ制御コード
シールドで使用されているTLE9879QXA40のコードは、InfineonのKeil uVision5 project filesとして入手可能です。ブートローダ、ホール、FOC、およびBEMFの4つのプロジェクトが含まれています。シールドでフラッシュする各モータ制御アルゴリズムのデフォルトのモータパラメータは、各アルゴリズムのソースコードに記載されています。ソースコードファイルをダウンロードし、解凍すると、各プロジェクトディレクトリにモータパラメータのfoc_defines.h, bchall_defines.hファイルが見つかります(例えば、…\TLE9879 BLDC Shield\Infineon-BLDC_Shield-Software-v01_00-EN.zip\03_shield_software\uVision_project_files\FOC\RTE\Device\TLE9879QXA40)。 シールドのTLE9879QXA40にフラッシュしたファームウェアのプロジェクトファイルとソースコードは、以下で強調表示されているように、「Tools & Software」の「BLDC_SHIELD_TLE9879」にリンクされたInfineonの「BLDC Shield for Arduino with TLE9879QXA40」というダウンロードされるソフトウェアに含まれています。
(注:ダウンロードには myinfineon.comへのアクセスが必要です。)
モータの運転テスト
TrinamicのQBL4208-41-04-006は、Infineonが推奨するモータの1つであり、Digi-Keyで容易に入手できるため、運転テスト用に選択しました。シールドにフラッシュされた今回のモータ制御ファームウェアで使用されているデフォルトのモータパラメータを起点として、モータを制御しました。テスト用モータのデータシートでモータパラメータ値を確認し、それに応じてシールドパラメータを修正する必要があります。Trinamicのモータにはホールセンサが搭載されているため、センサレスFOCとホールブロック整流アルゴリズムを用いてモータを駆動できます。
注 :モータが正常に動作しない場合、モータのパラメータを調整する必要があります。
UnoとBLDCシールド、モータを接続する
Arduinoにシールドを搭載する必要があります。シールドのL1、L2、L3線をモータのL1、L2、L3に接続し、HALL アルゴリズムを使用する場合はモータのホールセンサ線をシールドに接続してください。最後に、シールドにDC+12Vとグランドを接続して下さい。テスト中、UnoはArduino GUIが動作するPCにUSBで接続されています。
センサレスFOC
以下のArduinoコードは、FOCアルゴリズムの選択、モータパラメータの変更、モータ回転数の設定、シールドLEDの色設定、およびモータの起動と停止を行う簡単な例です。
bldc_shield_single_motor_test_FOC.ino
// Include the Shield library to your Arduino project
#include "TLE9879_Group.h"
// Declare Shield group object
TLE9879_Group *shields;
float shunt;
void setup()
{
// Initialize the Shield group object with the
// number of Shields in the stack
shields = new TLE9879_Group(1);
// Set the desired mode (FOC, HALL, BEMF)
shields->setMode(FOC);
//Set QBL4208-41-04-006 motor parameters
shields->setParameter(FOC_R_PHASE,0.9, BOARD1); //motor resistance (default 0.36)
shields->setParameter(FOC_L_PHASE,0.0013, BOARD1); //motor inductance (default 0.0002)
shields->setParameter(FOC_NOM_CUR,2, BOARD1); //nominal current (default 5)
shields->setParameter(FOC_MAX_SPEED,4000, BOARD1); //max speed (default 2000 )
shields->setParameter(FOC_START_CUR_IF,1, BOARD1); //open loop start current (default 2)
shields->setParameter(FOC_MIN_POS_REF_CUR,1, BOARD1); //closed loop low speed pos_rot current (default 3)
shields->setParameter(FOC_MAX_POS_REF_CUR,2, BOARD1); //closed loop high speed pos_rot current (default 4)
shields->setParameter(FOC_END_START_SPEED,2300, BOARD1); //open loop end speed (default 800)
shields->setParameter(FOC_MAX_CUR_SPEED ,2500, BOARD1); //closed loop pos_rot switchover speed (default 1000)
// Set the desired motor speed (RPM)
shields->setMotorSpeed(3000);
/*
You might have to adjust the motor parameters,
in case the motor does not run properly.
*/
// Enable and set LED to green, start the motor and let it run for 15 seconds,
// then stop the motor
shields->setLed(LED_ON, BOARD1);
shields->setLedColor(COLOR_GREEN, BOARD1);
shields->setMotorMode(START_MOTOR);
delay(15000);
shields->setMotorMode(STOP_MOTOR);
}
void loop()
{
}
このシールドのデフォルトのFOCモータ制御パラメータは、次のディレクトリのInfineonのFOCプロジェクトファイル内に記載されています。 …\TLE9879 BLDC Shield\Infineon-BLDC_Shield-Software-v01_00-EN.zip\03_shield_software\uVision_project_files\FOC\RTE\Device\TLE9879QXA40
ホールブロック整流
下表は、テスト時のシールドのX15コネクタとモータのホールセンサのリード線との接続を示します。
X15のピン | モータのホールセンサのリード線 |
---|---|
1 - VDDext | 赤 |
2 - S2 | 青 |
3 - NC | 接続無し |
4 - S1 | 緑 |
5 - GND | 黒 |
6 - S0 | 白 |
以下のArduinoコードは、ホールアルゴリズムの選択、モータパラメータの変更、シールドLEDの色設定、モータ回転数の設定、およびモータの起動と停止を行う簡単な例です。
bldc_shield_single_motor_test_HALL.ino
// Include the Shield library to your Arduino project
#include "TLE9879_Group.h"
// Declare Shield group object
TLE9879_Group *shields;
void setup()
{
// Initialize the Shield group object with the
// number of Shields in the stack
shields = new TLE9879_Group(1);
// Set the desired mode (FOC, HALL, BEMF)
shields->setMode(HALL);
shields->setParameter(HALL_INIT_DUTY,30); //set initial duty cycle (default 10)
// Enable and set LED to blue, set RPM
// then stop the motor
shields->setLed(LED_ON, BOARD1);
shields->setLedColor(COLOR_BLUE, BOARD1);
shields->setMotorSpeed(1500);
/*
You might have to adjust the motor parameters,
in case the motor does not run properly.
*/
// Start the motor and let it run for 15 seconds,
// then stop the motor
shields->setMotorMode(START_MOTOR);
delay(15000);
shields->setMotorMode(STOP_MOTOR);
}
void loop()
{
}
このシールドのデフォルトのホールモータ制御パラメータは、次のディレクトリのInfineonのFOCプロジェクトファイル内に記載されています。 …\TLE9879 BLDC Shield\Infineon-BLDC_Shield-Software-v01_00-EN.zip\03_shield_software\uVision_project_files\HALL\RTE\Device\TLE9879QXA40
まとめ
Arduino UnoとInfineonのTLE9879 BLDCシールドの組み合わせは、BLDCモータの駆動を試したり実験したりするのに使いやすく、低コストなハードウェアプラットフォームとなります。また、独自のファームウェアを開発するための参考資料として、完全なソースコードをダウンロードすることができます。
参考資料
Infineon BLDC_SHIELD_TLE9879 product page
Infineon TLE9879-BLDC-Shield github link
Infineon Source Code BLDC Shield for Arduino with TLE9879QXA40(myinfineon.comから入手)
Infineon TLE9879QXA40 product page
Trinamic QBL4208 series motor product page
Trinamic QBL4208-41-04-006 data sheet
連絡先
ご質問やご意見は、TechForumで受け付けています。
ここに掲載されている部品を購入したのですが、もしかして間違いがあるのでは?と、今気づきました。シールドの定格は12Vですが、モータは24V?何か見落としがあるのでしょうか?
ScottRaeker DigiKey Employee
こんにちは、@richard.saveryさん。
BLDC_SHIELD_TLE9879シールドの定格電圧は最大28Vです。BLDC_SHIELD_TLE9879 - Infineon Technologiesをご覧ください。モータの最大定格は24Vですが、Infineonの例では12Vで問題なく動作します。12Vは一般的な自動車用モータの電圧であるため、この例に選ばれたのでしょう。
ScottRaeker DigiKey Employee
こんにちは、@richard.saveryさん。
InfineonからBLDCシールドの電源電圧定格に関する追加情報が、Infineon Developer CommunityのFAQ BLDC motor shield with TLE9879QXA40 for Arduinoに掲載されています。
FAQには、「基板は24Vに対応していますが、ICは12Vの車載用として設計されているため、24Vのトラックのアプリケーション評価は推奨しません。」と記載されています。
このような迅速な対応をしていただき、本当にありがとうございます。