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

マイクロマウス研修(のり)[38]STM32F446 STEP6 エンコーダ

マイクロマウス研修(のり)

記事一覧 のり マイクロマウス研修

モータ軸に取り付けられている2相エンコーダのパルスカウントを計測して表示します。

参考にしたサイトです。

STM32でロータリエンコーダを読む - 元Web屋のマイクロマウス製作記 Part.19
ししかわです。 社員研修の一環で、自作マウスを作って大会に出場します。 記事一覧 – 元Web屋のマイクロマウス製作記 | RT MicroMouse 今回はロータリエンコーダをSTM32で読み取りました。 車輪の回転を検知するには 前回は...
STM32 +HALでエンコーダモードを使用してみる | Sora's Activity Record
STM32マイコンのペリフェラル関連記事を一覧にまとめました。 STM32のタイマーにはエンコーダモードがあります。使用例として挙げると、距離速度を計測するために使用されているモー...

回路図

DCモータ1717T003SR-3Vのエンコーダ周りの回路図です。コネクタ周りは間違えやすいのでデータシートの画像を抜き出してKiCad回路図に貼り付けておくと、ミスも減りますし、他の人がレビューをしやすいです。

エンコーダは5V駆動ですが、3.3Vでも動くという情報があります。出力される波形は、5VとGNDの矩形波です。

ここでSTM32のポートに接続するときの注意点として、前回のPWMの時と違って、パルスをカウントするタイマーを2つのモータでそれぞれ分ける必要があります。鉄鼠では左モータエンコーダでTIM3、右モータエンコーダでTIM4を使うようにしました。

STM32CubeMX

エンコーダ用のポート設定と、カウントした値の出力にUARTを使います。

TIM3とTIM4のCombined Channelsを、それぞれEncoder Modeにします。

Encoder Modeを、Encoder Mode TI1 and TI2にします。

プログラム

HAL_TIM_Encoder_Start関数を使います。

  /* USER CODE BEGIN 2 */
  setbuf(stdout, NULL);
  setbuf(stdin, NULL );
  printf("Started!\n\r");
  HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
  HAL_TIM_Encoder_Start(&htim4, TIM_CHANNEL_ALL);
  /* USER CODE END 2 */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  printf("Left encordder = %d, Right encordder = %d\n\r", TIM3->CNT, TIM4->CNT);
	  HAL_Delay(100);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

 

実行

TeraTermで表示します。

手で回してみた様子。

次は、SPIをつかったジャイロセンサと通信テストします。

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