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

Attiny13 [BASCOM] - Joystick + ADC + Silnik krokowy

12 Maj 2012 10:50 4230 20
  • Poziom 11  
    Witam

    Na początku chce poinformować że to moja pierwsza zabawa z programowaniem AVR. Napisałem, lub przynajmniej starałem sie napisać program który miałby odczytywać położenie joysticka za pomocą ADC a następnie wychylenie zamieniać na obrót silnika krokowego o pewną ilość kroków z zależności od wychylenia joysticka.
    Proszę aby ktoś spojrzał i powiedział czy to ma sens.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Poziom 11  
    No faktycznie, zapomniałem dodać tej linijki. W programie chodzi o to by wychylenie silnika krokowego podążało za wychyleniem joysticka
  • Użytkownik usunął konto  
  • Użytkownik usunął konto  
  • Poziom 11  
    Nie nie;) Powtórzę jeszcze raz. Silnik krokowy ma wykonać obrót o pewien kąt którego miara będzie zależna od wychylenia joysticka. Np wychylam powoli joystick w prawo do oporu a silnik robi obrót o 360 w prawo. Wracając joystickiem do pozycji jałowej silnik robi obrót o 360 w lewo. Analogicznie dla wychylenia w lewo ;) Z tym że jeśli wychylenie joysticka będzie mniejsze automatycznie silnik kręci się o mniejszy kąt.
  • Poziom 38  
    Musisz mieć licznik kroków.
    I dopasować go do sygnału z ADC.
    I jeśli sygnał z ADC jest większy niż ten licznik to silnik ma wykonać jeden krok w prawo a jeśli mniejszy to jeden krok w lewo.
    Swoją drogą to jest typowe zadanie dla serwa modelarskiego a nie dla silnika krokowego.
    Ale na silniku krokowym da się to zrobić.
  • Poziom 11  
    Właśnie zacząłem trochę czytać o serwach i doszedłem do wniosku że to rozwiązanie bardziej mi odpowiada.

    Teraz tak - jest sobie taki program:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod



    Co jest wyznacznikiem czasu pomiędzy impulsami sterującymi serwo? Chciałbym aby czas między impulsami wynosił 20ms. Gdzie to ustawić?

    Dodano po 31 [minuty]:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Czy taki program pozwoli ma na sterowanie długością impulsów z przedziału 900us do 1900us (dokładnie 1923)?? Myślę że jest to zakres standardowy dla serwomechanizmów.
  • Użytkownik usunął konto  
  • Poziom 11  
    Panowie, jakim cudem mieści się Wam ten kod w procku?
    w attiny13 przy 2 zmiennych Byte kompilator wywala "Out of SRAM space", tutaj już przy jednej typu Word.
  • Poziom 15  
    A coś takiego trzeba dodać....

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Poziom 30  
    A jakbyś napawdę sporo zmiennych miał to można wpisać jeszcze inne wartości:
    (to fragment działającego programu)

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Przy okazji, nie wiem czy autor już rozwiązał swój problem, ale czy przypadkiem nie o coś podobnego chodziło ? :


    Link


    Obroty silnika sterowane są tu potencjometrem. W razie czego mogę udostępnić kod.
    Pozdrawiam
  • Poziom 9  
    Kolego SylwekK czy mogę prosić o ten kod?
  • Poziom 15  
    Można też udostępnić schemat połączeń ? Pozdrawiam
  • Poziom 30  
    Schematu do tego fragmentu nie mam - montowane z pamięci na stykówce. Do końcówki 28 procesora podepnij środek potencjometru 10-100k, a jego zewnętrzne styki jeden do plus 5V drugi do masy. Końcówki 14-15 procesora to sterowanie pierwszym uzwojeniem silnika krokowego BIPOLARNEGO, a 16-17 drugie uzwojenie. Oczywiście piny te należy podpiąć pod w zasadzie dowolny mostek H, który jest driverem silnika i od niego zależy jak duży silnik (w sensie obciążenia) można podłączyć.
  • Poziom 14  
    A co jeśli silnik zgubi krok? Program będzie myślał że silnik ma kąt np 360* a tak naprawdę będzie to np 350* i w tedy przy wysterowaniu na 0* silnik będzie obrócony o -10*. Przy obciążeniu silnika i szybkim obrocie nie trudno o zgubienie kroku.
  • Poziom 1  
  • Poziom 15  
    To jest ATTiny 13 to gdzie tam jest końcówka 28 i 14, 15 16,17 w procesorze?
  • Poziom 30  
    Poprzednik mnie uprzedził :) Poza tym jak przeanalizujesz mój program to sam zobaczysz, że mimo szybkich zmian na wejściu silnik będzie podążał za potencjometrem "z rezerwą". Właśnie po to jest tam zmienna doganiająca (tak ją kiedyś ochrzciłem ze względu na jej charakter), która ma za zadanie izolować (będzie się zmieniać płynnie z ustalonym opóźnieniem) bezpośredni odczyt potencjometru od właściwej pozycji silnika - jej nazwa w programie to "Pozycja".

    @schonasz - zwróć jeszcze uwagę na drobny szczegół w moim programie:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod