Skocz do zawartości

Sterowanie silnikiem STM32F103


Bornhartt

Pomocna odpowiedź

Dzień dobry,

Jest to mój pierwszy wpis na forum, szukałem wcześniej podobnego tematu ale go nie znalazłem, tak więc zakładam nowy.

Steruję silnikiem DC za pomocą sterownika L293D, połączenie jest poprawne, steruję "ręcznie" silnikiem , więc od tej strony wszystko działa, problem pojawił się przy programowaniu STMki.

Korzystając z kursu STM32 F1 HAL #4 porty GPIO próbuję wystawić sygnał sterujący silnikiem

lecz pozostaje on w stanie wysokim. Jeżeli zmienię PIN na diodę LED PC13 to ta działa poprawnie.

Co zrobić aby dany PIN zmieniał swój stan?

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET); 
	HAL_Delay(500);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
	HAL_Delay(500);

  }
  /* USER CODE END 3 */
}

 

Link do komentarza
Share on other sites

@Bornhartt witamy na forum. Nie napisałeś co to za silnik, jaki ma pobór prądu. Jak sterujesz nim ręcznie, co to oznacza? Czy używasz gołego mostka, czy to jakiś shield do arduino?

A już tak zupełnie z innej strony, STM pewnie na wyjściu daje 3,3V. Teoretycznie to powinno wystarczyć, ale któż to wie. L293 to taki dinozaur, że dziwię się, że jest jeszcze w sprzedaży. Bez większej ilości informacji, czy chociażby jakiegoś schematu to tylko mogę zgadywać. Może kod jest napisany nieprawidłowo, a może masz coś źle podłączone, a może napięcie sterujące mostkiem jest za niskie, a może złe stany wysyłasz na złe piny mostka bo oprócz wysterowania wejść 1 i 2 musisz wysterować wejście Enable.

  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)

Używam gołego mostka, a w sterowaniu ręcznym chodziło mi o to, że przykładam 3,3 V do wejść sterujących i silnik działa poprawnie.

W specyfikacji mostka jest opisane wejście enable i dwa wejścia sterujące lewo prawo, jeżeli zasilimy enable 3,3 V to sterujące też możemy zasilić tym napięciem do poprawnego działania mostka. 

Zrobiłem test, w którym podaję napięcie 3,3V na enable a do STM podłączyłem jedynie jedno wejście sterujące na pin, który w stanie wysokim wystawia 3,3 V, silinik obraca się ale pin nie przechodzi w stan niski i to jest problem którego nie potrafię rozwiązać

Albo z drugiej strony, dlaczego kod który przedstawiłem nie zmienia stanu na wyjściu PINu?

 

Edytowano przez Bornhartt
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

35 minut temu, Elvis napisał:

Pokaż kod, którym konfigurujesz pin PA15.

Po co? Widać, ze użył CubeMX.

 

@Bornhartt pokaż jak skonfigurowałeś pin w CubeMX bo pewnie nie wiesz gdzie w kodzie jest inicjalizacja pinu.

Dobra rada. W CubeMX nadawaj etykiety pinom a w kodzie programu posługuj się etykietami a nie nr pinów i nazwami portów.

Link do komentarza
Share on other sites

Może i faktycznie CubeMX, jakoś się zapatrzyłem na "Korzystając z kursu STM32 F1 HAL #4".

W każdym razie PA15 został wybrany nieco niefortunnie. W datasheecie jest taka informacja:

pa15.thumb.png.97e5f172805fc0e07a38d2d7a4899296.png

Jak widać domyślnie ten pin jest używany przez interfejs JTAG.

Dlatego może nie działać jeśli go odpowiednio nie skonfigurujemy. Po pierwsze wybierając piny trzeba sprawdzić do czego są podłączone oraz w dokumentacji upewnić się, czy to na pewno zwykły pin, a nie jakiś "specjalny". W tym przypadku pewnie najłatwiej byłoby skorzystać z innego pinu i po sprawie.

Natomiast jeśli bardzo chcemy używać PA15, a JTAG nie jest nam potrzebny, trzeba zmienić jego funkcję na GPIO:

	 __HAL_RCC_AFIO_CLK_ENABLE();
	 __HAL_AFIO_REMAP_SWJ_NOJTAG();

Właśnie dlatego pytałem o kod konfigurujący pin - bo jeśli tego wywołania w nim nie ma, to PA15 ma prawo nie działać. Tzn. działa, ale jako JTDI i stan ODR nie ma najmniejszego znaczenia.

Z tego co widzę CubeMX nie wyłącza JTAG-a, więc możliwe że to była przyczyna całego zamieszania.

  • Lubię! 1
Link do komentarza
Share on other sites

  GPIO_InitStruct.Pin = GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

Kod konfiguracji pinu.

wstawiając breakpointy i przeglądając ODR można zauważyć, że stan na pinie zmienia się, ale w ciągłym działaniu kodu już wystawia tylko stan wysoki, próbowałem dla pinów a10-a12 również, z tym samym rezultatem

Link do komentarza
Share on other sites

Pierwsze pytanie - czy używasz płytki Nucelo-103rb, czy czegoś innego? Chodzi mi głównie o to czy używane piny są wolne.

Druga sprawa - próbowałeś testować diodą led lub multimetrem? Warto zacząć od czegoś prostego, upewnić się że sterowanie pinem działa i dopiero wtedy podłączyć silnik.

I ostatnie pytanie - testowałem na Nucleo103rb kod sterujący PA15, inicjalizacja taka jak u Ciebie, tylko z dwoma linijkami o których pisałem wcześniej - mógłbyś sprawdzić czy taki program działa poprawnie?

Jeszcze jedno pytanie - napisałeś: "wstawiając breakpointy i przeglądając ODR można zauważyć, że stan na pinie zmienia się," - jak rozumiem to znaczy że zmienia się wartość w rejestrze ODR, co w sumie jest oczywiste - ale czy testowałeś stan pinu?

  • Lubię! 1
Link do komentarza
Share on other sites

Skoro za pomocą LED-a i multimetru widzisz, że pin jest poprawnie sterowany, to nie musisz nic w kodzie zmieniać - przecież działa poprawnie.

O ile rozumiem problem jest albo z działaniem samego programu, albo sterownikiem silnika. Jeśli podłączysz diodę i uruchomisz program, to działa / miga poprawnie?

Pytanie pomocnicze: z czego zasilasz silnik oraz bluepill?

Link do komentarza
Share on other sites

(edytowany)

Wszystko działało poprawnie, niestety podłączyłem do płytki stykowej również GND i to nie pozwalało na poprawną pracę silnika, temat zamknięty i dziękuję Wam za pomoc i porady 🙂

 

Edytowano przez Bornhartt
Link do komentarza
Share on other sites

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ę »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.