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