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

[Atmega32][C] - Odczytwanie położenia na transoptorach i sterowanie silnikiem DC

Roger94 02 Kwi 2014 11:40 1353 11
  • #1 13467867
    Roger94
    Poziom 9  
    Witam. Jestem bardzo początkującym i potrzebuje pomocy w wysterowaniu silnikiem DC za pomocą sygnałów z dwóch transoptorów szczelinowych w języku C.
    Umiem wysterować silnik aby sam wykonywał obroty w prawo lub lewo oraz zatrzymywał się po pewnym czasie. Niestety nie wiem jak dopasować kod aby podać do niego sygnały z transoptorów odczytujących położenie tacki którą ma poruszać silnik.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Poniżej zamieszczam fragment schematu mojego układu
    [Atmega32][C] - Odczytwanie położenia na transoptorach i sterowanie silnikiem DC
  • #2 13468044
    dondu
    Moderator na urlopie...
    Witam.
    Roger94 napisał:
    Niestety nie wiem jak dopasować kod aby podać do niego sygnały z transoptorów odczytujących położenie tacki którą ma poruszać silnik.

    Nie podałeś do czego konkretnie chcesz wykorzystać sygnały z enkodera.
  • #3 13468058
    Roger94
    Poziom 9  
    Potrzebuje podać sygnał z portu PB3 na port PA0 i z portu PB4 na port PA1
    Mam chwilowo pewną koncepcje którą muszę jeszcze sprawdzić. Postaram się w krótkim czasie dołączyć kod o którym pomyślałem.
  • #5 13468413
    Roger94
    Poziom 9  
    W założeniu tacka miała się znajdować tylko w 2 położeniach (lewo albo prawo nic pomiędzy) Nie wykorzystuje enkodera.
    Kumpel który robi to ze mną napisał mi to mniej więcej tak
    "atmega sprawdza z którego transoptora nie przychodzi sygnał (bo jak jest przesłonięty to idzie z niego 0) i wtedy wie gdzie jest tacka, jak jest na dole to możesz załączyć silnik tylko na ruch do góry
    dojeżdża w górne położenie, transoptor zostaje przesłonięty, na atmegę idzie z niego 0 i silnik sie zatrzymuje
    tu nie ma liczenia impulsów
    silnik MUSI sie zatrzymywać jak tacka przesłoni transoptor"
  • #6 13468629
    dondu
    Moderator na urlopie...
    Czyli po prostu czujniki krańcowego położenia.

    Roger94 napisał:
    ...bo jak jest przesłonięty to idzie z niego 0 ...

    Odwrotnie ponieważ transoptor (tutaj NPN) wprowadza negację, gdy go prawidłowo podłączysz, czyli emiterem do masy, a kolektorem do pinu mikrokontrolera - zmień to.

    Twój program powinien więc reagować na stan pinów PB4 i PB3
    Realizujesz to poprzez:
    - ustawienie rejestrów DDRB jako wejścia dla tych pinów (domyślnie są ustawione),
    - włączasz rezystory pull-up na tych pinach ustawiając odpowiednie bity w PORTB,
    - w odpowiednim miejscu programu sprawdzasz stan pinu czy występuje na nim jedynka, bo transoptor został przesłonięty. Realizujesz następująco:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Swoją drogą, jakie to silniki (parametry), że stosujesz przekaźniki zamiast tranzystorów?
  • #7 13468691
    Roger94
    Poziom 9  
    Silnik jest z wycieraczek od VW Polo, z pomiarów jakie wykonywał kumpel miał duży pobór prądu. Aż 4 A przy 12 V i stwierdził że l298 nie da rady a przekaźniki miał pod ręką
  • #8 13468773
    nsvinc
    Poziom 35  
    Cytat:
    Odwrotnie ponieważ transoptor (tutaj NPN) wprowadza negację, gdy go prawidłowo podłączysz, czyli emiterem do masy, a kolektorem do pinu mikrokontrolera - zmień to.

    Błąd. Tranzystorowi w transoptorze jest wszystko jedno, jak się go podłączy, pod warunkiem że current sink będzie zawsze po stronie emitera.
    Więc są dwie prawidłowe opcje:

    a) kolektor do plusa, obciążenie między emiterem a masą
    b) emiter do masy, obciążenie między kolektorem a plusem

    Opcja a) nie neguje sygnału.
  • #9 13468882
    BlueDraco
    Specjalista - Mikrokontrolery
    Opcja a ma jeszcze tę zaletę, że wymaga dodatkowego rezystora. ;)
  • #11 13468900
    Roger94
    Poziom 9  
    Jeśli dobrze zrozumiałem kod wyglądałby mniej więcej tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    czy może jednak coś pomieszałem
  • #12 13469077
    dondu
    Moderator na urlopie...
    nsvinc napisał:
    Cytat:
    Odwrotnie ponieważ transoptor (tutaj NPN) wprowadza negację, gdy go prawidłowo podłączysz, czyli emiterem do masy, a kolektorem do pinu mikrokontrolera - zmień to.

    Błąd. Tranzystorowi w transoptorze jest wszystko jedno ...

    ... ale nie projektowanemu układowi, w którym by było prawidłowo i bez zbędnych elementów, należy zrobić tak jak napisałem. Dlatego błędu nie zrobiłem, a popełniłeś go Ty :)

    nsvinc napisał:
    Opcja a) nie neguje sygnału.

    Moje rozwiązanie także nie neguje - 1 na wejściu mikrokontrolera oznacza skrajne położenie.

    Roger94 napisał:
    Jeśli dobrze zrozumiałem kod wyglądałby mniej więcej tak:

    Mniej więcej, ale zapomniałeś włączyć rezystory pull-up (drugi myślnik z mojego poprzedniego postu) i ... zmienić sposób podłączenia na taki jak Ci wskazałem.
REKLAMA