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



Teraz jest 30 lis 2024, o 06:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
 Tytuł: Obrotomierz
PostNapisane: 3 mar 2016, o 12:50 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Witam
Po dłuższej przerwie powróciłem i natknąłem się na problem :(
Próbuje zrobić obrotomierz który będzie zliczał duże jak i małe wartości od 20obr/minute do kilku tysięcy.
Ma być dokładny. Impulsy będzie mi generował taki czujnik zbliżeniowy który wykrywa tylko metal lub jakiś enkoder lub cokolwiek, na razie jest to nie ważne.

Skoro ma być dokałdny to musze liczyć czas między impulsami. W jakimś temacie Pan Mirek wspomniał o IR_decode gdzie właśnie atmega liczy czas między impulsami wykorzystując timer.

Posiadam Atmega32 podajże 8Mhz wewnetrzy. Jednak pewny nie jestm bo w MkAvrCalkulator jest tylko błąd AVRdude mimo że w eclipse program wgrywa się ładnie. Również w eclipse nie mogę nowego projektu stworzyć bo nie ma w nim kompilatora... Stare działają nowy nie. Nwm co się dzieje.

Program działa, pokazuje na lcd 1040900us czyli trochę ponad sekundę. Jako źródło impulsu wykorzystałem układ RTC który jak wiadomo generuje impuls co sekundę. Dzięki czemu będę mógł sprawdzić czy program w miarę dobrze oblicza.

Ale ta wartość ciągle spada.! I nie wiem jak ją zatrzymać. Próbowałem wszystkiego ale za każdym razem ta wartość spada w różnym tempie nawet czasami wzrośnie o kilka i znów spada. I tu moje pytanie czemu tak się dzieje. Przecież ta wartość powinna być w miarę stała a tutaj spada do 0 i się przekręca znów na max i znów spada...
Znając życie za pewne jakiś prosty babol ale samemu ciężko go wykryć dlatego proszę was o pomoc.

Timer 1 ustawiłem na 1Mhz Skoro atmega działa na 8Mhz.
Dodałem przerwanie od przepełnienia gdyż przy wolnych obrotach timer by się przekręcił (nabił do 65535)
Problemem jest bo nie wiem jak wyzerować ten timer w dowolnym momencie. I to trochę komplikuje dlatego po to są "status" który czuwa nad tym od kiedy do kiedy mierzymy. Tutaj mierze co 2 impuls.
Pozdrawiam i proszę o pomoc

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

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 3 mar 2016, o 16:49 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

a) Obrotomierz ma być dwukierunkowy ?

b)
Cytuj:
Skoro ma być dokałdny to musze liczyć czas między impulsami. W jakimś temacie Pan Mirek wspomniał o IR_decode gdzie właśnie atmega liczy czas między impulsami wykorzystując timer.

Zamiast zliczać czas między impulsami lepiej byłoby zliczać impulsy, a co jakiś czas (1s, 100ms, 10ms, etc. byleby zmienna zliczająca nie uległa przepełnieniu) a następnie z tego liczyć obroty.

c) W przypadku klasycznych enkoderów (np. optyczne lub halle, a nie jakieś tanie mechaniczne) najlepiej by było liczyć na jednym ze zbocz i nie bawić się w pełne dekodowanie kodu graya. Odczyty również należy robić wystarczająco często aby nie przepełnić licznika.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

https://github.com/jnk0le/AVR-FAST-ENCODER.

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Ostatnio edytowano 7 kwi 2017, o 22:05 przez jnk0le, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 3 mar 2016, o 17:31 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Cytuj:
a) Obrotomierz ma być dwukierunkowy ?

A co to zmienia? czy wałek kręci się w prawo czy w lewo to i tak są te same obroty. To ma być tylko miernik taki przenośny, abym mógł podejść do urządzenia i sprawdzić jego obroty.

Cytuj:
Zamiast zliczać czas między impulsami lepiej byłoby zliczać impulsy, a co jakiś cas (1s, 100ms, 10ms, etc. byleby zmienna zliczająca nie uległa przepełnieniu)

To jest nie możliwe bo chcę mierzyć nawet gdy wałek kręci się 20obr/minute więc musiałbym czekać 1 minute aby pomiar był dokładny. Ta opcja odpada. Więc najdokładniej jest mierzyć czas między impulsem za pomocą wbudowanego timera 1 i wejścia ICP przy uC.

Cytuj:
c) W przypadku klasycznych enkoderów (np. optyczne lup halle, a nie jakieś tanie mechaniczne) najlepiej by było liczyć na jednym ze zbocz i nie bawić się w pełne dekodowanie kodu graya. Odczyty również należy robić wystarczająco często aby nie przepełnić licznika.

Nie nie nie żadnych kodów graya. Nie oto mi chodzi po prostu wykorzystam pół enkondera. mój zawiera diode led i fototranzystor co najlepsze on daje 1 impuls na 1 obrót wałka. Ja nie chcę używać enkodera normalnie tylko jako licznik obrotów. Oprócz eknondera chcę podłączyć też czujnik który wykrywa metal i daje impuls więc w tarczy wywiercę dziurę i już mam 1 impuls na 1 obrót.

Więc trochę źle mnie zrozumiałeś :)

Tylko nie wiem czemu zmienna wyświetlana na lcd się ciągle zmniejsza!!

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 10 mar 2016, o 09:42 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Jakieś pomysły?
Ba dla mnie te objawy są nielogiczne.
chyba że gdzieś babola szczeliłem ale hmm gdzie?

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 11 mar 2016, o 08:56 
Offline
Nowy

Dołączył(a): 02 maja 2014
Posty: 4
Pomógł: 1

Jeśli twój obrotomierz ma mieć tak duży zakres pomiarowy to według mnie najlepiej aby był dwufunkcyjny tzn. dla względnie niskich obrotów mierzył czas pomiędzy impulsami, a dla wysokich ilość impulsów w jednostce czasu. Obroty można dość łatwo ocenić na oko, a dorobienie paru ifów czy nawet jakiś mechaniczny przełącznik to już nie problem. W drugiej metodzie też można zastosować kilka zakresów (10, 100, 1000ms) aby nie przepełnić licznika. To na razie taka luźna sugestia bez konkretów. Do odmierzania czasu obowiązkowo kwarc, a nie wewnętrzny oscylator.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 11 mar 2016, o 09:56 
Offline
Użytkownik
Avatar użytkownika

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

Witam
Janadamis napisał(a):
Posiadam Atmega32 podajże 8Mhz wewnetrzy

Janadamis napisał(a):
Ba dla mnie te objawy są nielogiczne

Jak najbardziej logiczne - rezonator wew. pływa. Jak testowałem licznik impulsów z takim taktowaniem to też tak się zachowywał - kwarc zew. ustabilizował pomiary.
Jeśli chcesz "kod ideowy" pomiaru czasu to zobacz tu:http://forum.atnel.pl/topic14801.html.
Janadamis napisał(a):
...bo nie wiem jak wyzerować ten timer w dowolnym momencie

A to ma być takie zerowanie "naciskaczkiem" czy od jakiegoś warunku?

Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 11 mar 2016, o 20:09 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Cytuj:
Jak najbardziej logiczne - rezonator wew. pływa. Jak testowałem licznik impulsów z takim taktowaniem to też tak się zachowywał - kwarc zew. ustabilizował pomiary.

Wiem ze pływa ale bez przesady że ta wartość ciągle spada i to coraz szybciej a jak spadnie do 0 to przekręca się na max zakres w tym przypadku na 65536 coś koło tego i znów spada.

Cytuj:
A to ma być takie zerowanie "naciskaczkiem" czy od jakiegoś warunku?

Bo w moim kodzie timer jest ciągle włączony i gdy dostanie sygnał na ISR to żeby od tego miejsca zaczynał liczyć dopiero a nie już od wartości którą akurat naliczył. Czyli po dostaniu 1 sygnału żeby było zerowanie timera.

Cytuj:
- kwarc zew. ustabilizował pomiary.

Hmm spróbuje i zobaczę czy coś pomoże.

Co do twojego kodu z tamtej strony hmm spróbuje zobaczyć. Chodź sądzę że mój może pracować przy większych częstotliwościach sygnału mierzonego.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 11 mar 2016, o 20:31 
Offline
Użytkownik
Avatar użytkownika

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

Witam
Wcale się nie upieram ani nie wciskam, ale
Janadamis napisał(a):
..Bo w moim kodzie timer jest ciągle włączony

...a w moim jest zatrzymywany odczytywany i zerowany ( w całości - TCNT wraz z przepełnieniami -bo jaki byłby sens liczyć inaczej )po każdym zdarzeniu.
Co do większych częstotliwości - a z jaką tolerancją potrzebujesz odczytywać obroty wału?


Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 12 mar 2016, o 13:58 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Cytuj:
a z jaką tolerancją potrzebujesz odczytywać obroty wału?

Hmm z jak największą. dokładność do hmm 1obr/minute. Bo będę mierzył urządzenie które może mieć 20obr minute. ale również inne trudno teraz powiedzieć.
Spróbuje zrozumieć jak dział twój kod bo na chwilę obecną nie ogarniam kodu przerwania.
I spróbuje go uruchomić. W najbliższych dniach. Zanim to zrobię dodam zewnętrzny rezonator kwarcowy. Skoro mówisz ze to poprawi to warto spróbować.
Dzięki za pomoc. :)

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: Obrotomierz
PostNapisane: 21 mar 2016, o 23:04 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Mój kod działa
Dodałem zewnętrzny kwarc 16Mhz
I śmiga fajnie po drobnych przeróbkach.
Dzięki kicajek :D

_________________
Programowanie to styl życia :D



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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