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

Atmega32 [C] - Sterownik silnika bipolarnego z układem L298-7

jasiek89 25 Paź 2011 20:57 2780 5
REKLAMA
  • #1 10065816
    jasiek89
    Poziom 17  
    Witam wszystkich. Postawiłem sobie za cel, stworzenie projektu sterownika silnika krokowego za pomocą mega32. Założenia są takie odczytując przyciski z klawiatury generujemy odpowiedni efekt.
    Jak wiadomo układ L298-7 działa na zasadzie podania 3 sygnałów Lewo/Prawo, półkrok, krokowo oraz CLK.
    I tu powstaje problem :)
    Otóż przyjmijmy że za pomocą przycisku:
    P1 - generujemy 1/4 obrotu w lewo
    P2 - generujemy 1/2 obrotu w lewo
    P3 - generujemy 3/4 obrotu w lewo
    P4 - generujemy 1 obrot w lewo
    P5 - generujemy 1/4 obrotu w prawo
    P6 - generujemy 1/4 obrotu w prawo \
    P7 - generujemy 1/4 obrotu w prawo
    P8 - generujemy 1/4 obrotu w prawo
    P9 płynny start do częstotliwości np. od 0 do 200 Hz
    P10 przyspieszanie co 1 naciśnięcie o 50Hz
    P11 zwalnianie co 1 naciśnięcie o 50 Hz
    P12 łagodne wyhamowanie
    itd...

    Udało mi się obsłużyć klawiaturkę 4x4 i udaje się zapalić didodki przy naciskaniu odpowiedniego przycisku, ale to jak wiadomo za mało.

    Czy może ktoś pokazać przykład jak generować odpowiedni sygnały, jednocześnie czytając klawiaturę.

    Rozpacz czarna mnie dopadła :(
    Podobno trzeba to zrobić na przerwaniach, ale potrzebuję jakiegoś porządnego prostego przykładu.

    Aha.. piszę w C, AVR Studio 4 :|
  • REKLAMA
  • #2 10068872
    janbernat
    Poziom 38  
    Proste i porządne przykłady sterowania silnikiem krokowym są w książce napisanej przez mirekk36.
    Aż za bardzo skomplikowane dla kompletu L298/L297.
    Można je uprościć.
    No a klawiaturę chyba też obsługujesz w przerwaniach od jakiegoś timera?
    No i zacznij od tego żeby silnik kręcił się w prawo albo w lewo.
    A- 200Hz to jest 1200obr/min.
    Czegoś takiego na silniku krokowym nie uzyskasz.
  • REKLAMA
  • #3 10070249
    jasiek89
    Poziom 17  
    1. przy 200Hz 1200 obr/min? Skąd to wziąłeś? Wydaje mi sie że nie masz racji, ale to ja mogę sie mylić, jeśli w silniku mamy przeskok o kąt = 1,8* to potrzebujemy 200 razy podać sygnał na silnik żeby ten w ogóle wykonał obrót?
    2. Czy książeczka jest gdzieś zamieszczona? Chętnie i skrupulatnie bym sobie poczytał. :D
  • REKLAMA
  • #4 10071296
    michal.fita
    Poziom 15  
    Nie znam tego konkretnie przykładu, ale mogę doradzić jak zacząć zabawę z odpowiednim programem.

    Jeżeli udaje Ci się odczytywać w jakiejś pętli klawiaturę, to potrzebujesz przerobić tą pętle na funkcję, która wykonuje tylko jeden przebieg i zapamiętuje swój stan do następnego wywołania.

    W funkcji
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    umieścisz pętlę nieskończoną
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    a tam w pierwszym wierszu wywołanie swojej funkcji od obsługi klawiatury (najlepiej kompilowanej w osobnym pliku, deklaracja w pliku nagłówkowym .h).

    Teraz twój program powinien zachowywać się tak samo, jak oryginalny kod. Rozumiem, że zapalanie diodek jest równoważne z operacjami które chcesz przeprowadzić na sterowniku.

    Na początek proponuję napisać moduł, który w zależności od pewnego stanu (zmienna typu enum) będzie określoną diodką migał (np. przez PWM) i np. zmieniał częstotliwość tego migania. Tak nabierzesz wprawy w tym jak to robić.
    W tym module musisz mieć funkcję, którą wywołasz w swoim main(), odpowiedzialną za zmiany ustawień PWM'a i/lub timer'ów wołających przerwania timer'a. Ta funkcja musi mieć swoje wewnętrzne stany.

    W tym module umieścisz też funkcje, np.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    , która tylko zmieni odpowiednią flagę w twoim module sterującym (tu chodzi o nauczenie się zasady, żeby API modułów składało się tylko z funkcji i żeby nie tworzyć globalnych flag bez potrzeby).

    Jeżeli mój bełkot nie jest zbyt zrozumiały, to wklej jakiś swój kod i zrobimy omówienie wiersz po wierszu :-)
  • REKLAMA
  • #5 10072368
    janbernat
    Poziom 38  
    Pokaż te programy do klawiatury i do migania diodą.
    Wtedy można pomóc coś zmienić albo poprawić.
    A tak to co?
    Mamy napisać program i narysować schemat?
    Sterowanie silnikiem krokowym w układzie L298 i L297 jest dość proste.
    Dajesz co 1ms albo mniej impuls sterujący STEP i kierunek jako DIR- tam to jest CW/CCW.
    Wykorzystujesz do tego przerwanie od jakiegoś Timer-a.
    A w przerwaniu ustawiasz jedną końcówkę portu.
    A to co napisał mirekk36- to jest książka.
    Trzeba ją kupić i przeczytać.
    Wiem że wszystko jest w sieci.
    Ale szukanie w sieci wymaga czasu i wiedzy czego szukać.
    To jak na wysypisku śmieci.
    Doświadczony "nurek" szybko Ci dostarczy zamówiony towar za jakieś pieniądze.
    Ale jak chcesz szukać sam- to najpierw musisz sporo się nauczyć.
    Zobaczyłeś chociaż to:
    http://www.google.pl/url?sa=t&rct=j&q=l297%20...ZofvzL4cA&sig2=agIHG8_NhY7Ij6HC_LP7bw&cad=rja
    To wcale nie jest takie bez wysiłku- najpierw trzeba samemu coś napisać- bo tak to temat nieskończony- co to są przerwania, timery itp.
  • #6 10072523
    dondu
    Moderator na urlopie...
    jasiek89 napisał:
    2. Czy książeczka jest gdzieś zamieszczona? Chętnie i skrupulatnie bym sobie poczytał. :D

    Tak, książki są zamieszczane w: księgarniach

    Dobrze byłoby gdybyś załączył schemat swojego projektu, bo przy tego typu projekcie z silnikami, można wiele błędów popełnić, a później rwać włosy z głowy, czemu program dobry, a projekt nie działa jak trzeba. I tego akurat nie lekceważ.
REKLAMA