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



Teraz jest 25 mar 2026, o 22:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 26 lut 2015, o 01:17 
Offline
Nowy

Dołączył(a): 22 lis 2014
Posty: 19
Pomógł: 0

Witam,
mam mały problem ze sterowaniem silnika krokowego za pomocą potencjometru.
Postaram się szerzej opisać mój problem.
Podczas działania programu wartość ADC dość mocno skacze mimo zrobionego zabezpieczenia. Silnik gubi kroki.
Do celów testowych używam płytki prototypowej z procesorem ATMega32 i sterownika silników krokowych na układzie scalonym DRV8825. Analogicznym do tego sterownika: https://www.pololu.com/product/2133
Wrzucam schemat połączeń:
Obrazek
Wrzucam także kod programu który posiada komentarze więc raczej nie będę musiał dokładnie opisywać i dodawać bardzo rozbudowanego schematu połączeń:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zależy mi właśnie na współpracy w działaniu (przekręceniu) potencjometru i obrotu silnika o podobny kąt obrotu potencjometru.
Zależy mi także na szybkości działania. Jak szybko przekręcę potencjometrem tak szybko musi wykonać obrót silnik. U mnie to za bardzo nie chce działać.
I teraz prośba czy mógłby mi ktoś sprawdzić ten kod i poprawić, podpowiedzieć co zrobiłem źle.

Film z efektów działania i tutaj chciałem przeprosić za tą "herezję" czyli to okablowanie, które wisi w powietrzu.Jakby ktoś pytał to tak - mam zworki do płytki stykowej, które polecał Mirek. Ale wszystko jest podłączone zgodnie ze schematem, który podałem wyżej:


A dążę to uzyskania dokładnie takiego efektu, który zrobił Pan Sylwek Kuna - użytkownik "SylwekK"


Dziękuję i pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 09:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Czuję się wywołany do tablicy ;) Tłumaczyłem to zagadnienie już na tym forum w jakimś podobnym temacie, ale podpowiem jeszcze raz. Aby nie gubiło kroków należy zmieniać obroty silnika nie przekraczając jego maksymalnej prędkości. Najlepiej dokonać tego na podobnie jak dla opcji rampy na zmiennej doganiającej z tą różnicą, że tu nie przyspieszamy/zwalniamy (zmienna prędkość) tylko doganiamy licznik kroków, który pracuje ze stałą prędkością (optymalną dla obrotów silnika). Program z filmu pisałem jeszcze w bascomie i był bardzo krótki, też go tu na forum już umieszczałem o ile pamiętam.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 15:15 
Offline
Nowy

Dołączył(a): 22 lis 2014
Posty: 19
Pomógł: 0

Możesz jakoś jaśniej to zobrazować jak ma wyglądać to doganianie. Na jakimś Timerze ?
Co to jest opcja rampy ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 15:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Poniżej kompletny program w bascomie, który brał udział w filmie. Jego konstrukcja jest tak banalna, że nawet bez znajomości składni nie powinieneś mieć problemu z jego analizą. Te 2ms, które tam widzisz to opóźnienie i maksymalna prędkość dla wału silnika. Gdyby było ono mniejsze lub wcale to działo by się mniej więcej to co na na Twoim filmie. Przy takiej konstrukcji jak poniżej nawet błyskawiczne przekręcenie potencjometru w skrajną pozycję pozwoli silnikowi dojechać na swoich maksymalnych obrotach do celu. A propo's litanii w podprogramie KROK - są to dane dzięki którym silnik bipolarny pracuje w półkroku. "Rotate" to zwykłe przesunięcie bitowe z przeniesieniem.

Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 3 minutach ]

Rampa to płynne przyspieszenie/zwalnianie - bardzo istotny parametr przy pracy z silnikami krokowymi w profesjonalnych zastosowaniach. W zasadzie bez rampy każde większe urządzenie nie ma szans na prawidłową pracę ze względu na możliwość gubienia kroków przy gwałtownym starcie... fizyki się nie przeskoczy (bezwładność).

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 18:39 
Offline
Nowy

Dołączył(a): 22 lis 2014
Posty: 19
Pomógł: 0

Chyba widzę, w czym problem.
Otóż sterownik ustawia odpowiednie kroki, ja tylko podaję do niego sygnał PWM'a. Tutaj jest problem. Podajesz mu 2 ms między krokami. Jak tutaj to zrealizować?

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 18:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

W przerwaniach jest timer programowy, przerwania ustawione na 1ms. W pętli głównej badam czy licznik programowy doszedł do "0" jeśli tak to wpisuję tam wartość 2 (co odpowiada 2ms w tym przypadku) i wykonuję to co mam wykonać. W kilku(dziesięciu/set...) następnych przebiegach pętli sprawdzany jest licznik, a że pętla wykonuje się stosunkowo szybko więc warunek nie jest spełniony i z tego powodu nie wykonuje się nic co jest w nim zawarte. To jest właśnie program nieblokujący gdzie opóźnienia zadawane są timerem programowym (możesz sobie takich zrobić i 50 jeśli będzie taka potrzeba, choć na to są inne sposoby), a pętla sobie w kółko biegnie i nigdzie się na dłużej nie zatrzymuje.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 19:21 
Offline
Nowy

Dołączył(a): 22 lis 2014
Posty: 19
Pomógł: 0

widze, widzę, nie używasz PWM'a. Jeszcze chciałem zapytać o procedurę krok - jak ona działa? To wygląda jakby za każdą zmianą była inna wielkość kroku - czyli de facto zmiana wartości ADC o 1 zmienia o zmienną wartość kroku silnika



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 19:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

ProLogicTechnology napisał(a):
To wygląda jakby za każdą zmianą była inna wielkość kroku - czyli de facto zmiana wartości ADC o 1 zmienia o zmienną wartość kroku silnika


Nie, nie, to wartości dla cewek silnika. Odpowiednie ich kolejne włączanie powoduje po prostu obrót wałem.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 19:49 
Offline
Nowy

Dołączył(a): 22 lis 2014
Posty: 19
Pomógł: 0

to jak to zrealizować na tym sterowniku sterując to PWMem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 20:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Sterowanie PWM jest niepraktyczne i osobiście nigdy tego nie robiłem przy krokowcach. Oczywiście da się, ale efekt będzie marny ze względu na bardzo skokowy zakres częstotliwości tego sygnału. PWM stosuję tylko do regulacji mocy, która jest dostarczana do silnika krokowego.
W Twoim przypadku w zasadzie wystarczy tylko włączać i wyłączać pwm (licząc wysłane kroki) i ustalać kierunek w zależności od tego czy liczba zliczonych kroków jest większa niż ADC czy mniejsza. Maksymalną prędkość dla silnika ustalasz już na etapie konfiguracji PWM'a. Pamiętaj że musi być dwa warunki: mniejszy niż, większy niż. Nie możesz użyć else ani kombinacji ze znakiem równości. Musisz dać szansę programowi aby ustawił się w miejscu, które okaże się wyrównaniem zmiennych i stamtąd silnik nie może uciec w którąś stronę, a znak "=" by na to nie pozwolił ;)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 23:10 
Offline
Nowy

Dołączył(a): 22 lis 2014
Posty: 19
Pomógł: 0

Nie mam zielonego pojęcia jak zrobić tak, żeby silnik reagował od razu. Na filmie widać, że doskakuje do swojej pozycji.


Poprawiony kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lut 2015, o 23:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

No i wszystko gra ! Przyspiesz PWM (na etapie konfiguracji - co może być niestety dość mało elastyczne, albo wręcz niemożliwe dla takiego przypadku) i będzie ok. Ewentualnie zawsze możesz zrobić PWM programowe (nawet 1-o bitowe! :) ) i też będzie działać, a przynajmniej prędkość łatwo ustalisz.

_________________
http://www.sylwekkuna.com



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: 12 ] 

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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO