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

Wybór mikrokontrolera do kontrolera ruchu: ATMega8 czy AT90s2313?

AF7018 03 Cze 2008 12:49 3089 15
REKLAMA
  • #1 5209053
    AF7018
    Poziom 11  
    Posty: 32
    Ocena: 3
    Witam,
    Mam zamiar zbudować kontroler ruchu, szczegółowy opis jak to by miało działać jest w tym temacie
    https://www.elektroda.pl/rtvforum/topic542899.html
    Myślałem żeby zrobić to analogowo ale na jakimś mikrokontrolerze było by znacznie prościej fizycznie i z możliwością szybkiej zmiany parametrów w razie potrzeb.

    Jaki mikrokontroler nadawał by się do tego? Brałem pod uwagę ATMega8 lub AT90s2313. Do procesora było by podpięte 6 czujników indukcyjnych dających impulsy, każdy z inną częstotliwością. Na wyjściach 6 LED odpowiadających każdemu czujnikowi.

    Nie zajmuje się teraz programowaniem procesorów. Liznąłem tylko programowania w asemblerze i C na studiach 10lat temu. Nawet napisałem jakiś prosty program na 8051 powodujący miganie LED na wyjściach z określoną częstotliwością.
    Ostatnio prześledziłem kilka kursów programowania w necie i ściągnąłem programy Bascom oraz WinAVR. O ile asembler nigdy nie był dla mnie do końca zrozumiały to uważam, że bascom jest dość prosty.

    Czy wsad do zrealizowania założonych funkcji będzie bardzo skomplikowany i czy da się go napisać w bascomie?
    Myślałem o porównywaniu czasu pomiędzy poszczególnymi zboczami a zadanym lub o zliczaniu tych impulsów np co 1 sek. i porównywaniu z ilością zadaną.
    Pozdrawiam

    Jeśli umieściłem temat w nieodpowiednim dziale proszę moderatora o przeniesienie.
  • REKLAMA
  • #2 5209086
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    Wsad nie byłby trudny do napisania, poszukaj na forum postów o częstotliwościomierzu. Dałbym z koła pasowego układ formujący impulsy których częstotliwość byłaby proporcjonalna do wartości prędkości. Następnie na multiplexer 6-wejściowy i sterował multiplexerem z procka wybierając które aktualnie koło pasowe ma być czytane. Później możesz sobie to na port na ledy wystawić albo do komputera po RS'ie przesłać.
  • #3 5209149
    AF7018
    Poziom 11  
    Posty: 32
    Ocena: 3
    Impulsy będą pochodziły z czujników indukcyjnych umieszczonych przy kołach pasowych ich częstotliwość będzie proporcjonalna do obrotów tylko wypełnienie nie koniecznie 50/50.
    A nie można by kontrolować tych obrotów równolegle na wszystkich czujnikach jednocześnie bez multipleksera?
  • REKLAMA
  • #4 5209170
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    Możesz użyć procesora który ma obsługę tylu przerwań ile masz kół pasowych. Zdaje się że ATtiny2313 ma możliwość obsługi do 8 zewnętrznych przerwań zatem on by się pewnie nadał, tyle że ma 2kB flash'a i może ci się program w bascomie nie zmieścić
  • #5 5215769
    AF7018
    Poziom 11  
    Posty: 32
    Ocena: 3
    To może lepiej użyć dwóch procków z mniejszym flash-em, albo dwie ATtiny wykorzystując obsługę po 3 przerwania w każdym wtedy wsad będzie lżejszy.
    ATtiny 2313 nie są drogie i mają wbudowany rezonator co upraszcza sprawę.
    Tylko jak się tu zabrać za ten wsad:D
    Na razie zamówiłem na Allegro programator STK 200 i czekam. Mam nadzieję , że nie zaginie po drodze na poczcie.
  • #6 5217135
    arturkumiec
    Poziom 12  
    Posty: 7
    Ocena: 1
    Witam. Problem jest dość prosty do rozwiązania. Sam robiłem kiedyś gościowi podobny patent ( kontrola obrotów kilu kół pasowych ) w proszę się tylko nie śmiać w kombajnie do buraków. Patent działa w sposób następujący . Procek co 0,1 sekundy odczytuje stan portu do którego podpięte są czujniki . Dla każdego czujnika jest inny czas pomiędzy impulsami. Jeśli któryś z czujników nie wygeneruje impulsu do stanu wysokiego w określonym czasie to włącza się alarm (dźwiękowy ) i na LCD wyświetla się awaria danego koła. Na samym początku trzeba ustalić potrzebne czasy dla wszystkich kół. Robi się to w sposób ten że włącza się najwolniejsze z możliwych obrotów , a następnie uruchamia się układ w trybie adaptacji do obrotów. Układ sam zapisuje w pamięci eeprom czasy pomiędzy poszczególnymi impulsami. powiem tyle , układ pracuje od kilku lat i nie ma z nim problemu.
  • REKLAMA
  • #7 5218293
    AF7018
    Poziom 11  
    Posty: 32
    Ocena: 3
    Na pewno ja się śmiał nie będę bo ten układ ma być też do kombajnu tyle że zbożowego :)
    Zasada działania identyczna bo i taka sama rolę ma to pełnić.
    Na jakim procku to jest zrobione? Masz może wsad do niego?
    Ja na razie chcę zrobić najprościej na diodach (poszczególne diody wskazują, który czujnik nie podaje impulsów) i podłączyć się do już istniejącej sygnalizacji dźwiękowej. Teraz trochę kiepsko z czasem ale docelowo też myślałem o wyświetlaczu pokazującym informację, które koło zostało zatrzymane.
    Do tego jeszcze chcę jeszcze rozbudować i dołożyć pomiar strat ziarna. Teraz mam straty ziarna zrobione w postaci analogowej na zwykłej linijce diodowej.
    Będę bardzo wdzięczny za pomoc.
    Pozdrawiam
  • REKLAMA
  • #8 5219696
    arturkumiec
    Poziom 12  
    Posty: 7
    Ocena: 1
    Witam . Przeszukałem swoje zasoby i niestety wsad i źródła się ulotniły. Układ był zbudowany na AT90S8515 i pisany był w asemblerze.
    Gdyby przyszło mi jeszcze raz to pisać to wybrał bym ATMega8 i pisałbym to w C.
  • #9 5228923
    AF7018
    Poziom 11  
    Posty: 32
    Ocena: 3
    A jak wyglądał dokładniej algorytm działania wsadu?

    Cytat:
    Procek co 0,1 sekundy odczytuje stan portu do którego podpięte są czujniki . Dla każdego czujnika jest inny czas pomiędzy impulsami. Jeśli któryś z czujników nie wygeneruje impulsu do stanu wysokiego w określonym czasie to włącza się alarm

    Zastanawiam się co będzie w przypadku kiedy czujnik ustawi się tak, że cały czas będzie stan wysoki (ząb przy czujniku). Wtedy warunek czasowy będzie spełniony ale koło nie będzie w ruchu?

    Szukałem jeszcze na forum i znalazłem taki temat:
    https://www.elektroda.pl/rtvforum/topic554180.html
    To zdaje się jest koncepcja o której mówił snow polegająca na zliczaniu przerwań. Do tego dołożył bym jeszcze warunek (minimalna ilość przerwań w czasie) i do tego uzależnił przerwania od zbocza dodatniego lub ujemnego.
  • #10 5229160
    snow
    Poziom 31  
    Posty: 1825
    Pomógł: 178
    Ocena: 201
    Możesz sobie zmierzyć przy najwolniejszych i przy najszybszych obrotach jakie masz wartości i założyć warunki od góry i od dołu, jeżeli zostaną przekroczone to piszesz że dane koło jest uszkodzone. Jak byś zrobił częstotliwościomierz który mierzy względem zbocza sygnału to dostaniesz 0Hz nie zależnie od tego czy koło zatrzyma się w przesłonie czy poza nią.
  • #11 5229407
    PiotrPitucha
    Poziom 34  
    Posty: 2658
    Pomógł: 201
    Ocena: 423
    Cześć
    Attiny26 może przyjąć przerwania od każdej nogi, robisz licznik od jakiegoś wewnętrznego timera i zliczasz od 0 do 255, jeśli doliczysz do 255 to włączasz alarm, liczysz oczywiście na tylu zmiennych naraz ile Ci potrzeba.
    Teraz dodajesz do tego przerwania od czujników, jeśli przyjdzie przerwanie to zerujesz odpowiadającą mu zmienną i znowu ją inkrementujesz, jeśli przerwanie nie przyjdzie to masz informację ze koło się nie obraca, proste jak budowa przysłowiowego cepa.
    Piotr
  • #12 5239113
    AF7018
    Poziom 11  
    Posty: 32
    Ocena: 3
    Jeśli to takie proste to czy mógłbym prosić o kawałek kodu obsługującego chociaż jeden czujnik?
    Żniwa zbliżają się wielkimi krokami, nadal czekam na programator STK200, do tego od kilku dni walczę z Proteusem i nawet głupi program z diodami nie nie działa tylko wyskakuje jakiś błąd.
    Wybór mikrokontrolera do kontrolera ruchu: ATMega8 czy AT90s2313?

    :cry::cry::cry:
  • #13 5260418
    AF7018
    Poziom 11  
    Posty: 32
    Ocena: 3
    Widzę,że nie ma zainteresowania tematem. A mnie na razie udało się stworzyć układ na Attiny2313.

    Config Portb.0 = 1                                          ' ustawienie całego Portu B0 jako wyjścia
           Portb.0 = 1                                          ' stan spoczynkowy Portu B0 ustawiony na 1
    Config Portb.1 = 1                                          ' ustawienie całego Portu B1 jako wyjścia
           Portb.1 = 1                                          ' stan spoczynkowy Portu B1 ustawiony na 1
    
     Config Timer0 = Counter , Edge = Rising                    'konfiguracja Timera0 do zliczania impulsów (zbocze narastające)
     Config Timer1 = Counter , Edge = Rising                    'konfiguracja Timera1 do zliczania impulsów (zbocze narastające)
    
    
    Do                                                          'program główny - pętla
    
        Timer0 = 0                                              'zeruj licznik0
       Start Timer0                                             'zacznij liczyć
    
       Timer1 = 0                                               'zeruj licznik1
       Start Timer1                                             'zacznij liczyć
       Wait 1                                                   'zliczaj impulsy przez 1 sekundę
          Stop Timer0
       Stop Timer1
    
    
         If Timer0 < 120 Then Portb.1 = 0                       'jeśli czestotliwość na liczniku0 jest mniejsza od 120Hz zapala się dioda sygalizująca
                                                                 'jeśli czestotliwość na liczniku0 jest większa od 120Hz dioda sygalizująca gaśnie
      If Timer0 > 120 Then Portb.1 = 1
    
        If Timer1 < 10 Then Portb.0 = 0                         'jeśli czestotliwość na liczniku1 jest mniejsza od 10Hz zapala się dioda sygalizująca
    
      If Timer1 > 10 Then Portb.0 = 1                           'jeśli czestotliwość na liczniku1 jest większa od 10Hz dioda sygalizująca gaśnie
    
    Loop                                                        'koniec pętli i programu
    End


    W proteusie wszystko działa ale nie wiem czy realu ma szansę działać bo jeszcze czekam na procesor.
    Wadą jest to, że obsługuje tylko dwa czujniki poza tym możliwości są wystarczające.
    Czy na Attiny2313 da się zrobić tak żeby obsługiwać 6 wejść równocześnie? Ja na razie mam mglistą koncepcję jak to zrealizować. Będę próbował, tymczasem czekam na jakieś wskazówki.
    Pozdrawiam
  • #14 6921859
    justin19
    Poziom 11  
    Posty: 18
    Ocena: 6
    Witam, AF7018 napisał:

    Cytat:
    Do tego jeszcze chcę jeszcze rozbudować i dołożyć pomiar strat ziarna. Teraz mam straty ziarna zrobione w postaci analogowej na zwykłej linijce diodowej.


    Jestem ciakawy w jaki sposób zrealizowałeś pomiar strat i czy stosowałeś fabryczne czujniki czy własne rozwiązania. Z góry thx za odpowiedz!

    Justin19,
  • #15 6923079
    PawelecXX
    Poziom 11  
    Posty: 13
    Pomógł: 1
    Ocena: 1
    AF7018 napisał:

    Czy na Attiny2313 da się zrobić tak żeby obsługiwać 6 wejść równocześnie? Ja na razie mam mglistą koncepcję jak to zrealizować.


    Jednocześnie raczej się nie uda ale stosując multiplekser i zakładając, że te impulsy będą generowane z częstotliwością dziesiątek herców to nie powinieneś nawet zauważyć, że nie są pobierane jednocześnie. To jest naprawdę dobre rozwiązanie.
  • #16 6944172
    AF7018
    Poziom 11  
    Posty: 32
    Ocena: 3
    Czujnik strat jest zrobiony na bazie oryginalnego LH Agro, tylko do prezentacji pomiaru jest zastosowana zwykła linijka diodowa z 12 diód po małej przeróbce, zamiast komputera.
    Jeśli chodzi o mutipleksowanie to właśnie częstotliwość jest mała i waha cię od 7 do 80Hz.

Podsumowanie tematu

✨ Dyskusja dotyczy wyboru mikrokontrolera do budowy kontrolera ruchu z sześcioma czujnikami indukcyjnymi generującymi impulsy o różnych częstotliwościach oraz sześcioma diodami LED sygnalizującymi stan każdego czujnika. Rozważane są mikrokontrolery ATMega8, AT90S2313 oraz ATtiny2313, z uwzględnieniem ich możliwości obsługi przerwań i pamięci flash. Proponowane rozwiązania obejmują wykorzystanie multipleksera do sekwencyjnego odczytu sygnałów lub obsługę przerwań równoległych dla każdego czujnika. Algorytm działania wsadu polega na pomiarze czasu między impulsami i wykrywaniu braku impulsów w określonym czasie, co sygnalizuje awarię. Wskazano, że pomiar częstotliwości względem zbocza sygnału pozwala na wykrycie zatrzymania koła niezależnie od stanu wysokiego sygnału. Przykładowe implementacje wykorzystują liczniki i przerwania do monitorowania impulsów, a także zapisywanie progów czasowych w pamięci EEPROM. Jeden z użytkowników podzielił się fragmentem kodu w Bascom dla ATtiny2313 z konfiguracją timerów do zliczania impulsów. Wspomniano także o zastosowaniu układu w kombajnach oraz o pomiarze strat ziarna za pomocą czujnika LH Agro i diodowej linijki. Programowanie w Bascom uznano za prostsze niż asembler, a do programowania planowane jest użycie programatora STK200.
Wygenerowane przez model językowy.
REKLAMA