Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Obrotomierz-AVR-Bascom

takow 22 Aug 2005 14:25 4411 4
  • #1
    takow
    Level 12  
    W jaki sposób napisać obrotomierz 0-10000 obr/min z dokładnością około 50 do 100 obrotów?
    Potrzebuje zrobić regulator obrotów silnika prądu stałego-czyli PWM ze sprzężeniem zwrotnym zrobionym na hallotronie. Ale najpierw musi być zrobiony obrotomierz, który czuwa nad obrotami-więc musi bardzo często sprawdzać ilość obrotów. Najlepiej zliczać czas jednego obrotu. V=60/t[s]

    Ja zrobiłem tak:
    (nie mam tego przed sobą więc mogę się troszkę gdzieś pomylić)

    - przy pierwszym impulsie z hallotrona podpiętego do int0, timer0 zaczyna zliczać impulsy.
    - przy kolejnym impulsie, czyli po pełnym obrocie, timer0 zostaje zatrzymany. (obroty są liczone co drugi obrót ale to nic)
    - wynik=600000/ilość impulsów timera0, przy preskalerze=8 i początkowej wartości timera0=206.



    Przy niskiej prędkości np 2000 obr/min impulsów jest 300, ale wraz ze wzrostem prędkości, ilość impulsów maleje i co za tym idzie odczyt jest coraz mniej dokładny.

    Chciałem użyć preskalera=1, żeby mieć więcej impulsów, ale procesor prawie tak samo się zachowuje-czyli tyle samo jest prawie impulsów co przy preskalerze=8.

    AVR-2313(do testów)
    kwarc=4 Mhz

    Może ktoś już robił coś takiego i pomoże koledze?
    A jak się wkurze to zrobie jakiś układ częstotliwość-napięcie i zapne go do AVR-a z ADC.
  • #2
    elektryk
    Level 42  
    10000 imp/minute to jakieś 600 kHz, jeśli masz zegar 4MHz to licznik zliczać może najszybciej z częstotliwością zegara czyli przy ok 600kHz zliczy do 6 co oznacza przedział od 571kHz=~9500obr/min do 666kHz = ~11111 obr/min. Chyba liczby mówią same za siebie.
  • #3
    KwoiteK
    Level 16  
    a nie lepiej zrobic tak jak mierniki czestotliwosci.
    zliczasz ilosc impulsow na we T0 w ciagu jednej sek. Timer T1 robi za "odmierzacz" ! sekundy i wlacza T0. Wynik jest w obr/sek. mnozysz razy 60 i masz orb/min. Im wyzsze obroty tym wiecej impulsow z hallotrona i wieksza dokladność.

    od paru tygodni zbieram sie z czyms takim. Program mam napisany. pozostaje reszta (nie mam czasu). Testowane w Proteusie. DZiala dobrze.
    w zalaczniku gotowy program. co prawda w bascom 8051 ale z przerobka na avr nie bedziesz mial problemu

    Pozdrawiam
  • #4
    takow
    Level 12  
    KwoiteK - dzięki, ale juz mam taki, bardzo dobrym rozwiązaniem jest zliczanie impulsów w ciągu jednej sekundy ale całe urządzenie czyli regulator ze sprzężeniem zwrotnym ma reagować bardzo szybko na zmianę obrotów np. przez chwilowe obciążenie, więc nie mogę czekać sekundy.
    Rozwiązanie było w zasadzie gotowe, tylko że zamiast silnika z hallotronem podłączyłem własnej roboty generator, który miał skok co 200 us i dla tego rozdzielczość obrotomierza wydawała mi się nie do przyjęcia.
    Bardzo dziękuje za pamięć. Jak tylko regulator będzie gotowy wrzucę go na forum.
  • #5
    marek_Łódź
    Level 36  
    elektryk wrote:
    10000 imp/minute to jakieś 600 kHz, ...Chyba liczby mówią same za siebie.


    10000 impulsów na minutę/60 sekund na minutę = 166,7 Hz

    Jeśli 6 milisekund to za mało do zliczenia odpowiedniej liczby impulsów, możesz wykorzystać 2 czy 4 ostatnie obroty i ewentualnie po wyliczeniu przyspieszenia (zmiany tej liczby w ostatnich kilku taktach), aproksymować (skorygować wynik). Przykład - zbierasz dane z 4 taktów, sprawdzasz różnicę z poprzednią taką paczką i korygujesz wyniki. Takie proste przeliczenie możesz wykonać co obrót, czyli w tym momencie nie pogorszysz dynamiki regulatora.