Skocz do zawartości

Jak dobrze zliczyć ilość stanów niskich?


Dzonzi

Pomocna odpowiedź

Dzień dobry,

Macie jakiś dobry pomysł jak zliczyć ilość stanów niskich na DI? Na podstawie ilości impulsów muszę zliczyć prędkość obrotową. Tych stanów będzie między 20 a 50 na sekundę. Zależy mi zatem na jak największej dokładności w takim zakresie pomiaru. 

Link do komentarza
Share on other sites

Jak zliczyć to raczej liczbę a nie ilość, taki niuans językowy 🙂 

50 Hz to jest mało więc bez obaw. Myślę że najlepiej jak zrobisz to na przerwaniu, np przy zboczu opadającym zwiększ jakąś zmienną.

Czyli jest to enkoder, jak dokładnie wygląda sygnał? Na niektórych jest sygnał nieprzetworzony  - sinusoida, stąd pytanie.

Jaki mikrokontroler/płytkę używasz? 

Link do komentarza
Share on other sites

(edytowany)

Na razie mam taki kod:

float rev=0;
int rpm;
int oldtime=0;
int time;

void isr() //interrupt service routine
{
rev++;
}

void setup()
{    
Serial.begin(9600);           
attachInterrupt(0,isr,FALLING);  //attaching the interrupt
}

void loop()
{
delay(1000);
detachInterrupt(0);           //detaches the interrupt
time=millis()-oldtime;        //finds the time 
rpm=(rev/time)*60000;         //calculates rpm
oldtime=millis();  
Serial.println(rpm); //saves the current time
rev=0;
attachInterrupt(0,isr,FALLING);
}

Używam Arduino Uno, a moim czujnikiem jest takie coś. Co myślisz?

Edytowano przez Dzonzi
Link do komentarza
Share on other sites

Wygląda dobrze. Ten czujnik ma jedną wadę - jest uproszczony. Sygnał jest wstępnie przetwarzany na sygnał binarny. Potencjometrem regulujesz próg. Jeżeli będziesz potrzebować nieprzetworzonego sygnału możesz zmodyfikować to co jest na tej płytce. 

A w takim razie pytanie, czy coś nie działa w tym programie?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bo mam jeszcze podobny czujnik, ale z wyjściem analogowym. Myślisz, że będzie lepszy? Z tego co się zdążyłem zorientować to wystawia wartość od 0 do 1023, a w rzeczywistości gdy coś przyłożę do niego to jest ok. 55, a jak nic nie widzi to prawie 1000. Ale wtedy musiałbym go podłączyć pod AI i jakoś inaczej program napisać bez przerwania tak? 

Link do komentarza
Share on other sites

7 minut temu, Dzonzi napisał:

Z tego co się zdążyłem zorientować to wystawia wartość od 0 do 1023, a w rzeczywistości gdy coś przyłożę do niego to jest ok. 55, a jak nic nie widzi to prawie 1000. Ale wtedy musiałbym go podłączyć pod AI i jakoś inaczej program napisać bez przerwania tak? 

AVR "skazuje" Cię na max 10'000 pomiarów na sekundę (teoria). Można szybciej ale tracisz rozdzielczość i nie ma sznasz abyś dogonił to co masz w ARM (1, 2.6, 18 czy nawet 80Ms/s). Przy "cyfrowym" podejsciu jest lepiej. nawet marny AVR 50..70kHz ogarnie (czas impulsu) a i 10MHz nie straszne (liczenie impulsów).

Określ więc, czy chcesz "walczyć" analogowo czy cyfrowo.

 

Link do komentarza
Share on other sites

Tak jak pisałem wcześniej. Pomiary będą w zakresie 20-50 obrotów na sekundę i tyle też będzie tych impulsów przychodziło na wejście AVR. Chyba, że dałbym np. dwa paski obiciowe no to będzie 2x więcej impulsów, ale to nadal są malutkie wartości. 

Link do komentarza
Share on other sites

24 minuty temu, Dzonzi napisał:

Ale wtedy musiałbym go podłączyć pod AI i jakoś inaczej program napisać bez przerwania tak? 

Jeżeli czujnik jest w stałej pozycji, raz nastawiony na konkretną tarczę enkoderową to podejście cyfrowe na przerwaniach będzie dobre. Jeżeli jednak będziesz mierzył w różnych warunkach różne powierzchnie to jeżeli uznasz że program podaje złe wyniki to trzeba będzie podejść analogowo.

W tym drugim podejściu ważne jest dla Ciebie próbkowanie sygnału, czyli cały czas dokonujesz pomiarów z częstotliwością 2x większą niż częstotliwość mierzona (największa w sygnale). Wtedy możesz odtworzyć sygnał oryginalny, dokonać FFT i wyciągnąć częstotliwość. Ale tego nie zrobisz na AVR 😞 

Edytowano przez Gieneq
Link do komentarza
Share on other sites

4 minuty temu, Dzonzi napisał:

Pomiary będą w zakresie 20-50 obrotów na sekundę

Tyle co nic, nawet dla AVR.

 

4 minuty temu, Gieneq napisał:

cały czas dokonujesz pomiarów z częstotliwością 2x większą niż częstotliwość mierzona (największa w sygnale). Wtedy możesz odtworzyć sygnał oryginalny

Taaak, jak będzie to sisnus. Dla prostokąta należy przyjąć tak 10..20 razy.

Link do komentarza
Share on other sites

Ten czujnik odbiciowy przy jego maksymalnej częstotliwości nawet dla avr nie stanowi wyzwania.  zliczanie do zmiennej w przerwaniu wystarczy w zupełności.  Zmienna powinna być volatile, poza tym wszystko wygląda dobrze w tym skeczu jedynie ten delay(1000) tam niepotrzebny, trzeba dać warunek np.

volatile uint8_t rev;
uint16_t rpm;
// ...
if((time=millis()-oldtime)>=1000){
//	cli();  			  // nie ma potrzeby zatrzymywać przerwań!
	rpm = rev*60;         //calculates rpm
  	rev=0;
//  sei(); 
	oldtime=millis();  
	Serial.println(rpm); //saves the current time
}

będzie lepiej niż delay().

 

Edytowano przez Anonim
Link do komentarza
Share on other sites

Chcesz przeżyć życie za pomocą 'kopiuj-wklej'? Pomyśl chwile to będziesz wiedział gdzie wstawić ten warunek albo zmień hobby na np. szydełkowanie czy coś..

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.