TB6605FTG Brushless Motor Kit for Arduinoをラズパイで利用する(1)

 TB6605FTG Brushless Motor Kit for Arduinoを使ってブラシレスDCモータを回転させるようすは、次の記事で取り上げました。

  「回すだけ TB6605FTG (1) ブラシレス・モータ・キット
  「回すだけ TB6605FTG (2) スケッチ

コントローラTB6605FTG

 東芝の正弦波 PWM 駆動方式 3 相全波ブラシレス・モータ・コントローラTB6605FTGは、外にNチャネルのMOSFETを6個取り付けると、モータの取り付けられたホール素子からの信号を受けて、一定の回転数を得られるデバイスです。前出の記事ではArduinoで動作させましたが、ここでは、ラズパイを利用します。
 ラズパイはModel2Bで、OSはRaspbian Buster 2019-09-26版を最新にして利用しています。

 モータ用ボードの情報は、次のWebページから得られます。

  Brushless Motor Shield (TB6605FTG)

 その中のResources、

  [Zip] BLDC Motor Shield (TB6605) Eagle Files

をダウンロードし解凍して出てくるファイルの中に回路図が含まれています。

 このボードは、東芝のデモ・ボードとほぼ同じと思われます。

  モータ制御 Closed-loop システム リファレンスガイド RD022-RGUIDE-01-J

 これらの資料とデバイスのデータシートから、ラズパイで制御に必要な情報を取り出します。

電源回り

 VMという名称の電源はモータ駆動用で、9~24Vが必要です。12V-1A程度の電源を用意し、DCジャックから配給します。

 Vregという名称の電源はロジック用5Vで、TB6605FTG内部で作られます。この5Vは、モータのホール素子へターミナル端子を通して配給されます。
 Arduinoの5Vピンと本ボードはつながっていますが、5Vピンの電圧は、ボード内部にはつながっていません。 

スイッチ

 本ボード上には、次のスライド・スイッチが取り付けられています。

  • Driving Mode (OVP);正弦波/矩形波駆動を選択する。どちらであっても回転する
  • Standby Mode;負論理で、Start側でLowになり、モータは回転する
  • CW/CCW Mode;回転方向。CWは時計回り、CCWは反時計回り
  • Brake Mode;緊急停止。Normalで回転する

 いずれの信号も47kΩでVreg(5V)にプルアップされています。ラズパイ側からコントロールできます。

本ボード Arduino のI/Oソケット番号(名称)
Driving Mode (OVP)  6 D5_Driving
Standby Mode  8 Start
CW/CCW Mode  5 CW/CCW
Brake Mode  9 Brake

  Arduino のI/Oソケットには、上記以外に次の信号がつながっています。

  • A1 VSP(A1_Speed);ポテンショメータ10kΩのアナログ出力
  • A2 IDC;速度制御部のOPアンプ出力
  • 3 HP;ホール素子のパルス出力。回転数検知用
  • 4 PWM_IN;速度調整用PWM入力。10~100kHz。ディーティ比は規定されていない

動作

 ターミナル端子にモータからのケーブルを配線します。モータ自体はU、V、Wの3本のラインで電流を流します。ホール素子用に+5V、 GND、HU+、HV+、HW+を配線します。こちらの信号は、モータのお尻のほうのブロックから出ています。

ボード上の信号名 モータの信号名 ケーブルの色
U Coil Phase U
V Coil Phase V
W Coil Phase W
5V Logic power supply positive
GND Logic power ground
HU+ Hall sensor Phase U オレンジ(黄色に見える)
HV+ Hall sensor Phase V 濃い緑
HW+ Hall sensor Phase W 濃い青

 DCジャックに電源をつなぎ、PWM_INにPWM信号を入力し、Standby ModeスイッチをStart(Start信号をLow)にすると回転します。

ラズパイでPWM信号を作る

 RPi.GPIOライブラリを使ってPWM信号を作ります。

 参考記事「ラズベリーパイでステッピング・モータ (2) リニア移動環境

import time
import RPi.GPIO as GPIO
CLK= 18 #12pin

#init
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)
GPIO.setup(CLK , GPIO.OUT)

pwm = GPIO.PWM(CLK, 100000) #100Hz Max 200kHz
pwm.start(50) #duty 50%
pwm.ChangeFrequency(80000)

 しかし、周波数の設定値を大きくしても6kHz台より周波数が上がりません。モータは時々回転するという不安定な状態です。

 シェルのgpioコマンドを利用します。基準となる19.2MHzのクロックを、pwmClockとpwmRangeで割った値がPWM周波数です。

gpio mode 1 pwm

gpio pwm-ms

gpio pwmc 10

gpio pwmr 20

gpio pwm 1 10

GPIO18(BCM)ピン(物理番号12番)をPWM出力に設定

mark-spaceモード

クロックpwmClockの値を10(2 ~4095)

レンジpwmRangeの値を20( ~4096)

ディーティ比 10/20のPWMを出力

 96kHzの連続したPWM信号が得られました。


 ブラシレスDCモータは、安定して回転しました。