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.

Reset mikrokontrolera po włączeniu silnika

kiclaw 06 Mar 2013 23:39 4833 37
  • #1 06 Mar 2013 23:39
    kiclaw
    Poziom 16  

    Witam

    Mam taki problem, mianowicie po załączeniu silnika mikroprocek restuje się. Próbowałem już wiele konfiguracji z kondensatorami (3 godziny sprawdzania na stykówce), dodawałem filtry dolnoprzepustowe, kondensatory na zasilaniu itp., i ciągle jedna wielka kiła :(

    Podejrzewam że zakłócenia przedostają się przez linie bramki z MOSFET-a ponieważ jest to praktycznie jedyna droga od silnika do procka. Masy jak widzicie mam rozdzielone na analogową i cyfrową. Połączone są przy ujemnym biegunie baterii.

    Zamieszczam schemat w jaki sposób na chwile obecna jest to zestawione.
    Reset mikrokontrolera po włączeniu silnika

    Byłbym bardzo wdzięczny za pomoc ponieważ już brakuje mi pomysłów co z tym zrobić.

    0 29
  • #2 07 Mar 2013 00:20
    Mol
    Poziom 30  

    Nie wiem co tam masz za silnik , ale prawdopodobnie w momencie włączenia ciągnie tyle prądu , że napięcie przysiada i cpu się resetuje . Na próbę zasil go z osobnych baterii , tylko masy połącz razem.

    0
  • #3 07 Mar 2013 00:30
    kiclaw
    Poziom 16  

    Silniczek ciągnie około 0,7A. Ale fabrycznie był zasilany z baterii właśnie 2x1,5V.
    Poza tym, już próbowałem ze zwykłym zasilaczem (ze stabilizatorem L7805) i też wywala reset. Więc jest to kwestia zakłóceń.

    0
  • #4 07 Mar 2013 01:28
    excray
    Poziom 39  

    kiclaw napisał:
    Poza tym, już próbowałem ze zwykłym zasilaczem (ze stabilizatorem L7805) i też wywala reset. Więc jest to kwestia zakłóceń.

    Silnik był podpięty pod niezależne zasilanie czy pod ten stabilizator podpiąłeś zarówno silnik jak i uC? Czy te pozostałe nieużywane we/wy uC w jakiś sposób są zabezpieczone? Czy wiszą sobie radośnie w powietrzu po resecie jako wejścia Hi-Z czyli jako antenki zbierające zakłócenia.

    0
  • #5 07 Mar 2013 13:57
    kiclaw
    Poziom 16  

    Podpinany był na dwa sposoby. Gdy nie było niezależnego zasilania to resetowało jak teraz. Przy osobnym zasilaniu procek podaje stan wysoki na MOSFET nie na 2 sekundy jak mam w programie a o wiele dłużej.

    Pozostałe piny są ustawione jako wyjścia z wystawionym stanem niskim.

    Przy dołożeniu paru kondensatorów jest jakiś postęp bo procka nie resetuje, no ale dzieje to co z w niezależnym zasilaniu, tzn wystawia na MOSFET na dość długi czas stan wysoki (w programie mam 2s a wystawia stan wysoki na około 4s-5s)

    EDIT:

    Zauważyłem pewną ciekawą rzecz. Gdy przytrzymam palcem silnik żeby się nie ruszał to wszystko pięknie działa (pomimo że wtedy silnik pobiera maksymalny prąd - bo jest zblokowany). Gdy choć trochę się obróci to wtedy wali reset. Wynika z tego że powstaje jakieś duże zakłóceninie z indukcyjności silnika podczas włączania się.

    0
  • #6 07 Mar 2013 16:59
    fotonn
    Poziom 28  

    A przy niezależnym zasilaniu masz połączone masy układów?

    0
  • #7 07 Mar 2013 17:34
    Mol
    Poziom 30  

    Tak teraz zauważyłem , 20k na bramce mosfeta to chyba trochę za dużo , 100 - 200 om by mogło być. R1,R4 daj sobie 1k.

    0
  • #8 07 Mar 2013 18:59
    kiclaw
    Poziom 16  

    fotonn Tak, inaczej nie spolaryzujesz MOSFET-a.

    Mol Próbowałem z różnymi wartościami :) Na schemacie jest akurat 20k.

    Wymienię diodę na zwykłą prostowniczą, może coś pomoże.

    0
  • #9 07 Mar 2013 19:36
    Mol
    Poziom 30  

    Możesz jeszcze spróbować dać transoptor , tylko musisz logikę odwrócić.

    0
  • #10 07 Mar 2013 19:47
    kiclaw
    Poziom 16  

    Właśnie tez o tym myślałem (i uważam że to powinno załatwić sprawę), ale nie za bardzo orientuje się w transoptorach. Mógłbyś napisać coś więcej? Jaki polecasz do takiej aplikacji.

    0
  • #11 07 Mar 2013 20:16
    excray
    Poziom 39  

    1. Kondensator 100nF równolegle do silnika
    2. Masa obudowy silnika do masy elektroniki

    0
  • #12 07 Mar 2013 23:21
    kiclaw
    Poziom 16  

    Na chwilę obecną schemat wygląda następująco:

    Reset mikrokontrolera po włączeniu silnika

    Postęp jest o tyle że nie ma resetu, ale ciągle są zakłócenia bo procek wariuje (wystawia na MOSFET stan wysoki o wiele dłużej niż trzeba).

    Łączenie masy obudowy z masą układów nic nie daje.

    Przemyślałem sobie kwestie transoptora i stwierdziłem że to nie za szczęśliwy pomysł bo przecież układy i tak i tak nie będą oddzielone galwanicznie (zasilanie procka i silnika z jednego źródła) więc jest to bez sensu.

    0
  • #13 08 Mar 2013 06:43
    fotonn
    Poziom 28  

    Cytat:
    Tak, inaczej nie spolaryzujesz MOSFET-a

    Tak tylko pomyślałem, bo zastanowiło mnie to wydłużenie czasu wyłączenia.
    Ale, niejako a'propos: nie tylko masy trzeba prowadzić oddzielnie - "plusy" też.
    Cytat:
    przecież układy i tak i tak nie będą oddzielone galwanicznie (zasilanie procka i silnika z jednego źródła) więc jest to bez sensu.

    Dlaczego?
    Pzecież właśnie wtedy możesz użyć zupełnie odrębnego źródła dla silnika, nawet bez wspólnych mas.
    Chyba, że nie ma takiego.
    Cytat:
    wystawia na MOSFET stan wysoki o wiele dłużej niż trzeba

    Ten typ mosfeta może włączać się już przy 0,6V na bramce - resztkowe napięcie w stanie niskim na wyjściu procka może nie wyłączać go jak rzeba.
    Wypróbuj dzielnik - czerwony rezystor - dobierz możliwie małą wartość tak, żeby w stanie włączenia napięcie Uds nie było za duże.
    Reset mikrokontrolera po włączeniu silnika

    0
  • #14 08 Mar 2013 08:30
    Mol
    Poziom 30  

    Jak odłączysz mosfeta to ci czasy pasują ? Bo to trochę dziwnie by procesor zakłócało. A jak planujesz jakiegoś PWM do tego silnika , to C1 wywal .

    0
  • #15 08 Mar 2013 08:41
    Piotr Piechota
    Poziom 21  

    Między mosfeta a silnik spróbuj wstawić pierścień ferrytowy z kilkoma zwojami. Pojemność pasożytnicza uzwojeń plus kondensator który dodałeś do silnika wymusza szpilki prądu o dużej amplitudzie. Mi kiedyś takie dławiki bardzo pomogły choć był to silnik bezszczotkowy.

    0
  • #16 08 Mar 2013 10:11
    _jta_
    Specjalista elektronik

    W zasilaniu uC kondensator o sporej pojemności i do niego zasilanie doprowadzone przez diodę Schottky
    - chodzi o to, żeby nagły pobór sporego prądu przez silnik (np. zwarcie w komutatorze) nie zabrał całego
    napięcia zasilania z uC. A poza tym, czy kable zasilające silnik nie są za blisko układów uC?
    A zwłaszcza, czy prąd zasilania silnika (łącznie z tym przez MOSFET-a) nie płynie przez zasilanie uC?
    Do czego jest kondensator przy bramce MOSFET-a i szeregowy opornik? Co prawda dużego opóźnienia
    nie powodują, stała czasowa to 100us, może więcej wnosi pojemność dren-bramka.

    0
  • #17 08 Mar 2013 10:56
    excray
    Poziom 39  

    Lepiej pokaż zdjęcie połączeń w układzie - szczególnie zasilania i masy silnika (masa mosfeta) i uC. Moim zdaniem tam jest problem.

    0
  • #18 08 Mar 2013 18:18
    cefaloid
    Poziom 30  

    kiclaw napisał:
    Na chwilę obecną schemat wygląda następująco:

    Reset mikrokontrolera po włączeniu silnika

    Postęp jest o tyle że nie ma resetu, ale ciągle są zakłócenia bo procek wariuje (wystawia na MOSFET stan wysoki o wiele dłużej niż trzeba).


    A zrób taki niedrogi test:
    +3V do zasilania procesora puść przez rezystor np 100 omowy lub diodę. Możesz dla testu tą co jest przy silniku bo i tak chyba nic tam konkretnego nie robi.

    Tak sobie myślę że w tym momencie masz plus baterii, silnik i zasilanie procesora połączone galwanicznie. Jeśli silnik sieje zakłóceniami to dostają się do procesora. Kondensatorki o łącznej pojemności 20uF to za mało by to wyeliminować bo silnik zapewne generuje mocne zakłócenia.

    Jeśli zaś zasilanie +3V pójdzie przez rezystor 100R lub diodę na te kondensatory które tam masz, to zrobi się dolnoprzepustowy filtr RC i ładnie usunie zakłócenia.
    Kondensatory będą wtedy filtrować napięcie tylko dla procesora a nie procesora i silnika. Wtedy te 20 mikro wystarczy.

    0
  • #19 08 Mar 2013 23:33
    dondu
    Moderator Mikrokontrolery Projektowanie

    Rozpatrujesz układ, a nie patrzysz na wydajność źródła zasilania, a tam są niespodzianki: http://mikrokontrolery.blogspot.com/2011/01/bateria-zasila-mikrokontroler-czesc-1.html

    Co to za urządzenie? Zabawka?
    Dokładasz do niej mikrokontroler, którego tam wcześniej nie było?

    Jeżeli tak, to powinieneś wstawić malutki regulator LDO, który będzie odpowiedzialny za zasilanie tylko i wyłącznie mikrokontrolera. Zamiast LDO, możesz zastosować malutką przetwornicę za kilka zł.

    W zamian można oczywiście (tak jak koledzy wyżej radzą) stosować rezystor i baterię kondensatorów, ale to nie daje takiej pewności działania jak LDO, czy przetwornica.

    Poza tym, usypiaj mikrokontroler gdy tylko się da i do najgłębszego możliwego trybu. Te kilka mA to ... ziarnko do ziarnka ...

    0
  • #20 09 Mar 2013 00:20
    _jta_
    Specjalista elektronik

    Żaden regulator nie pomoże, jeśli w silniku występują chwilowe zwarcia, trwające
    nawet poniżej milisekundy - w tym czasie bateria, ani nic, co jest z nią połączone,
    nie będzie zasilać uC - jeśli nie zapewni mu się zasilania, będzie się resetował.

    Ale może być i co innego - silnik daje skokowe zmiany prądu, na tyle szybkie, że
    widmo ich częstotliwości sięga megaherców i coś z tego przebija się do uC - przy
    takich częstotliwościach byle kawałek drutu działa jak antena i sieje zakłócenia.

    0
  • #21 09 Mar 2013 09:52
    dondu
    Moderator Mikrokontrolery Projektowanie

    _jta_ napisał:
    Żaden regulator nie pomoże, jeśli w silniku występują chwilowe zwarcia, trwające
    nawet poniżej milisekundy - w tym czasie bateria, ani nic, co jest z nią połączone,
    nie będzie zasilać uC - jeśli nie zapewni mu się zasilania, będzie się resetował.

    Dlatego napisałem w pierwszym zdaniu, by zobaczył jak działa źródło napięcia, przy nagłym skoku poboru prądu.

    Regulator LDO pomoże, oczywiście w zakresie do jakiego zostanie dobrany. Regulator wymaga także podłączenia kondensatorów magazynujących energię, które łącznie z nim przy minimalnym poborze mocy z mikrokontrolera (redukowanym przez usypianie i zmniejszenie prędkości działania mikrokontrolera, a może i napięcia zasilania) pozwolą spokojnie przetrwać, moment rozruchu.

    Poza tym, warto się zastanowić nad PWM i kontrolować moment startu, by nie narażać tak bardzo baterii na opisane w pierwszym linku zjawisko.

    Napisałem także o przetwornicach, a te potrafią podnosić napięcia pracy z np. 0,4V do wystarczającego dla podtrzymania pracy mikrokontrolera. Kwestia doboru odpowiedniej np. MCP1640 za 2,5zł: http://ww1.microchip.com/downloads/en/DeviceDoc/22234B.pdf

    0
  • #22 09 Mar 2013 10:50
    _jta_
    Specjalista elektronik

    A może tranzystor ograniczający prąd silnika do sensownej wartości?
    (bipolarny o niskim napięciu nasycenia, połączony kolektorem do silnika)

    0
  • #23 09 Mar 2013 14:22
    szod
    Poziom 33  

    Jak długi przewód masz do przycisku resetu? Może być niezła antena. Równolegle do przycisku można dołączyć kondensator np. 100n i zmniejszyć rezystor od plusa. Co robi drugi przycisk? Przeanalizuj jak układ zareaguje na zakłócenia na tym pinie. Typ µC na schemacie jest prawidłowy? Kondensator pomiędzy bramką a masą jest zbędny. Poza tym, jak kolega _jta_ wyżej radził, dać większy kondensator elektrolityczny w zasilaniu.

    0
  • #24 09 Mar 2013 18:24
    kiclaw
    Poziom 16  

    Dziękuję za tak liczny odzew.

    Przelutowałem układ jeszcze raz na płytce uniwersalnej (jest to prototyp więc nie ma tego jeszcze na laminacie). Dodałem parę elementów i zmieniłem diodę na 1N4007.

    Na chwile obecną schemat wygląda tak:

    Reset mikrokontrolera po włączeniu silnika

    A sam układ tak:

    Reset mikrokontrolera po włączeniu silnika

    Reszta jest pomontowana na stykówce.

    Co najważniejsze, na chwile obecną układ działa dobrze w 60% przypadków. W reszcie jak zwykle wystawia jedynkę o wiele dłużej niz trzeba, choć zauważyłem że gdy mam rękę blisko silnika to procek częściej wariuje, ale połączenie obudowy silnika do GND nic nie dało.

    I teraz:

    fotonn napisał:
    Pzecież właśnie wtedy możesz użyć zupełnie odrębnego źródła dla silnika, nawet bez wspólnych mas.
    Chyba, że nie ma takiego.


    Całość jest zasilana z tych samych baterii.

    Mol napisał:

    Jak odłączysz mosfeta to ci czasy pasują ? Bo to trochę dziwnie by procesor zakłócało. A jak planujesz jakiegoś PWM do tego silnika , to C1 wywal .


    Tak, jak odłączę bramkę to wszystko pięknie działa. Nie planuję PWM. Silnik jest załączany raz na 30 minut na 2 sekundy.

    Piotr Piechota napisał:

    Między mosfeta a silnik spróbuj wstawić pierścień ferrytowy z kilkoma zwojami.

    Niestety ani w moim mieście, ani w Katowicach ferrytów brak :(

    _jta_ napisał:

    W zasilaniu uC kondensator o sporej pojemności i do niego zasilanie doprowadzone przez diodę Schottky
    - chodzi o to, żeby nagły pobór sporego prądu przez silnik (np. zwarcie w komutatorze) nie zabrał całego
    napięcia zasilania z uC.


    OK, wrzucę w takim razie diodę 1N4007 to płytki ( na razie mam tylko taką)

    _jta_ napisał:

    Do czego jest kondensator przy bramce MOSFET-a i szeregowy opornik? Co prawda dużego opóźnienia




    nie powodują, stała czasowa to 100us, może więcej wnosi pojemność dren-bramka.


    Do zmniejszenia czasu załączania się MOSFETA, chodzi o to żeby nie otwierał się nagle, bo wtedy na silniku powstają duże zakłócenia. Opornik 1kΩ służy do jego rozładowania, żeby kondensator nie rozładowywał się przez mikroprocek, bez żadnego oporu.

    cefaloid napisał:

    A zrób taki niedrogi test:
    +3V do zasilania procesora puść przez rezystor np 100 omowy lub diodę. Możesz dla testu tą co jest przy silniku bo i tak chyba nic tam konkretnego nie robi.


    Na gałęzi gdzie jest procek wrzuciłem rezystor 100Ω. Diodę dolutuje i dam znać.

    dondu napisał:

    Rozpatrujesz układ, a nie patrzysz na wydajność źródła zasilania, a tam są niespodzianki: http://mikrokontrolery.blogspot.com/2011/01/bateria-zasila-mikrokontroler-czesc-1.html

    Co to za urządzenie? Zabawka?
    Dokładasz do niej mikrokontroler, którego tam wcześniej nie było?

    Jeżeli tak, to powinieneś wstawić malutki regulator LDO, który będzie odpowiedzialny za zasilanie tylko i wyłącznie mikrokontrolera. Zamiast LDO, możesz zastosować malutką przetwornicę za kilka zł.

    W zamian można oczywiście (tak jak koledzy wyżej radzą) stosować rezystor i baterię kondensatorów, ale to nie daje takiej pewności działania jak LDO, czy przetwornica.

    Poza tym, usypiaj mikrokontroler gdy tylko się da i do najgłębszego możliwego trybu. Te kilka mA to ... ziarnko do ziarnka ...


    Baterie muszą wystarczyć, ponieważ pierwotnie urządzenie było zasilane właśnie przez 2xAA.

    Przetwornicy nie zastosuje bo 3V w zupełności wystarczy. Co do LDO na torze zasilania mikroprocka, to dobry pomysł, ale na razie powalczę z kondensatorami bo pierwotnie LDO w urządzaniu nie było.

    Co do usypiania, to na chwile obecną mikroprocesor pobiera 10µA w czasie pracy (tryb IDLE) więc jest OK :). Na samych kondensatorach 10µF i 100nF pracuje przez ~9 sekund.

    _jta_ napisał:

    Ale może być i co innego - silnik daje skokowe zmiany prądu, na tyle szybkie, że
    widmo ich częstotliwości sięga megaherców i coś z tego przebija się do uC - przy
    takich częstotliwościach byle kawałek drutu działa jak antena i sieje zakłócenia


    Ano możliwe, zwłaszcza że procek teraz zazwyczaj wariuje gdy mam reke blisko silnika.
    _jta_ napisał:

    A może tranzystor ograniczający prąd silnika do sensownej wartości?
    (bipolarny o niskim napięciu nasycenia, połączony kolektorem do silnika)


    Świetny pomysł! Zrobić to tak że kolektor i emiter "szeregowo" za silnikiem a baza z rezystorem równolegle bo bramki MOSFET'a? Ograniczył bym wtedy prąd do 0,6A
    szod napisał:

    Jak długi przewód masz do przycisku resetu? Może być niezła antena. Równolegle do przycisku można dołączyć kondensator np. 100n i zmniejszyć rezystor od plusa. Co robi drugi przycisk? Przeanalizuj jak układ zareaguje na zakłócenia na tym pinie. Typ µC na schemacie jest prawidłowy?


    ~2cm (bo na stykówce), reset jest zwarty przez ceramik do GND, żeby stamtąd nie wchodziły zakłócenia. Gdy wsadzę tam rezystor np. 2k2 to procek wariuje jakby częściej.

    Drugi przycisk to przerwanie zewnętrzne reagujące na zbocze opadające (dlatego pull-up), włącza on silnik niezależnie od wskazań TIMER0 - również na 2 sekundy. Typ uC jest poprawny.

    szod napisał:

    Kondensator pomiędzy bramką a masą jest zbędny. Poza tym, jak kolega _jta_ wyżej radził, dać większy kondensator elektrolityczny w zasilaniu.

    A co ze spowolnieniem włączania MOSFET-a? W zasilaniu od teraz jest 1000µF LOW-ESR

    0
  • #25 09 Mar 2013 19:51
    dondu
    Moderator Mikrokontrolery Projektowanie

    kiclaw napisał:
    Baterie muszą wystarczyć, ponieważ pierwotnie urządzenie było zasilane właśnie przez 2xAA.

    Przetwornicy nie zastosuje bo 3V w zupełności wystarczy. Co do LDO na torze zasilania mikroprocka, to dobry pomysł, ale na razie powalczę z kondensatorami bo pierwotnie LDO w urządzaniu nie było.

    Co do usypiania, to na chwile obecną mikroprocesor pobiera 10µA w czasie pracy (tryb IDLE) więc jest OK :). Na samych kondensatorach 10µF i 100nF pracuje przez ~9 sekund.


    Przetwornica czy LDO mają jedno podstawowe zadanie - rozdzielić zasilanie na część dot. mikrokontrolera i część dot. silnika.
    Ale mają także różne funkcjonalności. Ta przetwornica, którą Ci podałem, jest wręcz idealna dla Ciebie i prosta w wykorzystaniu. Oczywiście decyzja należy do Ciebie :)

    0
  • #26 09 Mar 2013 19:52
    _jta_
    Specjalista elektronik

    A może zamiast MOSFET-a dać zwykły bipolarny? BD135, albo BC338, albo BC140?
    Jest tylko kwestia, czy prąd, jaki da uC, wystarczy żeby taki tranzystor dał te 0.6 A.
    Te tranzystory mają grupy wzmocnienia, oznaczenie z końcówką np. -16 oznacza, że
    wzmocnienie prądowe jest około 160, powinny być i z końcówką -25, więcej nie.
    Ale trzeba sprawdzić dane katalogowe, bo przy prądzie bliskim maksymalnego, jaki
    tranzystor może przewodzić, wzmocnienie jest małe, a napięcie nasycenia duże -
    więc może 2 BC338 równolegle, albo jakiś BC (nie pamiętam jaki) na większy prąd?

    0
  • #27 09 Mar 2013 22:45
    trymer01
    Moderator Projektowanie

    Tu nie poradzi BD13x, bo mają zbyt małą betę i potrzebują zbyt dużego prądu bazy aby wejść w nasycenie. Poza tym mają one zbyt duże napięcie nasycenia Ucenas, co wyraźnie zmniejszy użyteczne napięcie na silniku - zostanie mu tylko 2,5V albo i mniej.
    BC337 już lepszy, ale przy tym prądzie nie da rady. On ma Icmax=0,7A i będzie narażony na przeciążenie, przy tym prądzie też ma duże Ucenas.
    Proponuję 2SC5707, 2SC5706, 2SC5709, ZDT1053.
    2SC wygodniejsze, są w różnych obudowach - nadają się też do przewlekanego montażu i nawet do radiatora- tu niepotrzebny
    Bardzo wysoka beta, bardzo niskie Ucesat rzędu 50mV (jak MOSFET), szybkie.
    2SC przy pracy jako klucz potrzebują prąd Ib=0,02Ic, co przy Ic=0,7A daje Ib=14mA, z praktyki wiem, że wystarcza im mniej, tylko Ucenas nieco wzrasta.

    0
  • #28 09 Mar 2013 23:59
    Mol
    Poziom 30  

    Jeżeli nie będziesz robić PWM to daj zwykły przekaźnik , może nie będzie ci robić takich zakłóceń ?

    0
  • #29 10 Mar 2013 00:08
    excray
    Poziom 39  

    A tak w ogóle to co to za mikroprocesor? I jakie jest jego napięcie pracy? Bo na pewno nie ATTINY4832A.

    0
  • #30 10 Mar 2013 10:42
    jarek_lnx
    Poziom 43  

    Ciekaw jestem co jest na tej "stykówce", bo przecież na takiej płytce nie da się zrobić ani żadnego (działającego) filtru przeciwzakłóceniowego, ani skutecznego odprzęgania zasilania.

    0
  Szukaj w 5mln produktów