はしもとの自作マウス研修

エンコーダの値を確認– はしもとの自作マウス研修 Part10

はしもとの自作マウス研修

はしもとの自作マウス研修一覧

こんにちは!はしもとです。

前回は、STM32F446を使って、DCモータの動作確認をしました。
今回は同様にSTM32F446を使って、DCモータのエンコーダ値の確認を行っていきます。

使用する部品

今回使用した部品は前回のブログで紹介した部品と同じです。

ピン機能を設定

今回は、前回のブログで設定したピン機能に加えて、エンコーダ用のピン機能を追加します。

  1. Pinout & ConfigurationからTIM2を選択
  2. Combined ChannelsをEncoder Modeに設定
  3. Counter Periodを10000に設定
    カウンタ値が10000を上回ると値がクリアされます。
    こちらは最大で4,294,967,295(32bitの最大値)まで設定できます。
  4. Encoder ModeをEncoder Mode TI1 and TI2に設定

これらを設定後、ピン機能にTIM2_CH1とTIM2_CH2が自動的に割り振られます。

回路

先輩のブログの回路図を参考にしました。

実際に配線してみたのですが、写真のようにひと目ではかなり分かりにくくなっています。
前回のDCモータを回したときの回路図に加えて、Nucleoにエンコーダの信号を受け取る用の信号線を2つつなげたのと、エンコーダ用の電源をNucleoから供給するようにしました。

コード

まず前述したピン機能の設定が終われば、コードを自動生成します。
その後、以下のコードを追記します。
前回のDCモータを回したときのコードに、エンコーダ値を__HAL_TIM_GET_COUNTER関数を使って出力する部分を追記しました。printfをする方法はこちらの記事を参考ください。

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_GPIO_WritePin(GPIOB, Direction_Pin, 1);      // 回転方向指示
	  __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1,25); // デューティー比を設定
	  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

      // Read Encoder
	  count = __HAL_TIM_GET_COUNTER(&htim2);
	  printf("Encoder Value: %d\n\r", count);
	  HAL_Delay(100);
  }
    /* USER CODE END WHILE */

動作確認

最後にNucleoに書き込みすると、動画のようにモータがゆっくりと回り続けて、エンコーダの値もカウンタ値が10000を上回ると値がクリアされていることが確認できました。

まとめ

今回は、以下の内容についてまとめました。

  • 今回使用する部品の紹介
  • STM32にエンコーダ値を確認するためのピンを設定
  • 配線を済ませ、プログラムを追記・実行することで、エンコーダの値をPC上で確認することができた

今回は以上です!
次回からは、回路設計、ハードウェア設計に着手できればと考えています。
それでは!

参考資料

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