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

Attiny13 [BASCOM] - Joystick + ADC + Silnik krokowy

lukaszSZ999 12 Maj 2012 10:50 4665 20
  • #1 10887115
    lukaszSZ999
    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: text
    Zaloguj się, aby zobaczyć kod
  • #2 10887535
    Konto nie istnieje
    Konto nie istnieje  
  • #3 10890742
    lukaszSZ999
    Poziom 11  
    No faktycznie, zapomniałem dodać tej linijki. W programie chodzi o to by wychylenie silnika krokowego podążało za wychyleniem joysticka
  • #4 10892399
    Konto nie istnieje
    Konto nie istnieje  
  • #5 10892871
    lukaszSZ999
    Poziom 11  
    Dzięki za odpowiedź. Ale ten program nie pozwala na "śledzenie" przez silnik wychylenia joysticka, będzie jedynie kręcił się gdy wychyle joystick ze stałą prędkością non stop.

    http://www.youtube.com/watch?v=9i-VeXAZFq4 Najlepiej gdyby to tak pracowało ;) Niestety autor filmu nie posiada już tego programu
  • #6 10893825
    Konto nie istnieje
    Konto nie istnieje  
  • #7 10899210
    lukaszSZ999
    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.
  • #8 10899947
    janbernat
    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ć.
  • #9 10900273
    lukaszSZ999
    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: text
    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: text
    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.
  • #10 10901925
    Konto nie istnieje
    Konto nie istnieje  
  • #11 13150497
    adamschodowy
    Poziom 12  
    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.
  • #12 13151402
    ptero
    Poziom 24  
    A coś takiego trzeba dodać....

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

    Kod: text
    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 ? :





    Obroty silnika sterowane są tu potencjometrem. W razie czego mogę udostępnić kod.
    Pozdrawiam
  • #14 13846809
    bruno123456
    Poziom 10  
    Kolego SylwekK czy mogę prosić o ten kod?
  • #16 13976606
    shonasz
    Poziom 15  
    Można też udostępnić schemat połączeń ? Pozdrawiam
  • #17 13979354
    SylwekK
    Poziom 32  
    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ć.
  • #18 13980173
    Dawid 88
    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.
  • #19 13980240
    Konto nie istnieje
    Poziom 1  
  • #20 13980528
    shonasz
    Poziom 15  
    To jest ATTiny 13 to gdzie tam jest końcówka 28 i 14, 15 16,17 w procesorze?
  • #21 13980539
    SylwekK
    Poziom 32  
    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: text
    Zaloguj się, aby zobaczyć kod
REKLAMA