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

 モータ制御ボードから出ているHP信号は、モータに三つ取り付けられているホール素子のHA+をロジック・レベルにした信号です。ブラシレスDCモータのホール素子は、120度ずつずれた角度でモータに取り付けられています。HP信号をカウントすれば、モータの回転数がわかります。
 これまで、回転数計でモータの回転数を測ってきましたが、HPをラズパイでカウントして回転数を求めます。

接続

 モータ・ボードの3番に出ているHP信号をラズパイのGPIO26(物理ピン37)につなぎ、両ボードのGNDもつなぎます。
 発振器を約10kHz、3V0-p、デューティ50%でセットし、モータ・ボードの4ピンに入力します。モータ・ボードに約12Vを供給し、Standby ModeスイッチをStart側へ動かすと、モータが回転します。

スケッチ

 RPi.GPIOライブラリを使ってGPIO26ピンのパルスをカウントします。最大約1kHzまで追随できます。
 1秒間sleepしている間に、callback関数でグローバル変数のcounterをインクリメントしています。

import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
GPIOpin = 26
GPIO.setup(GPIOpin, GPIO.IN)

counter = 0.0

# callback
def callback_count(pin):
    global counter
    counter += 1

# main
print("start counter ",  counter)

GPIO.add_event_detect(GPIOpin, GPIO.RISING, callback=callback_count)

while 1:
    time.sleep(1)
    print("counter= ",  counter, "Hz ", counter * 60, "rpm")
    counter = 0.0

 実行中の様子です。1秒間のカウント値に60をかけるとrpmになります。

 オシロスコープでHP(下側の青色)の信号を観測しています。周波数は76Hzで、プログラムの結果と一致しています。