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

40-to kanałowa jednostka PWM

Morpheusss 26 Gru 2006 21:49 5991 22
  • 40-to kanałowa jednostka PWM
    Witam!
    Chciałem zaprezentować swój projekt, a mianowicie 40-to kanałową jednostkę PWM, pracującą z częstotliwością ok 3-5kHz i rozdzielczością 8-bit na kanał. Jednostka PWM jest częscią dużo większego projektu - interaktywnego oświetlenia oczka wodnego, który niestety upadł (wątek pojawia się w tym temacie https://www.elektroda.pl/rtvforum/viewtopic.php?t=629694 ) Według pierwotnego przeznaczenia układ sterował czterdziestoma LEDami typu Flux i do tego został zoptymalizowany.
    5 portów kontrolera Atmega 169 wraz z pięcioma ULN2803 i odpowiednimi rezystorami stanową źródła prądowe dla sterowanych LEDów. Układ komunikuje się ze źródłem danych (PC z moim softem) poprzez UART (baud 115200), magistralą RS-488, wykorzystując mój protokół transmisji - 40 kolejnych ramek z wartością dla kolejnego kanału + ramka synchronizacyjna. 41 ramek tworzy jedną klatkę. Odbiór przez UART nawet 100 klatek na sekundę nie powoduje mrugania LEDów :) Odebrana klatka jest wyświetlana, do czasu odebrania następnej. Procesor jest taktowany kwarcem 16MHz, wbrew moim obawom - nie ma z tego powodu błędów w transmisji. Układ w obecnej formie okazał się najlepszym rowiązaniem w kategoriach "efektywność / koszt / prostota / łatwość montażu" Przewinęły się przez myśl inne rozwiązania, np 30-to kanałowy DAC 16-bit, ale byłby to przerost formy nad treścią :)
    Schemat i płytkę zaprojektowałem w Protelu 99SE, płytka wykonana w warunkach domowych metodą fotochemiczną, dzięki uprzejmości Dżejwora (KJ na tutejszym forum), za co serdecznie dziękuję :) Ze względu na praktykę oraz warunki pracy urządzenia zdecydowałem się wykonać całość w SMD (ULNy są przewlekane, po prostu skróciłem im nóżki - efekt jak widać)
    Soft napisałem w Bascomie, jest genialny w swojej prostocie ;) Od razu odpowiadam na prawdopodobne pytanie "dlaczego PWM nie jest zrobiony na przerwaniach?" - Ano dlatego, że wykonanie na przerwaniach narzuca z góry określoną i niestety niedużą szybkość PWMu. Ponadto bałem się kolizji z przerwaniami obsługi UARTa.
    Idea okazała się strzałem w dziesiątkę, układ w pełni, a nawet ponad zamierzenia spełnił moje oczekiwania.
    Załączam schemat, PCB, kilka zdjęć.
    Zapraszam do oglądania i zadawania pytań :)

    Edit:
    Kilka osób zapytało mnie o koszty, więc odpowiem tutaj:
    ATMEGA169-16AI obudowa:TQFP64 (SMD) - 13.90 zł (jak za darmo przecież)
    5x ULN2803A stopnie wyjściowe 8×Darlington DIP18 - 7.50zł
    Stabilizator 5V - 1zł
    Oporniki, kondensatory, kwarc - ok 3zł
    RAZEM - ok 25zł plus koszty wykonania PCB

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    Morpheusss
    Poziom 15  
    Offline 
    Specjalizuje się w: logika programowalna, embedded systems, ekrany led
    Morpheusss napisał 223 postów o ocenie 7, pomógł 8 razy. Mieszka w mieście Mikołów. Jest z nami od 2006 roku.
  • PCBway
  • #2
    chaka
    VIP Zasłużony dla elektroda
    heh a juz myslalem ze to bedzie modul jak w ekwadorze kilkadziesiat kW, detekcja zera itp a tu uln 2803:P ale i tak brawa szczegolnie za protokol:)
  • #3
    maxrider
    Poziom 20  
    wykonanie płyteczki perfekcja w 300%
  • PCBway
  • #4
    Morpheusss
    Poziom 15  
    Dodam, że zakres zastosowań tego sterownika jest ogromny. Ja użyłem go do sterowania akurat LEDami, i ma to być raczej pomysł do dla innych, niż chwalenie się konstrukcją. Jeśli masz zamiar wykorzystać mój pomysł, napisz a prześlę Ci projekt w Protelu i program w Bascomie, ew. wsad do procka. Sam długo kombinowałem w jaki sposób tanio i prosto uzyskać płynne sterowanie 40 kanałami, i przyznam, że jeszcze 2 lata temu na obecny pomysł bym nie wpadł. Więc bierzcie i jedzcie ;)
  • #5
    vcd_a
    Poziom 18  
    Ja bym prosił bardzo, przyda mi się z pewnością taki projekt :P, pozdrawiam
  • #6
    adammruk
    Poziom 16  
    Płyteczka piękna, ale tą ATMEGE można było ładniej troszeczkę przylutować ;) Ale ogólnie projekt niezły.
  • #7
    Fac4per
    Poziom 10  
    Projek jest poprostu idealny, płytka wyszła przepieknie dobrze było by to zobaczyć w akcji. Ocenka 6/6
  • #8
    dex
    Poziom 27  
    mumbler napisał:
    Płyteczka piękna, ale tą ATMEGE można było ładniej troszeczkę przylutować ;) Ale ogólnie projekt niezły.


    Dokłądnie, troche te kluchy psuja efekt, raczej przez to że pady nie były pobielone przed lutowaniem do tego dużo kalafonii, nagrzewasz cały bok i masz prawie jak fabryka. Nie mniej jak działa jak nalezy to plus.
  • #9
    lechoo
    Poziom 39  
    Czemu taki dziwny sposób montażu elementów (przystosowanych do montażu przewlekanego) użyłeś?
  • #10
    Morpheusss
    Poziom 15  
    Atmega przylutowana jak przylutowana bo... lutowałem ją zwykłą transformatorówką :) Następne płytki zamierzam pocynować chemicznie, lub prądowo. Wtedy lutowanie będzie czystą przyjemnością Dotychczas przed lutowaniem PCB malowałem preparatem Plastik 70 firmy Kontakt Chemie mającym ułatwiać lutowanie i chronić przed korozją druku, jednak według mnie preparat nienajlepiej się spisuje.
    Lechoo : Płytka miała być zamknięta w płaskiej puszce i zasypana żwirem (kamuflaż ;) ) Lutując wszystko w SMD mam łatwy dostęp do elementów, i nie w razie jakiejkolwiek awarii nie muszę odlutowywać 50 przwodów i wyciągać płytki, żeby serwisować. Muszę się przyznać, że jest jeszcze drugi powód... mianowicie zaprojektowałem cały schemat, zapominając, że ULNy i atmega są na różnych layerach... co z tego wynika nie musze chyba mówić ;)
    Dzięki za przychylne komentarze!
    Pozdrawiam wszystkich!!
  • #11
    pdmk
    Poziom 18  
    KJ Ci plytke trawil?
    Sprawa swietna, juz wczesniej to widzialem z tajnych zrodel :P
    6/6
  • #12
    ncmarcin
    Poziom 10  
    Witam.
    Bardzo zainteresował mnie ten algorytm PWM . Chętnie obejrze ten kod w bascomie. Zawsze pisze programowy PWM na przerwaniach. Jesli to mozliwe to prosze przybliżyć ten wątek.
  • #13
    Klewi
    Poziom 13  
    Jak można to prosił bym o kod do celów badawczych na maila :)
  • #14
    Morpheusss
    Poziom 15  
    Algorytm jest banalny. mamy tablice 40 bajtów (wartości jasności świecenia 40 LEDów). Resetujemy wszystkie porty. Tworzymy pętlę for I=1 to 255 (wartość 255 jest zarezerwowana dla ramki synchronizacyjnej) i w każdym kroku pętli sprawdzamy która wartość z tablicy ma wartość I i ustawiamy wartość 1 na pinie, który odpowiada LEDowi z tablicy. Zagmatwanie brzmi, lepiej zobaczcie program sami, to na pewno zrozumiecie ;)
    Wrzucam program w Bascomie i projekt protelowy
  • #15
    iwan3000
    Poziom 16  
    Fajne, ale wytłumaczcie mi do czego to służy :)
  • #16
    ncmarcin
    Poziom 10  
    Co do algorytmu - ciekawy i faktycznie do tego zastosowania wystarcza. Skoro ma 3-5 Khz to zmiana kwarcu z 16 Mhz na 11.0592 nie powinna zaszkodzić a przy Uarcie 115200 błąd zmnejsza się z 7,5% do teoretycznie 0.Jescze co do tych 3 - 5 Khz to według bascomowego symulatora to na wykonanie glownej petli potrzeba 400 cykli a na odebranie ramki okolo 200 w związku z tym czy ten Pwm nie powinien osiągać przynajmniej 20 do 30 Khz. Jeśli się myle to proszę o poprawienie mnie.
  • #17
    wojtek999
    Poziom 16  
    Hej, jaką metodą robiłeś płytkę? Wyszła naprawdę super. Co do lutowania SMD to polecałbym pastę lutowniczą. Nakładasz najpierw na każdy pin po czym przyklejasz scalaka i lutownicą po nóżkach...najlepiej na gorące powietrze.
  • #18
    mariuz
    Poziom 32  
    Gratuluję, i pomysłu, i wykonania :)

    Rozumiem, że PC może sterować kilkoma sztukami tego ustrojstwa?

    Gdybyś mógł przybliżyć trochę o programie do PC.. Bo ja już widzę zastosowanie dla tego projektu :)
    Mianowicie, (Jakie trudne słowo :D ) kolega mnie męczy o zrobienie dekoracji do przedstawienia teatralnego (do pomocy bym miał "pana od scenografii" z Romy), no ale że nie czułem się na siłach, to mu powiedziałem, że się nie da ;)

    Ale teraz to zbieram na laserówkę i laminator.. i robie płytki :D
    Może uda się ten blok na scenę stworzyć :)

    Wielkie dzięki i gratulacje Morpheusss

    P.S. Ta przejściówka PC<==>RS488 to pewnie też tania jak barszcz?

    Edit:
    Ehh... i znowu sie naprodukowałem i jak przeczytałem, to się okazało, że offtopic :( Więc przepraszam, ale skrócić tego posta nei bardzo umiem ;)
  • #19
    mirekk36
    Poziom 42  
    ja też przyznam, że bardzo ciekawy projekt jak i wykonanie. Sposób na takiego PWMa o jakim piszesz też już wymyśliłem wcześniej z tym że narazie sterowałem nim tylko jedną diodę RGB . Potem wymyśliłem sobie, że będę sterował ich około 8szt każda oddzielnie i własnie się zastanawiałem czy jak zrobię to w takim wydaniu to ten mój PWM da radę - ale widzę po twoim rozwiązaniu, że spokojnie i mam jeszcze duży zapas - ja oprogramowałem sobie takiego PWMa w asemblerku. Kolejna ciekawa informacja z której skorzystałem czytając twój temat to to, że wykorzystałeś kwarc 16MHz i uart działa ci dobrze przy prędkości 115200 .... ja któregoś razu zaprojektowałem sobie tak układ jak zaczynałem z programowanie UARTa i zrezygnowałem w ostatniej chwili z 16MHz na korzyść 11.059 MHz bo naczytałem się że inaczej to mi nie pójdzie na 115200 a tu proszę ;)

    pozdrówka
  • #20
    Morpheusss
    Poziom 15  
    ncmarcin - PWM przy okazji podłączę do oscyloskopu (muszę pożyczyć). Życie pokazało, że symulator bascomowy a rzeczywistość to 2 przeciwności ;) Ale oczywiście nie mówię, że nie masz racji !
    wojtek999 - płytka wykonana metodą fotochemiczną (Positiv + B327). Zgadza się - pasta lutownicza jest świetna, jednak do tych kilku skomplikowanych płytek które robię w roku, jakoś nie kwapiłem się inwestować w zakup pasty, ale chyba w końcu się zdecyduję :)
    Schnelltot - liczba ustrojstw podłączonych do komputera jest ograniczona jedynie przepustowością RSa w komputerze ;) Swój soft napisałem w Delphi 7 i raczej go do swojego zastosowania nie wykorzystasz (zasada działania). Jeśli będziesz pisać w D7 i mieć jakies problemy, to odezwij się ;)
    mirekk36 - właściwie, to błąd przesyłu między dwoma uC wynosił 0. Myślę, że wzięło się to z tego, że obudwa uC były taktowane kwarcami 16MHz i błędy wysyłania przez jeden i odbierania przez drugi wzajemnie się "korygowały" ;)
  • #21
    mariuz
    Poziom 32  
    Dobra :D

    Wkręciłem się w ten projekt i chciałbym spróbować napisać własny soft do obsługi tego cuda :)

    Więc prosiłbym o projekt w D7 i użyte niestandardowe komponenty.
    Niestety będę pisał "na sucho" - bez hardware'u... Z resztą teraz mój czas na pisanie będzie ograniczony, bo trochę zapomniałem o nauce ;)

    Ale na ile starczy mojej mocy, na tyle pójdzie ona w ten projekt :)
    Na dalszy plan zrzucam nawet projekty "laserowe" :P
  • #22
    szeryf.rm
    Poziom 22  
    Matko, odświeżę temat, choć stary, ale tak wprowadza w błąd, ze masakra i nikt z was w ogóle tego nie dostrzegł.
    Skąd kolega wziął to 3-5kHz? Jeden cykl PWM to jeden cykl PWM a nie jeden cykl pętli obsługującej pojedynczy stopień wypełnienia... jak to niby miałoby działać?
    Liczmy najprościej jak się da... 16 000 000 cykli na sekundę, bo tyle zegar, następnie 3 000 to niby PWM co daje, że na jeden cykl PWM mamy 5333 cykli zegara. Rozdzielczość to 256, więc wychodzi że na obsłużenie 40 kanałów w jednej iteracji pętli mamy 21 cykli? Jak chcesz przy pomocy 21 cykli sprawdzić stan 40 bajtów w pamięci? Dziwi mnie natomiast, że tyle osób Ci przyklasnęło.

    Pozdrawiam i na przyszłość zmierz to co mówisz, albo przynajmniej policz.
  • #23
    Morpheusss
    Poziom 15  
    Temat starszy niż węgiel. Niestety zamieszczony w czasach kiedy nie miałem oscyloskopu i dopiero zaczynałem przygodę z uC. Faktem jest że 3kHz to dość mocno przestrzelona wartość, soft był pisany w bascomie więc szacuję że realnie nośna nie przekracza 300Hz. Przepraszam za wprowadzenie w błąd






    Nie raportować jako:
    3.1.19. Zabronione jest publikowanie wpisów w dyskusjach archiwalnych.
    ANUBIS