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

Bascom - Licznik impulsów, kierunek obrotów

LemuRR 11 28 Paź 2012 15:34 2514 9
  • #1 28 Paź 2012 15:34
    LemuRR 11
    Poziom 26  

    Niby prosty problem, ale za to jakże denerwujący. Robię licznik impulsów (obrotów) który powinien także rozpoznawać kierunek obrotów.
    Na wale jest magnes, a dookoła 3 czujniki halla.
    Obroty prawe, po każdej sekwencji 1,2,3 powinno dodać 1
    Obroty lewe, po każdej sekwencji 1,3,2 powinno odjąć 1
    Staram sobie to rozpisać rozrysować na wszelki sposób, ale nie wychodzi mi.
    czym więcej się zastanawiam, tym mniej wiem..
    Bardzo prosił bym o jakiekolwiek wskazówki, chociaż żeby naprowadzić na odpowiedni trop .

    0 9
  • Pomocny post
    #2 28 Paź 2012 16:29
    tmf
    Moderator Mikrokontrolery Projektowanie

    A procka już wybrałeś? Jeśli nie to wybierz XMEGA ze sprzętowym dekoderem kwadraturowym. A jeśli chcesz inny, to poszperaj na googlach o zasadzie działania dekoderów kwadraturowych lub impulsatorów.

    0
  • #3 28 Paź 2012 17:08
    LemuRR 11
    Poziom 26  

    Właśnie jest to mega8. Akurat takich mam dostatek, jednak nie bardzo rozumiem, jak wykożystac sprzętową obsługę w bascomie

    0
  • Pomocny post
    #4 28 Paź 2012 17:43
    piotr5000
    Poziom 21  

    1 - doprowadź sygnały z czujników do trzech wejść jednego z portów
    2- każdy z tych sygnałów doprowadź do wejścia przerwania INT0 ( odseparowane diodami lub przez transoptory np. CNY-17 )
    Każde pojawienie się impulsu na jednym z wejść wyzwoli przerwanie INT0
    W obsłudze przerwania sprawdzasz stan wejść i porównujesz z poprzednim stanem
    W zależności od zmiany dodajesz lub odejmujesz impuls.
    W pętli głównej programu robisz to co chcesz w zależności od stanu licznika

    0
  • Pomocny post
    #5 28 Paź 2012 18:37
    tmf
    Moderator Mikrokontrolery Projektowanie

    LemuRR 11 napisał:
    Właśnie jest to mega8. Akurat takich mam dostatek, jednak nie bardzo rozumiem, jak wykożystac sprzętową obsługę w bascomie


    Jeśli to M8 to ona oczywiście nie ma sprzętowego dekodera. Co jednak aż tak bardzo nie utrudnia zadania. Te 3 czujniki to twój pomysł, czy tak po prostu jest? Do tego zadania w zupełności wystarczą dwa czujniki generujące sygnał przesunięty w fazie tak jak ze zwykłego enkodera obrotowego. Zobacz na blogu: http://mikrokontrolery.blogspot.com/2011/04/impulsator-stykowy.html
    w sekcji "Kierunek obrotów" masz info jak wykryć kierunek.

    0
  • Pomocny post
    #6 28 Paź 2012 19:11
    ZbeeGin
    Poziom 38  

    LemuRR 11 napisał:
    Akurat takich mam dostatek, jednak nie bardzo rozumiem, jak wykożystac sprzętową obsługę w bascomie

    W helpie jest opisana funkcja ENCODER(), zatem może warto najpierw te parę zdań przeczytać?

    piotr5000 napisał:
    W obsłudze przerwania sprawdzasz stan wejść i porównujesz z poprzednim stanem

    Nie zapominajmy o drganiu styków. Jeszcze nie spotkałem enkodera mechanicznego, który by generował "książkowe" przebiegi. A w metodzie przerwaniowej będzie to mało ogromne znaczenie.

    0
  • #7 28 Paź 2012 19:45
    LemuRR 11
    Poziom 26  

    Dzięki za zainteresowanie i szybkie odpowiedzi.
    Do obsługi w takim razie będę miał 2 enkodery, jeden na osi silnika drugi do sterowania.
    Najprawdopodobniej użyję tego algorytmu, z tym że dopiszę jeszcze obsługę drugiego enkodera na int1.
    Polecenie encoder, w bascomie ponoć nie działa najlepiej...

    Code:

    Cha Alias Pind.2
    Chb Alias Pind.5
    Config Cha = Input                                          'wej.kanał A encodera INT0 procesora
    Config Chb = Input                                          'wej.kanał B encodera
    Config Pind.4 = Output                                      'wyjście +
    Config Pind.3 = Output                                      'wyjście -
    Config Pind.6 = Output                                      'sygnalizator impulsów LED
    Config Int0 = Falling
    Const Debouncetime = 1

    On Int0 Getencoder
    Enable Interrupts
    Enable Int0



    Getencoder:
    Waitus Debouncetime
    If Cha = 0 Then
    If Chb = 0 Then Set Portd.4 Else Set Portd.3
    End If
    Reset Portb.0
    Waitms 1
    Set Portd.6
    Reset Portd.3
    Reset Portd.4
    Return
    End

    Z drganiami styków raczej nie będzie problemu, bo najprawdopodobniej użyję wspomnianych wyżej hallotronów i magnesu, albo podwójnej fotodiody z myszki komputerowej.

    0
  • #8 28 Paź 2012 19:53
    ZbeeGin
    Poziom 38  

    Code:
    Getencoder: 
    
    Waitus Debouncetime
    ...
    Waitms 1
    ...

    Takie kwiatki programowe w przerwaniach!? Gdzie cię uczyli programować? :(

    0
  • #9 29 Paź 2012 06:28
    LemuRR 11
    Poziom 26  

    Nie ja to pisałem, jest to kawałek kodu znaleziony w internecie. Sam się zastanawiam jaką rolę odgrywa
    waitus debouncetime

    0
  • Pomocny post
    #10 29 Paź 2012 10:39
    SylwekK
    Poziom 29  

    Pewnie to miał być z założenia jakiś antydrganiowy filtr... zasada jest prosta ŻADNYCH wait w przerwaniach!

    0