Elektroda.pl
Elektroda.pl
X
Sklep HeluKabel
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega8]Sygnalizator/Limiter przekroczenia prędkości

Euzebiusz23091998 26 Cze 2013 16:25 6087 39
  • #1 26 Cze 2013 16:25
    Euzebiusz23091998
    Poziom 15  

    Witam :) Potrzebuję wykonać program na Atmegę8 (tymczasowo potem prawdopodobna zmiana na coś z rodziny ATtiny) który cały czas będzie zliczał impulsy a po przekroczeniu pewnej ilości impulsów na sekundę odpali diodę (później tu będzie coś innego ale na początek dioda aby wiedzieć czy program w ogóle działa). Schematu do układu nie rysuję bo nie ma sensu. Jako czujnik wykorzystam najprawdopodobniej kontaktron. Jako że dopiero rozpoczynam przygodę z językiem C proszę was o danie mi pomysłu jak takowy program zrealizować. Układ będzie pracował w motorowerze jako blokada prędkości maksymalnej. Według moich początkowych obliczeń to maksymalna ilość impulsów to będzie 13 impulsów na sekundę (przy wyłączonej blokadzie) przy włączonej ok. 6 impulsów na sekundę. Warto by dodać też jakieś wahania aby układ nie "świergotał" na pograniczu włączenia się blokady. Nie proszę o gotowe rozwiązanie a jedynie o pomoc przy pisaniu programu :) Dodam że szukałem już w internecie ale nic podobnego nie znalazłem. Z góry dziękuję - Euzebiusz
    Tytuł poprawiono, LordBlick

    0 29
  • Sklep HeluKabel
  • Pomocny post
    #2 26 Cze 2013 16:42
    LordBlick
    VIP Zasłużony dla elektroda

    Źle szukałeś, to jest zwyczajny, uproszczony prędkościomierz i jest tego typu tematów mnóstwo.
    Poza tym najpierw coś stwórz, aby było do czego się odnieść.

    0
  • #3 26 Cze 2013 17:32
    Euzebiusz23091998
    Poziom 15  

    [ATmega8]Sygnalizator/Limiter przekroczenia prędkości Taki będzie mniej więcej schemat, tyle że zamiast przełącznika kontaktron i obok diody LED tranzystor z przekaźnikiem na wyjściu. Dziękuję za zmianę tytułu dzięki temu naprawdę dużo jeszcze znalazłem w internecie :) pozdrawiam

    Edit:

    Kod: text
    Zaloguj się, aby zobaczyć kod

    Znalazłem taki kod tyle że do obrotomierza z wyświetlaczem LCD. Dało by się go tak wyedytować żeby wyrzucić wyrzucić wszystko co z LCD związane i dodać pojawianie się stanu wysokiego na którymś z pinów po przekroczeniu pewnej ilości obrotów? Jeżeli tak czy mógłby ktoś w tym pomóc?[/syntax]

    0
  • Pomocny post
    #4 26 Cze 2013 22:36
    bochnio
    Poziom 13  

    1. Poczytaj ogólnie o timerach.
    2. Poczytaj o trybach timerów, Tobie radziłbym CTC.
    3. Poczytaj o przerwaniach.
    4. Z Timera co sekundę będziesz wysyłać przerwanie.
    5. Ustaw pin z przełącznikiem jako wejście.
    6. Podciągnij wewnętrzny rezystor do pinu albo daj jakiś rezystor po drodze - nie zwieraj bezpośrednio do masy.
    7. Ustaw port z diodą jako wyjście.
    8. Odczytuj w pętli wartość na pinie do zmiennej.
    9. Przerwaniem z timera zeruj wartość tej zmiennej.
    10. Zrób if'a na wartość zmiennej.
    11. Jak zmienna będzie miała wartość X to ustawiaj stan wysoki na pinie z diodą.

    Dzięki temu jeśli w określonym czasie podasz określoną liczbę stanów wysokich na port zapali się dioda. Pominąłem tutaj istotną kwestię drgania zestyków przy podawaniu stanu wysokiego na pin z przełącznikiem - o tym też poczytaj :) Pozdrawiam.

    0
  • #5 27 Cze 2013 22:02
    Euzebiusz23091998
    Poziom 15  

    A czy jako czujnik warto stosować właśnie kontaktron? Czy może zastosować coś innego? :) Jeśli tak to co?

    0
  • Pomocny post
    #6 27 Cze 2013 22:58
    piotrva
    Moderator na urlopie...

    Kontaktron na pewno nie - zwykle jego działanie będzie zbyt wolne.
    Najlepiej dobrać odpowiedni hallotron (o odpowiedniej bezwładności i szybkości przełączania), jeśli mówmy o pomiarze z wykorzystaniem pola magnetycznego (oczywiście doklejając magnes musisz odpowiednio go zamocować i wyważyć dany element obrotowy).

    0
  • Pomocny post
    #7 28 Cze 2013 11:12
    Tom1988p
    Poziom 16  

    Ja bym proponował na początek przerwanie zewnętrzne INT w którym liczysz impulsy, oraz przerwanie timera w trybie CTC co około 1s w której jak kolega @bochnio wspomniał będziesz zerować licznik.
    Kolejny krok to mniej więcej tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Innym sposobem to mierzenie okresu i wyliczanie prędkości jazdy.

    Uważaj na motorower bo on lubi siać zakłócenia i atmega możne mylnie odbierać sygnały.

    0
  • Sklep HeluKabel
  • #8 28 Cze 2013 13:17
    Euzebiusz23091998
    Poziom 15  

    Czy sygnał z halltrona zawierającego przerzutnik schmitta wygląda podobnie jak z przycisku, czyli stan wysoki, stan niski? Tom dzięki za fragment kodu :) muszę jeszcze tylko doszkolić się w używaniu przerwań praz timera :) A co do zakłóceń to już czytałem parę takich problemów na elektrodzie. Myślę że kondensatory w odpowiednich miejscach oraz dławiki załatwią sprawę. A jak nie to będę kombinował z ekranowaniem. Co do czujnika to lepiej by było zamontować go przy kole czy w silniku na zębatce zdawczej? przy kole będzie co prawda prościej ale za to będzie potrzebny dłuższy kabel który będzie bardziej podatny na zakłócenia. W silniku zaś będzie krótszy kabel jednak bliżej źródła zakłóceń :| Co będzie lepszym wyjściem?

    0
  • #9 28 Cze 2013 13:58
    piotrva
    Moderator na urlopie...

    Tom1988p napisał:
    przerwanie zewnętrzne INT w którym liczysz impulsy

    A nie lepiej 2 timery - jeden taktowany ze źródła zewnętrznego (zliczy impulsy) a drugi generujący precyzyjnie odmierzenie 1s?
    Dodatkowo dodam, że całość trzeba dostroić do konkretnego kwarcu podpiętego do mikrokontrolera, a zakłócenia zasilania to też ważna sprawa.

    0
  • #10 28 Cze 2013 14:16
    Euzebiusz23091998
    Poziom 15  

    Układ nie musi być idealnie dostrojony. Ma tylko załączać przekaźnik który uruchomi blokadę obrotów, a ta z kolei będzie dostrojona do prędkości. Działa to mniej więcej tak: Przy prędkości 37 km/h przekaźnik uruchamia blokadę która blokuje obroty powyżej 6000 rpm a że jadę prędkością 37 km/h przy których obroty silnika są na poziomie 4500 rpm mogę rozpędzić się do tych 45 km/h przy których blokada obrotów załatwia sprawę dalszego rozpędzania :) Jako że motorower posiada biegi nie mogę blokować mu tych obrotów zawsze, bo będzie to powodować że trudno będzie się rozpędzić do danej prędkości przerzucając biegi przy niskich obrotach. Teoretycznie można by było zrobić wykrywanie włączonego 4 biegu w silniku, jednak silnik ten wyposażony jest jedynie w czujnik luzu. Dorobienie czujnika 4 biegu było by zbyt inwazyjne, a nie mam zamiaru przerabiać silnika. Po prostu rozwiązanie z halltronem, atmegą i przekaźnikiem jest prostsze i tańsze od ingerowania w silnik :D

    0
  • #11 28 Cze 2013 16:24
    Tom1988p
    Poziom 16  

    @piotrva wiem ze można bardziej komplikować sobie życie. Tylko po co?
    Poza tym lepiej by było zrobić mierząc okres jednego obrotu, program by szybciej reagował a nie co jedną sekundę. Do tego projektu nawet nie będzie potrzeba więcej jak 1MHz.

    Co do mierzenia impulsów to weź go z przedniego koła.

    0
  • #13 28 Cze 2013 16:53
    Tom1988p
    Poziom 16  

    Napisałem dwa sposoby:
    1 mierzenie ilości impulsu w czasie,
    2 zasugerowałem mierzenie okresu.

    0
  • #14 28 Cze 2013 17:33
    Euzebiusz23091998
    Poziom 15  

    Wolałbym z tylnego bo nie szpeci wyglądu motoroweru, chodzi mi o kable wiszący z widelca który nie będzie wyglądał ciekawie :) poza tym jest mniejsza odległość do skrzynki w której będzie mieścił się układ co daje mniej śmieci łapanych po drodze (Swoją drogą dlaczego zawsze zalecane jest montowanie czujników w przednim kole? ). Konkretnie mowa o motorowerze Simson S51 z zapłonem elektronicznym. Który z tych dwóch sposobów będzie prostszy w wykonaniu?

    0
  • #15 29 Cze 2013 12:02
    Tom1988p
    Poziom 16  

    Jako że prosty przykład, wiele tu informacji nie trzeba wiedzieć.
    Jedynie przerwaniu od INT0, oraz ustawienie timerta0 w tryb CTC (do stworzenia timera programowego). Reszta to tylko pętla główna w której jest sprawdzany warunek co około jedną sekundę zgodnie z założeniem:

    Kod: c
    Zaloguj się, aby zobaczyć kod
    Jest to prosty przykład wykorzystujący zliczanie impulsów, ich przetworzeniu i zerowaniu zmiennej do następnego cyklu pomiarowego.
    Oczywiście może powodować blednę działanie z powodu małej ilości impulsów na 1 sekundę.
    Przykład prosty do dalszego rozwoju lub porzucenia :D

    0
  • #16 30 Cze 2013 15:17
    Euzebiusz23091998
    Poziom 15  

    Bardzo dziękuję za kod :) dzisiaj wieczorem spróbuję złożyć na płytce stykowej i dam znać co i jak :D Układ wyzwalany jest zboczem opadającym, czyli zwarciem pinu do masy, tak? :)

    0
  • #17 01 Lip 2013 17:12
    Euzebiusz23091998
    Poziom 15  

    (Przepraszam że post pod postem ale nie wiem czy powinienem zmienić starego posta czy jako że już nowy dzień napisać nowego) Chciałem napisać że mam problem z kompilacją, a konkretnie kompilator Eclipse wywala mi błędy przy wyrazach "OCIE0", "WGM01" i "OCR0". Co z tym fantem zrobić? :|

    0
  • #19 01 Lip 2013 22:36
    Tom1988p
    Poziom 16  

    Kompilator eclipse? Przecież to ma być kompilowane przez avr-gcc :P
    Możliwe że źle stworzyłeś projekt bo u mnie idzie "jak burza".
    Żadnych zmian nie wprowadzałeś w kodzie, jakie komunikaty pokazały się.

    PS. Kolego forumowy piotrva wypalasz się nam w pomocy, jak wielu doświadczonych już elektroników/programistów dajesz odpowiedzi które są powierzchowne i nie bardzo sensowne dla początkującego. A wiem że posiadasz wiedzę w temacie :)

    0
  • #20 01 Lip 2013 23:24
    piotrva
    Moderator na urlopie...

    Tom1988p napisał:
    PS. Kolego forumowy piotrva wypalasz się nam w pomocy, jak wielu doświadczonych już elektroników/programistów dajesz odpowiedzi które są powierzchowne i nie bardzo sensowne dla początkującego. A wiem że posiadasz wiedzę w temacie :)

    Co racja to racja ;) Mimo iż za doświadczonego się nie uważam ;)

    Problem leży w tym, że kod był chyba pisany nie dla m8, która nie oferuje funkcji CTC dla timera0.
    Poniższy program przeportowałem na sucho na m8 i timer2.
    Powinno działać, a przynajmniej kompiluje się ;)
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #21 02 Lip 2013 07:10
    Tom1988p
    Poziom 16  

    O widzisz. Zapomniałem napisać że to na atmega 16. Mój błąd, ale zaraz dopiszę do kodu komentarz.

    0
  • #22 03 Lip 2013 11:33
    Euzebiusz23091998
    Poziom 15  

    Po drobnej edycji przez kolegę Piotrva za którą również jestem wdzięczny kompilator ruszył bez problemu tak samo jak program na Atmedze8 za co bardzo dziękuję obojgu Panom :D Muszę jeszcze zakupić jeszcze jakiś czujnik halla i jakieś małe magnesy i mogę zacząć montować układ w motorowerze i kombinować z pozbyciem się ewentualnych zakłóceń :) Póki co jestem bardzo wdzięczny za pomoc i z tego miejsca jeszcze raz dziękuję :) Pozdrawiam Euzebusz.

    0
  • #24 07 Lip 2013 15:20
    Euzebiusz23091998
    Poziom 15  

    Mógłby ktoś mi podpowiedzieć jakiego typu ma być czujka halla? :D Bo w ofercie TME mają ich dużo rodzajów. A konkretnie chodzi mi o znaczenie tego: bipolarny, omnipolarny, zatrzaskowy, unipolarny, ktoś mógłby mi wytłumaczyć co to znaczy? :) Tak na chłopski rozum :D

    0
  • #25 09 Lip 2013 15:17
    emarcus
    Poziom 35  

    Euzebiusz23091998 napisał:
    Mógłby ktoś mi podpowiedzieć jakiego typu ma być czujka halla? :D Bo w ofercie TME mają ich dużo rodzajów. A konkretnie chodzi mi o znaczenie tego: bipolarny, omnipolarny, zatrzaskowy, unipolarny, ktoś mógłby mi wytłumaczyć co to znaczy? :) Tak na chłopski rozum :D


    Co właściwie oznacza "Na chłopski rozum" ?
    Czy to ma byc wytłumaczenie zjawiska w sposób prymitywny czy też w jakimś innym rodzaj logiki.
    Uważam że, tego rodzaju skojarzenie/rozdzielanie poziomów myślenia wydzielonej grupy społecznej (chłopa/rolnika, w ogólności farmera) w kraju, wnosi pewnego rodzaju niekorzystne poniżenie godności tych zawodów.
    Przyjmij że, chłop/rolnik to nie tylko reprezentant grupy społecznej pochodzenia w ogólności ze środowiska wiejskiego, ale to także zawód ludzi, którzy dostarczają ci rzywnośc na twój stół...

    Wracając do sedna pytania;
    Rodzaj 'czujnika' Halla (hallswitch) dobiera się w zależności od wybranego rozwiązania mechanicznego ukladu testowanego, to znaczy w jaki sposób będzie przesuwany magnes względem sensora.
    W twoim projekcie mozesz zastosowac zwyczajny omnipolarny albo unipolarny hallswitch np:
    Infineon z serii: 4905/4906;
    albo
    Alegro MicroSystems z serii:
    A3213/A3214.

    Unipolarny reaguje tylko na jeden z biegunów; zazwyczaj S
    Omnipolarny reaguje na dowolny biegun magnetyczny, zatem zaleznie od konstrukcj mechanicznej możesz otrzymac w efekcie dwa impulsy zamiast spodziewanego pojedynczego na jeden obrót.

    Odnośnie różnic pomiędzy; " bipolarny, omnipolarny, zatrzaskowy, unipolarny "- poczytaj tu:
    http://www.datasheetarchive.com/indexer.php?f...+Hall-Effect+Sensors&database=user-highscore#

    e marcus

    0
  • #26 09 Lip 2013 19:44
    Euzebiusz23091998
    Poziom 15  

    Jeżeli kogoś uraziłem to przepraszam nie miałem tego w zamiarze :( w sumie połowa mojej rodziny ma gospodarkę więc wiem w czym rzecz :) pisząc na chłopski rozum miałem na myśli prosto ale mniejsza z tym. Dziękuję za wytłumaczenie :)

    0
  • #27 17 Lip 2013 14:51
    resspm
    Poziom 2  

    Śledzę temat, bo potrzebuję niemal identycznego urządzenia. Mam jednak pytania:
    - dlaczego nie ATiny?
    - piotrva: napisałeś, że kontrakton odpada ze względu na jego powolne działanie. W moim przypadku jednak częstotliwość nie przekroczy 5 Hz a do wyzwolenia przełącznika potrzebne będzie max 3. Samą prędkość potrzebuję mierzyć z rozdzielczością 1 s.
    - Euzebiusz23091998: jakiś postęp? Natrafiłeś na nowe trudności?

    0
  • #28 17 Lip 2013 19:29
    Euzebiusz23091998
    Poziom 15  

    Postępów chwilowo nie ma ale układam listę części i powinienem za niedługo zamawiać. Czemu nie ATtiny? Tego ci nie powiem. Układ powstał na częściach które miałem w domu, a ATtiny jeszcze nie mam dlatego Atmega. Chociaż sam myślę nad zastosowaniem kontrolera ATtiny ze względu na mniejszy rozmiar i mniejszą ilość potrzebnych elementów. Tu kolejne pytanie do speców: Czy kod trzeba edytować w jakiśkolwiek żeby działał na np Attiny13 np? Może jakieś inne ATtiny? Trudności będą na pewno, przynajmniej w moim przypdku ze względu na pracę w pobliżu źródła bardzo silnych zakłóceń (cewki zasilania i WN do świecy robią swoje). A u ciebie gdzie układ ma pracować?


    [ATmega8]Sygnalizator/Limiter przekroczenia prędkości

    Czy taki schemat może być do podłączenia czujnika halla do mikrokontrolera?

    0
  • #29 17 Lip 2013 20:09
    BlueDraco
    Specjalista - Mikrokontrolery

    Może być. Możesz też pominąć zbędne ozdobniki - tranzystor i trzy rezystory, bo pożytek z nich żaden.

    0
  • #30 17 Lip 2013 21:21
    resspm
    Poziom 2  

    U mnie ma to sygnalizować przekroczenie prędkości wózka widłowego. Problemów z zakłóceniami też się obawiam, ale zostawiam je sobie na później :)

    W przyszłym tygodniu powinny pojawić się jakieś postępy, więc i pewnie nowe problemy zaistnieją...

    0