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

[Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC

bb84 29 Mar 2015 18:25 3159 34
  • #1 29 Mar 2015 18:25
    bb84
    Poziom 21  

    Witajcie,

    tytułem wstępu, stawiam pierwsze kroki w dziedzinie uC i programowania w języku C, niestety projekt jest jak na moje początki nieco skomplikowany, w szczególności kwestia ADC. W związku z tym gorąca prośba o sprawdzenie/doradzenie w kwestii aplikacji i programu.

    Przeznaczenie

    Dwukanałowy dozownik nawozów do miniaturowego akwarium. Ilości podawanego płynu z przedziału 1-5ml. Z wstępnych testów wynika, że na 1ml przypada około ¼ obrotu silnika, czyli 50 kroków. Sterowanie pełnokrokowe, prędkość nieistotna.

    Mechanika

    Składa się ona z silnika unipolarnego w standardzie NEMA 17 (kołnierz 42x42mm, oś 5mm, parametry 2.3V/1.2A, 200 kroków/obr.), który napędza bezpośrednio element z czterema obrotowymi wałkami złożonymi z dwóch łożysk kulkowych 3x10x4 każdy. Ten element dociska do obudowy jednocześnie dwa węże silikonowe 2/4mm.

    [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC

    Elektronika

    Tu pojawiają się pierwsze dylematy. Całość ma być mała i prosta. Z tego względu zastosowany będzie sterownik czasowy z minimalnym czasem pracy 60s, który przez zasilacz impulsowy 5V/2A zasili Attiny13 z kondensatorami 100uF i 100nF (?), silnik natomiast przez rezystor 5W ograniczający prąd. Na wejście ADC napięcie podawane ma być przez potencjometr 10k włączony między zasilanie, a masę. W zależności od ustawionego napięcia w przedziale 0-5V silnik wykonać ma odpowiednią liczbę kroków w przedziale około 0-250.

    [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC

    Tu pojawiają się niejasności:

    1. Czy zasilany w ten sposób uC (100uF + 100nF bez dodatkowego stabilizatora, wspólnie z silnikiem) będzie działał poprawnie/czy praca silnika nie będzie go zakłócać ?
    2. Po włączeniu zasilania program odczyta na wejściu ADC napięcie ustawione za pomocą potencjometru i w zależności od jego wielkości silnik wykona określoną liczbę kroków. Czy praca silnika może mieć w takim wypadku wpływ na działanie ADC/czy wykorzystanie ADC w tej formie będzie poprawne ?
    3. Zasilacz impulsowy w zależności od modelu i jakości wykonania może podawać od 4.5-5.5V, czy będzie to miało wpływ na pracę ADC ?
    4. Czy lepiej wykorzystać napięcie referencyjne 1.1V z Attiny13 i do potencjometru dołożyć dodatkowo dzielnik napięcia, aby z przedziału 0-5V (+/- 0.5V) uzyskać przedział 0-1.1V ?

    Oprogramowanie

    Postaram się stworzyć prosty program do wysterowania silnika i sprawdzenia jego pracy, później dojdzie zabawa z ADC …

    0 29
  • SterControl
  • #2 30 Mar 2015 08:56
    dondu
    Moderator Mikrokontrolery Projektowanie

    Ad 1. Ryzyko jest, choć wiele zależy tutaj od źródła zasilania i jego charakterystyk. Warto byłoby więc co najmniej filtr RC lub LC na zasilaniu uC zrobić - może nawet diodę w szereg dać i filtr RC za nią. Reszta to kwestia prób, bo ten mikrokontroler działa w dość szerokim zakresie napięć (zależnie od wersji). Niemniej jednak jakiś regulator LDO i pewność zasilania masz: http://mikrokontrolery.blogspot.com/2011/03/Regulatory-napiecia-stabilizatory.html

    Ad. 2. Może mieć wpływ tym bardziej, gdy nie planujesz regulatora napięcia na zasilaniu uC. Rozwiązanie jest proste - filtr programowy, sprzętowy (RC), a poza tym nie dokonuj pomiarów w trakcie działania silnika :)

    Ad 3. ADC nie mierzy napięcia jako takiego, tylko stosunek napięcia na wejściu pomiarowym i napięcia odniesienia. Jeżeli ustawisz napięcie odniesienia na Vcc, to ... tutaj pomyśl sam :)

    Ad 4. Odpowiedź zależna od Twoich wniosków z Ad 3.

    0
  • SterControl
  • #3 02 Kwi 2015 00:33
    bb84
    Poziom 21  

    Zdecydowałem się na zasilanie 12V (na R5 zamiast 3,25W wytraci się 11,65W, ale kilkadziesiąt sekund pracy na dobę to nie tragedia). Zanim przejdę do strony programowej jeszcze jedno drobne pytanie, na pin 8 VCC zwykło dawać się 100nF, a czy w przypadku jak poniżej, gdy stabilizator znajduje się tuż przy uC, wystarczy jeden wspólny dla uC i stabilizatora (to ten SMD przyklejony do mniejszego elektrolitu) ? czy uC jest aż tak wrażliwy ?

    [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC

    0
  • #4 02 Kwi 2015 09:13
    Wirnick
    Poziom 26  

    bb84 napisał:
    Zanim przejdę do strony programowej jeszcze jedno drobne pytanie, na pin 8 VCC zwykło dawać się 100nF, a czy w przypadku jak poniżej, gdy stabilizator znajduje się tuż przy uC, wystarczy jeden wspólny dla uC i stabilizatora (to ten SMD przyklejony do mniejszego elektrolitu) ? czy uC jest aż tak wrażliwy ?

    Tandem - elektrolit/ceramik - zwykło dawać w celu maskowania wad elementów przy pracy w szerokim zakresie częstotliwości. Np. tantal ma to w sobie.
    Filtracja zasilania to zupełnie odrębny złożony temat. Filtr musi składać się z elementów RLC. Przez dobór elementów wpływamy na stałą czasową filtra (RC, LC, RLC).
    W Twoim układzie największym generatorem zniekształceń zasilania będzie silnik.
    Dlatego proponuję dać kondensator dość znaczny po R5, by stała czasowa R5*C była jak największa - filtr dolnoprzepustowy.

    PS.
    Uwaga generalna - Gdy R = 0 || RL = 0 , to niema filtracji.

    0
  • #5 02 Kwi 2015 12:30
    dondu
    Moderator Mikrokontrolery Projektowanie

    bb84 napisał:
    czy uC jest aż tak wrażliwy ?

    To zależy od jego wykorzystania i oczekiwań.

    Generalnie Twój układ nie jest układem, w którym będziesz dokonywał pomiary ADC z 10-cio bitową rozdzielczością - zapewne ograniczysz się do 8 bitów. W takiej sytuacji można oczywiście pozwolić sobie na pewne ustępstwa. Należy także pamiętać, że kondensator 100nF przy każdym elemencie scalonym (a takim jest także regulator napięcia) ma na celu działanie w dwie strony:
    1. eliminować zakłócenia dochodzące po zasilaniu z zewnątrz,
    2. eliminować zakłócenia generowane na zasilaniu przez dany element scalony (tak, mikrokontroler także generuje zakłócenia), by nie przenosiły się na inne elementy.

    0
  • #6 02 Kwi 2015 14:54
    BlueDraco
    Specjalista - Mikrokontrolery

    uC będzie cały szczęśliwy w tym zastosowaniu nawet przy niezbyt dokładnie stabilizowanym zasilaniu w zakresie 3..5V. nie wiem, po co Ci te 12 V, skoro silnik jest na 5 V. Do pomiaru położenia potencjometru nie potrzebujesz dokładnej stabilizacji zasilania.

    0
  • #7 02 Kwi 2015 23:03
    bb84
    Poziom 21  

    @BlueDraco

    Na taką odpowiedź po cichu liczyłem ;) Układ chciałem zasilić z 12V, żeby w przyszłości puścić oświetlenie i ogrzewanie z jednego zasilacza i sterownika czasowego, ale sobie w ostateczności odpuściłem.

    Uprościłem układ do granic możliwości. Całość docelowo zostanie puszczona na zasilaczu impulsowym 5V/3A. TIP122 zamieniłem na ULN2803 z połączonymi w pary wejściami i wyjściami, co powinno zapewnić 1A na fazę i umożliwić sterowanie pełnokrokowe dwufazowe lub półkrokowe (2A dla ULN2803 to pewnie sporo, ale w AVT1525 jakoś się udało). W celu ograniczenia prądu każdej fazy dałem dwa osobne rezystory 5W. Zasilanie uC bardzo skromne, 10uF i 100nF, obydwa w SMD, za to dotykają wyprowadzenia VCC ;) Może być ?

    [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC

    0
  • #8 03 Kwi 2015 16:10
    emarcus
    Poziom 34  

    bb84 napisał:
    @BlueDraco


    Uprościłem układ do granic możliwości. Całość docelowo zostanie puszczona na zasilaczu impulsowym 5V/3A. TIP122 zamieniłem na ULN2803 z połączonymi w pary wejściami i wyjściami, co powinno zapewnić 1A na fazę i umożliwić sterowanie pełnokrokowe dwufazowe lub półkrokowe (2A dla ULN2803 to pewnie sporo, ale w AVT1525 jakoś się udało). W celu ograniczenia prądu każdej fazy dałem dwa osobne rezystory 5W. Zasilanie uC bardzo skromne, 10uF i 100nF, obydwa w SMD, za to dotykają wyprowadzenia VCC ;) Może być ?


    To nie jest uprostszenie układu.
    Podmiana TIP122 na ULN nie wprowadziła tu wiele.
    Owszem, masz ogólnie mniejszą ilośc elementów..., zaniżając jednocześnie dopuszczalną obciążalnośc układu maxymalnie do 1A (lub praktycznie poniżej), w porównaniu 5A przy TIP.
    Jeżeli masz silnik unipolarny, to niezależnie jak go będziesz pulsował (pełny krok lub pół kroku), to pozostanie on czterofazowy. O konfiguracji dwufazowej możesz mówic jeżeli masz możliwośc przełączenia tego silnika na typ bipolarny, ale wtedy zasilanie wymaga podwójnego mostka H.

    Cel i potrzeba stosowania rezystorów włączonych szeregowo w zasilaniu cewek...
    Temat jest dośc szeroki i wybiega poza zakres tego wątka, niemniej jednak drobna uwaga...
    Jest bez znaczenia jak wielkiej mocy wstawisz tam rezystor 5 W, 20W; etc), liczy się jego rezystancja mierzona w Omach,.
    Jeżeli silnik (p. datasheet) jest 5-voltowy i zasilasz go również 5 Voltami to nie masz żadnego powodu stosowania dodatkowych rezystorów szeregowych. Nie poprawi to żadnych jego parametrów na których mogłoby ci zależec w tym projekcie.

    e marcus

    0
  • #9 03 Kwi 2015 16:30
    bb84
    Poziom 21  

    @emarcus

    Rzeczywiście ULN będzie pracował na granicy swoich możliwości, wracam więc do TIPów.

    Co do faz, nazewnictwo różni się w zależności od literatury http://perform.pl/index.php?strona=abecadlo&podstrona=stepper

    Parametry silnika to 2.3V/1.2A, więc zastosowanie rezystorów wydaje się być uzasadnione.

    [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC

    0
  • #11 03 Kwi 2015 20:53
    emarcus
    Poziom 34  

    bb84 napisał:


    Rzeczywiście ULN będzie pracował na granicy swoich możliwości, wracam więc do TIPów.


    Moje referencje do ULN, odnosiły się do przedstawionego wyżej ULN2803.
    Nie są to jedyne dostępne w handlu...
    Zainteresowałbym się na przykład 1.5A (max 1.75A) z wbudowanymi diodami:
    ULN2064B/LB
    ULN2065B/LB
    ULN2068B/LB
    ULN2069B/LB
    albo ewentualnie bardziej rozbudowany układ z ograniczeniiem prądu przy zasilaniu silnika pdwyższonym napięciem:
    ULN2075B - (bez diod; wymagane będzie zamontowac własne; wszak masz obciążenie indukcyjne), oraz dodatkowo L6506 układ kontrolujący maxymalny prąd w cewkach silnika.
    Wydaje mi się że dla tak ważnego projektu, ta ostatnia alternatywa byłaby zbytnim przerostem i zamontowanie rezystorów w szerg z cewkami może byc dostatecznym rozwiązaniem.
    Wartości rezystorów byłyby dobrane wg:

    [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC[/url]

    e marcus

    0
  • #12 03 Kwi 2015 22:19
    bb84
    Poziom 21  

    @dondu

    Jeśli mosfety to przy 5V raczej logic level.

    @emarcus

    Układ ma być jak najprostszy, więc połączenie Attiny13, darlingtonów i ADC do kontroli ilości kroków wydaje mi się optymalne, ważne, żeby zmieścić się na PCB o wymiarach 42x42mm. Rezystory są niezbędne, ponieważ bez nich uzwojenie pobiera aż 1.9A. Najprostsze sterowniki liniowe wykorzystywały właśnie takie rozwiązanie, po jednym rezystorze na fazę i sterowanie pełnokrokowe lub półkrokowe. W moim układzie dwa rezystory 5W w razie awarii obecnego silnika (mało prawdopodobne) pozwolą zastosować dowolny unipolarny sześcioprzewodowy (lub ośmioprzewodowy) z przedziału 2-5V/0-1.5A (tanie i łatwo dostępne). Jeszcze drobna niejasność, diody na powyższym schemacie połączone są z napięciem zasilającym przed rezystorami ograniczającymi prąd, czy tak jest prawidłowo, czy powinny być podłączone parami za rezystorami, czy obojętnie ?

    Korzystając jeszcze z okazji zapytam, jeśli silnik sześcioprzewodowy podane ma na obudowie parametry np. 3A/2.1V/1.3Nm (lub tak podaje sprzedawca, a datasheet nie ma) wartość prądu dotyczy jednej fazy, a moment podany jest dla sterowania dwufazowego pełnokrokowego w konfiguracji unipolarnej ?

    Przykład http://www.akcesoria-cnc.pl/?menu=produkt&id=1232

    EDIT: Dla zobrazowania jak rozwiązanie wyglądać ma od strony montażowej http://www.konstant.in/?p=535

    EDIT: Finalna wersja z otworami w rozstawie 31mm.

    [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC

    0
  • #13 06 Kwi 2015 06:47
    emarcus
    Poziom 34  

    bb84 napisał:
    [

    Rezystory są niezbędne, ponieważ bez nich uzwojenie pobiera aż 1.9A. Najprostsze sterowniki liniowe wykorzystywały właśnie takie rozwiązanie, ...



    Nie jest to bynajmniej ostateczne i jedyne rozwizanie..
    Istnieje możliwośc zasilania pulsującego PWM - twój processor (timer0) ma możliwośc generowania takiej fali i zamiast podawac sygnał ciągły na bazy tranzystorów wysterujesz je sygnałem PWM z dobranym wcześniej wypełnieniem.

    Cytat:

    Jeszcze drobna niejasność, diody na powyższym schemacie połączone są z napięciem zasilającym przed rezystorami ograniczającymi prąd, czy tak jest prawidłowo, czy powinny być podłączone parami za rezystorami, czy obojętni

    Zastanów się, jaką rolę spełniają te diody?
    Jeżeli twój silnik jest 6-przewodowy ('center tap' albo zwany 'common', gdzie przewody są wyprowadzone na zewnątrz oddzielnie z każdych cewek) to rezystory możesz zamontowac na tych przewodach, które i tak są podłączone do (V+) zasilania. Wtedy wystarczy dwa rezystory. Diody będą włączone równolegle do cewek ( ich połówek).
    Jeżeli jednaj silnik jest w wersji 5- przewodów (oba przewody C-T są zwarte wewnątrz silnika), wtedy wymagane będzie włączenie 4-ch rezystorów (z drugiej strony każdej cewki).
    8-przewodowy jest to samo co 6 -(wszystkie końce połówek wyprowadzone na zewnątrz). Daje to jednak możliwośc włączenia cewek w konfiguracji równolegle.

    Cytat:

    Korzystając jeszcze z okazji zapytam, jeśli silnik sześcioprzewodowy podane ma na obudowie parametry np. 3A/2.1V/1.3Nm (lub tak podaje sprzedawca, a datasheet nie ma) wartość prądu dotyczy jednej fazy, a moment podany jest dla sterowania dwufazowego pełnokrokowego w konfiguracji unipolarnej?


    Dokładne informacje zawiera zazwyczaj datasheet. W przypadku jego braku, to parametry jego pracy wypisane na obudowie odnoszą się raczej do konfiguracji jako silnik unipolarny.
    Możesz przecież zmierzyc rezystancję cewki i porównac z tym co na obudowie (zwykle jest to rezystancja połówki cewki)...
    Podłączenie w konfiguracji bipolarnej pozwala na podwyższenie napięcia zasilania o około 40% i analogiczny wzrost momentu.

    e marcus

    0
  • #14 06 Kwi 2015 23:24
    bb84
    Poziom 21  

    emarcus napisał:
    Nie jest to bynajmniej ostateczne i jedyne rozwizanie..
    Istnieje możliwośc zasilania pulsującego PWM - twój processor (timer0) ma możliwośc generowania takiej fali i zamiast podawac sygnał ciągły na bazy tranzystorów wysterujesz je sygnałem PWM z dobranym wcześniej wypełnieniem.


    Zgadza się, zwracam jednak uwagę na liczbę portów w Attiny13, 4 wyjścia sterujące, 1 wejście ADC, pozostaje reset, a prąd należałoby w jakiś sposób kontrolować np. poprzez pomiar spadku napięcia na rezystorze i mieć dodatkowo możliwość jego ustawienia, więc brakuje jednego portu. Przy rezystancyjnym ograniczeniu prądowym straty wynoszą 6-9W w zależności od silnika (2-5V/1-1.5A), dwa rezystory 5W załatwiają sprawę. Czy korzyści z wykorzystania PWM będą wymierne ?

    emarcus napisał:
    Zastanów się, jaką rolę spełniają te diody?
    Jeżeli twój silnik jest 6-przewodowy ('center tap' albo zwany 'common', gdzie przewody są wyprowadzone na zewnątrz oddzielnie z każdych cewek) to rezystory możesz zamontowac na tych przewodach, które i tak są podłączone do (V+) zasilania. Wtedy wystarczy dwa rezystory. Diody będą włączone równolegle do cewek ( ich połówek).
    Jeżeli jednaj silnik jest w wersji 5- przewodów (oba przewody C-T są zwarte wewnątrz silnika), wtedy wymagane będzie włączenie 4-ch rezystorów (z drugiej strony każdej cewki).
    8-przewodowy jest to samo co 6 -(wszystkie końce połówek wyprowadzone na zewnątrz). Daje to jednak możliwośc włączenia cewek w konfiguracji równolegle.


    Zamieszczę rysunek dla zilustrowania problemu.

    [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC

    Normalnie wpinamy się z rezystorem ograniczającym pomiędzy zasilanie, a cewki z włączonymi równolegle diodami (rysunek po lewej), widziałem również rozwiązania z diodami wpiętymi do zasilania przez osobny rezystor. Można wpiąć się rezystorem między tranzystory, a masę (rysunek po prawej), pytanie dotyczyło jednak sytuacji jak na rysunku środkowym, gdy przepięcia krążą w obiegu diody, cewki i rezystora ograniczającego, czy tak też można i co to ewentualnie spowoduje ?

    A teraz pytanie odnośnie "górnych" diod. Czy są one w tym układzie w ogóle potrzebne ? najczęściej stosuje się je w układach z chopperem, z wysokim napięciem, wysokimi obrotami i np. w linistepper ich nie ma http://www.piclist.com/techref/io/stepper/linistep/lini_wks.htm
    Tu podobne twierdzenie, a nawet negujące takie rozwiązanie http://www.opend.co.za/tutorials/steptut1.htm
    Z literatury internetu wynika, że niezbędne są diody między kolektorem, a emiterem, a takowe TIP122 posiada.

    Jeszcze odnośnie uC, czy ewentualne przepięcia nie uszkodzą tak czułego układu ? jak się przed tym zabezpieczyć ?

    EDIT: Wersja ostateczna, dołożony stabilizator 1117 3.3V i usunięte górne diody.

    [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC [Attiny13][C] - Dwukanałowy dozownik nawozów - zasilanie i ADC

    0
  • #15 25 Lis 2015 17:12
    bb84
    Poziom 21  

    Po dłuższej przerwie podjąłem próbę napisania dwóch programów.

    Pierwszy stepper.c do przetestowania działania silnika i programatora, silnik ma się kręcić cały czas:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Drugi (docelowy) peristaltic.c, który mnoży wynik z ADC przez stepper_motor, silnik ma wykonać odpowiednią ilość kroków (przykładowo dla ADC=1023 będzie to 4092 kroki) i się zatrzymać:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Czy te programy mają prawo działać zgodnie z założeniami ? ogromna prośba o ewentualne nakierowanie/skorygowanie ...

    0
  • #16 25 Lis 2015 19:43
    BlueDraco
    Specjalista - Mikrokontrolery

    Obawiam się, że pomnożenie wartości odczytanej z ADC pustą wartość funkcji wykonującej 4 kroki silnika w celu zapomnienia wyniku tego działania nie jest tym, o co Ci chodziło.

    Kiedy piszesz i kompilujesz kod, usuwaj przyczyny wszelkich ostrzeżeń, które wypisuje kompilator - ma ich nie być wcale.

    0
  • #17 25 Lis 2015 20:15
    bb84
    Poziom 21  

    BlueDraco napisał:
    Obawiam się, że pomnożenie wartości odczytanej z ADC pustą wartość funkcji wykonującej 4 kroki silnika w celu zapomnienia wyniku tego działania nie jest tym, o co Ci chodziło.


    Prosiłbym ciut jaśniej.

    Może w ten sposób ?:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pytanie dodatkowe, czy program nie wyłoży się w przypadku mnożenia stepper_motor(); przez 0 ?

    EDIT: komunikat Atmel Studio :
    Build succeeded.
    ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

    0
  • #18 26 Lis 2015 16:28
    2675900
    Użytkownik usunął konto  
  • #19 26 Lis 2015 16:47
    BlueDraco
    Specjalista - Mikrokontrolery

    Jaśniej: funkcja stepper_motor() jest typu void. Co pisze kompilator, kiedy próbujesz pomnożyć wartość funkcji typu void (czyli nie zwracającej wartości) przez liczbę?

    W jakim celu miałbyś wykonać to mnożenie?

    Jeśli chcesz wywołać funkcję n razy, to musisz to zrobić w pętli - to są podstawy języka C lub jakiegokolwiek innego.

    0
  • #20 26 Lis 2015 17:09
    2675900
    Użytkownik usunął konto  
  • #21 26 Lis 2015 19:12
    bb84
    Poziom 21  

    Piotrus_999 napisał:
    A dlaczego w funkcji inicjalizacji ADC starujesz konwersję i czekasz na jej zrobienie. . Nie jest we free running mode jak widzę (choć dziś juz programuje z 8 godzinę). Tak ze raz przeksztalci i koniec.


    ADC jest w single conversion, po włączeniu zasilania uC ma odczytać nastawę potencjometru z zakresu 0-5V, przekształcić ją na wartość 10 bit i wykonać program (cztery kroki silnika - ABCD) 0-1023 razy, po czym stop. Zewnętrzny programator czasowy odłącza całość od zasilania i po ponownym włączeniu uC wykonuje proces od nowa.

    Przyznaję, projekt dla mnie trudny, jednak muszę go dokończyć. W kwestii wykonania odpowiedniej ilości kroków w zależności od nastawy potencjometru nie znalazłem punktu zaczepienia (kodu), na którym mógłbym się oprzeć.

    EDIT: Program stepper.c z F_CPU 1200000UL działa poprawnie, jednak brakuje mocy i niezbędne jest sterowanie pełnokrokowe dwufazowe.

    0
  • #22 26 Lis 2015 22:38
    2675900
    Użytkownik usunął konto  
  • #23 26 Lis 2015 23:36
    bb84
    Poziom 21  

    Piotrus_999 napisał:
    to troche dziwne. Czyli uzytkownik na chybił trafił ustawia potencjometr, właczasz urzadzenie, cos sie dozuje (jak potracisz potencjpometr paluchem to się wsypie np max). Ja bym to zrobil inaczej - dodalbym klawisz. Dopiero po nacisnieciu jego powinno zadziałać - masz spokojne mozliwość sprawdzenia czy wszystko jest ok. Mozesz dodać ledy zeby było widać jakie są ustawienia (led bat na ten przyklad|)


    To wygląda nieco inaczej. Dozownik składa się z silnika, głowicy perystaltycznej i płytki sterującej o wymiarach 42x42mm (silnik NEMA17) przykręconej do silnika. Zastosowany potencjometr 10-obrotowy (montażowy) ustawiany jest tylko raz, tak, aby dozownik codziennie podawał określoną, stałą ilość nawozów (włączanie programatorem czasowym). Kalibracja polega na ustawieniu potencjometru w odpowiednim położeniu, włączeniu urządzenia, pomiarze ilości podanego płynu przy pomocy precyzyjnego pojemnika z podziałką i ewentualnie skorygowaniu ustawienia potencjometru. Ze względu na wymiary i prostotę zastosowałem ATtiny13, wyświetlacze, przyciski, LEDy są w tym zastosowaniu zbędne, a potencjometru nikt nie przestawi. Z wyliczeń wyszło, że na jeden obrót głowicy (200 kroków lub 50 * program stepper_motor) przypada około 0.22ml. Dzieląc to przez 50 i mnożąc razy 1023 otrzymujemy dawkę płynu z zakresu 0-4.5ml.

    W programie stepper.c zmieniłem sposób sterowania silnikiem na półkrok z odstępami czasowymi 5ms. Jeden obrót trwa 2s, czyli dawkę 4.5ml można podać w około 40s. Głowica pracuje płynnie, a mocy nie brakuje.

    Działający program wygląda następująco:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #24 27 Lis 2015 00:14
    2675900
    Użytkownik usunął konto  
  • #25 27 Lis 2015 03:27
    bb84
    Poziom 21  

    Ożyło. Wielkie dzięki za naprowadzenie. Końcowe pytanie, czy podział przez 8 fabrycznie ustawionego na 9.6MHz zegara dotyczy również ADC ? czy prescaler ustawić na 128 (dla 9.6MHz/128) czy na 16 (9.6MHz/8/16) dla uzyskania 75kHz ?

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #26 27 Lis 2015 09:18
    2675900
    Użytkownik usunął konto  
  • #27 27 Lis 2015 12:36
    bb84
    Poziom 21  

    Piotrus_999 napisał:
    Zobacz w nocie apliacyjnej procka jaki jest optymalny zegar dla adc i taki nastaw.

    Jezeli jest tak jak w attiny88 to powinien byc w zakresie 50-200kHz


    W nocie jest 50-200kHz i prescaler ustawiłem na 128 dla 75kHz, jednak fabrycznie zegar ustawiony jest na 9.6MHz/8, porty i opóźnienia widzą zegar 1.2MHz. Nie wiem czy ADC widzi zegar 9.6MHz i zostawić podział prescalerem przez 128 czy 9.6Mhz/8 i zrobić podział prescalerem przez 16.

    0
  • #28 27 Lis 2015 12:39
    2675900
    Użytkownik usunął konto  
  • #29 28 Lis 2015 07:25
    emarcus
    Poziom 34  

    Piotrus_999 napisał:
    to zmien fusy, - tzn wylacz podzielnik przez 8. zegar jest ten sam dla wszystkich


    Po co?; Co w ten sposób poprawi?

    Przecież przy taktowaniu processora 1.2 MHz mozna spokojnie dobrac parametry i mierzyc ADC, a także wysterowac kazdy dowolny stepper dla tego projektu.

    e marcus

    0
  • #30 28 Lis 2015 14:37
    bb84
    Poziom 21  

    Zostawiłem fabryczny 1.2MHz (9.6MHz/8) i zmieniłem prescaler na 8 dla 150kHz.

    Ostatecznie wygląda to tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0