szachu Napisano Grudzień 10, 2021 Udostępnij Napisano Grudzień 10, 2021 (edytowany) Cześć! Mam problem z enkoderem z Nucleo G491RE. Przy wyświetlaniu na monitorze portu szeregowego, po wykonaniu jednego kroku, wyświetla wartość co dwa(0,2,4...) natomiast podczas powolnego przekręcania w jednej chwili pokazują się normalnie nieparzyste wskazania, gdy enkoder jest w ułożeniu między pełnymi krokami. Niżej kod, ustawiłem w CubeIDE tim2 na prace z enkoderem 20 krokowym co pokrywa się z używanym przeze mnie. char msg[64]; uint32_t count; HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { count = __HAL_TIM_GET_COUNTER(&htim2); sprintf((char*)msg, "Odczyt: %d\n", count); HAL_UART_Transmit(&huart2, (uint8_t*)msg, strlen(msg), 1000); HAL_Delay(200); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } Edytowano Grudzień 13, 2021 przez Gieneq Link do komentarza Share on other sites More sharing options...
Gość Grudzień 11, 2021 Udostępnij Grudzień 11, 2021 Spróbuj zrobić dwie rzeczy 1. zamiast HAL_Delay(200); wpisz HAL_Delay(2); wgraj program ,pokręć pokrętłem i zobacz co się dzieje. 2. zakomentuj HAL_Delay(2); czyli linia będzie wyglądać // HAL_Delay(2); wgraj program ,pokręć pokrętłem i zobacz co się dzieje. Delay(); powoduje,że przejście do następnej linii programu nastąpi po upływie czasu jaki został wpisany w nawiasach. Jeśli wpisałeś 200 to przejście do następnej linii jest po 200ms.W tym czasie Twoje pokrętło,które jest całkowicie niezależne od kontrolera zmieniło stan kilka razy a procesor zarejestrował tylko jedno zdarzenie. Zmieniając w nawiasach z 200 na 2 powodujesz,że Twój procesor jest gotowy do odbioru po troszeczkę więcej niż 2ms.To troszeczkę to czas od momentu zakończenia delay do linii programu w której następuje odczytanie stanu na wejściu. Wniosek jest jeden użycie delay nie jest dobrym rozwiązaniem i należy być bardzo ostrożnym w jego stosowaniu. Link do komentarza Share on other sites More sharing options...
Gość Grudzień 11, 2021 Udostępnij Grudzień 11, 2021 Z drugiej strony najlepiej będzie jeśli wejdziesz na stronę https://www.youtube.com/watch?v=xqzWQgpqHmI a następnie https://github.com/controllerstech/STM32/tree/master/TIMER ENCODER MODE gdzie znajdziesz cały kod. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »