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

[Atmega8][BASCOM] silnik hdd-problem ze sprzężeniem zwrotnym

23 Wrz 2009 18:19 2835 17
  • Poziom 14  
    Witam wszystkich.

    Od pewnego czasu usiłuję uruchonić silnik wytargany z dysku twardego na własnym sterowniku. Silnik ma uzwojenia połączone w trójkąt i steruję nimi poprzez mostek z 6-ciu tranzystorów. Silnik coprawda kręci się, ale nie jest to jakaś zawrotna prędkość- ok 1000rpm. Nie mogę zmniejszyć czasu przez otwieraniem kolejnych sekcji, gdyż silnik poprostu zatrzymuje się. Pozatym, jak to bywa przy sterowaniu bez sprzężenia, nawet lekkie dotknięcie powoduje jego zatrzymanie. I właśnie z tego powodu próbuję wyczarować to sprzężenie... Silnik nie jest wyposażony w czujniki halla. Z tego co wyczytałem w tego typu silnikach momenty komutacji ustalane są poprzez pomiar napięcia wyindukowanego w nieobciążonej cewce.

    Zatem poczyniłem pomiary... no i nic w nich nie widze, może ktoś coś zauważy i podpowie... POniżej zamieszczam oscylogramy wraz z opisem punktów między którymi przebiegi były mierzone.

    Byłbym wdzięczny gdyby ktoś podsunął pomysł jak zrealizować to sprzężenie, co by silnik rozkręcał się do wyższych obrotów i dysponował większym momentem?

    GND-środek (punkt wspólny wszystkich uzwojeń)
    [Atmega8][BASCOM] silnik hdd-problem ze sprzężeniem zwrotnym

    Przebieg 1: GND-cewka1
    Przebieg 2: GND-cewka2
    [Atmega8][BASCOM] silnik hdd-problem ze sprzężeniem zwrotnym


    Przebieg 1: środek-cewka1
    Przebieg 2: środek-cewka2
    [Atmega8][BASCOM] silnik hdd-problem ze sprzężeniem zwrotnym


    środek-cewka1
    [Atmega8][BASCOM] silnik hdd-problem ze sprzężeniem zwrotnym


    Przebieg 1: GND-środek
    Przebieg 2: GND-cewka1
    [Atmega8][BASCOM] silnik hdd-problem ze sprzężeniem zwrotnym
  • Tektronix
  • Poziom 27  
    Ja zaznaczam że nigdy nie miałem potrzeby się interesować silnikami od HDD ale jesli piszesz że ma uzwojenia połączone w trójkąt to czy tu nie ma analogii do zwykłego silnika klatkowego zasilanego napięciem3-fazowym? Na przebiegach widać tylko dwa przebiegi o przeciwstawnych fazach a czy nie powinny być 3 przesuniętych o 120stopni ?
  • Tektronix
  • Poziom 29  
    Cytat:
    Silnik ma uzwojenia połączone w trójkąt


    Cytat:
    GND-środek (punkt wspólny wszystkich uzwojeń)


    Gdzie uzwojenie połączone w trójkąt ma punkt wspólny?
  • Poziom 27  
    zuraf napisał:
    oczywiście są 3, ale oscyloskop dysponuje jedynie dwoma kanałami. Dany stan przesunięty jest o 60st i trwa 120. Tak jak w tym datasheecie, rysunek 1.

    http://www.atmel.com/dyn/resources/prod_documents/doc8012.pdf

    Poza tym co kolega zauważył że to dziwny trójkąt co ma punkt wspólny dla wszystkich uzwojeń to ta arytmetyka mi nie pasuje bo przebiegi trójfazowe są przesunięta o 120 stopni a nie o 60 ? Bo jesli jest tak w istocie jak piszesz to (może się mylę) przez 60 stopni obrotu silnika następują siły które będą się znosic? Ale mogę się mylić bo dawno temu już do szkoły nie chodziłem :)
  • Poziom 43  
    Nie zobaczysz żadnego odpowiedniego sygnału jeżeli silnik pracuje synchronicznie i bez obciążenia.
    Kiedyś też się dziwiłem dlaczego nie ma takiego ładnego przebiegu trójkątnego.
    Pojawi sie jak obciążysz silnik. Sygnał będzie coraz ładniejszy a najładniejszy na granicy zerwania obrotów. Bo właśnie to sprzężenie zwrotne działa tak że utrzymuje silnik na tej granicy. A podczas pracy synchronicznej ta granica jest wielokrotnie przekroczona. To znaczy silnik dostaje o wiele za dużo prądu jak na moc którą wydziela w postaci mocy na wale. Reszta idzie w ciepło. Jakiś mały trójkąt może i tak jest, ale tak mały że go nie widać.
    http://www.atmel.com/dyn/resources/prod_documents/doc8012.pdf
  • Poziom 14  
    Cytat:
    Poza tym co kolega zauważył że to dziwny trójkąt co ma punkt wspólny dla wszystkich uzwojeń to ta arytmetyka mi nie pasuje bo przebiegi trójfazowe są przesunięta o 120 stopni a nie o 60 ?


    chodzi o to że przebiegi "zachodzą na siebie". Z tego jak ja to rozumiem to podaje się na uzwojenia takie stany w nastepującej kolejnośći: 100 110 010 011 001 101. Próbowałem też sterowania typowo, co 120stopni, lecz w taki sposób silnik chodził ładniej- rozkręca się do większych obrotów i mniej buczy.


    atom1477>> przy zmianie sposobu zasilania na typowy, co 120 stopni i zostawieniu jednej z linii sterującej "w powietrzu" i poobciążeniu silnika powinien pojawić się sygnał? Jaki? taki jak na tym wykresie 1, tak?
  • Poziom 43  
    Nie bardzo. Każda linia powinna być podłączona. Po prostu sterownik co jakis czas ma ją odłączać od czegokolwiek.
    Ale owszem, wtedy sygnał się pojawi.
  • Poziom 19  
    Odkopuję temat bo stoję przed identycznym problemem z silnikiem HDD
    atom1477: Od 2 dni walczę z silnikiem z dysku HDD. Tak jak napisałeś, na oscyloskopie nie mogę dojrzeć w żaden sposób efektu BEMF, nawet po rozpędzeniu silnika do dosyć dużej prędkości. Faktycznie delikatny trapez w przebiegu pojawia się gdy silnik probuję hamować palcem ale jest on dosyć niewyraźny nawet przy granicy "zerwania" obrotów. Wydaje mi się to bez sensu bo talerze dysku napewno takiego oporu nie stawiają. Intryguje mnie jak to jest oryginalnie zrobione w sterownikach takich dysków, że ten silnik tak ładnie, płynnie startuje.
    Note aplikacyjna Atmela i kod źródłowy analizowałem, ale ten program raczej zakłada, że po ruszeniu "w ciemno" pojawi sie na tyle czytelny sygnał BEMF, że będzie to już dalej działało z detekcja punktów komuntacji.
    Jak w takim razie sterować takim silnikiem. Obecnie jestem nieco zniechęcony uzyskanymi efektami. Czy sterowniki do silników modelarskich też przestają działać po zaniknięciu obciążenia? Silnik z HDD miał być rozgrzewką przed silnikiem do zasilania śmigłowca.
  • Poziom 43  
    W HDD jest ładny trapez bo silnik dostaje mniejsze napięcie. Czyli płynie mały prąd. Moc więc jest mała i małe obciążenie talerzami dla silnika wcale małym obciążeniem wtedy nie jest.
    Też się dużo męczyłem z tym trapezem.
    Myślę że to nie ma sensu bo bez sprzężenia trapezu i tak nie uzyskasz.
    Po prostu zrób sprzężenie :D
  • Poziom 19  
    atom1477: No mogę spróbować robić sprzężenie w ciemno albo dostosowac note atmela do mojej płytki. Tylko, że to mi i tak nie zadziała bo układ nie znajdzie przejścia przez zero skoro ja go nie widzę. Ta charakterystyka jest na tyle płaska w miejscu gdzie powinna być rampa narastająca, że tam szukanie czegokolwiek nie ma chyba sensu.
    Podglądałem sobie też przebiegi na chodzącym sprawnym dysku i tam faktycznie (oprócz tego, że PWM troche zaciemnia) jest klasyczny przebieg jak z not aplikacyjnych.
    No nic, pokombinuje jeszcze w tym temacie albo spróbuje z bardziej modelarskim silnikiem.
  • Poziom 43  
    No ale to przejście przez zero pojawi się jak tylko zrobisz sprzężenie. Teraz też ono tam jest tylko że następuje ono bardzo szybko. Tak szybko że to wygląda jak prostokąt a nie jak trapez.
    Tylko takie drobne uwagi: zaczynaj od układu bez PWMa. A po drugie to to samo nie ruszy. Musowo pokręcić silnikiem. Odpala się to jak dwusówa :D
    Później oczywiście dorobisz sobie układ autostartu.

    Ja to zrobiłem tak:
    Code:

    Prawa autorskie: atom1477 :D

    $regfile = "ATTiny2313.dat"
    $crystal = 8000000
    '-------------------------------------------------------------------------------
    Dim Wysw As Word
    '-------------------------------------------------------------------------------
    Signal_1 Alias Pinb.4
    Signal_2 Alias Pinb.2
    Signal_3 Alias Pinb.3
    '-------------------------------------------------------------------------------
    Config Porta = &B11111111
    Config Portb = &B11100011                                   'xxx123xx
    Config Portd = &B11111111

    Porta = &B00000000
    Portb = &B00011100
    Portd = &B00000000


    Do
      Waitus 50
      Portd = Lookup(0 , Stany)
      Waitus 150

      Wysw = 0
      While Signal_1 = 0
        Incr Wysw
        Waitus 1
      Wend

      Waitus 200
      While Wysw <> 0
        Decr Wysw
        Waitus 1
        nop
      Wend




      Waitus 50
      Portd = Lookup(1 , Stany)
      Waitus 150

      Wysw = 0
      While Signal_2 = 1
        Incr Wysw
        Waitus 1
      Wend

      Waitus 200
      While Wysw <> 0
        Decr Wysw
        Waitus 1
        nop
      Wend




      Waitus 50
      Portd = Lookup(2 , Stany)
      Waitus 150

      Wysw = 0
      While Signal_3 = 0
        Incr Wysw
        Waitus 1
      Wend

      Waitus 200
      While Wysw <> 0
        Decr Wysw
        Waitus 1
        nop
      Wend




      Waitus 50
      Portd = Lookup(3 , Stany)
      Waitus 150

      Wysw = 0
      While Signal_1 = 1
        Incr Wysw
        Waitus 1
      Wend

      Waitus 200
      While Wysw <> 0
        Decr Wysw
        Waitus 1
        nop
      Wend




      Waitus 50
      Portd = Lookup(4 , Stany)
      Waitus 150

      Wysw = 0
      While Signal_2 = 0
        Incr Wysw
        Waitus 1
      Wend

      Waitus 200
      While Wysw <> 0
        Decr Wysw
        Waitus 1
        nop
      Wend




      Waitus 50
      Portd = Lookup(5 , Stany)
      Waitus 150

      Wysw = 0
      While Signal_3 = 1
        Incr Wysw
        Waitus 1
      Wend

      Waitus 200
      While Wysw <> 0
        Decr Wysw
        Waitus 1
        nop
      Wend



    '(  Portd = Lookup(0 , Stany)
      Waitms 4
      Portd = Lookup(1 , Stany)
      Waitms 4
      Portd = Lookup(2 , Stany)
      Waitms 4
      Portd = Lookup(3 , Stany)
      Waitms 4
      Portd = Lookup(4 , Stany)
      Waitms 4
      Portd = Lookup(5 , Stany)
      Waitms 4                                                  ')
    ')
    Loop
    '-------------------------------------------------------------------------------
    Stany:                                                      'HLZ - Ze wzmacniaczami
    Data &B00011100                                             'xx011100   ZLH  123
    Data &B00001101                                             'xx001101   HLZ
    Data &B00000111                                             'xx000111   HZL
    Data &B00010011                                             'xx010011   ZHL
    Data &B00110001                                             'xx110001   LHZ
    Data &B00110100                                             'xx110100   LZH


    Sterowało to mostkiem 1.5H. I miało dodatkowe komparatory zewnętrzne na LM324. Niestety schematu nawet nie miałem więc i teraz nie mam :/
    To zakomentowane służy do przetestowania poprawności połączeń tranzystorów.
  • Poziom 19  
    atom1477: Rozkręcam silnik w open-loopie i zaczynam bez PWMa. To już zrobiłem. Ale poczekaj. Teraz na oscyloskopie cyfrowym łapie sobie przebieg i powinienem na nim zobaczyć coś na kształt przebiegu Figure 11, strona 14 z noty Microchipa AN857. Tym czasem u mnie po przełączeniu uzwojenia jest skok w górę tak jak w tej nocie, który zaraz opada momentalnie do stałego poziomu (około połowy napięcia zasilania). Próbkuje to na DSO 100MHz i napewno nie przegapiłbym momentu narastania w tym miejscu.

    Sprobuje zrobić układ z tymi komparatorami, ale u mnie sygnał na "wolnym" uzwojeniu wogóle nie przecina się z przebiegiem na wyjściu wspólnym gwiazdy ani w wirtualnym punkcie neturalnym z rezystorów. W każdym razie dzięki za rady :).
  • Poziom 43  
    No właśnie. Momentalnie skacze w górę. I właśnie w połowie tego momentalnego skoku układ powinien złapać impuls z komparatora, dołożyć drugie tyle czasu co było do tego impulsu z komparatora, i wykonać następną komutację.
    Dlaczego tak jest? Bo pracujesz w Open-Loopie. Czyli dostarczasz silnikowi wielokrotnie większą moc niż potrzeba jak na jego moc (mechaniczną).
    Inaczej mówiąc przy zamkniętej pętli silnik kręcił by się dużo szybciej (aby zbliżyć wydzielaną moc mechaniczną z pobieraną mocą podzieloną elektryczną).
    Teraz też chcę się kręcić szybciej. I dlatego ten impuls EMF tak szybko narasta. Można powiedzieć że silnik chce kręcić się szybciej i chce szybko wymusić komutację :D
    Tyle że mu nie pozwalasz bo na siłę robisz wolniejszą komutację pracując w Open-Loopie.
    Jak zrobisz sprzężenie to owszem, na początku trapezu nie będzie, ale komparator i tak przełączy przy tym momentalnym skoku. Zmierzony czas będzie krótki i kolejna komutacja nastąpi szybko. Silnik dalej się będzie rozpędzał aż dojdzie do maxymalnych obrotów możliwych do uzyskania przy danej mocy. I wtedy pojawi się tam ładny trapez.

    Dodano po 15 [minuty]:

    Ale masz szczęście Panie Kolego :D
    Jednak miałem jakiś schemat. I to dokładnie to tego programu co zamieściłem.
  • Poziom 19  
    atom1477: Dzięki za materiały :). Muszę to przetestować ale nadal mi się coś tutaj bardzo nie podoba. Po przełączeniu czekasz 150us żeby przeczekać zakłócenia komutacji. I ja też tak próbowałem. Ale u mnie po 150us wykres już nie przechodzi przez zero aż do kolejnego wymuszonego przełączenia. Jutro w pracy sprobuje to uruchomić według Twojego schematu i wtedy będę wyciągał dalsze wnioski.
    Szału dostane z tym układem :).
  • Poziom 43  
    Sam już nie pamiętam po co tam te aż 150us. Może silnik pracował na dużo mniejszych obrotach (w końcu był zasilaniy z 5-ciu V) a wtedy te 150us to nie było tak dużo.
  • Poziom 14  
    Witam wszystkich w moim kiedyśtam załżonym temacie:)

    Ja ze swoim problemem sobie poradziłem, z bólem, ale jednak:) Robiłem to tak: rozkręcałem silnik w otwartej pętli. Kosmicznych prędkości nie osiągał bo pracował bez sprzężenia. Nie mam oscylogramu, a tamte z góry są złe, ale obejrzałem przebieg na którejkolwiek z cewek. Gdy silnik kręcił się w open loop'ie, z dość małą prędkośćią, miał i tak spory moment obrotowy, który spadał wraz ze wzrostem prędkości-normalne. Zauważyłem też że hamując silnik ręką na przebiegu przesuwa się taki charakterystyczny punkt. Taki płynny wzrost napięcia o dziesiąte częsci volta. Zauważyłem też, że jeśli ten punkt, przesuwając się w lewo, przekroczy moment w którym następuje przełączenie uzwojeń, silnik wypada z rezonansu i po prostu się zatrzymuje. Wszystkie moje następne działania prowadziły do zmuszenia Atmegi do "łapania" momentów wzrostu napięcia i automatycznej zmiany komutacji. 3x ADC do pomiaru napicięcia na każdej z cewek, gdy którykolwiek znalazł punkt o który chodziło wystawiał któtki impuls na port, który był kierowany na wejście przerwań w którym przy rosnącym zboczu następowało przełączanie uzwojeń. Wsio:)

    Jako ciekawostkę dodam że mój własnoręcznie przewinięty silnik, biorący przy 12v do 6A prądu rozkręciłem do 15k RPM. Natomiast przewiięty silnik z CD-romu, chlający w porywach do 11A do 22k RPM
  • Poziom 43  
    No to ładnie to zamotałeś :D No ale grunt że działało.