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

[Atmega 8a][Arduino][l293dne] - Nie działa PWM

01 Sty 2017 12:02 1023 18
  • Poziom 12  
    Witam, ostatnio robiłem projekt, który w oparciu o dane przesyłane przez moduł bluetooth (XM-15) Podejmował rozmaite działania. Program napisany w języku arduino (dla większej prostoty) wydląda tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Komunikacja przebiega poprawnie, ponieważ działają wszystkie punkty programu oprócz pierwszego, czyli w moim przypadku sterowania silnikiem. Nie da się regulować prędkością jego obrotów, silnik albo się kręci, albo stoi w miejscu. Dodam, że używam napisanej przez brata aplikacji komputerowej, która przesyła dane przez bluetooth do mojego mikrokontrolera. Dlatego właśnie taki sposób napisania programu(
    Kod: c
    Zaloguj się, aby zobaczyć kod
    ) najbardziej mi odpowiadał.
    Proszę o pomoc w rozwiązaniu mojego problemu.
    Pozdrawiam

    Po paru testach postanowiłem podłączyć sterownik silników do zwykłego potencjometru i dzieje się to samo.
    Posiadam taki sterownik. Czy dobrze go podłączam? Najpierw zasilanie, a potem B-1B do 5v a B-1A do potencjomertu...
  • Poziom 25  
    kamdz napisał:
    a = 0;
    b = 0;
    if (Serial.available())
    {
    a = Serial.parseInt() ;
    //Serial.println(a);
    b = a%1000;
    a = a-b;
    a = a/1000;

    Na jakiej podstawie sądzisz że po takich obliczeniach zmienna a typu long będzie miała ładne okrągłe wartości: 1,2,3...
    Do instrukcji switch() lepiej stosować zmienne typu całkowitego.
  • Poziom 12  
    Nie bardzo rozumiem, zdaje mi się, że long to zmienna całkowita. Poza tym tak jak napisałem, mam dedykowaną aplikację, która zawsze wysyła mi dane w takim formacie: pierwsza cyfra - numer instrukcji; A dalsze trzy (jeżeli używane, jak nie, to po prostu zera) dane przesyłane. Przykładowo po odebraniu 2000 program rozpisze to na 2 i 000, co spowoduje przejście do punktu 2 w instrukcji switch i przesunięcie serwa do pozycji 000;
    Jak potem napisałem, nie wiem dokładnie w czym leży problem, ponieważ silnik (oraz diody LED) reagują tak samo gdy steruję je za pomocą potencjometru. Testowałem też na układzie l293dne i nadal to samo... Co tu jest nie tak?
  • Poziom 12  
    Dziękuję, ale chodziło mi bardziej o rozwiązanie, które zrozumiem, no i jak zrobić żeby ten mój program działał. Sprawdziłem mostek h zmieniając mu stan co 1ms i działa, a gdy używam normalnego pwm to działa tylko przy 255, natomiast przy 254 mostek h daje mi 0V. Co może być tego przyczyną, jak to naprawić?
  • Poziom 25  
    Może dla pewności sprawdź za pomocą prostego przykładu:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 25  
    Nie znam się na arduino ale możesz spróbować na innym pinie.
    Pokaż schemat.
  • Poziom 12  
    W tym momencie nie mogę; ale podłączyłem poprawnie zasilanie bo świeci się dioda na sterowniku, i jedną nózkę sterownika do masy, a drugą do pinu 11 w Atmedze...
  • Poziom 12  
    Dziękuję:) spróbuję to zrobić w taki sposób jak będę tylko mógł; Jednak wydaje mi się, że to nic nie zmieni: Tam są podpięte oba piny do Arduino, ponieważ jest używane sterowanie kierunkiem obrotów. Ja chciałem sterować tylko prędkością i dlatego drugi pin zwarłem z GND.
    Ale dziękuję i przetestuję jak tylko będę miał okazję.
  • Pomocny post
    Poziom 35  
    kamdz napisał:
    W tym momencie nie mogę; ale podłączyłem poprawnie zasilanie bo świeci się dioda na sterowniku, i jedną nózkę sterownika do masy, a drugą do pinu 11 w Atmedze...


    Nie możesz mieszac 'zwykłej' numeracji pinów mega8 z numeracją przyjęta w Arduino. Te numery nie pokrywaja się !!!
    Pin 11 dla Mega8 jest PD5 lub alternatywne wejście Licznika/Timera1 (w Arduino liczyłby się pin5), natomiast w Arduino pin11 jest 'zmapowany' pod pin PB3 (mega8) z alternatywnym wyjściem PWM Timera2.
    Aby sterowac silnikiem przez ten mostek/(driver HG7881) potrzebujesz jednym z wejśc (IB) sterowac kierunek obrotów, natomiast drugie wejście IA) pulsowac sygnałem PWM.
    Jeżeli potrafisz skonfigurowac Timer1 albo Timer2 do pracy w trybie PWM ;f= kilka kHz, to odpowiednie wyjście tego sygnału podłącz do wejścia IA
    Potencjometr w tym wypadku możesz podłączyc do któregos wejścia analogowego M8 i zmianami napięcia na jego suwaku możesz w relatywnie prosty sposób regulowac wypełnienie PWM na wyjściu odpowiedniego timera, co jest równoznaczne ze zmianami obrotów silnika.
    Może inaczej: Jeżeli potrafisz regulowac jasnościa świecenia diody (oczywiście sygnałem PWM a nie bezpośrednio potencjometrem) to ten sygnał podepnij na wejście IA sterownika L9110 (HG7881). Byc może będzie trochę głośny, ale od czegoś zaczniesz.
    W tytule masz mostek L293D; - mimo ze spełniaja one podobna funkcję, to wysterowanie ich jednak jest różne.
    Kolega w poście wyżej, kierował cię na drogę programowania w Arduino, gdy tymczasem dysponujesz powiedzmy 'gołym' mega8, który nie jest defaultowo wspierany przez Arduino. Owszem możesz doinstalowac do Arduino IDE support dla całej rodziny m8/m48/m88/m168/m328 i wtedy przed kompilacją wybrac z listy odpowiedni processor dla którego kompilujesz program. Zaprogramowany tą metodą processor, podłączasz do rzeczywistego układu kierując się odpowiednim diagramem zwanym 'Pin Mapping' dla stosowanego processora.

    e marcus
  • Poziom 12  
    Dzięki e marcus. O tym wszystkim wiem, sterowniki podłączałem pod pin pb3 czyli 17 w atmedze; w arduino ide mam doinstalowane atmega 8a@ 8mhz i parę innych. Dioda led podłączona pod to wyjście zmienia swoją jasność, natomiast podłączona przez mostek h już nie. Tak jak napisałem wcześniej nie używam drugiego pinu sterownika bo nie mam potrzeby zmiany kierunku programowo - zrobiłem to raz, fizycznie. Jak napisałem wcześniej kupiłem sobie klon Arduino Mega od robotdyn, powinien do mnie dojść jeszcze w tym tygodniu - dam znać czy coś się zmieniło.
    Najbardziej zastanawia mnie to, że dioda podpięta bezpośredni zmienia jasność, przez sterownik już nie ...:/
  • Poziom 35  
    kamdz napisał:
    Dzięki e marcus. O tym wszystkim wiem, sterowniki podłączałem pod pin pb3 czyli 17 w atmedze; w arduino ide mam doinstalowane atmega 8a@ 8mhz i parę innych. Dioda led podłączona pod to wyjście zmienia swoją jasność, natomiast podłączona przez mostek h już nie. Tak jak napisałem wcześniej nie używam drugiego pinu sterownika bo nie mam potrzeby zmiany kierunku programowo - zrobiłem to raz, fizycznie.
    /

    Wygląda że wiesz co robisz\...
    Niemniej jednak zwróc uwage na zalecenia: które z wejśc wybrac jako ustawienie kierunku obrotów , a które dla regulacji PWM.
    Wewnętrzna budowa układu L9110 nie została opublikowana. Nie jest to bynajmniej zwykły mostek H. Jest to układ typu ASIC , którego statyczna funkcjonalnośc podana w lakonicznym datasheet (Truth Table)_nie wskazuje na różnice w wyborze wejśc, jednak zalecana jest konfiguracja podłaczenia jak nizej :
    - do sterowania kierunkiem obrotów wybrac wejście IB .
    - dla sygnału PWM wykorzystac wejście IA.
    Jeżeli twój przypadkowy wybór trafił inaczej, to doradzałbym wytestowac taką alternatywną mozliwośc.

    e marcus
  • Poziom 12  
    Tak właśnie wybrałem:) a może łatwiej byłoby to zrobić na układzie l293dne który także posiadam? Czemu ten scalak reaguje tak samo jak l9110... czy może to być problem z Uc?
    P.S. Myślę, że wiem co robię;) na atmegach siedzę już trzeci rok a na arduino drugi, mimo, że mam 14 lat :)
  • Poziom 35  
    kamdz napisał:
    ........... a może łatwiej byłoby to zrobić na układzie l293dne który także posiadam? Czemu ten scalak reaguje tak samo jak l9110... czy może to być problem z Uc?


    Nie, nie jest łatwiej..
    Łatwiej to zrobisz na jednym tranzystorze na przykład LL Mosfet+ 1 dioda, +1 lub dwa rezystory.
    Skoro interesuje cię tylko jeden kierunek obrotów silnika, to mostek H jest tu zupełnie zbyteczny; zatem z L293D wykorzystasz tylko 1/4 tego układu i diodę.

    kamdz napisał:

    Myślę, że wiem co robię;) na atmegach siedzę już trzeci rok a na arduino...


    Mi się też tak wydawało, dlatego Ci to napisałem...

    e marcus
  • Poziom 12  
    Rozumiem, w sumie mógłbym tak rozwiązać ten problem, ale mimo wszystko ciekawi mnie, czemu te sterowniki nie działają tak jak powinny... w końcu to ponad 30 zł... No i gdyby udało się uruchomić ten układ to nie musiałbym inwestować jeszcze w mosfet :D
  • Poziom 12  
    Witam, problem, który wcześniej opisałem nie występuje już, gdy całość podłączyłem pod klona arduino mega:) Mimo to jeżeli ktoś byłby w stanie powiedzieć mi, czemu nie działało na atmedze 8, nadal chętnie się tego dowiem.
  • Poziom 12  
    Mam jeszcze jedno pytanie: Jak wyglądałby układ, gdybym chciał podłączyć ten silnik przez tranzystor? I jaki tranzystor mógłbym użyć?