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

Sterowanie silnikiem bezszczotkowym trójfazowym-Attiny2313

etz257 20 Kwi 2006 17:57 8421 6
  • #1 2547977
    etz257
    Poziom 11  
    Posty: 13
    Witam!
    Chciałbym wysterować silnki z HDD (Spindle Motor). Sterowanie ma polegać na zmianie kierunku obrotu i prędkości obrotowej.
    Moje pytanie brzmi:
    Czy da się to zrobić z pomocą układu Attiny2313?
    Tam jest tylko jeden kanał PWM, a z tego co się orientuję to trzeba tych kanałów 6.
    Silnik jest trójfazowy i wymaga sterowania BLDC.
    Mam nadzieję ze nic nie namieszałem.
    Nie mam sprzężenia zwrotnego, chociaz przydało by się ale nie mogę uzyć enkoderów.
    Znalazłem taki schemat ale czy to będzie działać? Pozatym nie ma podanych wszystkich wartości elementów!
    Pozdrawiam
    Załączniki:
    • Sterowanie silnikiem bezszczotkowym trójfazowym-Attiny2313 schaltplan.jpg (115.07 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #2 2548076
    MirekCz
    Poziom 35  
    Posty: 2220
    Pomógł: 330
    Ocena: 62
    Będzie działać.
    Na necie jest więcej schematów, niektóre mogą wyjść dużo tańsze w przygotowaniu (brak drogich driverów)

    PWM na każdym kanale nie jest Tobie potrzebny. Można to rozwiązać na dwa sposoby:

    Jeden PWM sterującymi wszystkimi wyjściami (a przynajmniej jedną stroną - górną lub dolną tranzystorów) - zużywasz dodatkowe wyjście i masz dodatkowo jeden/kilka tranzystorów (zależnie od konstrkcji)

    Drugie wyjście to stworzyć "programowy PWM", który będzie działał na dowolnej liczbie pinów.. dla Ciebie np. na sześciu.

    Jeżeli twój procesor ma zajmować się tylko sterowaniem silnika to rozwiązanie sprzętowe jest jak najbardziej ok.

    PS.Tutaj jako sprężenie zwrotne używasz tzw. "Back-EMF". Jest też możwliość zastosowania czujników halla przy silniku. Zaleta to duża niezawodność takiego rozwiązania i pewne działanie przy każdej prędkości obrotowej... wada to potrzeba przystosowania silnika - zamontowania czujników. Niektóre silniki mają czujniki halla, tylko musiałbys zobaczyć jakie to są czujniki i jak się do nich podpiąć...
  • #3 2548915
    etz257
    Poziom 11  
    Posty: 13
    Dzięki za odpowiedź!
    Czujników hala mój silniczek nie ma, a motowanie w nim tych że czujników było by zbyt trudne no i znów dodatkowe koszta.

    Te sprężenie zwrotne tzw. "Back-EMF" to jest to od indukowania się w niezasilanym uzwojeniu napiecia tak? Dobrze myśle?

    1. Napisałem (a właściwie przepisałem) program który generuje PWM na jedną nóżkę, a teraz jak zrobić żeby pojawiło to się na 6ścciu pinach?

    A własciwie które rozwiązanie jest najprostrze dla takiego sterowania?
    Poniżej przedstawiam program napisany w C

    #include<avr/io.h>
    void czekaj (unsigned long zt)
    {
    #define tau 10.38
    unsigned char zt1;
    for (;zt>0;zt--)
    {
    for (zt1=255; zt1!=0;zt1--);
    }
    }
    int main (void)
    {
    unsigned char licznikkl=0; //zmienna wykorzystywana do pomiaru
    //czasu naciśnięcia przycisków
    char przyrost=20; //przyrost zmiany współczynnika
    //wypełnienia sygnału PWM
    union
    {
    unsigned int pwm;
    unsigned char pwmc[2];
    }volatile upwm; //aktualny współczynnik wypełnienia
    //sygn. PWM

    DDRB=0x08; //PB3 - wy (OC1 - wyjście PWM)
    //pozostałe we
    PORTB=0; //bez podciągania
    DDRD=0xfc; //PD1 i PD0 - we (obsługa klawiszy SW1
    //i SW4), pozostałe wy
    PORTD=0x03; //wejścia z podciąganiem (potrzebne dla
    //klawiatury)
    TCCR1A=0x83; //PWM 10 bitowy
    //zerowanie OC1 po spełnieniu warunku
    //równości podczas liczenia w górę,
    //ustawianie podczas liczenia w dół
    TCCR1B=0x03; //preskaler=3, co przy 10-bit PWM daje
    //Fwy=ok. 61Hz @8MHz
    TCNT1L=0x00; //wstępne ustawianie licznika1

    TCNT1H=0x00;
    upwm.pwm=0x3ff; //początkowo silnik włączony, wartość TOP
    //odpowiada wysokiemu poziomowi na
    //wyjściu OC1 (PB3)
    while(1) //główna pętla programu
    {
    if(bit_is_clear(PIND,1)) //czy wciśnięto SW4
    {
    upwm.pwm+=przyrost; //zwiększ pwm
    if(upwm.pwm>0x3ff)
    {
    upwm.pwm=0x3ff; //jeśli przekroczono wartość TOP, to
    //ustaw TOP
    }
    czekaj(15*tau); //eliminacja drgań i powtórnej
    //interpretacji naciśnięcia przycisku
    licznikkl++; //mierz długość naciśnięcia przycisku
    }
    else
    {
    if(bit_is_clear(PIND,0)) //czy wciśnieto SW1
    {
    upwm.pwm-=przyrost; //zmniejsz pwm
    if(upwm.pwm>0x3ff) //odpowiada to upwm.pwm<0
    {
    upwm.pwm=0; //jesli przekroczono wartość zero, to
    //ustaw zero
    }
    czekaj(15*tau); //eliminacja drgań i powtórnej
    //interpretacji naciśniecia przycisku
    licznikkl++; //mierz długość naciśnięcia przycisku
    }
    else
    {
    licznikkl=0; //zeruj licznik pomiaru czasu naciśnięcia
    //klawisza ponieważ wszystkie przyciski
    //są zwolnione
    przyrost=20; //ustaw początkową wartość przyrostu
    //dla pwm
    }
    }
    if(licznikkl>6)
    {
    przyrost=160; //wykryto długie naciśnięcie przycisków,
    //zwiększ krok regulacji
    licznikkl=60;
    }
    OCR1H=upwm.pwmc[1]; //wpisz aktualnie ustawiony współczynnik
    //do rejestrów
    OCR1L=upwm.pwmc[0]; //OCR1 timera1
    }
    }
  • #5 2549400
    etz257
    Poziom 11  
    Posty: 13
    A coś do 2 A? Bo jeśli dobrze wyczytałem to jest tylko do 1A.
    Moje zastosowanie tych silników jest dośc nietypowe - mianowicie samochód zdalnie sterowany. Odrazu mówię że innych silników stosawać nie moge:) takie założenie pracy dyplomowej.

    Z pomiarow wynika że silnik ten pobiera do 1.5 A.
  • #6 2549452
    ucy74
    Poziom 20  
    Posty: 539
    Pomógł: 22
    Ocena: 10
    etz257 napisał:
    Tam jest tylko jeden kanał PWM...
    ATtiny 2313 ma trzy kanały PWM. rtfm
  • #7 2549557
    pubus
    Poziom 30  
    Posty: 1289
    Pomógł: 139
    Ocena: 32
    Mogę się mylić ale z tego co wiem to w silnikach BLDC prędkość obrotowa zeleży od częstotliwości...
    A w takim razie pwm nie jest konieczny...
    Natomiast ma prośbę do kolegów którzy mieli "do czynienia" z "Back-EMF" o informację jak się do rzeczy zabrać...
    Tak czytałem pdf ze strony atmela na ten temat ale interesuje mnie ja to ugryźć nie mając uC z dedykowanymi do tego peryferiami...

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy sterowania trójfazowym silnikiem bezszczotkowym (BLDC) z dysku twardego (spindle motor) za pomocą mikrokontrolera ATtiny2313. Głównym problemem jest ograniczona liczba kanałów PWM w ATtiny2313 (wątpliwości co do dostępności sześciu kanałów PWM potrzebnych do sterowania silnikiem BLDC). Wskazano, że nie jest konieczne posiadanie PWM na każdym kanale – można zastosować jeden kanał PWM sterujący jedną stroną tranzystorów lub implementować programowy PWM na wielu pinach. Jako sprzężenie zwrotne proponowane jest wykorzystanie sygnału Back-EMF, gdyż silnik nie posiada czujników Halla, których montaż byłby kosztowny i trudny. Zasugerowano również użycie dedykowanego układu TDA5140a do sterowania silnikiem BLDC, jednak jego maksymalny prąd 1A jest niewystarczający dla obciążenia około 1,5A. Podkreślono, że ATtiny2313 posiada trzy kanały PWM, co może być wystarczające do podstawowego sterowania. Poruszono też kwestię, że prędkość obrotowa silnika BLDC zależy od częstotliwości sterowania, a niekoniecznie od wypełnienia PWM. Wskazano na potrzebę dalszych badań i implementacji algorytmów detekcji Back-EMF bez dedykowanych peryferiów mikrokontrolera.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA