Witam!
Jeszcze raz ja

tym razem nie załatam wad schematu metodami programowanymi.
Zbudowałem kontroler do e-bike na dosyć znaczną moc. W układzie mocy płyną napięcia sięgające 55v i prądy nawet powyżej 25A.
Silnik jest sterowany blokowo, prostokątnie. Jest trójfazowy, a kroki są ustawiane na podstawie odczytu z czujnków halla.
Układ jest sterowany za pomocą dwóch mikrokotrnolerów(2x ATmega 328P). Jeden z nich, nazwijmy go STEROWNIK zajmuje się pomiarem napięć, prądów, prędkości, obsługą wyświetlacza, zabezpieczeniami, odczytem rollgazu oraz wysyłaniem sygnału do drugiego miktrokontrolera, który nazwę ESC(Engine speed controller). Ten zaś zajmuje się wyłącznie odbiorem sygnału od STEROWNIKA, ustawieniem odpowiedniego PWM, włączeniem/wyłączeniem KERS, odczytem z czujników halla w silniku, oraz samymi komutacjami.
Zaprogramowałem również prędkościomierz, oczywiście obsługiwany poprzez STEROWNIK- bo przy nim mamy wyświetlacz. Ale przerwania do prędkościomierza generuje ESC przy pomocy jednego z 6 kroków pracy silnika.
Dodam też, że cały kontroler pracuje nieźle.
Silnik osiąga nominalną moc oraz obroty. Oczywiście wszystko też pod obciążeniem pow 25A.
Problem dotyczy samego prędkościomierza, oraz sporadycznych "przycięć" silnika których nie czuć podczas jazdy, ale wyraźnie słychać(silnik jest w piaście a szprychy są dość sprężyste).
Wszystko jest dobrze, kiedy silnik pracuje bez obciążenia. Wtedy prędkościomierz działa świetnie, a przycięcia nie występują.
Prędkościomierz działa dobrze również wtedy, kiedy się jedzie bez odkręconej manetki gazu(wyłączony silnik).
Wariuje natomiast, kiedy się przyspiesza. Vmax roweru nie przekracza 39kmh, a podczas przyspieszania licznik potrafi pokazać prawie setkę.
Gorzej jest, kiedy hamuje regeneracyjnie. Wtedy prędkości są już 3 cyfrowe(np 600kmh).Oznacza to, że zasilanie strasznie sieje, a odczyty z czujnika przypominają bardziej trawę niż schody.
Podczas normalnej pracy PWM działa z częstotliwościa 488Hz. Podczas hamowania z KERS przełącza się na 3.9KHz.
Oba mikrokontrolery mają po elektrolicie jamicon 100uF 16V, oraz ceramiku smd 100nF przy samych nóżkach.
Zasilane są poprzez dwupoziomowy zasilacz liniowy LM317(do 14.2V), a następnie jakiś 5V low dropout(1A). W zasilaczu też mamy elektrolit 100uF, 100V na wejściu, 100nF na wyjściu 14.2V, oraz 100nF na wyjściu 5V(ceramiki).
Na każdej fazie są dwa tranzystory kluczujące IRFB3306, z towarzyszącymi im diodami SR2100 po jednej na każdy tranzystor(szybkie jak jasny ch*j, bo mosfety do 60V nie strzelają przy obciążeniu indukcyjnym pod napięciem 55V), oraz po elektrolicie 100uF 100V na każdą z faz, przy samych tranzystorach.
Półmostki sterowane są driverami IR2184. Drivery te z kolei są sterowane syngałem PWM z ESC, z filtrem RC low pass(1k, 100nF).
Pomiar z czujników halla odbywa się za pomocą ADC(1MHz- niska dokładność, bardzo szybki odczyt, ale na zalecanym zakresie też śmigało). Nie użyłem do tego rejestrów PIN, żeby mieć kontrolę nad progiem. Tutaj przy odczycie 0 nie mamy całkiem 0V, gdyż...
...odczyt z czujników również jest filtrowany(RC low pass, 5k, 100n), a czujniki są podciągnięte pull-up(10k) do 5V. Więc robi nam się tutaj dzielnik napięcia.
Zasilanie ADC jak w notce, 10uH od VCC, i 100n do masy. V ref podciągnięte do Vcc.
Niestety przewód z silnika do kontrolera ma ok 80cm.
Nie wiem, jak zapanować nad tymi zakłóceniami odczytu z halli...
Jedyne co mi jeszcze przychodzi do głowy to założenie "koralika" ferrytowego na przewody od czujników, ale nie wiem czy mi to nie przesunie odczytów z czujników, niszcząc synchronizację. A nie chcę niepotrzebnie rozklejać wtyczki. Z drugiej strony trawa musi być tak konkretna, że nie wiem czy taka pierdoła ma prawo pomóc.