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

ATmega88 + uln2003 + silnik krokowy PM35L

D_Ogi 29 Kwi 2011 18:05 4592 9
REKLAMA
  • #1 9452052
    D_Ogi
    Poziom 10  
    Do włączenia silnika krokowego PM35L
    http://www.eminebea.com/content/html/en/motor_list/pm_motor/pdf/pm35l048.pdf
    http://www.eminebea.com/content/html/en/engin...otors/pm_motor/selection_pm/pdf/pm_select.pdf
    na ATmega88 z ULN2003 napisałem taki uproszczony kod

    #define F_CPU 1000000UL
    #include<avr/io.h>
    #include <util/delay.h>
    #define time 100 //przerwa w ms między wysłaniem kolejnych sygnałów, testowałem od 1 do 1000
    
    int main(void){
     
    	DDRC=0xff;
    	PORTC=0xff;
     
    	while(1){
    			 PORTC=0b00001001;
    			 _delay_ms(time);
    			 PORTC=0b00000101;
    			 _delay_ms(time);
    			 PORTC=0b00000110;
    			 _delay_ms(time);
    			 PORTC=0b00001010;
    			 _delay_ms(time);
                }
    }
    


    Schemat układu jest taki:
    ATmega88 + uln2003 + silnik krokowy PM35L
    z tym, że atmega ma podpięte avcc, kondensator 100nF itp. i
    ATMega88 PC0 <-uln2003-> A1 PM35L
    ATMega88 PC1 <-uln2003-> A3 PM35L
    ATMega88 PC2 <-uln2003-> B1 PM35L
    ATMega88 PC3 <-uln2003-> B3 PM35L

    Dlaczego to nie chce działać? Silniczek ani drgnie...
  • REKLAMA
  • #2 9452112
    piotrva
    VIP Zasłużony dla elektroda
    a czy to jest silnik 2 czy 4 fazowy?
    bo mnie się coś wydaje, że to jest 2 fazowy, a do tego ULN2xxx nie wystarczy, bo w 2 fazowych trzeba odwracać biegunowość na uzwojeniach...
    poza tym jakie są konkretne objawy tego nie działania?
  • #3 9452129
    D_Ogi
    Poziom 10  
    W datesheecie pisze 2-2 PHASES; z racji 5 pinów wydaje się być unipolarny.

    Objawów niedziałania nie ma, w ogóle się nie porusza, ani nie szumi. (Generalnie stawiam na błąd w kodzie).
  • REKLAMA
  • #4 9452186
    piotrva
    VIP Zasłużony dla elektroda
    Omomierz w dłoń i pomierz rezystancje między pinami silnika - będzie najszybciej
    a kod swoją drogą zły
    powinno być przy 4 fazowym:
    xxxx1000
    xxxx0100
    xxxx0010
    xxxx0001
    (tryb pełnych kroków)
    lub:
    1000
    1100
    0100
    0110
    0010
    0011
    0001
    1001
    (dla trybu pół-krokowego)
  • REKLAMA
  • #5 9452221
    Piotrek-787
    Poziom 15  
    Według programu silnik masz podłączony do 4 młodszych bitów portu C, a na schemacie masz podłączony do PC6, oraz 3 młodszych bitów portu D.
  • #6 9452656
    janbernat
    Poziom 38  
    Do wyjść ULN podłącz diody LED z opornikami w szereg- równolegle do uzwojeń.
    Bardzo to ułatwia sprawdzenie czy silnik jest prawidłowo sterowany.
  • REKLAMA
  • #7 9452703
    Szumlus
    Poziom 17  
    Witam,

    Proponuje "na sztywno" podłączyć sygnał sterujący do ULN. Przewodzik i 5V na wejścia. Podłączając kolejno wejścia do zasilnia silnik powinien się zacząć obracać, ewentualnie sprawdź czy silnik stawia "opór" podczas próby obrócenia osią jak podasz na stałe napięcie na jedno z wejść.
    Wykluczy kolega w ten sposób uszkodzenie ULN lub silnika.
    Pozdrawiam,
    Marcin
  • #8 9453985
    D_Ogi
    Poziom 10  
    piotrva napisał:
    Omomierz w dłoń i pomierz rezystancje między pinami silnika - będzie najszybciej

    Padł mi we wtorek miernik. Będę miał okazję, to kupię nowy, na razie to rozwiązanie odpada.
    piotrva napisał:
    a kod swoją drogą zły
    powinno być przy 4 fazowym:
    xxxx1000
    xxxx0100
    xxxx0010
    xxxx0001

    W takim jak rozumieć:
    ATmega88 + uln2003 + silnik krokowy PM35L
    z datesheet'a?
    Piotrek-787 napisał:
    Według programu silnik masz podłączony do 4 młodszych bitów portu C, a na schemacie masz podłączony do PC6, oraz 3 młodszych bitów portu D.

    Połączenia lekko zmieniłem względem tego schematu (np. podpiąłem avcc, przeniosłem piny na port C).
    Szumlus napisał:
    Proponuje "na sztywno" podłączyć sygnał sterujący do ULN. Przewodzik i 5V na wejścia.

    Dzięki temu sprawdziłem, że ULN i silnik są sprawne (silniczek stawia opór).

    janbernat napisał:
    Do wyjść ULN podłącz diody LED z opornikami w szereg- równolegle do uzwojeń.
    Bardzo to ułatwia sprawdzenie czy silnik jest prawidłowo sterowany.

    No i okazało się, że nie jest. Diody się nie świecą (zarówno między atmegą i ULN, jak i między ULN a silniczkiem). Dlatego prosiłbym o spojrzenie na mój kod. Na pewno jest dobry? (sekwencja sterująca nie ma znaczenia, żadna nie zapala mi ledów)
  • #9 9455390
    janbernat
    Poziom 38  
    Ta sekwencja którą podałeś nazywa się bodaj sterowanie falowe- jużdokładnie nie pamiętam.
    To co podał piotrva to jest sterowanie pełno- lub półkrokowe.
    Każde ma oczywiście swoje wady i zalety.
    Na początek proponuję uruchamiać w trybie pełnokrokowym- tak jak podał piotrva.
    Bo najprościej.
    A potem dopiero w innych trybach.
    Co do diod LED- anoda- dłuższa nóżka do 12V.
    Katoda do opornika ok.1kohm, drugi koniec opornika do wyjścia ULN.
    Potem po kolei wejścia ULN do +.
    Diody po kolei powinny się świecić.
    Jak je ułożysz na płytce stykowej w "kwadrat" to zobaczysz jak ma się kręcić silnik.
    Na czas tego sprawdzania silnik można odczepić.
    Koniecznie trzeba podpiąć oba piny GND w Atmedze.
    Teraz kod- zdefiniuj F_CPU raczej w opcjach projektu a nie w main.
    _delay() wpisz wprost- chociaż wygląda dobrze- tak na wszelki wypadek.
    I tak nie będziesz używał _delay() w prawdziwym programie tylko przerwania od timera.
    Diody LED można też podczepić do procesora- tylko przez oporniki ok.510ohm.
    Do tych wyjść które mają sterować ULN-em.
    Będzie negatyw- tylko jedna będzie gasła- ale to nie szkodzi.
    P.S.
    Mam chyba 12 mierników- z czego normalnie używam czterech.
    I rozglądam się jeszcze za jakimś.
    Jak można mieć tylko jeden miernik?
  • #10 9485048
    D_Ogi
    Poziom 10  
    Dzięki! Jesteście wspaniali :) Z miernikiem udało mi się zbudować układ od nowa, wg Waszych wskazówek. Śmiga jak miło!
REKLAMA