0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版(18) エンコーダーモーターを使おう2

Last updated at Posted at 2021-03-07

STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版(17) エンコーダーモーターを使おうの続きです。
https://qiita.com/usashirou/items/c3868582a114bfe3f70f
前回は、エンコーダーモーターのエンコーダー値を取得できました。
ただ、このままではどの位移動しているかも回転方向もわかりません。
今回は、回転量と、方向を取得してみましょう。
##変更箇所
今回は、cntをcnt_newという関数にし、 元の値をcnt_oldと置換します。
そして、この差分を計算します。
この結果、前進するとその差分が後退した場合-の差分になります。
###TeraTermの出力の様子
image.png
それではプログラムを見てきましょう。

  cnt_old = cnt_new;
  cnt = cnt_new - cnt_old;

cnt_newをcnt_oldにし、引き算をしています。
これでエンコーダーモーターの移動量を把握することが可能になりました。

##プログラム全容
プログラムは図の通りです
image.png

  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
  HAL_TIM_Encoder_Start( &htim3, TIM_CHANNEL_ALL ); // encoder start
  char msg[] ="Hello STM32\r\n";
  HAL_UART_Transmit(&huart2,(uint8_t *)msg,sizeof(msg),3000);
  int cnt= 0; //
  int cnt_new= 0; //
  int cnt_old= 0; //
  char scnt[100]; //
  /* 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);
      cnt_old = cnt_new;
      cnt_new = TIM3 -> CNT; //
      cnt = cnt_new - cnt_old;
      sprintf(scnt, "TIM3 %d\r\n", cnt);
      HAL_UART_Transmit( &huart2, scnt, strlen(scnt) + 1, 0xFFFF);
      HAL_Delay(2000);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,300);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
      cnt_old = cnt_new;
      cnt_new = TIM3 -> CNT; //
      cnt = cnt_new - cnt_old;
      sprintf(scnt, "TIM3 %d\r\n", cnt);
      HAL_UART_Transmit( &huart2, scnt, strlen(scnt) + 1, 0xFFFF);
      HAL_Delay(2000);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,5000);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
      cnt_old = cnt_new;
      cnt_new = TIM3 -> CNT; //
      cnt = cnt_new - cnt_old;
      sprintf(scnt, "TIM3 %d\r\n", cnt);
      HAL_UART_Transmit( &huart2, scnt, strlen(scnt) + 1, 0xFFFF);
      HAL_Delay(2000);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);
      __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
      cnt_old = cnt_new;
      cnt_new = TIM3 -> CNT; //
      cnt = cnt_new - cnt_old;
      sprintf(scnt, "TIM3 %d\r\n", cnt);
      HAL_UART_Transmit( &huart2, scnt, strlen(scnt) + 1, 0xFFFF);
      HAL_Delay(2000);
  }
  /* USER CODE END 3 */

STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版(18) エンコーダーモーターを使おう3に続きます。
https://qiita.com/usashirou/items/8a8f31d92757a16758b9

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?