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



Teraz jest 24 sty 2025, o 00:13


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 17 lis 2016, o 13:56 
Offline
Nowy

Dołączył(a): 19 paź 2016
Posty: 8
Pomógł: 0

Witam,
jak w sposób programowo mając do dyspozycji piny: Enable, Direction, CLK wykonać sterowanie silnikiem krokowym z użyciem tzw. rampy?

Dziękuję za każdą sugestie. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lis 2016, o 14:09 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2591
Pomógł: 128

Zmieniać częstotliwość impulsow na CLK?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lis 2016, o 14:12 
Offline
Nowy

Dołączył(a): 19 paź 2016
Posty: 8
Pomógł: 0

micky napisał(a):
Zmieniać częstotliwość impulsow na CLK?

Mógłbyś dodać coś więcej, gdzie tu ustawić minimalną, maksymalną prędkość?
Przeglądałem przykładowe programy tylko, że w arduino to wydają się dość skomplikowane. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lis 2016, o 14:43 
Offline
Użytkownik
Avatar użytkownika

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

Najprościej mówiąc, inkrementuj od zera (dla rozpędzania) lub dekrementuj od aktualnej (hamowanie) zmienną od prędkości (docelowo CLK) w jednostce czasu czyli np. co 10ms (szybsza zmiana prędkości) lub 50ms (wolniejsza zmiana prędkości). Wszystko zależy co chcesz uzyskać w efekcie końcowym. Najprostszy algorytm to dosłownie kilka linii programu.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lis 2016, o 14:52 
Offline
Użytkownik

Dołączył(a): 06 maja 2014
Posty: 415
Lokalizacja: Kraków
Pomógł: 26

Im szybciej wysyłasz impulsy CLK tym szybciej się silnik kręci.
Aby zrealizować rampę trzeba po prostu płynnie przyspieszać (albo zwalniać) wysyłanie CLK.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lis 2016, o 16:59 
Offline
Nowy

Dołączył(a): 19 paź 2016
Posty: 8
Pomógł: 0

SylwekK napisał(a):
Najprościej mówiąc, inkrementuj od zera (dla rozpędzania) lub dekrementuj od aktualnej (hamowanie) zmienną od prędkości (docelowo CLK) w jednostce czasu czyli np. co 10ms (szybsza zmiana prędkości) lub 50ms (wolniejsza zmiana prędkości). Wszystko zależy co chcesz uzyskać w efekcie końcowym. Najprostszy algorytm to dosłownie kilka linii programu.


Rozpędzanie - W jednym timerze co 50ms inkrementuję zmienna prędkość. Lecz nie wiem jak za pomocą tej zmiennej wpłynąć na szybkość generowania impulsów przez mikroprocesor. ;(

Wcześniej po prostu w timerze zmieniałem stan pinu na przeciwny generując w ten sposób impulsy. (bez zachowania rampy)

Dzięki :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2016, o 00:15 
Offline
Użytkownik
Avatar użytkownika

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

W skrócie algorytm pracy wygląda tak:

1. impulsuj=0 (to taktuje krokami, od tej zmiennej zależy częstotliwość CLK)
2. SPEED_MAX=75 (przykładowa zadana prędkość)
3. jeśli impulsuj<SPEED_MAX to impulsuj=impulsuj+1, w przeciwnym razie skocz do punku 6.
4. odczekaj 50ms
5. skocz do punku 3.
6. ...tu trwa jazda z pełną prędkością i jeśli już ma hamować to przejdź do następnego punku czyli 7.
7. jeśli impulsuj>0 to impulsuj=impulsuj-1, w przeciwnym razie skocz do 10.
8. odczekaj 20ms (tu np. troszkę szybciej wyhamuje niż wcześniej rozpędzało)
9. skocz do 7.
10. koniec

A jak ty to rozpiszesz w programie czyli jakie timery do taktowania co do odmierzania opóźnień to już zależy tylko od Ciebie.


Autor postu otrzymał pochwałę

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2016, o 11:51 
Offline
Nowy

Dołączył(a): 19 paź 2016
Posty: 8
Pomógł: 0

SylwekK napisał(a):
W skrócie algorytm pracy wygląda tak:

1. impulsuj=0 (to taktuje krokami, od tej zmiennej zależy częstotliwość CLK)
2. SPEED_MAX=75 (przykładowa zadana prędkość)
3. jeśli impulsuj<SPEED_MAX to impulsuj=impulsuj+1, w przeciwnym razie skocz do punku 6.
4. odczekaj 50ms
5. skocz do punku 3.
6. ...tu trwa jazda z pełną prędkością i jeśli już ma hamować to przejdź do następnego punku czyli 7.
7. jeśli impulsuj>0 to impulsuj=impulsuj-1, w przeciwnym razie skocz do 10.
8. odczekaj 20ms (tu np. troszkę szybciej wyhamuje niż wcześniej rozpędzało)
9. skocz do 7.
10. koniec

A jak ty to rozpiszesz w programie czyli jakie timery do taktowania co do odmierzania opóźnień to już zależy tylko od Ciebie.


Jeśli chcę także wykorzystać w programie minimalną prędkość powinienem zrobić to tak:
0. SPEED_MIN = 30;
1. impulsuj = SPEED_MIN
7. jeśli impulsuj>SPEED_MIN to impulsuj=impulsuj-1, w przeciwnym razie skocz do 10.

Pozdrawiam :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2016, o 12:07 
Offline
Użytkownik
Avatar użytkownika

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

Dokładnie tak :-)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2016, o 13:20 
Offline
Nowy

Dołączył(a): 19 paź 2016
Posty: 8
Pomógł: 0

SylwekK napisał(a):
Dokładnie tak :-)



Pozostała jedynie kwestia w jaki sposób programowo zmieniać częstotliwość taktowania w zależności od zmiennej impulsuj. :)

Gdzieś na forum czytałem, że za pomocą zmiany wypełnienia impulsu (PWM) tego nie wykonam.
Czyli poprzez PWM nie mogę sterować silnikiem? :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lis 2016, o 14:18 
Offline
Użytkownik
Avatar użytkownika

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

No pwm sie do tego nie nadaje :-) Najprościej ustawić przerwania na dość wysoką częstotliwość i tam zrobić programowy timerek odliczajacy zadany w zmiennej "impulsy" czas po odliczeniu, którego toglujesz jakimś pinem jako wyjście CLK.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2016, o 18:33 
Offline
Nowy

Dołączył(a): 19 paź 2016
Posty: 8
Pomógł: 0

SylwekK napisał(a):
W skrócie algorytm pracy wygląda tak:

1. impulsuj=0 (to taktuje krokami, od tej zmiennej zależy częstotliwość CLK)
2. SPEED_MAX=75 (przykładowa zadana prędkość)
3. jeśli impulsuj<SPEED_MAX to impulsuj=impulsuj+1, w przeciwnym razie skocz do punku 6.
4. odczekaj 50ms
5. skocz do punku 3.
6. ...tu trwa jazda z pełną prędkością i jeśli już ma hamować to przejdź do następnego punku czyli 7.
7. jeśli impulsuj>0 to impulsuj=impulsuj-1, w przeciwnym razie skocz do 10.
8. odczekaj 20ms (tu np. troszkę szybciej wyhamuje niż wcześniej rozpędzało)
9. skocz do 7.
10. koniec

A jak ty to rozpiszesz w programie czyli jakie timery do taktowania co do odmierzania opóźnień to już zależy tylko od Ciebie.


Drogi kolego, a jak w tym algorytmie uwzględnić prawidłowo ilość kroków jaką ma pokonać silnik? :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2016, o 19:28 
Offline
Użytkownik
Avatar użytkownika

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

Liczyć je ;-) a tak na poważnie jest kilka sposobów. Powiedz co to za urządzenie ma być.

_________________
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: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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