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

Regulacja prądu diody LED z wykorzystaniem regulatora PID

matokek 26 Cze 2017 18:45 930 11
  • #1 26 Cze 2017 18:45
    matokek
    Poziom 5  

    Dzień dobry wszystkim.
    Mam za zadanie skonstruowanie urządzenia, które pozwoli zasilać diodę LED dużej mocy. Ma wykorzystywać regulator PID. Jak wiadomo, do stabilnej pracy takiego źródła światła niezbędny jest układ zapewniający stałą wartość prądu - tak, aby nie została ona przekroczona wraz z biegiem czasu przy obciążeniu.
    W internecie znalazłem notę aplikacyjną firmy Microchip, która opisuje dokładnie taki mechanizm, który chce wykonać. Oparty jest on jednak o mikrokontroler PIC (12HV615). Wspomniany PDF można znaleźć tutaj.
    Przypuśćmy, że moje źródło napięcia to też 12 V, a dioda potrzebuje 3,5 V.
    W związku z tym bardzo proszę kogoś, kto zna sie na mikrokontrolerach, tudzież na zasilaniu diod mocy na odpowiedź na pytania:
    1) czy mogę zastąpić PICa płytką Arduino?
    2) do czego służą zworki J3 i J4? Na stronie drugiej piszą, że trzeba rozłączyć obwód w tych miejscach podczas programowania. Dlaczego? Czy projektując układ z Arduino też będę potrzebował zworek?
    Proszę o wyrozumiałość i rzeczowe wskazówki ;)

    0 11
  • Mitronik
  • #2 26 Cze 2017 18:53
    goldi74
    Poziom 43  

    A nie wystarczy zwykłe źródło prądowe?

    0
  • #3 26 Cze 2017 19:00
    matokek
    Poziom 5  

    Do działania na pewno wystarczy. Nie mniej jednak to na studia i mam z góry powiedziane, że trzeba użyć jakiegoś regulatora do kontroli prądu.
    Najpierw chcę zrobić taki układ dla mniejszej diody (takiej jak w PDFie), a jak się powiedzie to być może dla mocniejszej.

    0
  • #4 26 Cze 2017 19:08
    idepopizze
    Poziom 32  

    matokek napisał:

    1) czy mogę zastąpić PICa płytką Arduino?


    Jeżeli potrafisz oprogramować Arduino to powinno się udać
    Masz gotowy program napisany w C. Spójrz w architekturę tego PIC'a później w Atmela 328 i jak sobie to przemyślisz to może coś z tego będzie.

    matokek napisał:

    2) do czego służą zworki J3 i J4? Na stronie drugiej piszą, że trzeba rozłączyć obwód w tych miejscach podczas programowania. Dlaczego? Czy projektując układ z Arduino też będę potrzebował zworek?


    Bo ten procesorek jak sam widzisz ma 8 nóżek, a do jego zaprogramowania potrzebuje 3 które są później użyte do normalnej pracy układu. Na czas programowania trzeba je odpiąć od reszty elektroniki żeby jakiś tam rezystor czy inny kondensator nie narobił kaszany i nie pomieszał szeregowo przesyłanych informacji, bo wtedy miałbyś zapisane głupoty w pamięci tego małego procesorka. To tak tłumacząc prosto i obrazowo.

    matokek napisał:

    Czy projektując układ z Arduino też będę potrzebował zworek?


    Nie


    Jak potrzebujesz regulator PID pod Atmela to poszukaj dokumentu AVR221

    0
  • Mitronik
  • #5 26 Cze 2017 19:57
    matokek
    Poziom 5  

    idepopizze napisał:

    Jeżeli potrafisz oprogramować Arduino to powinno się udać
    Masz gotowy program napisany w C. Spójrz w architekturę tego PIC'a później w Atmela 328 i jak sobie to przemyślisz to może coś z tego będzie.


    To super. Zabieram się do pracy.

    Jeszcze chciałbym dopytać o parę rzeczy.
    Na schemacie przed samą diodą LED widać sygnał Vbus. Rozumiem to tak, że jest to 12 V bezpośrednio z zasilacza. Po lewej stronie, w części programatora PICa też jest Vbus. Czy to oznacza, że ten PIC i dioda mogły być zasilane z jednego źródła i oba urządzenia przyjmują 12V? Zastanawiam się jak mogłoby to wyglądać przy Arduino Leonardo, żeby go nie spalić. Pewnie coś będzie na rzeczy z dzielnikiem napięcia, chociaż niby na Vin może przyjąć do 20V... Link

    A co z Voltage Feedback (Vfb), które jest doprowadzone na pin 6 PICa? Sprawdziłem, że jest to wejście analogowe. Czyli powiedzmy, że A0 na Atmedze. Tutaj na bank trzeba proporcjonalnie obniżyć napięcie w granicach 0-5V. Czy ma coś z tym wspólnego rezystor R2?

    0
  • #6 26 Cze 2017 21:43
    idepopizze
    Poziom 32  

    matokek napisał:

    Na schemacie przed samą diodą LED widać sygnał Vbus. Rozumiem to tak, że jest to 12 V bezpośrednio z zasilacza. Po lewej stronie, w części programatora PICa też jest Vbus. Czy to oznacza, że ten PIC i dioda mogły być zasilane z jednego źródła i oba urządzenia przyjmują 12V?


    Radzę nie filozofować zbytnio tylko zajrzeć w notę aplikacyjną tego PIC12HV615

    http://ww1.microchip.com/downloads/en/DeviceDoc/41284E.pdf

    Tam na jednej z ostatnich stron są max parametry elektryczne procesorka i więcej jak 5,5V nie dasz bo go uwalisz. Poza tym nie ma chyba czym się przejmować, bo będziesz używał Atmegi a tam ma być 5V.

    Domyślam się że te 12V wykorzystywane jest przy programowaniu tego HV bo gdzieś tam w nocie napisali że potrzebne jest 13V (coś jak przy programowaniu starych Epromów, tam też przy programowaniu było używane 12.5V albo 21V). Ale nie bardzo chce mi się czytać całej noty do PIC bo ich nie używam.

    matokek napisał:

    A co z Voltage Feedback (Vfb), które jest doprowadzone na pin 6 PICa?


    Jak chcesz to możesz kontrolować go Atmegą. Sprawdź w programie czy procesor go z czym w regulatorze PID łączy, bo jak nie to jest to tylko sztuka dla sztuki.

    matokek napisał:

    Sprawdziłem, że jest to wejście analogowe. Czyli powiedzmy, że A0 na Atmedze. Tutaj na bank trzeba proporcjonalnie obniżyć napięcie w granicach 0-5V. Czy ma coś z tym wspólnego rezystor R2?


    Dobra żeby nie być gołosłownym schemat który będziesz robił będzie wyglądał tak:

    Regulacja prądu diody LED z wykorzystaniem regulatora PID

    Do obniżenia napięcia Voltage Feedback (+12V) masz dzielnik R5 i R6. Przelicz jak to wyjdzie dla 12V.

    Praktycznie potrzebowałbyś 3 piny Atmegi. Korzystasz z portu PC0-PC5 (ADC0-ADC5) bo tam masz analoga. Nie wiem jak to się oznacza w Arduinio bo nie używam. Programuje te procesorki w czystym C i nie używam tej platformy więc wybacz, ale opisuje co i jak w czystej postaci. Ty będziesz to ubierał w ten dialekt pod arduinio.

    Informacje o prądzie masz z Rsense i przez U2 podajesz go jako napięcie na wejście analogowe Atmegi, dajmy na to ADC0
    Informacje o napięciu 12V przez dzielnik oporowy R5, R6 podajesz na ADC1

    Doczytaj sobie o tym IRRL bo go nie znam, a piszę o tym bo tam do jego sterowania jest R3 i jeżeli używałbyś innego tranzystora to jakaś rezystancja mała jednak byłaby potrzebna. Jak doczytasz to będziesz wiedział po co.

    Nie analizowałem programu więc nie wiem jak sterowany jest ten tranzystor Q1 czy napięciem czy falą PWM. Jeżeli PWM to wystarczy dowolne wyjście cyfrowe.

    Co do programu to gotowiec z PIDem masz napisany w C w dokumencie AVR221
    Jest też praca magisterska z regulatorem PID do sterowania temperaturą.

    Zajrzyj do tego tematu i poczytaj o dobieraniu parametrów regulatora (pod poszczególne człony)

    https://www.elektroda.pl/rtvforum/topic3317595.html#16549188

    Gdzieś czytałem że Arduinio da się programować czystym C więc trochę by Ci to życie uprościło, ale tej informacji nie jestem do końca pewien. Może da się też w nim wklejać kody w C - nie wiem.


    Do zasilania układu możesz używać jednego napięcia 12V, a Adruinio zasilać z tych 12V przez przetworniczkę 12V/5V albo przez stabilizator 7805

    0
  • #7 27 Cze 2017 14:08
    matokek
    Poziom 5  

    Wielei dzięki za tak szczegółową odpowiedź i że pochyliłeś się nad tym tematem. Po przeanalizowaniu tego co napisałeś wiem już trochę więcej :)

    Programem zajmę się w drugiej kolejności. Jak na razie, przerobiłem schemat na swój w Eagle'u.
    Regulacja prądu diody LED z wykorzystaniem regulatora PID

    Jeszcze nie zdążyłem dodać tego LM7805, aby mieć 5V z 12V. Poza tym na schemacie jest ok? Na układzie z PDFa kondensator C5, zaraz obok diody jest opisany NF, co to znaczy?

    Co ciekawe, znalazłem film z tym, jak Microchip prezentuje to urządzenie. Link
    Jak widać, wszystko zrobili na SMD, ja użyję elementów przewlekanych. Ale zanim zaprojektuję płytkę, chcę sprawdzić układ na stykowej, czy może to mieć jakiś wpływ na działanie urządzenia?

    idepopizze napisał:

    Do obniżenia napięcia Voltage Feedback (+12V) masz dzielnik R5 i R6. Przelicz jak to wyjdzie dla 12V.


    Z tego dzielnika R5=1k i R6=4.7k dla 12V wychodzi ~2.11 V. Jeżeli obliczenia są poprawne to bez problemu można to podać na pin analogowy uC i mieć informację zwrotną z napięciem.

    idepopizze napisał:

    Informacje o prądzie masz z Rsense i przez U2 podajesz go jako napięcie na wejście analogowe Atmegi, dajmy na to ADC0


    Rozumiem. Dużo tam elementów dookoła tego wzmacniacza MCP601. Na przykład ten kondensator 50pF. Po co taki mały tam jest, konieczny?

    idepopizze napisał:

    Doczytaj sobie o tym IRRL bo go nie znam, a piszę o tym bo tam do jego sterowania jest R3 i jeżeli używałbyś innego tranzystora to jakaś rezystancja mała jednak byłaby potrzebna. Jak doczytasz to będziesz wiedział po co.


    Okazuje się, że ten IRRL024Z to MOSFET, nie do kupienia w Polsce i do tego SMD. Szukając zamienników trafiłem na IRF44ZN. Nada się? Ich parametry to

    IRRL024Z:
    Vdss = 55V
    Rds(on)= 60mΩ
    Id = 5A

    IRF44ZN:
    Vdss = 55V
    Rds(on)= 17,5mΩ
    Id = 49A

    idepopizze napisał:

    Nie analizowałem programu więc nie wiem jak sterowany jest ten tranzystor Q1 czy napięciem czy falą PWM. Jeżeli PWM to wystarczy dowolne wyjście cyfrowe.


    Jest sterowany przez PWM. Dlatego podłączyłem na pin cyfrowy Atmegi/Arduino.

    0
  • #8 27 Cze 2017 16:44
    idepopizze
    Poziom 32  

    matokek napisał:
    Jeszcze nie zdążyłem dodać tego LM7805, aby mieć 5V z 12V. Poza tym na schemacie jest ok? Na układzie z PDFa kondensator C5, zaraz obok diody jest opisany NF, co to znaczy?


    Therefore, an output capacitor is not required as it would be for a voltage regulator circuit. However, an output capacitor is shown in the schematic and can optionally be used to lower the required value of the inductor.

    matokek napisał:
    Programem zajmę się w drugiej kolejności. Jak na razie, przerobiłem schemat na swój w Eagle'u.


    Na schemacie nasmarowałeś wszystkie kondensatory elektrolityczne, a one takie nie są.

    matokek napisał:
    Ale zanim zaprojektuję płytkę, chcę sprawdzić układ na stykowej, czy może to mieć jakiś wpływ na działanie urządzenia?


    Może, stykówki są upierdliwe bo albo jest styk albo nie, lutowanie na uniwersalnej jest pewniejsze i nie trzeba będzie niczego ruszać i kombinować jak coś nie będzie chodzić tak jak trzeba.

    matokek napisał:
    Z tego dzielnika R5=1k i R6=4.7k dla 12V wychodzi ~2.11 V. Jeżeli obliczenia są poprawne to bez problemu można to podać na pin analogowy uC i mieć informację zwrotną z napięciem.


    Tak jak przypuszczałem to napięcie trafia mniej więcej w połowę napięcia zasilania uC. Sprawdzałeś w programie czy to napięcie jest do czegoś tam użyte ?
    Bo coś mi się wydaje że transmitancja układu jest tylko na podstawie prądu.

    matokek napisał:
    Rozumiem. Dużo tam elementów dookoła tego wzmacniacza MCP601. Na przykład ten kondensator 50pF. Po co taki mały tam jest, konieczny?


    Przetłumasz sobie bo opis działania WO masz na 2 stronie.
    Na moje oko to będzie on (ten 50pF) niwelował zakłócenia przy przełączaniu MOSFETa. MOSFETa przełączasz z częstotliwością 125kHz więc potrzebna tam jest raczej mała pojemność.
    Poczytaj sobie o tym MCP601. Szczególnie interesowałyby mnie kwestie:
    - jego zasilania, bo ze schematu producenta nie wynika czy jest podłączony do 5V z mikroprocesora czy do 12V ogólnego zasilania (ale pewnie będzie do 5V ze stabilizatora)
    - nie wiem czy jest to WO operacyjny typu rail to rail bo jak nie to będziesz miał ograniczony zakres jego napięcia wyjściowego i to trzeba będzie mieć na uwadze w przetworniku AD Atmegi, ale to sobie doczytasz.

    Myślę że ten IRF44ZN będzie ok, ale dałbym tam ze 20Ω w R3. Oscyloskopem widać byłoby co się tam dzieje.

    matokek napisał:
    Jest sterowany przez PWM. Dlatego podłączyłem na pin cyfrowy Atmegi/Arduino.


    Jeżeli jest sterowany PWM to podłącz dla własnej wygody do wyjścia Atmegi generującego sprzętowo PWM. Poczytaj jakie to PWM potrzebujesz i podłącz do któregoś OC. Ustaw częstotliwość PWM na 125kHz bo tak masz w obliczeniach cewki i układu przełączającego. Oczywiście możesz inaczej ale wtedy liczysz po swojemu.

    Atmega w dość prosty sposób reguluje wypełnienie wyjścia PWM na podstawie napięcia pobranego z któregoś wejścia ADC.

    Zanim zaczniesz coś lutować to podłącz sobie potencjometr taki z 10-20kΩ do wejścia ADC Atmegi - to znaczy jego suwak, a dwa pozostałe końce do +5V i do masy. Do wyjścia PWM Atmegi podepnij jak masz oscyloskop, a jak nie masz to diodę LED. Napisz program (skopuj z neta) taki żeby kręcenie potencjometrem powodowało zmianę świecenia LEDu czy tam wypełnienia na oscyloskopie. W tym momencie masz już pół roboty za sobą.


    =============================

    Z filmu się wyjaśniło że ten PIC ma wbudowany stabilizator napięcia więc można go podłączyć bezpośrednio pod wyższe napięcie zasilania. Atmega nie ma i trzeba dodać mu 7805.

    0
  • #9 28 Cze 2017 11:38
    matokek
    Poziom 5  

    Chwilę zajęło znalezienie informacji, ale już jestem.

    idepopizze napisał:

    Therefore, an output capacitor is not required as it would be for a voltage regulator circuit. However, an output capacitor is shown in the schematic and can optionally be used to lower the required value of the inductor.

    idepopizze napisał:

    Na schemacie nasmarowałeś wszystkie kondensatory elektrolityczne, a one takie nie są.


    Dodałem stabilizator 7805. Mam nadzieję że jego układ jest OK.
    W układzie zmieniłem mniejsze kondensatory na cermiczne. Te 0.1uF też, choć się wahałem czy nie zostawić elektrolitycznych. Opcjonalny koło diody LED wstawiłem z wartością 10uF.

    Regulacja prądu diody LED z wykorzystaniem regulatora PID

    idepopizze napisał:

    Tak jak przypuszczałem to napięcie trafia mniej więcej w połowę napięcia zasilania uC. Sprawdzałeś w programie czy to napięcie jest do czegoś tam użyte ?
    Bo coś mi się wydaje że transmitancja układu jest tylko na podstawie prądu.



    Tak, sprawdziłem. Nie jest do niczego użyte. Można odczytywać informacje o napięciu lub inne, ale autor tej noty tego nie robi.
    Pin 7 to AN0 (Ifb), pin 6 to AN1 (Vfb), pin 3 to AN3 - wszystkie jako wejścia analogowe.
    W kodzie używane są linijki tylko tyczące się prądu, a i nawet napisano
    Kod: c
    Zaloguj się, aby zobaczyć kod



    idepopizze napisał:

    Poczytaj sobie o tym MCP601. Szczególnie interesowałyby mnie kwestie:
    - jego zasilania, bo ze schematu producenta nie wynika czy jest podłączony do 5V z mikroprocesora czy do 12V ogólnego zasilania (ale pewnie będzie do 5V ze stabilizatora)
    - nie wiem czy jest to WO operacyjny typu rail to rail bo jak nie to będziesz miał ograniczony zakres jego napięcia wyjściowego i to trzeba będzie mieć na uwadze w przetworniku AD Atmegi, ale to sobie doczytasz.


    W datasheecie wzmacniacza pin zasilający to VDD. Dlatego też taki opis w PDFie. Z tego co znalazłem, to zakres napięć ma wynosić: VDD= 2.7V to 5.5V
    Więc miałeś rację, tu też pójdzie 5V ze stabilizatora.
    Producent podaje, że wzmacniacz ma "Rail to Rail Output".

    idepopizze napisał:

    Jeżeli jest sterowany PWM to podłącz dla własnej wygody do wyjścia Atmegi generującego sprzętowo PWM. Poczytaj jakie to PWM potrzebujesz i podłącz do któregoś OC. Ustaw częstotliwość PWM na 125kHz bo tak masz w obliczeniach cewki i układu przełączającego. Oczywiście możesz inaczej ale wtedy liczysz po swojemu.Atmega w dość prosty sposób reguluje wypełnienie wyjścia PWM na podstawie napięcia pobranego z któregoś wejścia ADC.

    Zanim zaczniesz coś lutować to podłącz sobie potencjometr taki z 10-20kΩ do wejścia ADC Atmegi - to znaczy jego suwak, a dwa pozostałe końce do +5V i do masy. Do wyjścia PWM Atmegi podepnij jak masz oscyloskop, a jak nie masz to diodę LED. Napisz program (skopuj z neta) taki żeby kręcenie potencjometrem powodowało zmianę świecenia LEDu czy tam wypełnienia na oscyloskopie. W tym momencie masz już pół roboty za sobą.


    Oscyloskopu nie posiadam. Podobne rzeczy robiłem wcześniej właśnie na prostym programie z użyciem funkcji AnalogWrite(). Standardowa, mniejsza dioda LED z opornikiem ładnie ściemniała się w zależności od oporu na potencjometrze. Tyle, że nie zwracałem uwagi jaki używam PIN PWM.
    Czy chodzi o to, żeby za pomocą tych charakterystycznych poleceń z bitami ustawić taktowanie któregoś pinu PWM w Arduino na 125 khZ i za pomocą niego sterować teraz tranzystorem, a co za tym idzie większą diodą mocy?

    0
  • Pomocny post
    #10 28 Cze 2017 12:21
    idepopizze
    Poziom 32  

    Schemat masz taki jak powinien być pod Atmegę.

    Skoro nie używane jest nigdzie Vfb to nie ma potrzeby montowania R1 R2 C2.

    Miej na uwadze że R6 może mieć inną oporność niż te 0 om, ale to zależy jak będzie spisywał się ten IRFZ44N na 125kHz, ale to już będziesz widział w trakcie prób.

    No to nie pozostaje nic innego jak zlutować układ na płytce uniwersalnej i robić testy.

    Sugeruje montować etapami.
    Na początek:
    R9 R6 Q1 Rsense D1 i LED (z szeregowym rezystorem dla bezpieczeństwa) i użyć tej funkcji AnalogWrite(). Ustawiasz wyjście PWM na 125kHz i patrzysz jak pracuje dioda.

    Teraz możesz zmontować MCP601 i do wyjścia Ifb podpiąć woltomierz. Sprawdzasz jakie masz tam napięcie w zależności od wypełniania PWM.

    Jak jest ok to spróbowałbym dodać głownego aktora tego spektaklu czyli cewkę L1 i sprawdzić zachowanie układu.

    Jeżeli wszystko zachowuj się tak jak powinno to demontujesz potencjometr do kręcenia PWM i bierzesz się za algorytm od PID.

    Ot i wszystko w tym temacie.


    matokek napisał:

    Czy chodzi o to, żeby za pomocą tych charakterystycznych poleceń z bitami ustawić taktowanie któregoś pinu PWM w Arduino na 125 khZ i za pomocą niego sterować teraz tranzystorem, a co za tym idzie większą diodą mocy?


    Chodzi o to że jak się wszystko robi od podstaw to Atmega 328 ma trochę ułatwień które pozwalają iść na skróty. Programowanie w C wtedy też jest proste bo sprzętowa część procesorka robi to co trzeba by samodzielnie programować.

    Pewnie w arduino są już pod to gotowe funkcje.

    0
  • #11 28 Cze 2017 19:01
    matokek
    Poziom 5  

    Dzięki za pomoc. Jeszcze dam znać jak mi to działa.

    idepopizze napisał:
    Schemat masz taki jak powinien być pod Atmegę.
    Miej na uwadze że R6 może mieć inną oporność niż te 0 om, ale to zależy jak będzie spisywał się ten IRFZ44N na 125kHz, ale to już będziesz widział w trakcie prób.


    Zapomniałem dodać na schemacie. Będę próbował z tym rezystorem.

    idepopizze napisał:

    No to nie pozostaje nic innego jak zlutować układ na płytce uniwersalnej i robić testy.


    Kompletuję części i zobaczymy co z tego wyjdzie.
    Najgorzej z tym wzmacniaczem MCP601 i diodami SB160 oraz SD101A, w lokalnym sklepie nie ma, a jakiegoś popularnego zamiennika nie znalazłem. Trzeba będzie czekać na przesyłkę pewnie.

    0
  • #12 28 Cze 2017 21:48
    idepopizze
    Poziom 32  

    Sam wybrałeś sobie Microchipa, a oni przecież używają w aplikacjach swoich podzespołów.

    Ja tu nie widzę najmniejszych problemów.
    Do testów przecież można użyć najzwyklejszych części. Wzmacniacz LM358 też tutaj będzie pracował przy 5V do tego 1N4148 i 1N4007 i możesz sobie robić próby w jedno popołudnie.
    Jak dojdą zamówione części to wymienisz.

    0