Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Problem z uzyskaniem niskich obrotów Arduino+ESC+Silnik bezszczotkowy

AdrianHDmaxxx 14 Dec 2022 16:49 540 10
Testo
  • #1
    AdrianHDmaxxx
    Level 13  
    Cześć wszystkim. :D
    Piszę do was tutaj z problemem odnośnie sterowania silnika BLDC.
    Poniżej załączam wszystkie parametry do elementów.
    Potrzebuję na studiach uzyskać pełen zakres obrotowy silnika aby wyznaczyć charakterystykę. Problem w tym że pomimo wielu prób z ustawieniami sterownika ESC oraz zmianach w programie na Arduino nie mogę sprawić aby silnik zaczął pracować od możliwie niskich obrotów.
    Do sterowania używam potencjometru 10kohm podłączonego do arduino. Na wyjściu PWM jest podłączony sterownik według schematu.
    Problem z uzyskaniem niskich obrotów Arduino+ESC+Silnik bezszczotkowy
    Mimo zmian w programie na mniejszą ilość pulsów i dobrze wyskalowanego zakresu potencjometru, silnik od razu rusza od w miarę wysokich obrotów około 3tys. Płynna regulacja oczywiście działa w zakresie od tych 3tys do pełnych obrotów silnika. Zależy mi jednak aby te obroty były stosunkowo małe t.z.n w granicach od 0-max albo przynajmniej od 500obr-max a nie jak w tym momencie od jakiejś dziwnej prędkości.
    Problem z uzyskaniem niskich obrotów Arduino+ESC+Silnik bezszczotkowy
    Czy problem jest w samym sterowniku, że np jest przeznaczony do modeli latających ?
    Co mogę zmienić ?
    Bardzo proszę o pomoc :(

    Program używany przeze mnie:
    #include <Servo.h>

    Servo ESC; // create servo object to control the ESC

    int potValue; // value from the analog pin

    void setup() {
    // Attach the ESC on pin 9
    ESC.attach(9,1000,2000); // (pin, min pulse width, max pulse width in microseconds)
    }

    void loop() {
    potValue = analogRead(A0); // reads the value of the potentiometer (value between 0 and 1023)
    potValue = map(potValue, 0, 1023, 0, 180); // scale it to use it with the servo library (value between 0 and 180)
    ESC.write(potValue); // Send the signal to the ESC
    }


    Silnik:
    Silnik ABC-Power A2212 1400KV 2-3S
    Napięcie zasilające: 11,1V 2- 3S lipo ; 6-10 NiMh
    Maksymalna wydajność prądowa: 6-12A (>75%)
    Pobór prądu obciążenia 10V: 0.5A
    Max watt: 180W
    Prąd maksymalny: 16A / 60s
    Wewnętrzny opór: 65 mΩ
    Wymiary silnika: 27,5x30(mm)
    Rozstaw śrub mocujących: 16mm x 19mm
    Zalecana waga modelu: 300 - 800g
    Zalecane minimalne ESC: 20A
    Wał: 3,17mm
    Masa: 47g
    Ciąg max: 940g
    Zalecane śmigło: 8045
    Zamienna ośka do silnika A2212


    Regulator obrotów:
    ESC ABC-Power Air 30A 2-3S - BEC 1A - Prosty regulator silników samolotowych
    Stały prąd 30A - Max 40A (poniżej 10 sek.)
    2-3S LiPol; 5-9 ogniwa Ni-MH
    Auto niska redukcja mocy baterii na 3,0V / ogniwo, odcięcia na 2.9V / ogniwo (Lipo)
    Programowalne odcięcie z tytulu niskiego napięcia (Lipo lub NiCd / NiMH)
    Auto wyłączanie jeśli utracono sygnał
    Ustawienie hamulca programowane przez użytkownika (on / off)
    Auto nauka zakresu przepustnicy
    Auto-timing
    Max RPM: 40,000 RPM
    Niska rezystancja
    8 kHz PWM (modulacja szerokości impulsu)
    BEC: 1A, Liniowy
    Wymiary: 51x25x8,7 (mm)
    Waga: 22g
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Testo
  • #2
    sigwa18
    Level 41  
    ESC.attach(9,1000,2000); // (pin, min pulse width, max pulse width in microseconds) minimalna długość pulsu 1000 us maxymalna długość pulsu 2000us

    Wg mnie powinno być

    ESC.attach(9,100,2000); // (pin, min pulse width, max pulse width in microseconds)
  • Testo
  • #4
    Ture11
    Level 38  
    No to chyba potrzebujesz silnika BLDC i sterownika z obsługą enkodera - bo najwyraźniej Twój sterownik bez enkodera ma założoną minimalną prędkość na poziomie, który daje Ci te 3000rpm.
  • #5
    Madrik
    moderator of Robotics
    A przypadkiem silniki BLDC nie mają czasem minimalnej prędkości obrotowej, ograniczonej między innymi momentem zaczepowym?
    Minimalna prędkość obrotowa przy parametrach zasilania niezbędnych do pokonania oporów silnika, też jest elementem charakterystyki.

    Dla silnika 1400KV, te 3000 rpm to jest niecałe 3 V na zasilaniu.
    Może to być za niskie napięcie do pokonania oporów jakie stawia sam silnik i jego budowa. Ten silnik powinien osiągnąć jakieś 17500 rpm dla zasilania 3S.

    IMHO, powinieneś dodać pomiar aktualnej prędkości kątowej i obrotowej silnika i przy pomocy monitoringu parametrów zasilania i sterowania (napięcie, prądy na fazach oraz częstotliwość przełączeń uzwojeń) i na tej podstawie określić charakterystykę, włącznie z punktem przy którym silnik rozpoczyna pracę.
    Istnieje duże prawdopodobieństwo, że ten silnik nie ma niższej prędkości obrotowej. Dla każdego obciążenia silnika elektrycznego istnieje punkt pracy kiedy prędkość obrotowa zrównuje się z poślizgiem.
    W silniku BLDC występuje moment zaczepowy, wynikający z jego konstrukcji (dlatego silnik "skacze" przy obracaniu wału ręką) i moment ten musi zostać pokonany. Parametry zasilania, które pokonają ten moment, mogą już generować określoną prędkość obrotową, której zmniejszenie, spowoduje hamowanie silnika.
    Oczywiście do pełnej analizy potrzebowałbyś jeszcze parametrów magnetycznych silnika. Strumień, indukcja, budowa biegunów itd.
    Ważna jest też częstotliwość przełączeń uzwojeń, w kontekście ilości biegunów i wyjściowej prędkości obrotowej (lub kątowej) silnika.

    Zastanów się, czy nie zmienić badanego silnika na silnik z czujnikami Halla i o mniejszej prędkości znamionowej (kilkaset rpm).

    Twój układ opiera się głównie na pomiarze sygnałów EMF/back EMF - a ta metoda jest bardzo zawodna przy niskich prędkościach obrotowych (sygnały zwrotne dla regulatora są bardzo słabe).

    Być może wykorzystując czujnik Halla, uzyskałbyś lepszą kontrolę nad tym, co się dzieje z silnikiem, a to pozwoliło by np. stosować impulsy do pokonania konstrukcyjnych "skoków" silnika i podawania kolejnego, gdy tylko wał zmieni położenie o jeden skok.

    Zajrzyj tutaj:
    http://mikrokontrolery.blogspot.com/
    Jest tu opisane kilka metod sterowania silnikami BLDC.
  • #6
    dzidziaka1
    Level 8  
    Może ESC trzeba przeprogramować?
    Chyba że jest to tak uproszczona konstrukcja że się nie da.

    Jest szansa że gdzieś mam taki silnik, esc pojedyncze też.
    Jak nie zapomnę, to jutro spróbuję zdrutować takie coś jak ty masz.
    Jak znajdę jakieś Arduino:)
  • #7
    ArturAVS
    Moderator HP/Truck/Electric
    Madrik wrote:
    A przypadkiem silniki BLDC nie mają czasem minimalnej prędkości obrotowej, ograniczonej między innymi momentem zaczepowym?

    Mają. Silniki pracujące w szerokim zakresie obrotów wykorzystują czujniki Halla pozwalające precyzyjnie określić położenie wirnika a tym samym dają możliwość odpowiedniej reakcji sterownika.
    dzidziaka1 wrote:
    Może ESC trzeba przeprogramować?

    Oprogramowanie nie usunie całkowicie bezwładności mechanicznej samego silnika.
  • #8
    dzidziaka1
    Level 8  
    Nie sprawdzę, bo nie jestem w stanie znaleźć tego silnika.
    Źle napisałem, nie oprogramowanie esc tylko kontrolera w silniku.
    Pamiętam że jak jeszcze dronowałem, to przestawiałem kolejność kręcenia się silnika za pomocą bl_heli zamiast zamieniać miejscami przewody.
    To jest mały silnik, więc ma małą bezwładność.
    Jak najbardziej kręcił się od najmniejszych obrotów.
  • #9
    Ture11
    Level 38  
    dzidziaka1 wrote:
    Jak najbardziej kręcił się od najmniejszych obrotów.


    Niech zgadnę, wtedy miał śmigło założone... A u autora?