Strona 1 z 2
Programowalny driver do LED z wyborem prądu
: czwartek 19 gru 2013, 18:54
autor: connan12345
Dzień dobry!
Też mnie zachwyciły światełka. Myślę nad konstrukcją uniwersalnego driverka do 10W do latarek LED. Z racji tego że moje hobby związane z wodą (a ściślej z podwodą) to pomyślałem sobie o pod świeceniu sobie tam gdzie już się robi ciemno. Napisałem program na podstawie znalezionego kodu w C++ na elektrodzie , a że kombinuję w BASCOMie to przełożyłem , myślę poprawnie. Jak nie to poprawcie , dzięki.
Kod: Zaznacz cały
Dim Chose As Byte , Pwm As Byte , Ocr As Byte
Dim Current As Word , Adcw As Word , Rej As Word
Dim K1 As Word , K2 As Word , Tryb As Byte
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Prescale = 8
Config Adc = Single , Prescaler = Auto , Reference = Internal
Declare Sub Popraw
'CURRENT=151; //ustaw wartośc prądu na 1000mA
'CURRENT=105; //ustaw wartośc prądu na 700mA
'CURRENT=52; //ustaw wartośc prądu na 350mA
Pwm = 0
Current = 52 'na sztywno ale można zmienić
Ocr = 28
Enable Interrupts
Do
Adcw = Getadc(1)
'Current = Getadc(3) 'można do ustawienia prądu zastosować ADC podłączony do rezystora nastawnego "rozpiętego" między Vcc a GND - jakieś 10K a ślizgacz na ADC
Rej = Current - Adcw
If Rej > 0 Then
Pwm = Sqr(rej)
Ocr = Ocr + Pwm
Else
Pwm = Sqr(rej)
Ocr = Ocr - Pwm
End If
Ocr0a = Ocr
Loop
Kolega Flagiusz na swojej stronie zaproponował ciekawą koncepcję. Zastanawia mnie czemu nie użyje mosfetu typu P (plus tranzystor npn jego sterowania) ?
Schemat to w sumie nic odkrywczego , bo z piątej nóżki do bramki mosfetu N a druga nóżka do węzła między rezystorem a diodą (pomiar spadku napięcia).
: czwartek 19 gru 2013, 20:59
autor: Pyra
Witam
Kolega df, był świadom minusów tego rozwiązania, i zostało zarzucone, gdyż regulowana była tylko wartość średnia prądu, bez możliwości ograniczenia wielkości poszczególnych pików.
Nie został wybrany mosfet typu "P" gdyż bardzo ciężko jest znaleźć typ spełniający wyśrubowane wymagania jakie stawia sterownik.
Co do programu, to staraj się unikać operacji arytmetycznych wyższego rzędu, gdyż powodują wygenerowanie długiego kodu.
Kod: Zaznacz cały
można do ustawienia prądu zastosować ADC podłączony do rezystora nastawnego "rozpiętego" między Vcc a GND - jakieś 10K
W ten sposób nie zmierzysz prądu.
Pozdrawiam
: czwartek 19 gru 2013, 21:05
autor: connan12345
Ano fakt . Chodziło mi by móc ustawić CURRENT.
Pyra pisze:Co do programu, to staraj się unikać operacji arytmetycznych wyższego rzędu, gdyż powodują wygenerowanie długiego kodu.
No właśnie w drugą stronę . Im krótszy kod tym lepiej to działa.
Zamiast :
Kod: Zaznacz cały
if(rej>50)PWM=6; //szybkośc zmian współczynnika PWM zależna od różnicy prądu zaprogramowanego a wyjściowego
else if(rej>20)PWM=5;
else if(rej>10)PWM=4;
else if(rej>5)PWM=3;
else if(rej>2)PWM=2;
else if(rej>0)PWM=1;
else if(rej<-50)PWM=-10;
else if(rej<-20)PWM=-7;
else if(rej<-10)PWM=-4;
else if(rej<-5)PWM=-3;
else if(rej<-2)PWM=-2;
else if(rej<0)PWM=-1;
wolałem dać :
Kod: Zaznacz cały
If Rej > 0 Then
Pwm = Sqr(rej)
Ocr = Ocr + Pwm
Else
Pwm = Sqr(rej)
Ocr = Ocr - Pwm
End If
I dlatego mam 37% zajętości pamięci a nie ponad 50%.
Poza tym dzięki funkcji pierwiastka dokonuje się konwersja niejako z word na byte
a tu PWM mogę mieć 0-255. Inaczej musiałbym zrobić to na Select Case - End Select i do tego zrobić Format lub Fusing. A to by znacząco kod wydłużyło. Czyli lepiej zastosować np BD140 by było w/g pomysłu Flagiusza ?
: czwartek 19 gru 2013, 21:11
autor: Pyra
Witam
connan12345 pisze:Ano fakt . Chodziło mi nie Vcc a napięcie na diodzie z rezystorem do masy GND
A ten pomysł to już będzie tragiczny w swoich skutkach. LED jest elementem nieliniowym i Vf zależy w znacznym stopniu od temperatury złącza, cały problem polega na tym, że współczynnik, jest ujemny, tzn, im wyższa temperatura, tym opór zastępczy LEDa jest mniejszy, a co za tym idzie prąd wzrasta.
Krótko mówiąc, nie da się określić prądu diody, znając tylko napięcie przewodzenia.
Pozdrawiam
: czwartek 19 gru 2013, 21:15
autor: connan12345
Chyba się nie rozumiemy
? Ja nie chcę mosfetem sterować diody tylko by uP sterował mosfetem P-ch za pomocą tranzystora np MMBT3904 plus dwa oporniki (które trzeba dobrać). Co do pomiaru z drugiego ADC to byłoby po to by niejako "ręcznie" ustawić porównanie ,czyli wartość CURRENT z ADCW , a nie na diodzie
: czwartek 19 gru 2013, 21:18
autor: Pyra
Witam
No właśnie, możesz to jakoś rozrysować, bo chyba nie łapię istoty...
Pozdrawiam
: czwartek 19 gru 2013, 21:26
autor: connan12345
No chodzi o coś takiego :
: czwartek 19 gru 2013, 22:01
autor: ptja
Między nóżkę 2 a 8 wstaw 47k, bo powyżej 1,1V (czyli w 56% zakresu potencjometru) i tak ADC będzie zwracał maksimum (1023).
: czwartek 19 gru 2013, 22:04
autor: connan12345
Czyli że zamiast 10K wstawić 47K ?
Te 10K dałem tak "na oko" . Bo takie mam jak daję do kontrastu LCD HD44780
Dla tych co ściągają spakowanego hex-a powiem że schematem jest przetwornica z mosfetem typu N i opornikiem 0.15 OHma także jeśli zastosuje się inny rezystor to CURRENT jest do zmiany. Te wartości co w programie zostały dane nie przeze mnie. Zalecam ostrożność.
: czwartek 19 gru 2013, 22:46
autor: ptja
Tak, bo w obecnym układzie potencjometrem możesz ustawić 0-2,55V, a ADC mierzy w zakresie 0-1,1V.
: czwartek 19 gru 2013, 22:51
autor: connan12345
Myślałem że od 0 do Vcc. Hmm...
: czwartek 19 gru 2013, 23:08
autor: ptja
connan12345 pisze:Myślałem że od 0 do Vcc. Hmm...
Fakt, Vcc też może być jako Vref.
Ja używam 1,1V gdy zasilanie bezpośrednio z Li-ion (bo Vcc się zmienia).
: piątek 20 gru 2013, 06:57
autor: connan12345
Z tego co pamiętam to jest od 0 do Vcc z podziałką Vref/1023 a tu Vref =1.1V . No mam nawet pare zrobionych układów pomiarowych na Atmega8 i Atmega 32 i tam jest do Vcc tylko że podziałka inna bo chyba Vref to 2.56V. Tu w Atiny chyba lepsza bo Vref =1.1V czyli dokładniejsze odwzorowanie.
Świetnie opisany driverek jest
tu
Teraz patrzę i stwierdzam że program na pierwszym poście w temacie ma braki w postaci :
Kod: Zaznacz cały
$regfile = "attiny13.dat"
$crystal = 9600000
Ddrb = &B11110001 : Portb = &B00001110
$hwstack = 8
$swstack = 8
$framesize = 8
I to trzeba na sam pierw dać.
: piątek 20 gru 2013, 17:30
autor: Pyra
Witam
Ten schemat to klasyczna przetwornica step down, w związku z tym mam kilka uwag. Napięcie zasilania podajesz 9V podczas gdy chcesz zasilać trzy diody w szeregu, czyli już przy prądzie 350mA może to być ponad 9V, dodatkowo spadek napięcia na rezystorze pomiarowym.
Teoretycznie można przyjąć Vcc jako Vref, ale w tym przypadku nie będzie ono stabilne, gdyż pojedyncza dioda zenera w zmiennych warunkach pracy nie zapewni stabilnego napięcia zasilania. Trochę sytuacja uległa by poprawie, gdybyś zastosować klasyczny stabilizator w obudowie SOT23, bo jak myślę chodzi o miniaturyzację. Dodatkowo, wszystko musi byc odprzęgnięte kondensatorami.
Dodatkowo, Vref 1,1V jest dość stabilne i umożliwia zmniejszenie rezystancji opornika pomiarowego, gdyż wystarczą mniejsze spadki napięcia.
W programie stosujesz sterowanie parametryczne, niby poprawne, ale w praktyce wystarczy zwykłe Decrese PWM, lub Increse PWM (szybsze i krótsze od PWM + 1 i -1). Jak się domyślam, będziesz stosował najwyższą możliwą częstotliwość PWM, aby zminiaturyzować rozmiar cewki i kondensatora, to 8 czy 9,6MHz zapewnia bardzo szybką reakcję na zmianę parametrów obciążenia.
Pozdrawiam
: piątek 20 gru 2013, 22:09
autor: connan12345
Kolega ma żelowy 12V akumulator więc spadek do 9 V zapewne będzie na koniec świecenia. Co do stabilizatora to Jarek proponuje mi zastosowanie 78L05 ale jak na złość nie potrafię go znaleźć natomiast 1117-5.0 mam kilka sztuk. Z racji że to będzie zasilone do 15V (uwaga Jarka) to ten 1117 się nada.
Dla 1.1V odniesienia Reference = Internal , tu bezsprzecznie racja. Napięcie 5V mi będzie potrzebne by otwierać w pełni dren mosfet , choć oczywiście w przypadku innego zasilenia , niższego np dwa ogniwa z laptopa Litowo-Jonowego (czyli około 6V) pokusiłbym się o obniżenie do 3.3V zasilania uP oraz mosfeta otwierającego się przy powiedzmy 2.5V APM2509N (N-ch) i tu inny typ przetwornicy niż StepDown.
Co mi jeszcze chodzi to dławik z 4 uzwojeniami . Jedno jakby pierwotne uzwojenie , gałąź z rezystorem tak jak na schemacie tylko bez diod. A 3 uzwojenia wtórne bezpośrednio na diody/diodę (łączyłoby się początki z końcami uzyskując kombinację potrzebną do zasilenie jednej 10W lub trzech 3W diod).