こんにちは、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になります。

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
これでそれぞれの値が決定しました。
ソフトウェアの実装
モータードライバのアプリケーションノートを参考にコードを実装します。
モータードライバの入出力と動作の関係は以下の通りです。
これを元に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モーターを動作させました。モータードライバによって信号入力が異なったり、使用方法が違ったりしますので、データシートはよく見ましょう。
以上
参考リンク

