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

[Atmega16]Sterownik silnika krokowego nie chce działać

Student_Bartosh 19 Lip 2011 14:44 3485 25
  • #1 19 Lip 2011 14:44
    Student_Bartosh
    Poziom 9  

    Witam,


    Wykonałem na module uruchomieniowym Atmega ver. 2 sterownik do dwóch unipolarnych silników krokowych. Na porcie A Atmegi podpiąłem mikrostyki, port B połączyłem z układem ULN2803, wyjścia ULN2803 podpiąłem do silników krokowych.

    Kiedy naciskałem mikrostyk, na port B wyprowadzana była sekwencja, która obracała silnikiem krokowym do momentu zwolnienia przycisku. Zaprogramowałem tak cztery przyciski, odpowiednio lewo/prawo dla każdego silnika krokowego.

    Wszystko działało. Program zamieszczam poniżej, może komuś się przyda.

    Code:

    .include"m32def.inc"
    .cseg
    .org 0

    .def acc=r16
    .def delay=r17
    .def delay1=r18
    .def delay2=r19


    ldi acc,HIGH(RAMEND) ; Definicja stosu
    out SPH,acc
    ldi acc,LOW(RAMEND)
    out SPL,acc


    Main:
    ldi acc,0b00000000   
    out DDRA,acc       ;wszystkie bity jako wejscie
    ldi acc,0b11111111 
    out PORTA,acc     ;wszystkie wejscia w stanie wysokim
    out DDRB, acc       ;wszystkie bity jako wyjscia
    ldi acc,0b11111111   ;wszystkie diody wylaczone
    out PORTB,acc


    Odczyt:
    in acc, pina

    sbrs acc, 7
      rjmp kombinacja1
    sbrs acc, 6
      rjmp kombinacja2
    sbrs acc, 5
      rjmp kombinacja3
    sbrs acc, 4
      rjmp kombinacja4
      ldi acc,0b11111111   ;wszystkie diody wylaczone

    out PORTB,acc
    rjmp Odczyt   


    Kombinacja1:
        ldi acc,0b01101111
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b11001111
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b10011111
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b00111111
       out PORTB,acc
       ldi delay,0x01
       rcall delayms

    rjmp odczyt

    Kombinacja2:

       ldi acc,0b00111111
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b10011111
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b11001111
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b01101111
       out PORTB,acc
       ldi delay,0x01
       rcall delayms

    rjmp Odczyt

    Kombinacja3:

       ldi acc,0b11110110
       out PORTB,acc
       ldi delay,0x01




       rcall delayms
       ldi acc,0b11111100
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b11111001
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b11110011
       out PORTB,acc
       ldi delay,0x01
       rcall delayms

    rjmp Odczyt

    Kombinacja4:

        ldi acc,0b11110011
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b11111001
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b11111100
       out PORTB,acc
       ldi delay,0x01
       rcall delayms
       ldi acc,0b11110110
       out PORTB,acc
       ldi delay,0x01
       rcall delayms

    rjmp Odczyt

    delayms:      ;poczatek podprogramu
    ldi delay1,0xee
    dloop2:
    ldi delay2,0xdd   ;wykonanie petli 255 razy
    dloop1:
    dec delay2   ;t=1/fx255
    brne dloop1
    dec delay1      ;t=1/fx255x255
    brne dloop2
    dec delay
    brne delayms
    ret


    Problem pojawił się w miejscu, kiedy chciałem przenieść wszystko na płytkę uniwersalną. Układ składa się z zasilacza 12V 1.25A, Atmegi16, dwóch ULN2803 i stabilizatora napięcia LM7805. Po naciśnięciu mikrostyku nic się nie dzieje :( Poniżej zamieszczam obrazek wykonanych połączeń.

    [Atmega16]Sterownik silnika krokowego nie chce działać

    Wydawało mi się, że wszystko jest OK, ale skoro nie działa to gdzieś musiałem popełnić błąd. Zmierzone napięcie z LM7805 do Vcc i AVcc Atmegi16 wynosi 4,8V.
    Może gdzieś nie chce stykać kabelek? Może przenieść od razu to wszystko na płytkę uniwersalną?

    0 25
  • #2 19 Lip 2011 15:00
    Slkkk
    Poziom 14  

    Spowolnij procedurę delay, aby miernik nadążał mierzyć zmieniające się napięcie na wejściach ULN-ów, i posprawdzaj miernikiem, czy dostają one prawidłowe sygnały na wejście oraz czy na wyjściach pojawia się to co trzeba.

    0
  • #3 19 Lip 2011 15:45
    janbernat
    Poziom 38  

    A gdzie jest doprowadzone zasilanie silników?
    ULN ma wyjście otwarty kolektor- spuści prąd do masy przez uzwojenie silnika- ale z drugiej strony uzwojenia musi mieć napięcie.

    0
  • #4 19 Lip 2011 16:33
    Student_Bartosh
    Poziom 9  

    Slkkk napisał:
    Spowolnij procedurę delay, aby miernik nadążał mierzyć zmieniające się napięcie na wejściach ULN-ów, i posprawdzaj miernikiem, czy dostają one prawidłowe sygnały na wejście oraz czy na wyjściach pojawia się to co trzeba.


    Spowolniłem procedurę delay, na diodach widać teraz, że jeden krok trwa około 1 sekundy. Sprawdziłem na module uruchomieniowym, ale tylko napięcie wyjściowe na ULN2803. Dla spowolnionej procedury delay wynosi ono 0,6V kiedy przycisk nie jest wciśnięty i 1,4-1,6V dla przycisku wciśniętego. Dla normalnej procedury, kiedy nie jest nic wciśnięte na wyj ULN2803 też jest 0,6V i 1,4-1,6V dla wciśniętego przycisku. Dodam jeszcze, że silnik krokowy nie był podpięty. To było sprawdzenie na sucho.

    Przeniosłem procesor na makietę. Sytuacja jakby odwrotna. Kiedy przycisk wciśnięty to napięcie na wyj ULN2803 wynosi około 1,6V a czasem nawet więcej, 2,0V. Kiedy zwalniam przycisk to napięcie na wyj ULN2803 wynosi 0,2V. Też sprawdzałem bez silnika krokowego podpiętego. Wygląda na to, że jest odwrócona logika.

    Zauważyłem jeszcze coś ciekawego. Dla spowolnionej procedury każde wyście ma takie same napięcie wyjściowe. Czyżby brakowało rezonatora kwarcowego?

    Dodano po 1 [minuty]:

    janbernat napisał:
    A gdzie jest doprowadzone zasilanie silników?


    Oczywiście, zapomniałem dodać. Silniki biorą napięcie z zasilacza z miejsca oznaczonego na rysunku jako "+12V".

    0
  • #5 19 Lip 2011 16:56
    Slkkk
    Poziom 14  

    Student_Bartosh napisał:

    Przeniosłem procesor na makietę.


    To znaczy, że wyjąłeś go z zestawu uruchomieniowego i włożyłeś na swojej płytce? Jeśli tak, to prawie na pewno to nie zadziała, gdyż w zestawie zapewne jest kwarc i procesor jest ustawiony tak, że go używa.

    0
  • #6 19 Lip 2011 17:11
    janbernat
    Poziom 38  

    Jeżeli jest to silnik bipolarny z czterema wyprowadzeniami to ULN go nie wysteruje.
    Jezeli ma 5 albo 6 wyprowadzeń to tak.
    Po prostu włącza się go jako unipolarny.
    Sprawdzając przedtem jaki jest prąd uzwojeń.

    0
  • #7 19 Lip 2011 17:25
    Student_Bartosh
    Poziom 9  

    Slkkk napisał:
    Student_Bartosh napisał:

    Przeniosłem procesor na makietę.


    To znaczy, że wyjąłeś go z zestawu uruchomieniowego i włożyłeś na swojej płytce? Jeśli tak, to prawie na pewno to nie zadziała, gdyż w zestawie zapewne jest kwarc i procesor jest ustawiony tak, że go używa.


    Hmmm... Czyli mam rozumieć, że teraz trzeba dokupić do układu generator (rezonator?) kwarcowy. Z dokumentacji wyczytałem, że Atmega16 pracuje maksymalnie z 16 Mhz. Na module uruchomieniowym napisane jest "16.000", o ile dobrze mi sie wydaje, że to kwarc jest.

    0
  • #8 19 Lip 2011 17:34
    Slkkk
    Poziom 14  

    Nie trzeba, odpowiednio ustawiając fuse bity można włączyć w mikrokontrolerze wewnętrzny generator, np. 8 MHz. O tym jak podłączać mikrokontroler (bo do pełnej zgodności ze sztuką brakuje jeszcze kondensatorów i podciągnięcia resetu do 5 V) i ustawiać fuse bity poszukaj na forum.

    0
  • #9 19 Lip 2011 19:05
    Student_Bartosh
    Poziom 9  

    Fuse bitów nie ustawie, nie mam programatora :(
    Dzięki za wskazówkę odnośnie podłączenia mikrokontrolera. Nie spodziewałem się, że jeszcze może czegoś brakować.

    Dodano po 1 [godziny] 11 [minuty]:

    Poszperałem w instrukcji do modułu uruchomieniowego. Znalazłem coś ciekawego:

    [Atmega16]Sterownik silnika krokowego nie chce działać

    Już wiem, że muszę podłączyć rezonator kwarcowy 16Mhz i dwa kondensatory do masy. Nie wiem jaka jest indukcja cewki napięcia referencyjnego AVcc.

    Jeśli chodzi o napięcie referencyjne Aref i przycisk reset to nie wiem czy mam go podłączyć, żeby układ działał.

    0
  • #10 19 Lip 2011 20:07
    janbernat
    Poziom 38  

    A co to za moduł uruchomieniowy?
    Już wiem- gotronic.
    Masz tam jeden ULN- sprawdź działanie programu dla jednego silnika.
    Tylko sprawdź najpierw parametry silnika- bo pewnie wylutowanie spalonego ULN będzie dla Ciebie kłopotliwe.

    0
  • #11 19 Lip 2011 21:07
    Student_Bartosh
    Poziom 9  

    Sprawdziłem na module. Wszystko działa jak powinno. Dlatego chciałem zrobić krok do przodu i zrobić niezależny układ. W sensie zrobić własny sterownik silnika unipolarnego na płytce uniwersalnej.

    0
  • #13 19 Lip 2011 21:37
    Slkkk
    Poziom 14  

    Dlaczego miałby nie wysterować? Jeśli tylko silnik ma sześć wyprowadzeń, by można nim było sterować tak, jak unipolarnym, to nie widzę problemu -- sam kiedyś zrobiłem to samo. Należy tylko tak dobrać napięcie zasilające silnik, by nie płynął za duży prąd (ULN2803 wytrzyma 0,5 A) -- wystarczy zmierzyć opór cewki najprostszym miernikiem. Nie osiągnie się co prawda w ten sposób dużych obrotów, ale w celach edukacyjnych tak prosty i tani układ jak najbardziej się sprawdzi.

    0
  • #15 19 Lip 2011 21:50
    Student_Bartosh
    Poziom 9  

    rs07 napisał:
    Kolego Student.
    W/g mnie cały ten układ to bzdura. Nigdy tym nie wysterujesz silnika krokowego. Musisz wziąć scalak L293D jeżeli prąd jest do 0,6A jeden kanał.
    ULN2803 do tego celu, nie nadaje się.


    :!: Popełniłem błąd pisząc "silnik krokowy bipolarny". Miałem na myśli "silnik krokowy unipolarny", na takich właśnie pracuje, z myślą o nich powstał ten układ. Błąd został poprawiony w poprzednich postach. Przepraszam za wprowadzenie w błąd:!:

    0
  • #16 19 Lip 2011 22:03
    janbernat
    Poziom 38  

    Bo to pewnie jest silnik z odczepami pośrodku uzwojeń.
    Da się nim sterować jako unipolarnym albo bipolarnym.
    Ale- zmierz oporność uzwojenia- jak napisał Slkkk.

    0
  • #17 21 Lip 2011 17:52
    Student_Bartosh
    Poziom 9  

    Podłączyłem do uC brakujące rzeczy, takie jak: Aref, AVcc zgodnie ze schematem

    [Atmega16]Sterownik silnika krokowego nie chce działać

    Dodałem też rezonator kwarcowy 16 MHz z dwoma kondensatorami 22nF podciągniętymi do masy. Dalej nic się nie dzieje :] Możliwe, że źle kwarc jest przylutowany???

    0
  • #18 21 Lip 2011 19:07
    janbernat
    Poziom 38  

    Zgodnie z jakim schematem podłączyłeś AREF do +zasilania przez opornik?
    Tak nie należy robić.
    Kondensatory przy kwarcu 22pF a nie nF.

    0
  • #19 21 Lip 2011 19:35
    Student_Bartosh
    Poziom 9  

    janbernat napisał:
    Zgodnie z jakim schematem podłączyłeś AREF do +zasilania przez opornik?


    Zgodnie z tym obrazkiem, który znalazłem na elektrodzie. Zasugerowałem się tym postem:

    https://www.elektroda.pl/rtvforum/topic810194.html

    janbernat napisał:

    Kondensatory przy kwarcu 22pF a nie nF.


    Tak. Pomyliłem się.

    0
  • #20 21 Lip 2011 20:04
    janbernat
    Poziom 38  

    Nie wszystkie rozwiązania na elektrodzie są prawidłowe.
    Raczej szukaj w DS Atmela.
    I tak jak napisałem:

    janbernat napisał:
    Masz tam jeden ULN- sprawdź działanie programu dla jednego silnika.

    Potem się przenieś na płytkę.
    P.S.
    Taki sterownik zawsze działa- nie ma prawa nie działać.
    Oczywiście jak wszystko jest sprawdzone, pomierzone i prosty program jest prawidłowo napisany.

    0
  • #21 21 Lip 2011 20:07
    Student_Bartosh
    Poziom 9  

    Sprawdziłem na module uruchomieniowym i działało. Przeniosłem na płytkę uC, dolutowałem kwarc, dodałem troche kondensatorów tu i tam. Właśnie sprawdzam luty i upewniam się, że dobrze polutowałem wszystko.

    0
  • #22 21 Lip 2011 20:12
    janbernat
    Poziom 38  

    Ale kondensatorów nie dolutowuje się tu i tam.
    Tylko tam gdzie trzeba.

    0
  • #23 21 Lip 2011 21:10
    Student_Bartosh
    Poziom 9  

    Dobra, tak sobie powiedziałem:D Reasumując to, co do tej pory zrobiłem.

    1. Przed układ 7805 dałem kondensator 100 nF podciągnięty do masy tak jak na tym obrazku:

    [Atmega16]Sterownik silnika krokowego nie chce działać

    2. Rezonator kwarcowy połączyłem pod XTAL1 i XTAL2 (odprowadzenie 12 i 13) i dodałem kondensatory 22pF, wszystko jak na rysunku poniżej:

    [Atmega16]Sterownik silnika krokowego nie chce działać

    Czy jest jakaś różnica jak się połączy rezonator kwarcowy?

    3. Napięcie referencyjne jak poniżej na obrazku, cewka 10uH, kondensator 100 nF:

    [Atmega16]Sterownik silnika krokowego nie chce działać

    4. Napięcie referencyjne Aref. Co z nim? Mam po prostu podłączyć do Vcc? Ilustracja wygląda następująco:

    [Atmega16]Sterownik silnika krokowego nie chce działać

    Kondensator dałem oczywiście 100 nF. I zagadka. Czy tam jest regulowany rezystor?? Ja tam dałem 10k ohmów.

    5. Co z resetem? Ma sobie dyndać? Nie trzeba podłączyć do Vcc?

    0
  • #24 21 Lip 2011 21:52
    LordBlick
    VIP Zasłużony dla elektroda

    4. Absolutnie nie łącz z niczym, jeśli nie używasz ADC. Jeśli używasz, to kieruj się notą katalogową - najczęściej tylko kondensator do GND, bo napięcia odniesienia są przełączane wewnętrznie...
    5. Może "dyndać", aczkolwiek w zakłóconym środowisku podłącza się 10kΩ do Vcc, czasami dodatkowo jakieś 100nF do GND(ale tylko w aplikacji końcowej wykluczającej przeprogramowanie).

    0
  • #25 21 Lip 2011 21:56
    janbernat
    Poziom 38  

    1. Może być- chociaż bardziej w tym przypadku na wyjściu.
    2. Dobrze- nie ma róznicy.
    3. AVCC to nie jest napięcie referencyjne tylko napięcie zasilania części analogowej
    procesora.
    I cyfrowej portu A też.
    4. Regulowany rezystor- potencjometr- jest na płytce.
    Tylko wtedy to ma sens jeśli ustawisz zewnętrzne napięcie odniesienia i odczep z tego
    potencjometru bedzie tym napięciem.
    5.Może dyndać- ale nie musi.
    6.Nie chcę być badany aparaturą elektromedyczną podłączoną przez Ciebie.
    Są łagodniejsze sposoby eutanazji.

    0
  • #26 21 Lip 2011 22:38
    Student_Bartosh
    Poziom 9  

    janbernat napisał:

    6.Nie chcę być badany aparaturą elektromedyczną podłączoną przez Ciebie.
    Są łagodniejsze sposoby eutanazji.


    Hehehehe... Aparatura elektromedyczna to specjalność Inżynieri Biomedycznej na PWr. Elektronikę miałem 4 semestry, pobieżnie niektóre bloki wybranych urządzeń.
    Zdaję sobię sprawę, że daje żałosny popis wiedzy. Wiem też, że muszę się uczyć na własną rękę. Na pocieszenie mogę dodać, że inżynier biomedyczny w Polsce nie ma prawa wykonywania jakichkolwiek badać podłączając aparaturę do pacjenta ;P

    W ogóle dzięki za odpowiedzi, bardzo pomogły :>

    0