STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版(16) モーターを回そう


STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (15) TimerでLチカしようの続きです。
https://qiita.com/usashirou/items/59410a385ac930e0f5b2
今回は、PWMを使用してモーターを回してみましょう。

使用機材

マイコンでモーターを直接駆動させることは難しく、モータードライバーやMOSFETなどを使用します。
今回は、AlieExpressで売っていたMX1508を使用しました。
ただし、MX1508は1枚50円以下ですが、10Vまでの電圧にしか対応していないので今回はUSBの5Vで動作させます。
MX1508は入力電圧を調整することで回転数を変更することができます。
NucleのDAC(PWM)をそれぞれの入力に入れて動かします。
(モータードライバーによっては出力調整のピンが各方向1個のものと、それぞれのものなどがあります)

今回使用するモーターは、エンコーダーモーターを使用しました。
定格が12Vですが5Vで使用します。
DCモーター等でも使用可能です。
6本の端子がありますが、今回は、モーター駆動用の2ピンのみ使用します。

設定

プログラムを作ってみましょう。
今回は、Timer1のCH1とCH2を使いモーターを駆動させます。
使用する周波数はServoモーターと同じ50Hzとします。

STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (13) PWMでサーボモーター(SERVO)を動かしてみよう
を参考に設定しましょう。
https://qiita.com/usashirou/items/2d0fedf59a3cef083b87

ClockSource:InternalClock
Channel1:PWM Generation CH1
Channel2:PWM Generation CH2
Count Settings
Prescaler:840
Count Perioad:1000
クロック周波数:42MHz
image.png
これでPA8とPA9がPWM出力として使えるようになります。

プログラム

プログラムです。
PWMスタート

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);

停止

__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);

回転

__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,200);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);

メインプログラム

  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
      /*Add Code*/
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
      HAL_Delay(2000);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,300);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
      HAL_Delay(2000);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
      HAL_Delay(2000);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
      HAL_Delay(2000);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,300);
      HAL_Delay(2000);
  }

接続

それでは、最後に、マイコンとモータドライバ、モーター、電源を繋いでみましょう。
STM32Nuleoの5VとGNDを+-に
PA8とPA9をIN1、IN2に接続
Out1、Out2をモーターにつなぎます。

プログラムを実行するとモーターが回転すると思います。
以上でモーターを回す事が出来ました。