自作マイクロマウス研修 (hayashi)

TB67H450FNGを使ってDCモーターを回す – 自作マイクロマウス研修(hayashi)[9]

自作マイクロマウス研修 (hayashi)

こんにちは、hayashiです。
今回は、STMマイコンでモータードライバICのTB67H450FNGを使って、DCモーターを回します。

使用機材

今回の構成は次の通りです。
マイコン:STM32F405 (STマイクロ)
モーター:1717T006SR-6V (FAULHABER)
モータードライバ:TB67H450FNG (TOSHIBA)

配線図は以下の回路図の通りです。

左から、マイコン、モータードライバ、モーターのコネクタになります。
それぞれIC、コネクタのピン配置はデータシートを参考に配線しています。

電源等は別途それぞれに入力することになります。

(TB67H450FNG DataSheet)
(IEH2-4096 DataSheet)

基本設定

開発環境

  • STM32CubeIDE : v1.9.0
  • STM32CubeProgrammer : v2.10.0

基本設定

モータードライバのINピンはそれぞれマイコンのPB4,PB5に接続しています。このピンはTIM3のCH1,CH2を使用できるので、設定はTIM3の項目になります。

STM32CubeIDEで、PB4,PB5を選択すると使用できる機能が表示されます。

ピン設定は次の通りになっています。

CounterSettingの設定

PWM信号の周波数設定は、Prescaler等を設定する必要があります。
元となるクロック周波数はTIM3の場合は、APB1になります。

マイクロマウス研修(のり)[41]STM32F446 STEP8 定期割り込み処理
記事一覧 のり マイクロマウス研修 回路の動作確認ができたので、ここからマイクロマウスプログラムの準備に入ります。次は定期割り込み処理を行います。LEDでチカチカするようにしてみます。 参考URLです。 タイマー 割り込みに使うタイマーをど...

(STM32F405RG DataSheet)

STM32CubeIDEのClock configurationを見ると、APB1のTimer clockは84MHzになります。

PrescalerとCounterPeriodの設定

モータードライバのデータシートに記載の制御ロジック周波数入力範囲が最大400kHzになっています。データシートのギリギリはあまり使用しないほうが良いので、最大値の8割を使用します。よってPWM信号の動作周波数は320kHzにします。
PrescalerとCounterPeriodを求めるために、簡単な計算をします。

動作周波数=クロック周波数 / ((Prescaler +1) * (Counter Period +1))
320kHz = 84MHz / (Prescaler +1) * ( Counter Period +1))

計算が楽になるので、Prescalerは”0”を設定します。

320kHz = 84MHz / ( 1 ) * ( Counter Period +1))
320,000 = 84,000,000 / x
x = 262

これでそれぞれの値が決定しました。

ソフトウェアの実装

モータードライバのアプリケーションノートを参考にコードを実装します。
モータードライバの入出力と動作の関係は以下の通りです。

(TB67H450FNG ApplicationNote)

これを元にPWM信号を出力するソフトウェアを実装します。

void drive_node(){

    /*init channel 1,2 motor*/
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 0);
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 0);

    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
    HAL_Delay(5000);

    duty = (int)(262 - (131));  //50%
    /* setting do pwm*/
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, duty);
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, duty);

    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
    HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);
    HAL_Delay(5000);

    HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
    HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);
}

簡単な解説

それぞれのHAL関数についてはこちらのサイトをご覧ください。

モータードライバの操作として、初めに初期化として、スタンバイモードになるように、Lowとなる信号を流していきます。その後、入力するPWMのdutyを設定して、片側のチャンネルをStopにして回転させます。

終了時は、両方のPWMをStopします。これで、信号はLowになり一定期間経つとスタンバイモードに戻ります。

まとめ

TB67H450FNGを使用して、DCモーターを動作させました。モータードライバによって信号入力が異なったり、使用方法が違ったりしますので、データシートはよく見ましょう。

以上

 

参考リンク

Raspberry Pi でDCモーターを制御するには?TA7291P、TB67H450FNGという2種類のモータードライバの使い方を比較してみた
現在、個人的に電子工作の技術を使ってプラモデルにギミックを組み込めないかあれこれ模索中です。とりあえず、1/3…
STM32のタイマーをCubeMXで - Qiita
はじめにSTM32のタイマーには色々設定が有って複雑です。今回、ADコンバータの変換トリガーとしてタイマーを使う方法を調べてみました。使用機材基板製品名:STM32F103 Nucleo-…

 

タイトルとURLをコピーしました