InfineonのTLE9879Qx 3相モータドライバシールドによるBLDCモータの駆動

はじめに

ブラシレスDCモータは、産業用や自動車用メカトロニクス機器への採用が拡大しています。この成長を後押ししているのが、モータを制御するための電子機器の性能とコスト効果です。その好例が、Infineonの高集積3相モータドライバチップTLE9879QXA40です。この記事では、InfineonのBLDC_SHIELD_TLE9879評価ボードを使用してBLDCモータを回転させる方法を紹介します。

ハードウェア

このプロジェクトで使用したハードウェアは、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」というダウンロードされるソフトウェアに含まれています。

image

(注:ダウンロードには 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 TLE9879QXA40myinfineon.comから入手)
Infineon TLE9879QXA40 product page
Trinamic QBL4208 series motor product page
Trinamic QBL4208-41-04-006 data sheet

連絡先

ご質問やご意見は、TechForumで受け付けています。





richard.savery

ここに掲載されている部品を購入したのですが、もしかして間違いがあるのでは?と、今気づきました。シールドの定格は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のトラックのアプリケーション評価は推奨しません。」と記載されています。





richard.savery

このような迅速な対応をしていただき、本当にありがとうございます。




オリジナル・ソース(English)