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モータは、安定して回転しました。