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

ATtina2313 - Obrotomierz

lukaskay 01 Maj 2009 11:30 3506 21
  • #1 6477579
    lukaskay
    Poziom 10  
    Witam

    Chciałbym was poprosić o pomoc robię prace dyplomowa stanowisko do badania silnika BLDC i niedawno wpadłem z promotorem na pomysł aby wykonać pomiar prędkości obrotowej tego silnika przez mikrokontroler nie ukrywam ze ta strona pomogła w decyzji.
    Różnica jest taka ze ja mam juz gotowy silnik z falownikiem i mam dostęp do sygnałów z enkodera (optycznego) sa one wyprowadzone po to by moc je poobserwować jest to idealny sygnał prostokątny na poziomie 12 V.
    Wykonanie tego układu nie jest głównym celem mojej pracy a skutecznie ja opóźnia gdyż jestem dosyć kiepski z mikrokontrolerów.
    tyle co do opisu sytuacji

    TERAZ

    Pierwszy problem
    Na powyższej stronie jest gotowy program bawiąc się w bascomie dostosowałem go do swoich potrzeb (dodałem linijkę dotycząca wyświetlacza gdyż jej brakowało) , czy ktoś znający się na tym może mi powiedzieć czy trzeba coś jeszcze dodać do tego programu (w sensie definiowania czegoś ).
    Następnie do zaprogramowania ATtiny2313 chce użyć układu i programu PonyProg
    Bascom wypluwa mi kilka plików czy do zaprogramowania mikrokontrolera muszę użyć pliku o rozszerzeniu .hex (bo inne pliki wydaje mi się ze służą Bascomowi do symulacji) a i PonyProg tylko ten plik przyjmuje:D
    Kolejny problem jak ustawić Fuse bits podczas programowania??

    Za wszelkie podpowiedzi lub strony gdzie to jest wytłumaczone po polsku z góry Dziękuje.

    a i jeszcze jedno pytanie czy ma ktoś pomysł jak ograniczyć ten sygnał 12V do poziomu 5V ale tak aby nie obciążyć tego wyjścia i nie zniekształcić sygnału??
  • Pomocny post
    #2 6478989
    Konto nie istnieje
    Poziom 1  
  • #3 6480309
    lukaskay
    Poziom 10  
    emarcus napisał:
    W bezposrednim kontekscie ograniczyloby to pomiar max. obrotow do 15000/min. , pod warunkiem ze otrzymujesz tylko jeden impuls na jeden obrot z encodera;



    chodziło ci o 1500/min bo max obroty silnika wynosza 1550/min a i przypadają 4 impulsy na obrót

    jeśli chciałbym wykorzystać twój 2 proponowany sposób to musiał bym dostać jakiś półprodukt( w sensie program do przeróbki) gdyż jak już pisałem programowanie to dla mnie czarna magi.

    ale serdecznie dziękuje za pomysły jeśli pomiar będzie na serio kiepski po uruchomieniu układu to będę wiedział w którym kierunku szukać rozwiązania
  • #4 6480333
    PiotrPitucha
    Poziom 34  
    Witam
    Pomiar będzie bardzo kiepski, masz wyświetlać obroty na minutę, czyli przy czterech czujnikach masz rozdzielczość do 15 obrotów. lepszą metodą dla przebiegów o małej częstotliwości jest pomiar czasu obrotu lub kilku obrotów i wyliczenie z tego prędkości, co do wewnętrznego generatora to jet tak mało stabilny w funkcji napięcia zasilania i temperatury że możesz o nim zapomnieć.
    Ze względu na możliwe pomysły radziłbym też wymianę procesora na Atmegę 8 , jeśli to ma być stanowisko to dopinając się do wejść analogowych możesz zobrazować prądy, temperaturę, napięcia itd...
    Piotr

    Ps. tu masz coś co mogłoby Ci się przydać, płytka moja układ mój ale program kolegi więc Cię nim nie "poczęstuję", ale w zasadzie jest to pełne stanowisko do badań, poczytaj ten cały wątek od początku.

    Link
  • #5 6480335
    Konto nie istnieje
    Poziom 1  
  • #6 6515927
    lukaskay
    Poziom 10  
    e marcus - dzikij za wyjaśnienie sprawy z prędkością
    PiotrPitucha - masz racje dokładność pomiaru będzie do 15obr/min ale nie mam zbytnio na to wpływu gdyż encoder mam już gotowy a jak juz pisałem z programowania jestem kiepski, mi zależny na jak najprostszym programie by sobie nie komplikować i nie opóźniać pracy.

    a gdybym czas oczekiwania zwiększył do 15 s wtedy dokładność wzrosła by mi do 4 obr/min
    mogę użyć komendy:
    Wait 15
    ??
    ale wtedy chyba dojdzie do przepełnienia licznika??
    Mam jeszcze pytanie bo aby wejsc w stan programowania reset musi byc podpiety do GND a jak mam ustawić fuse bits?? czy ktos mi w tym moze pomoc lub gdzie tego szukać w instrukcji bo czytam ja juz któryś raz i może to po prostu omijam ciągle lub cos...
  • Pomocny post
    #7 6518599
    Konto nie istnieje
    Poziom 1  
  • #8 6519015
    Dr.Vee
    VIP Zasłużony dla elektroda
    Najdokładniej będzie zmierzyć czas pomiędzy impulsami z enkodera - możesz do tego użyć trybu input capture (ICP) timera1. Przy max. prędkości obrotowej masz ok. 100 zdarzeń na sekundę. Przy min. prędkości możesz zwiększać preskaler timera żeby wykluczyć przepełnienie bez "łapania" impulsu.

    Jeśli odstępy między impulsami z dekodera nie są identyczne, to możesz np. mierzyć czas trwania N impulsów - ustawiasz Timer1 w trybie free running, a Timer0 w trybie CTC, OCR0A ustawiasz na N. Wtedy po N impulsach otrzymujesz przerwanie z timera0, a w nim zapisujesz stan Timera1 i liczysz prędkość obrotową.

    Pozdrawiam,
    Dr.Vee
  • #9 6522165
    rpal
    Poziom 27  
    Pozwole sobie niezgodzić się z kol. Dr.Vee. Pomiar poprzez zliczanie impulsów na liczniku i przepisywanie jego wartości do zmienne w czasie przerwania Timera będzie równie dokładne a poza tym banalnie proste. Dobierając odpowiednio kwarc uP oraz wartość preskalera można spokojnie zdefiniować jaką przyzwoitą stała czasową (nie mającą w okresie np. 0,333333). Podobnie i manipulacja wynikiem będzie równie łatwa i w zupełności AtTiny2313 sobie z tym poradzi tym bardziej że może ganiać z kwarcem 20MHz a więc bardzo szybko. Nierozwiązane pozostaje tylko zobrazowanie wyniku pomiary ale z racji wygody starczy zwykły wyświetlacz LED np. 4 pozycyjny. Na to wszystko spokojnie starczy pinów uP jak rónierz jego pamięci. Któryś z kolegów słusznie proponował jako dopasowanie do napięć zastosowanie transoptora. Myślę że jest to także polecane rozwiązanie bo jako stopień wejściowy wystarczy jeden pin procka i rezystor podciągnięty do zasilania. Natomiast należy w tym przypadku zastosować się do noty transoptora aby odpowiednio dobrać wartość szeregowego rezystora który wpływa na stromość zbocza generowane tak przebiegu :) Jakby kolega miał dalej pytania to wyskrobię w Eaglu jakiś schemat. PZDR
  • Pomocny post
    #10 6522388
    Dr.Vee
    VIP Zasłużony dla elektroda
    Zauważ, że przy zliczaniu impulsów w cyklu pomiarowym np. 1s można zliczyć max 15000/60 = 250 impulsów z enkodera. Czas pomiędzy dwoma impulsami to min. 4ms, a więc przy kwarcu 1MHz timer odmierzy minimum 4000 taktów. Błąd pomiaru w każdym przypadku to średnio 1/2 impulsu - w przypadku 1) mamy przy maksymalnej prędkości błąd względny 0,2%, który rośnie wraz ze spadkiem prędkości obrotowej. W przypadku 2) mamy błąd względny 0,025%, który maleje wraz ze spadkiem prędkości obrotowej.

    Na dodatek w przypadku 1) wynik masz co 1 sekundę, a w 2) dużo częściej - co 1 sekundę dopiero przy prędkości tak niskiej jak 15 obrotów/min.

    Edit: poprawa us na ms (dzięki PiotrPitucha za uwagę)

    Pozdrawiam,
    Dr.Vee
  • #11 6522770
    rpal
    Poziom 27  
    Policzyłęm impulsy i wychodzi mi że przy prędkości maksymalnej = 1500 obr/min i 4 impulsa na jeden obrót (tak podaje utor) z każdym obrotem na "wirtualne" wejście układu pomiarowego idzie 100 impulsów czy 100 Hz.=(1500/60)*4. Ganiając procka z maksymalną prędkością błąd pomiaru można zminimalizować bo impulsy na wejściu wewnętrznego licznika są szybciej próbkowane. Poza tym co to za bład pomiaru kiedy na wejście licznika podawane jest maksymalnie 100 Hz a próbkowanie zboczy następuje z prędkością zegara procesora czyli np. 16Mhz ? Stosując zewnętrzny dzielnik częstotliwości a są np. w serii 40xx układy które dokonują wielokrotnego podziału można zachowując dużą częstotliwość zegara wytworzyć przebieg zegarowy np. 1 Hz który będzie podawnay na INT, wyzwalając przerwanie które będzie przepisywać zawartość licznika do zmiennej i dalej go zerować do następnego zliczania no i tak w koło wojciechu.
    Istotnie problem może być z małymi prędkościami obrotowymi ale i tutaj można sobie poradzić np. zmieniając zakres pomiarowy poprzez zmianę częstotliwości wyzwalania przerwania INT. Może to się dziać automatycznie poprzez zmianę stopnia podziału w.w. dzielnika częstotliwości. Osobiście optuję za takim rozwiązaniem tymbardziej że w minimalnym stopniu podnosi koszty o góra 1-2 scalaki za 2-5 PLN. Z resztą i tak jakąś kość trzeba dodać aby obsłużyć LED np. ULN2803 i kilka tranzystorów pnp do zasilania anod LED-a. To tyle moich uwag niekoniecznie słusznych :)
  • #12 6522907
    PiotrPitucha
    Poziom 34  
    Cześć
    Dr.Vee , masz rację, przebiegi z silnika są na tyle wolnozmienne że jedynie pomiar okresu jest w tym wypadku sensowny, co do tego nie mam wątpliwości. Przy okazji wkradła Ci się mała literówka, nie 4uS tylko 4ms, ale dalsze obliczenia wskazują że liczysz na dobrych jednostkach :).
    Co do uwagi rpal to zawsze jest jakieś podejście minimalistyczne i biorąc pod uwagę wydajność prądową typowego AVRa to można się obyć i bez ULN2804 jak i bez tranzystorów w anodach a jeśli mierzymy obroty w warunkach ostrego oświetlenia to bardziej widoczny będzie typowy LCD niż LED. Minimalistyczne podejście spowoduje lekkie grzanie procesora, ale zauważmy że zegar popędzamy kwarcem i mimo zmian temperatury będzie on stabilniejszy niż błąd wynikający z metody pomiaru.
    Tacho mierzących obroty tą metodą jest cała masa w sieci ze źródłami w Bascom, w C a nawet assemblerze zarówno na AVRy jak i na PIC, zawsze można popatrzeć jak to robią inni.
    Piotr
  • #13 6523105
    rpal
    Poziom 27  
    KOlego Piotrze na marginesie, na Świeta Bożego Narodzenia zrodził się pomysł zrobienia migającej choinki z led-ami. Pod ręką miałem atmega8535 i zrobiłem co miałem zrobić czyli każdy port dostał swojego led-a czyli 32 szt łacznie. Pracowało to w ramach wersji minimalistyczmej czyl tylko z rezystorami szerogowymi. Wytrzymało ok. 15 min. Potem padło. Wniosek stąd taki że 32 led-ów avr nie pociągnie, oczywiście świecąc na tyle jasno aby było coś widać :) To tak na temat minimalizmu :)
  • #14 6523646
    lukaskay
    Poziom 10  
    Dziękuje za wszelkie pomysły i pomoc ale jak już pisałem z programowaniem u mnie ciężko i zaczynam sie w tym gubić naprawdę chciałbym w minimalnym stopniu zmieniać ten uklad i program który mam aby go nie zepsuć.

    po pierwsze w układzie zostanie wykorzystany transoptor gdyz muszę obniżyć sygnał a nie chce łączyć GND falownika z GND uC jedyny problem ktory będę musiał sprawdzić eksperymentalnie to taki czy wyjście z falownika ktore wykorzystuje do pomiaru prędkości jest w stanie wydać z siebie wystarczający prąd by zasilić foto diodę i układ zadziałał.

    po drugie chce wykorzystać wewnętrzny kwarc 8Mhz

    po trzecie czytając helpa jesli dobrze rozumiem to timer1 jest 16bitowy
    a timer0 jest 8 bitowy

    emarcus - gdybym chciał wykorzystać twój pomysł to gdybym zostawil timer1 jako counter a jako timer wykorzystał timer0 ktory by zliczał czas w jakim sa zbierane impulsy - jeśli o to ci chodziło i jeśli jest to możliwe??(nie będzie jakiś powiązań wewnętrznych miedzy timerami ze nie będą mogły tak pracować)
    do końca jeszcze nie mam koncepcji jak to miało by wyglądać w kodzie

    W tym tygodniu zaczęły mi sie schodzić części i powoli składam wszystko do "kupy" wiec teraz mogę powoli testować rozwiązania bo na oddanie stanowiska do czerwca juz nie licze;/

    jeszcze raz dziękuje za pomoc i za uświadomienie mnie z jakimi błędami pomiaru mam do czynienia.
  • Pomocny post
    #15 6523718
    Konto nie istnieje
    Poziom 1  
  • #16 6523805
    PiotrPitucha
    Poziom 34  
    Witam
    Rpal oczywiście wersje minimalistyczne mają to do siebie .... ale przy zapalaniu segmentów w wyświetlaczach nie ma chwili w której świeciłoby więcej niż 7 segmentów bo jak rozumiem kropki nam nie trzeba .... i tu zmieścimy się z jasnymi wyświetlaczami w prądach katalogowych AVR, więc bez ryzyka spalenia procesora się obędzie.
    Wspominałem o gotowcach, zerknij na www.elfly.pl, tam jest fajny obrotomierz modelarski, zrobiłem tego trochę sztuk... w zasadzie mógłby być gotowym układem gdybyś zamiast z czujnikiem optycznym wszedł na niego sygnałem z Twoich czujników.
    Pozdrawiam
  • #17 6526675
    lukaskay
    Poziom 10  
    PiotrPitucha - no szkoda ze niema dostępu do kodu programu z tej strony minus tego miernika jest ze mierzy od 100obr/min | ale kod programu byłby dla mnie cenny bo mógłbym możne cześć wykorzystać a przynajmniej cos sie z niego nauczyc.

    emarcu - w programowaniu sa to moje totalnie pierwsze kroki zajecia ktore mialem jedynie dały mi pojecie ze cos takiego istnieje wiec pisanie do mnie jak najprostszym językiem i tłumaczenie każdej myśli jest jak najbardziej wskazane i dziękuje ci ze właśnie tak piszesz
    co do pomysłu Dr.Vee nie zastanawiałem sie nad nim bo nie wiem jak zrobic to programowo - jesli Dr.Vee byłby tak miły(czyt. w stanie) i mógłby mi podrzucić ta cześć programu z opisem(chciałbym to rozumieć jeśli bym miał użyć) byłbym wdzięczny. tam zastanawiałeś się czy sygnały z enkodera sa równe to one sa wypełnienie wynosi dokładnie 0.5

    Co do Timer-calculator' jeśli poprawnie go używam to przy 8Mhz 1 s osiągnę timer-em 1 wykorzystując program ktory generuje kalkulator - jeszcze muszę nad tym pomyśleć by to zrozumieć lub kogoś na zywo pomęczyć

    jeszcze jedno pytanie co znaczy ustawienie timera w tryb CKC?? - niebylo pytannia google pomoglo:D
  • #18 6526792
    PiotrPitucha
    Poziom 34  
    Witam
    Kiedyś był w EdW kurs programowania AVRów, w jednym z odcinków była omawiana sprawa pomiaru częstotliwości ( w Twoim przypadku obrotów ) z analizą w jakich przedziałach jaka metoda jest efektywna, spróbuj dotrzeć do tego kursu w jakiej bibliotece, może ktoś ma PDFy do tego, oczywiście były źródła do programów.
    Piotr
  • #19 6527077
    Dr.Vee
    VIP Zasłużony dla elektroda
    lukaskay - nie piszę w Bascomie więc się nie podejmuję :)

    Zwróć uwagę, że w proponowanej przeze mnie metodzie pomiaru będziesz musiał wykonać dość niewygodne dzielenie stałoprzecinkowe, albo użyć liczb zmiennoprzecinkowych. Na pewno mniej dokładny sposób pomiaru jest łatwiejszy do obróbki numerycznej.

    Pozdrawiam,
    Dr.Vee
  • #20 6528118
    Konto nie istnieje
    Poziom 1  
  • #21 6528395
    PiotrPitucha
    Poziom 34  
    Witam
    Dodatkowa informacja co do kursu w Elektronice dla Wszystkich, to jest styczniowy numer z 2005 roku, niestety nie mam dojścia do skanera :(.
    Tam masz wszystko jak na tacy i teoretycznie i w postaci gotowych programów.
    Piotr
  • #22 6528465
    lukaskay
    Poziom 10  
    emarcus tak o CTC chodziło , i dziękuje za link
    PiotrPitucha dziękuje za informacje poszukam tego w bibliotece : "Elektronika dla wszystkich styczeń 2005"
REKLAMA