Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 17 lis 2024, o 00:25


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 2 gru 2018, o 09:52 
Offline
Użytkownik

Dołączył(a): 22 sie 2018
Posty: 27
Pomógł: 0

Cześć.

Próbuję sterować silnikiem krokowym za pomocą sterownika od Pololu A4988 i tak jak mikrostepy działają perfekcyjnie, tak ciąły obrót niestety nie. Nie wpominając nawet o kontrolowaniu prędkości obrotu. Czy wie ktoś dlaczego tak się dzieje? Wstawiam link do gitlaba, gdyż kod jest dość długi. (tak wiem, nie za piękny)

https://gitlab.com/kyez/photly/blob/master/Source/main.c

stałe
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
odpowiadają za sterowanie sterownikiem poprzez zmiany stanów. Teoretycznie po wystawieniu staniu wysokiego na pinie STEP sterownika silnik powinien kręcić się nieprzerwanie, niestety robi jeden krok i koniec.

Dołączam schemat całego urządzenia, połączenie silnika jest w sekcji "ENGINE".
Obrazek

Pozdrawiam, Przemek. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2018, o 09:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lip 2013
Posty: 208
Lokalizacja: Kielce
Pomógł: 15

Link nie działa.

You don't have the permission to access this page.
Please contact your GitLab administrator to get the permission.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2018, o 09:59 
Offline
Użytkownik

Dołączył(a): 22 sie 2018
Posty: 27
Pomógł: 0

Sorka, uprawnienia poprawione.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2018, o 11:13 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Zacznijmy od tego, co masz zakomentowane, bo domyślam się, że to Ci nie działa:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


kyez napisał(a):
Teoretycznie po wystawieniu staniu wysokiego na pinie STEP sterownika silnik powinien kręcić się nieprzerwanie

Nie tak to działa. Każda zmiana stanu z niskiego na wysoki powoduje wykonanie przez silnik jednego kroku. Aby silnik poruszał się ciągle, musisz na wejście STEP podać sygnał prostokątny o częstotliwości adekwatnej do oczekiwanej prędkości. Przy większych prędkościach obrotowych należy przy starcie częstotliwość zwiększać stopniowo (tzw. "rampa") i przy hamowaniu stopniowo zmniejszać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2018, o 12:01 
Offline
Użytkownik

Dołączył(a): 22 sie 2018
Posty: 27
Pomógł: 0

Zakomentowane działa. Dobrze, czyli muszę poprostu podać PWM na pin STEP tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2018, o 13:55 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Nie PWM, tylko przebieg prostokątny symetryczny. Prędkości nie regulujesz współczynnikiem wypełnienia, jak w przypadku silników prądu stałego, tylko częstotliwością sygnału podawanego na pin STEP. Każde zbocze narastające sygnału sterującego STEP powoduje przesunięcie silnika o 1 (mikro)krok. Im krótszy czas pomiędzy zboczami narastającymi (czyli im większa częstotliwość sygnału) tym szybciej będą wykonywane kroki, czyli tym szybciej silnik będzie się obracał.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2018, o 16:54 
Offline
Użytkownik

Dołączył(a): 22 sie 2018
Posty: 27
Pomógł: 0

Cytuj:
//po te linijce program wraca na początek pętli w bardzo krótkim czasie
// więc stan niski na pinie ENGINE_STEP_PIN trwa zbyt krótko
// spróbuj dodać tu drugie opóźnienie i powinno być OK
// (przy założeniu, że pojedyncze kroki działają prawidłowo jak napisałeś)


Nawet przy jednym delayu obraca się bardzo wolno, za wolno dla mnie. Potrzebuje znacznie szybszego obrotu. Nie mam pojęcia jak to zrealizować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 gru 2018, o 17:40 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

Wystarczy zmniejszyć opóźnienie, czyli wartość argumentu funkcji delay(). Jaka wartość będzie odpowiednia zależy od tego, jaki masz silnik (np. ile kroków na obrót, maksymalna prędkość osiągana przez silnik), jaki masz ustawiony podział kroku (bity MS2, MS1 i MS0) i jakiej prędkości obrotowej oczekujesz. Możesz próbować ustalić odpowiednie opóźnienie doświadczalnie, tylko nie zmniejszaj go od razu zbyt radykalnie. Pamiętaj o tym, co napisałem już wcześniej - przy wymaganych dużych prędkościach może być konieczne zastosowanie rampy, czyli powolnego rozpędzania i zatrzymywania. Próba wystartowania silnika od razu ze zbyt duża prędkością może dać nieprzyjemne efekty.

Trochę ogólnych informacji na temat sterowania silnikami krokowymi możesz znaleźć tutaj:
https://www.ebmia.pl/wiedza/porady/auto ... -impulsow/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO