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



Teraz jest 3 mar 2026, o 01:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 28 sty 2015, o 17:10 
Offline
Nowy

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

Witam,
mam mały problem. Aktualnie pracuję nad projektem sterowania silnika krokowego. Chciałbym aby silnik wykonywał przeze mnie określoną ilość kroków w lewo taką samą ilość kroków w prawo.
Silnikiem krokowym steruję za pomocą procesora ATmega 32A i sterownikiem DRV8825 Stepper Motor Driver
https://www.pololu.com/product/2132
Na wejście STEP sterownika podaję sygnał PWM.
Na wejście DIR, ENABLE, SLEEP podaję odpowiednio od potrzeb jedynkę bądź zero logiczne. Na M0, M1, M2 steruję załączeniem bądź wyłączaniem sterownika oraz ustawienie mu kroków 1/2, 1/4 kroku również sygnałem logicznym itd.
Układ ma być sterowany potencjometrem. Więc w tym celu wykorzystuję przetwornik ADC mikrokontrolera aby odczytywać napiecie z potencjometru.

I tutaj mam problem bo nie wiem jak ogólnie zliczać kroki silnika bo muszą być one ogarniczone.
Mój pomysł to:
1. Odczyt napięcia z ADC0 gdzie podłączony jest potencjometr
2. Próbkowanie i kwantowanie itd.
3. Ustawienie na wyjściu mikrokontrolera sygnału PWM zmodulowanego w (ustalony sposób) sygnał nie musi się zmieniać. Może to być stała prędkość.
4. Podłączenie sygnału z wyjścia PWM do ADC1 aby ponownie spróbkować sygnał PWM
5. Zliczyć kroki i je po prostu programowo ograniczyć.

Ale nie wiem czy mogę jednocześnie używać sygnału PWM i przetwornika ADC
Ma ktoś z was pomysł jak to zrealizować ? Jak programowo ograniczyć kroki na silniku krokowym ?
Byłbym wdzięczny za każdą podpowiedź

Pozdrawiam :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 17:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

A nie możesz sterować sygnałem Step programowo
a nie przez PWM .
Uprościło by to ograniczenie ilości kroków



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 17:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
ProLogicTechnology napisał(a):
... czy mogę jednocześnie używać sygnału PWM i przetwornika ADC

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

otrzymujesz zależność OCRx od położenia potencjometru.
Stała "ileś_tam" to np.4 i otrzymujesz OCRx w zakresie 1 do 256 dla ADC 10bit.
Może być kombinacja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i możesz przesuwać zakres itd.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 18:28 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

A ile jest tych kroków?
Możesz wykorzystać Timer0 do generowania PWM, a Tmer1 do zliczania impulsów. Jak spojrzysz na pinologię procesora to PB1 ma funkcję T1. Tam podłącz sygnał PWM i ustaw Timer1 na zliczanie impulsów zewnętrznych (External clock source) z przerwaniem od zrównania z wartością w OCR1A, która będzie zadaną liczbę impulsów.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 18:39 
Offline
Użytkownik
Avatar użytkownika

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

Kicajek...i nic to nie zmieni, bo wypełnienie będzie się tylko zmieniać, a nie ilość zboczy.
Kto w ogóle steruje krokami przez pwm?? Robi się to programowo i każdy krok bardzo prosto indywidualnie zlicza. Z pwm też jest to możliwe ale zapomnij o płynnej zmianie prędkości często potrzebnej np. do rozpędu takiego silnika jeśli nawet nie zależało by Ci na zmianie obrotów podczas normalnej pracy..

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

Napisz jaki efekt chcesz osiągnąć poprzez sterowanie silnikiem i potencjometrem. Czy chodzi o proporcjonalne sterowanie, czy prędkość...?

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 sty 2015, o 19:18 
Offline
Nowy

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

Cytuj:
A ile jest tych kroków?

Chciałbym uzyskać stałą ilość kroków np. 40 w jedną stronę w drugą.
Cytuj:
Napisz jaki efekt chcesz osiągnąć poprzez sterowanie silnikiem i potencjometrem. Czy chodzi o proporcjonalne sterowanie, czy prędkość...?

Proporcjonalne sterowanie



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

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

Czyli coś takiego...?

_________________
http://www.sylwekkuna.com



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

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
SylwekK napisał(a):
Kicajek...i nic to nie zmieni,

...ale ja tylko odpowiedziałem na pytanie:
ProLogicTechnology napisał(a):
czy mogę jednocześnie używać sygnału PWM i przetwornika ADC

:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2015, o 21:10 
Offline
Nowy

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

SylwekK dokładnie o takie coś mi chodzi.
Tylko właśnie nie wiem jak to zrealizować programowo.
Jest jeszcze jeden problem pod względem programistycznym ale nie jest on trudny, gdyż mam dwa potencjometry i muszę obliczać wartość ADC dla każdego z nich. Jeśli różnica między napięciem na rezystorze 1 i 2 będzie większa niż 10% to wtedy układ będzie wyłączany.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2015, o 22:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

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

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


Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2015, o 23:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Jeśli chodzi o sterowanie Drivera to
każdy impuls (zmiana stanu) na wejściu STEP
zrobi ci jeden krok silnikiem .

Teraz jeśli w funkcji będziesz zmieniał stan
pinu podłączonego do sygnału STEP Drivera (np.PB1)
i zwiększał/zmniejszał (w zależności od stanu sygnału DIR w sterowniku)zmienną
przy każdej zmianie stanu pinu będziesz wiedział ile wykonałeś kroków.
Z innego pinu (np.PB2) wysterujesz sobie sygnał DIR drivera i będziesz znał kierunek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2015, o 15:10 
Offline
Użytkownik
Avatar użytkownika

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

ProLogicTechnology napisał(a):
SylwekK dokładnie o takie coś mi chodzi. Tylko właśnie nie wiem jak to zrealizować programowo.


Przykład z filmu robiłem jeszcze w bascomie. Najprościej mówiąc potrzeba Ci dwie zmienne do porównania. Jedna z nich to wynik jaki otrzymujesz z ADC, a druga to licznik impulsów, które zrobił silnik krokowy. Teraz po włączeniu zasilania domyślnie zmienna licznikowa silnika będzie równa 0 (o ile jej stan nie był przechowywany w eeprom, ale to na razie zostawmy w spokoju) w związku z czym jeśli na ADC będzie coś innego niż 0 to uruchom w pętli (*koniecznie z jakimś opóźnieniem, które dopuszcza maksymalne obroty silnika) ruch silnika i z każdym jego krokiem zwiększaj zmienną, która te kroki liczy. Jeśli zmienne się zrównają silnik się zatrzyma. Gdy ADC będzie mniejsze niż licznik kroków to silnik uruchamiaj w drugą stronę i jednocześnie zmniejszaj licznik kroków. Prościej wytłumaczyć nie potrafię.

* Gdybyś nie dał opóźnienia to przy zbyt szybkiej zmianie ADC silnik by tylko buczał, bo nie zdążył by przekręcić wałem z powodu dużej bezwładności, a tak to nawet gdy bardzo szybko ADC skrajnie się zmieni, silnik w swoim maksymalnym tempie dojedzie sobie do zadanej wartości (można to na moim filmie zauważyć około 9-10 sekundy i pod sam koniec).

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 21:18 
Offline
Użytkownik

Dołączył(a): 09 kwi 2015
Posty: 44
Pomógł: 0

Podpinam sie pod temat:) Jak wykonywać równoczesny pomiar z ADC0 i ADC2 na atmedze8?Bo jak odpale jeden działa jak odpale 2 działa ale razem nie i sie miesza..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 maja 2016, o 21:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
masterix napisał(a):
Jak wykonywać równoczesny pomiar z ADC0 i ADC2 na atmedze8?

To zależy od definicji "równoczesny pomiar" - jeśli chodzi o monitorowanie obu napięć to "odpala :) " się to tak:
-zmierz napięcie ADC0 - podaj wynik - zmierz napięcie ADC2 - podaj wynik; i tak w kółko.

Pozdr.



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

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