logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak ustabilizować wskazania obrotomierza modelarskiego na AVR Mega16?

pubus 05 Sty 2006 14:16 6723 18
REKLAMA
  • #1 2148805
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    Witam...

    Bawie się troche z silnikami BLDC (przeróbki na 3f)...
    W związku z tym potrzebowałem obrotomierz...
    A do rzeczy wziąłem się tak...
    Mam w rurce zamontowaną żarówkę przed nią osłąnięte fotoogniwo z kalkulatora...
    Pomiędzy żarówką a ogniwem wiruje śmigło...
    Sygnał z ogniwa wzmacniam w dwóch stopniach na tranzystorach a potem podaje na inwerter (zwarte wejścia NAND) i dostaje ładny sygnał ttl...
    Do tego momentu jest wszystko ok...
    Dalej sygnał podaje na wejście zliczają w uC (PB1(T1))...
    Program jest generalnie prosty jak konstrukcja cepa...
    Timer2 pracuje w trybie asynchronicznym z kwarcem 32kHz i daje przerwanie co 1s...
    Timer1 pracuje w trybie normalnym zliczając przy narastającym zboczu z wejścia T1...
    Przy przerwaniu od timer2 sprawdzam stan rejestru timer1 zeruje i odczytaną wartość wyświetlam na lcd...
    Lcd nie ma na schemacie ale to najzwyklejszy 2x16 na HD44780 w trybie 8-bitowym...
    Problem w tym, że wskazania są bardzo nie stabilne...
    Przy 2000-3000 tys wachania są 200-300 obrotów a to już sporo...
    Nie bardzo wiem skąd się to bierze...

    Jeśli macie jakieś sugestie lub pomysły...
    Albo widzicie, że coś zawaliłem to się nie krępujcie...
    
    void Timer_Init (void)
    {
     TCCR1A = 0b00000000;
     TCCR1B = (1 << CS12) | (1 << CS11) | (1 << CS10); //timer zlicza z zewnętrznego źródła (T1), zbocze narastające
    }
    
    
    void Start_Clock(void) // inicjalizacja timer2 do pracy z kwarcem 32kHz
    {
     ASSR = (1 << AS2); //timer2 ustawiony na prace asynchroniczną z kwarcem 32kHz
     TCCR2 = (1 << CS22) | (1 << CS20); //| (1 << CS20); //prescaler na 128 => przepełnienie co 1s
     TIMSK |= (1 << TOIE2); //aktywne przerwanie przepełnienia od timer2
    }
    
    
    
    int main(void) 
    { 
     DDRA = 0b11111111;  
     DDRD = 0b11000000;
     
     unsigned int dt, t, s, d, temp;
     unsigned char napis[11] = " Obroty/min", i;
    
     Start_Clock();
     Timer_Init();
     lcd_init();
     sei();
     
      
      
     for(;;)
     {
     
      
       if(wys==1)
      {
       rpm = rpm / 2;
       rpm = rpm * 60;
       
       lcd_clear();
       
       lcd_data(napis[0]);
       dt = rpm/10000;           lcd_data(ascii(dt));
       temp = rpm - (dt*10000);
       t = temp/1000;            lcd_data(ascii(t));
       temp = temp - (t*1000);
       s = temp/100;             lcd_data(ascii(s));
       temp = temp - (s*100);
       d = temp/10;              lcd_data(ascii(d));   
       temp = temp - (d*10);     
       lcd_data(ascii(temp));
       
       for(i=0; i<11; i++)
       {lcd_data(napis[i]);}
       
       
       wys=0;
      }
      
     }
    
     
     return(0);
    }
    
    
    
    SIGNAL (SIG_OVERFLOW2) // obsługa przerwania od timer2 => przepełnienie
    {
     rpm = TCNT1;
     TCNT1 = 0;
     wys = 1;
    }
    


    Aha mega pracuje na wewnętrznym generatorze 8MHz...

    Jak ustabilizować wskazania obrotomierza modelarskiego na AVR Mega16?
  • REKLAMA
  • #2 2149053
    Olo999
    Poziom 21  
    Posty: 279
    Pomógł: 46
    Ocena: 37
    pubus napisał:
    Przy 2000-3000 tys

    A tyle obrotów uzyskujesz na sekundę czy na minutę?
    Może jakieś inne źródło światła zakłóca pomiar. Jak dokonujesz pomiaru włączasz silnik i odczekujesz jakiś czas aż się obroty ustabilizują i dopiero wtedy włączasz pomiar? Przepełnienie od timer2 to chyba co 0.97 sekundy (chyba nie ma to dużego znaczenia).
    Podłącz na wyjście NANDa częstotliwościomierz, porównaj pomiar z układem.i jeszcze spróbuj po wejściu w obsługę przerwania timer2 najpierw zablokować wszystkie przerwania
  • #3 2149118
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    Na wejście zliczające podaj sygnał z generatora i zobaczysz jakie są różnice.
  • #4 2149256
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    Jak widać w programie najpierw dziele odczytaną wartość timer1 przez 2 (bo śmigło ma dwie łopaty) potem mnoże razy 60 żeby uzyskać ilość obrotów na minutę... co też widać w zdefiniowanym tekście do wyświetlania...
    Co do stabilizacji obrotów to nie powinno mieć to znaczenia wskazanie powinno być dokładne nawet jeżeli silnik się dopiero rozpędza itp...
    Nie przerwanie jest co 1s...
    Timer2 pracuje z kwarcem zegarkowym (32768Hz)...
    Jak bym miał częstotliwościomierz to bym się nie bawił w pisanie go od nowa...
    Wyłączanie przerwań raczej nic nie da bo nie ma aktywnych przerwań poza tym od timer2...

    Dzięki GienekS...
    Proste a nie wpadłem na to...
    Niestety nie posiadam generatora ale coś pokombinuje...
  • REKLAMA
  • #5 2149274
    bogdan_p
    Poziom 39  
    Posty: 3849
    Pomógł: 525
    Ocena: 120
    spróbuj tak jak napisał GienekS , jeżeli nie będzie różnicy to najprawdobodobniej błąd wprowadza układ optyczny , może zastąp układ żarówka - ogniwo , transoptorem szczelinowym lub dioda - fotodioda na podczerwień
    jest jescze jedna możliwość skoro rozbierałeś silniki BLDC masz halotron i jego wykorzystać do pomiaru predkości , oczywiście musisz znać ilość biegunów na wirniku
    jeszcze jedna sprawa czy sterownik silnika BLDC nie wprowadza zakłóceń
    bawiłem się tymi silnikami i do prób polecam TDA5140A
    http://www.elenota.pl/pdf/Philips/tda5140a_2.pdf
  • REKLAMA
  • #6 2149386
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    Może wyjaśnie coś...
    Na razie nie testowałem tego na tych silniczkach tylko sprawdzam na silniku z magnetofonu...
    DC i stabilne obroty...
    No niestety transoptor szczelinowy nie bardzo się nadaje (przynajmnie żaden z tych który posiadam) bo ma za małą przerwe i śmigło nie przejdzie...
    Co do fotodiody na podczerwień to też bym wolał ale nie mają takiego wynalazku w sklepie a jednej diody nie będe zamawiał...
    Pozatym fotoogniwo to też taka fotodioda...
    Co do sterownika do bldc to mam we własnym wykonaniu...
    Z hallotronami jest problem bo każdy silnik musiał by je mieć...
  • #7 2149592
    genetix
    Poziom 24  
    Posty: 669
    Pomógł: 42
    A może fotoogniwo ma jakąś bezwładność?
  • REKLAMA
  • #8 2149747
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    Niestety możesz mieć racje...
    Przy sygnale z "generatora" (sygnał podobyny w przebiegu do tego uzyskiwanego z ogniwa ale generowany na uC oczywiście nie tym samym) wskazanie było stabilne...
    Chyba poświęce fototranzystor z transoptora...
    Dzięki za pomoc...
    Jak przerobie układ to dam znać jak poszło...
  • #9 2149876
    bogdan_p
    Poziom 39  
    Posty: 3849
    Pomógł: 525
    Ocena: 120
    Cytat:
    Z hallotronami jest problem bo każdy silnik musiał by je mieć...

    każdy BLDC z cd-romu ma napewno 3 szt , inne źródło to dowolny silnik z chłodzenia zasialacz , procesor itp
    dobre są z dużych wentylatorów wyglądem przypominają tranzystor , parametry impulsu wyjściowego są dużo lepsze niż foto elementów
  • #10 2150078
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    No tak ale sęk w tym, że pierwszą rzeczą przy przróbce jest wywalenie całej elektroniki z silnika bo jest zbędna...
    Hallotrony to niezby wygodne i uniwersalne w tym przypadku rozwiązanie...
    Bo co jeśli zachciało by mi się sprawdzać obroty w silniku DC...?.?.?
    Musiałbym go rozbierać i montować mu hallotron...?.?.?
  • #11 2150225
    bogdan_p
    Poziom 39  
    Posty: 3849
    Pomógł: 525
    Ocena: 120
    Cytat:
    No tak ale sęk w tym, że pierwszą rzeczą przy przróbce jest wywalenie całej elektroniki z silnika bo jest zbędna...

    błąd , masz gratisowe źródło halotronów
    Cytat:
    Bo co jeśli zachciało by mi się sprawdzać obroty w silniku DC...?.?.?
    Musiałbym go rozbierać i montować mu hallotron...?.?.?

    nie koniecznie i tak musisz coś mieć na osi silnika aby dokonać pomiaru w Twoim przypadku śmigło , żaden problem umieścić na wirującej części kawałek materiału magnetycznego jeżeli bedzie neodymowy i plastyczny to naprawdę niewielki
    źródło wirnik dowolnego silnika z wentylatora w PC
  • #12 2151159
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    Hehehe...

    Możemy się tak przegadywać bez końca...
    Dla mnie pomiar za pomocą hallotronów jest poprostu nie wygodny...
    Uwierz mi wiem co mówie...
    Na ośce nic nie zamontuje bo po założeniu śmigła nie ma już na nim miejsca...
    Przyklejać cokolwiek do śmigła też bez sensu...
    Pomiar optyczny jest w tym wypadku najlepszym wyjściem...
    Przerobiłem troche transoptor szczelinowy (rozsunełem leda i fototranzystor) ale sygnał jest bardzo słaby.. także będe dalej kombinował...
    Swoją drogą nie widziałem jeszcze plastycznego neodyma...
  • #13 2151221
    MirekCz
    Poziom 35  
    Posty: 2220
    Pomógł: 330
    Ocena: 62
    1.Zobacz na forum Alexa, tam przynajmniej kilka osób coś takiego zrobiło. Na 99% to te fotoogniwa są problemem. Zastąp to normalnym układem dioda/odbiornik IR + bramka schmitta

    2.Jeżeli masz swój regulator 3f to z niego możesz zczytać prędkość obrotową... najprościej =)

    3.Jaki stator / jaka konfiguracja silnika / jaki prąd/napięcia, że uzyskałeś takie niskie obroty?
    Przy normalnej przeróbce spodziewałbym się czegoś na poziomie 10000+obr/min
  • #14 2152507
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 123
    A może poleprzyć bajer i śmigło zamiast przysłaniać niech odbija :)

    wtedy dioda nadawcza parcująca w IR świeci przed siebie, a pojawiające się śmigło odbija promieniowanie IR dla fotodiody.

    Można wykorzystać ADC atmegi, w w końcu itak go ma, a jest na tyle szybki że bez trudu sobie z tym poradzi. Dodatkowo można zmodulować diode nadawczą i można prostym algorytmem wyeliminować problem oświetlenia zewnętrznego.

    Troszke z tym gimnastyki, ale otrzymałbyś bardzo profesjonalny mierniczek, który nadałby się do mierzenia obrotów silnika nawet bez śmigła, wystarczyłoby nakleić kawałek taśmy która odbija światło lepiej, na obudowe silnika
  • #15 2159036
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 138
    Ocena: 31
    Jak pisałem wcześniej narazie testuje na wolniejszym silniku...
    Zwykły dc z magnetofonu...
    Co do regla 3f...
    To nie nazwał bym tego tak...
    Mam zrobiony układ na tranzystorach i medze który radzi sobie z rozpędzaniem silnika ale nie posiada żadznych elementów pozwalających na kontrole położenia wirnika...
    Ewentualnie można by próbować liczyć obroty z częstotliwości...
    Forum alexa znam i z tamtąd pochodzi pomysł z tym że tam używają częstotliwościomierza...
    Jest też pomysł na pomiar za pomocą mikrofonu pojemnościowego...
    Sprawdzałem jak to wygląda na kompie...
    Tzn. mikrofon podpięty do kompa i rejestrator...
    No wygląda to dość zachęcająco, ale myślałem, że z optycznym układem będzie mniej zabawy...
    Musze dać mocniejszą diodę IR i powinien działać ten transoptor...
    Narazie nie robiłem nic bo czasu nie miałem...
  • #16 5406812
    bury104
    Poziom 13  
    Posty: 81
    Pomógł: 1
    Chlopaki po co sie meczyc macie namiar na gotowy tachometr modelarski na fotorezystorze:
    http://www.elfly.pl/tachometr/tacho.htm

    Po co wyważać dzwi już otwarte.

    PZD!!!

    Paweł:D:D:D:D

    Dodano po 30 [minuty]:

    A jakby ktos chcial zrobic zwykly obrotomierz na hallotronie to polecam nastepujaca strone:
    http://www.portalnaukowy.edu.pl/obrotomierz.htm

    Bardzo proste rozwiazanie na TLE4935.

    PZD!!!

    Paweł :D:D:D
  • #17 5408292
    arturkumiec
    Poziom 12  
    Posty: 7
    Ocena: 1
    Witam. Podepnę się do wątku gdyż także buduję obrotomierz.Jednak moja metoda pomiaru opiera się troszkę na innej metodzie . U mnie atmega88 z zegarem 20MHz mierzy okres pomiędzy impulsami z układu wejściowego a następnie wylicza prędkość obrotową . I tak np:przy 30 tyś obr/min timer zliczy 40000 impulsów wzorcowych , następnie wartość odpowiadającą zegarowi czyli 20MHz dzielimy przez wartość zliczoną przez timer a następnie wynik mnożymy przez 60. Otrzymujemy bardzo dokładny odczyt obrotów na minutę. Na przykład przy obrotach 37813obr/min uzyskujemy wynik 37813 i po przecinku kilka cyfr ale one są nie istotne.
  • #18 5429037
    bury104
    Poziom 13  
    Posty: 81
    Pomógł: 1
    Tak było to już dawno omawiane na elektrodzie, niczego nowego nie wnosisz.
    Zastosowanie liczników do mierzenia długości okresu w obrotomierzach wprowadzono już w latach 80-tych zeszłego wieku. W AVR-ach firmy
    Atmel liczniki sa obecne.
    Chodziło mi tu o konkretny opis i strony, które pokozują dokładnie jak zrobić po kolei obrotomierz, konkretny program sterujacy itd...
    Z tego co napisałeś wynika, iż go dopiero budujesz więc nie wiadomo co mierzysz.
    Jak zbudujesz to daj znać!!!

    PZD!!!

    :D:D:D
  • #19 5700684
    bury104
    Poziom 13  
    Posty: 81
    Pomógł: 1
    A tak swoja drogą to dziwię się temu projektowi na fotorezystorze.
    Ogólnie wiadomo iż fotorezystory są dość wolne, kupiłem dwa na avt i czasy reakcji nie są jakieś imponujące od 20-30ms.
    To daje max 50Hz, czyli 3000obr/min.
    A śmigła potrafią przecież kręcić się szybciej. Ja bym zastosował prosty fototranzystor (czasy reakcji 100 mniejszy) i diode na IR.

    Do wałka przylejasz kawałek pazłotka (metoda na odbicie) lub wiercisz otwór w wałku lub czymś co się obraca (matoda na zanik sygnału IR przechodzącego przez otwór lub przesłanianie sygnału).

    Takie zabawki dość prosto zrobić.

Podsumowanie tematu

✨ Dyskusja dotyczy stabilizacji wskazań obrotomierza modelarskiego opartego na mikrokontrolerze AVR Mega16 do pomiaru prędkości obrotowej silników BLDC przerobionych na 3-fazowe. Autor wykorzystuje układ optyczny z żarówką i fotoogniwem, sygnał wzmacnia i kształtuje do poziomu TTL, a następnie zlicza impulsy na wejściu licznika mikrokontrolera. Timer2 generuje przerwanie co 1 sekundę, Timer1 zlicza impulsy z czujnika. Problemem są niestabilne wskazania, szczególnie przy wyższych obrotach. Wskazano możliwe przyczyny: zakłócenia świetlne, bezwładność fotoogniwa, słaby sygnał optyczny, interferencje ze sterownika silnika BLDC. Proponowano zastąpienie fotoogniwa transoptorem szczelinowym lub diodą i fotodiodą na podczerwień z bramką Schmitta dla lepszej jakości sygnału. Sugerowano także wykorzystanie hallotronów (czujników Halla) do pomiaru prędkości, choć autor podkreśla niewygodę takiego rozwiązania w przypadku braku miejsca na osi i konieczności montażu na różnych typach silników. Wskazano alternatywne metody pomiaru, takie jak pomiar okresu między impulsami (metoda z Atmegą88 i zegarem 20 MHz) oraz pomiar odbicia światła IR z modulacją diody nadawczej i wykorzystaniem ADC mikrokontrolera. Zwrócono uwagę na ograniczenia fotorezystorów ze względu na ich wolny czas reakcji (20-30 ms), co ogranicza pomiar do około 3000 obr/min. Podano linki do gotowych rozwiązań tachometrów modelarskich na fotorezystorach oraz na hallotronach (np. TLE4935). Dyskusja zawiera praktyczne wskazówki dotyczące konstrukcji i testowania układu, w tym porównanie sygnału z generatora wzorcowego oraz sugestie dotyczące eliminacji zakłóceń i poprawy jakości sygnału optycznego.
Wygenerowane przez model językowy.
REKLAMA