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

Licznik rowerowy, kilka pytań(problemów)

04 Paź 2010 16:19 4554 29
  • Poziom 9  
    Jeśli chodzi o uC to jestem raczej na poziomie początkującym(odczyt stanu przycisku, zapalanie diody, wyświetlacz LCD, termometr 1-Wire). Niestety jednak muszę zrobić projekt na uczelni, i prawdopodobnie będzie to licznik rowerowy. Dodam że jeszcze nie zacząłem robić, ale już mam kilka pytań(tak szukałem na forum i w internecie, ale nie znalazłem).

    1) Czujnik
    Mam czujnik ze starego licznika, ciężko mi powiedzieć jaki to typ, ale przykładając omomierz sprawdziłem że po zbliżeniu tego elementu który jest na kole do czujnika rezystancja maleje prawie do zera.
    Zna ktoś profesjonalną nazwę takiego czujnika?
    Druga sprawa z czujnikiem, sygnał który otrzymam pewnie będzie zniekształcony i słaby, jak poprawić jakość takiego sygnału. Oczywiście najlepiej by było aby przy zbliżeniu dostawał bym logiczną jedynkę lub zero bez żadnego drgania styków, zakłóceń itp.
    Czy warto korzystać z tego czujnika, jak tak to jak poprawić jakość sygnału(interesuje mnie zarówno dołożenie jakiś elementów analogowych jak i rozwiązanie programowe), a jeśli nie to może polecilibyście jakiś lepszy czujnik?

    2) Zegar
    Na razie miałem styczność tylko z procesorami AVR, głównie atmega i attiny. Projekt chcę wykonać na atmega8, obsługa wyświetlacza i obliczenia prędkości powinny się lajtowo zmieścić, ale czy powinienem używać zewnętrznego zegara?
    Czy w takim projekcje do pomiaru odstępu czasu będzie mi potrzebny zewnętrzny zegar, czy np. wystarczy kalibracja wewnętrznego? Jeśli tak to o jakiej wartości?
  • Texa PolandTexa Poland
  • Poziom 24  
    Ad.1. Pewnie masz na myśli kontaktron. To na kole to jest magnes. Tutaj można zastosować wyzwalanie zboczem. Jak z obsługą drgania styków to nie wiem, bo nie wiem czy występują. Z tradycyjnym układem RC może być problem ze względu na czas trwania impulsu. Elektronikiem jestem kiepskim, ale na forum jest kilku specjalistów, na pewno coś doradzą.

    Ad.2. Jeśli zegar zewnętrzny to tylko ten zegarkowy (32kHz z hakiem), żeby odmierzyć dokładnie sekundę. Jeśli chodzi o szybkość pracy uC, im mniej tym lepiej ze względu na pobór prądu. Wypada projektować na 3.3V.
  • Poziom 10  
    Zacznę od końca. Użyj rezonatora zewnętrznego np. 10MHz. Im większy tym szybsze sprawdzanie stanu portów. Po drugie ten czujnik to nie kontaktron. W kontaktronie nie zmienia się rezystancja tak jak u ciebie a tylko zwierają się i rozwierają styki. Radze ci zrezygnować z tego czujnika i zakupić kontaktron, wtedy będziesz mógł go wysterować tak jak zwykły przycisk.
  • Texa PolandTexa Poland
  • Specjalista - Mikrokontrolery
    phaker92 napisał:
    Zacznę od końca. Użyj rezonatora zewnętrznego np. 10MHz. Im większy tym szybsze sprawdzanie stanu portów.

    A co z poborem energii?
    phaker92 napisał:

    Po drugie ten czujnik to nie kontaktron.

    A co jak nie kontaktron?
    phaker92 napisał:
    W kontaktronie nie zmienia się rezystancja tak jak u ciebie a tylko zwierają się i rozwierają styki.

    A zwarcie i rozwarcie styków to nie zmiana rezystancji?
    phaker92 napisał:
    Radze ci zrezygnować z tego czujnika i zakupić kontaktron, wtedy będziesz mógł go wysterować tak jak zwykły przycisk.

    Radzę Ci nie rezygnować z tego czujnika bo to kontaktron.
  • Poziom 24  
    phaker92 napisał:
    Użyj rezonatora zewnętrznego np. 10MHz.


    Tylko po co ?
    Przyjmując prędkość maksymalną v=100km/h, czyli 27,778 m/s oraz średnicę koła 26 cali (promień 13 cali czyli 0,3302 m) i podstawiając do wzoru
    omega=v/R otrzymujemy 27,778/0,3302=84,125 radianów/sekundę
    Wiedząc, że 1 radian = 180 stopni / 3,141 czyli około 57,296 stopni i tych radianów na sekundę mamy 84,125 można obliczyć, że przy zakładanej prędkości maksymalnej koło obróci się o 4820,904 stopnie, czyli 13,3914 impulsów.

    Oczywiście dokonując obliczeń zastosowałem pewne uproszczenia. Jednak jeśli wszystko dobrze policzyłem, to może się okazać, że liczba impulsów na sekundę jest niewielka, przez co dokładność pomiaru prędkości będzie mizerna. Wtedy albo stosujemy drugi magnes, żeby były dwa impulsy na obrót koła, ale wydłużamy czas zliczania impulsów, albo jedno i drogie.

    Tak czy inaczej sądzę, że 1 MHz to i tak sporo. Przy prawidłowo napisanym programie uC będzie i tak w większości czasu był w stanie uśpienia.

    Nie wiadomo natomiast jeszcze nic o wyświetlaniu mierzonych wartości.
  • Użytkownik usunął konto  
  • Poziom 38  
    michalko12 napisał:

    phaker92 napisał:

    Po drugie ten czujnik to nie kontaktron.

    A co jak nie kontaktron?


    Hallotron :) Jeżeli chodzi o drgania styków to tak samo występują jak przy przycisku. Programowy debounce albo filtr RC wystarczą
  • Specjalista - Mikrokontrolery
    gaskoin napisał:

    Hallotron :) Jeżeli chodzi o drgania styków to tak samo występują jak przy przycisku. Programowy debounce albo filtr RC wystarczą


    Hallotron potrzebuje prądu do działania.
  • Poziom 38  
    Skoro już tacy energooszczędni jesteśmy to zmieniłbym od razu uC
  • Poziom 24  
    gaskoin: A filtr o jakiej stałej czasowej byś zastosował ? Pytam, bo szczerze to osobiście tego nie widzę. Moim zdaniem albo stała czasowa będzie zbyt duża i nie da rady rozładować kondensatora, albo zbyt mała i może nie wytłumić całego drgania. Jak możesz oszacować wartości parametrów to bardzo proszę.
  • Poziom 38  
    No dzwoni- ale krótko.
    Takie małe co mam- poniżej 100us.
    Podaję 5V przez 1.3k i przy kondensatorze 100nF już święty spokój.
    To daje Stałą RC o parę rzędów wielkości mniejszą od obrotów koła.
  • Poziom 24  
    Jeśli moje wyliczenia w którym z postów wcześniej są prawidłowe, założymy 14 impulsów na sekundę, to obrót koła o jeden stopień trwa 198,413 us. Pytanie tylko, przez jaki kąt kontaktron będzie otwarty.
  • Poziom 38  
    Nie da się bramkować kontaktronem w rowerze.
    Wystarczy że magnes trochę inaczej zamocujemy i czas otwarcia kontaktronu się znacznie zmieni.
    Tylko liczenie impulsów co obrót ma jakiś sens.
    Można na szprychach osadzić wiele magnesów- ale one swoje ważą i jazda z tak obciążonym kołem będzie straszna.
  • Poziom 24  
    Tzn jak bramkować ? Szacowany czas otwarcia kontaktronu rozpatruję ze względu na ładowanie kondensatora. O pomiarze czasu otwarcia kontaktronu nawet nie myślałem.
  • Poziom 38  
    sulfur napisał:
    Jeśli moje wyliczenia w którym z postów wcześniej są prawidłowe, założymy 14 impulsów na sekundę


    przy kole które ma 20 cm promień jechałbyś 60 km/h :P

    janbernat napisał:

    Tylko liczenie impulsów co obrót ma jakiś sens.


    Co obrót chyba będzie jeden? :P
  • Poziom 21  
    Koło rowerowe 26" ma obwód około 2m.
    90 km / h to 25 m/s ( samobójcza prędkość dla amatora )
    Minimalny czas 1 obrotu koła 83 msek.
    zliczając impulsy 1msek w czasie 1 obrotu koła i zakładając dokładność 1 impulsu , popełniamy błąd nie większy od 1,3% ( przy mniejszych prędkościach wzrasta dokładność )
  • Poziom 38  
    Ale mnie zestresowało sprawdzanie tego.
    Najpierw stłukłem kontaktron magnesem a potem kanał_1 w oscyloskopie przestał działać.
    Już myślałem że serwis- a to tektronix- drogo.
    Ale nie- tylko nieuwaga w ustawianiu.
    No ale teraz tak:
    Opornik do + -a w szereg kontaktron do gnd.
    Równolegle do kontaktrona 100nF.
    Jak się zbliży do niego magnes to się włącza i rozładowuje kondensator.
    Szybko- 1us czas opadania- nawet jak kontaktron ma drgania styków.
    No bo ma 100nF równolegle i te drgania styków to tylko trochę opóźnią czas rozładowania.
    Przy wolnych ruchach ręki po 400ms kontaktron się wyłącza.
    Napięcie narasta od 0 do 5V przez 250us.
    Tak że czas narastania napięcia jest dużo dłuższy.
    Tak że proponował bym sprawdzenie zbocza opadającego jakimś debouncingiem.
    Takim dość krótkim.
    Ze 100-500us.
    Jak ktoś jeździ poniżej 100km/h.
    Roweru do sprawdzenia nie przyniosę- już dość szkód narobiłem.
  • Poziom 24  
    No ale w sumie 100nF wydaje się być dużo, szczególnie, że układ miałby działać na baterii no i do tego to ładowanie i rozładowanie odbywałoby się stosunkowo często. Czy to już jest paranoja ? Ja jestem zwolennikiem wyzwalania zboczem, szczególnie tym stromym, wtedy można usypiać mikrokontroler i oszczędzać mA.
  • Poziom 38  
    No toż napisałem- zboczem opadającym.
    Potem procesor może iść spać.
    Mi wyszło że dla takiego kontaktronu 100nF powinno być.
    A ładuje się i rozładowuje co obrót.
    Można dać mniej- nawet 1nF- ale to trzeba sprawdzić oscyloskopem jaki kondensator.
    Ale to jest paranoja- jeśli chodzi o ładunek z baterii.
    Trzeba obliczyć.
    Sprawdzę i obliczę.
    Mi się zupełnie co innego przypomina.
    Stoi taki pod sklepem na wsi i gada z dziewczyną.
    No i jeździ tym rowerem 10cm w przód i 10cm w tył.
    No i akurat ten magnes przechodzi przez widelec na którym jest przylepiony kontaktron.
    No ze dwie godziny gadają- bo dziewczyna ładna.
    Ile On kilometrów przegadał?
    To też jest paranoja- ale jakś bardziej swojska.
    P.S.
    Sprawdziłem- 100nF.
    P.S.
    W zasadzie to niech Autor tematu liczy- qoulomby, pojemności, napięcia i amperogodziny.
    Mi wyszło z pomiarów i z obliczeń że 1.3kom i 100nF wystarczy.
  • Poziom 24  
    Też myślałem o tej dziewczynie. O tych kilometrach trochę mniej, przed tym sensownie zabezpieczyć się nie da.

    P.S. Czas na terapię ;)
  • Poziom 38  
    Jaką terapię- ja to jeszcze pamiętam.
    I te wiejskie sklepy i te dziewczyny.
    Aby pamięć nie zawiodła.
    Przed kilometrami- da się coś wymyślić.
    Ale przed tamtymi dziewczynami- nie.
  • Poziom 38  
    ja używałem 100nF + 1k i bylo ok :P
  • Poziom 38  
    No i się zgadza- 1.3k i 100nF.
    Przy zasilaniu 3V układ pobierał by ok. 3mA na obrót koła przez- no właśnie- ile czasu?
    Zależy to od siły magnesu i odległości szprychy od widelca.
    Powinno to być jak najkrócej- czyli słabszy magnes- ale na tyle silny aby pewnie zewrzeć kontaktron.
  • Poziom 9  
    dzięki za wszystkie odpowiedzi, co do zużycia energii to właściwie nie będzie to miało znaczenia, jest to projekt raczej akademicki(czyli ma tylko działać), dziś zabieram się do pracy => czyt. montuje układ i pisze program
    i teraz jeszcze pytania apropo programu, jak wiadomo dokumentacja jest duża i nie za bardzo wiem jak zacząć i co wykorzystać

    wymyśliłem sobie to tak:

    globalna zmienna predkosc

    przerwanie z pinu kontraktronu
    {
    odczytuje jakiś timer
    predkosc = obw. kola / czas z timera
    zeruje timer
    }

    główna petla programu
    {
    przelicz predkosc na km/h
    wyslij na wyswietlacz
    tryb uspienia
    }

    czy taki pseudo kod jest w założeniach poprawny? i jak przejść z założeń do praktyki zwłaszcza interesuje mnie obsługa timerów, jest jakiś kurs(tutorial) poświęcony timerom?
  • Poziom 38  
    W datasheecie jest wszystko opisane, jeżeli chodzi o timery.

    Z założenia obsługa przerwania powinna być jak najkrótsza, a że masz dzielenie w ISR, to krótka to ona nie będzie :)


    Koncepcji może być kilka:

    - Sprawdzasz czas trwania jednego obrotu
    - Sprawdzasz ilość obrotów co jakiś stały czas
    - inne cuda
  • Poziom 9  
    zawodowo zajmuje się PHP, czasem C# wiec nie pomyślał bym że to może mieć znaczenie, dzielenie bez problemu można przenieść do głównej pętli, a w przerwaniu tylko przepisywać czas z timera, co do koncepcji to właśnie to miała być opcja "sprawdzasz czas trwania jednego obrotu", rozumiem że jak to tak napisze to jest to wykonalne, tak?
  • Poziom 38  
    Niestety 8MHz a 2Ghz to jest mała różnica :) Tak, jest wykonalne, wszystko od Ciebie zależy:) Mój pierwszy projekt jaki zrobiłem tak właśnie działał.

    Liczyłem czas pomiędzy kolejnymi impulsami i przeliczałem to na prędkość. Na samym początku programu ustawiało się wielkość koła i zapisywało w eepromie, można ją było potem zmienić.
  • Poziom 38  
    Zboczem- tylko zboczem sprawdzać kontaktron.
    I flaga- że jest- i skasować flagę.
    A "predkosc = obw. kola / czas z timera " i "przelicz predkosc na km/h- to w jednym działaniu.
    "wyslij na wyswietlacz "- to co 1s- bo po co częściej.
    To w głównej pętli.
  • Poziom 9  
    @up,
    -kontraktron sprawdzam zboczem opadającym
    -dopiero jak to na kartce policzyłem i poskracałem to wyszło że wystarczy jedno dzielenie i jedno mnożenie
    -zauważyłem że bez sensu wysyłałem to w kółko, ale dzięki za fatygę

    najważniejsze że udało mi się to napisać i działa :-), jutro sprawdzę z innym licznikiem, ale na oko zgadza się z obliczeniami, jeszcze raz dziękuje wszystkim za pomoc
  • Poziom 9  
    wracamy do gry, wiec już wiem jaki to ma być wyświetlacz: z nokii, poczytałem trochę i myślę że najłatwiej będzie wziąć z nokii 3310

    znalazłem na forum taką stronkę: http://www.microsyl.com/index.php/2010/03/24/nokia-lcd-library/#more-197

    i teraz też mam kilka pytań:
    1) jest tam schemat podłączenia(zakładając że użyje ATmegi8(L) zasilanej 3,3V) wystarczy to tak podłączyć jak tam jest i będzie działać?
    2) czy na ATmega8 zmieści się ta biblioteka(aktualnie nie mogę tego sprawdzić empirycznie)?
    3) co jeszcze powinienem wiedzieć o tym wyświetlaczu/jego podłączaniu/jakieś sztuczki itp.?