'pwm'에 해당되는 글 7건

  1. 2018.06.17 555를 이용한 PWM 응용. (4)
  2. 2015.08.03 PWM 고민의 해결.
  3. 2015.07.23 12F675롤 이용한 PWM,
  4. 2015.06.18 LM2576-5.0을 이용한 PWM buck 컨버터.
  5. 2015.06.12 PWM 회로의 펌웨어 업데이트.
  6. 2015.05.29 PWM 레귤레이터.
  7. 2014.08.14 12F675에 대한 이야기 더하기 아두이노 전원부 이야기.
2018.06.17 19:14

555를 이용한 PWM 응용.

 

아주 간단한 PWM 컨트롤 회로로 고정값으로 PWM을 쓰는 경우에 유용하다. 돌아다니는 기본회로와 다른 점은 C3를 470pF를 써서 더 높은 주파수가 발생하도록 하였다. 간단한 오실로스코프 DSO 138로 파형을 보니 약 21kHz의 주파수로 작동하고 있었다. 555는 HA17555라는 개량형을 사용하였다. 더 주파수 특성이 좋다고 하는데 부품 파는 곳에서는 어지간해서는 대치품으로 이걸 준다.

 

 회로도의 전원 커넥터와 부하 커넥터를 따로 그린 것은 PCB 도안을 만들기 위한 것으로 양면 배선으로 도안되었다. JLCPCB 같은 곳에 맡기면 저렴하게 2달러에 10장을 찍어준다는 이벤트 같은 것을 하고 있는 것 같다.

 

 국내 PCB 제작 업체들은 왜 이리 비싼지 =ㅅ=;

 


(편집) 몇몇 풋프린트와 컴포넌트 위치의 재조정.

 

ne555PWM-pcb.zip


Trackback 0 Comment 4
2015.08.03 19:58

PWM 고민의 해결.

PWM IC로 쉽게 만들걸 삽질의 연속이다. 문제는 리플이 심해서 곱지않은 영향을 줬던 것. 부하를 걸어서 최대 전류 소비량이 나오는지 제대로 테스트했다. 4MHz 내부클럭으로는 2kHz가 한계다. 2576 PWM이 안망가졌으면 모를 뻔.





Buck 회로의 출력단의 콘덴서를 220uF로 만드니 이제서야 안정해졌다.


아래 펌웨어는 2개가 있는데, 하나는 좀 더 빠른 클럭이던 PIC의 OSCCAL값을 조정한 것으로 이건 칩마다 모두 다르다. 동그랗게 파인 것은 그냥 보통 펌웨어를 사용하면 된다. 아마 콘덴서를 바꿔서 필요가 없을지도 모르지만 그냥.


부하가 단절되었을 때 갑자기 오르는 전압을 최대한 방지. 예를 들면 샤오미 보조배터리 컨트롤러 같은 경우. 주기적으로 부하가 끊기는데 전압이 쑤욱 올라간다 =ㅅ=;



많은 실험을 거듭하며 최대한 전류를 뽑아내도록 했다. 아마도 콘덴서 용량의 부족인 듯. 330uF으로 하면 좀 더 나아지려나. 최대 전류 뽑아내느라 힘들었다. 그래도 안되면 100uF를 기판에 하나 더 붙여야겠다.


200uF도 전류량이 부족하다. 그래서 대폭 캐패시터 용량을 늘려서 420uF으로 새로이 타이밍을 조절. 2A는 문제없이 나오는 것 같다. 단일 부품 중에는 420uF이 없으니 470uF을 사용하면 된다.



고려하지 않은 부분이 13.8v에서의 타이밍. 들쭉날쭉 심했던 것을 어느 정도 잡았는데, 고출력 부하가 없어서 확실한 수치는 못잡았다. 대충 비율로 산정해서 값을 만들었고, 크게 흔들리지는 않는 값이다. 400uF/420UF/470uF의 펌웨어가 포함. 470uF는 실험을 못해봤다.



가장 안정적 전압을 만들어내기 위해 펌웨어를 업데이트. 갑작스런 단절로 인한 전압 불안정을 해결. 완전하지는 않지만 잘 동작한다. 아직도 13.8v에서의 실험은 못해보고 있다. 5v는 잘 동작.


오실로스코프가 없으니 참 찾기가 힘들다. 일단 전류량을이 최대로 나오는 상태로 조정. 캐패시터 영향은 전류에만 있는 듯.


가장 잘 동작하도록 펌웨어를 만듦. 아마도 ADC의 가장 안정적인 조건의 타이밍이나 주파수가 문제였던 것 같다. 중간에 12볼트에서 5볼트로 가는 버퍼를 만들어서 태양광 패널쪽에 전압이 낮게 걸리는 것을 바로 잡았는데 최대 부하에서 정상적으로 동작하는 것을 확인. 타이밍 등이 여전히 별루지만, 간단히 사용하는데는 문제가 없는 것 같다. 뭐 어떻게 더 변화를 줄 수 있는 방법도 없다. T0CKI로 외부 클럭으로 타이머0를 돌리는 것을 생각도 해봤지만, 회로를 다시 고쳐야하는 것 때문에 포기. 약 84%의 duty로 PWM을 소화할 수 있다. 최대 출력시 대충 83%대의 PWM으로 유지되는 것 같다. 85%정도로 늘리면 안정적일 것 같지만 이젠 귀찮다. PWM 조정으로 주파수가 2.7k정도로 늘었다.



12f675-pwmfet-new-19.zip


Trackback 0 Comment 0
2015.07.23 11:15

12F675롤 이용한 PWM,

 기존의 PWM 구현에서 약간의 변경이 있었다. 예전 펌웨어는 사실상 제대로 동작하지 않는 졸작으로 전압 변동률이 너무 심해 노이즈가 엄청나고 원하는 출력보다 높은 전압까지 올라가는 문제점이 있었는데, 그 문제를 모두 해결.


핀 4번은 접지를 하면, 5V 기준 전압.

핀 2번은 다이오드를 대체할 FET의 SYNC신호가 출력되고,

핀 3번은 충전 확인을 하는 기능으로 접지를 하면 되고 사용하지 않을 경우에는 그냥 두면 된다.






12f675-pwmfet-NEW.zip


 이 회로를 2개 이용해서 1단은 13.8V, 2단은 5V로 조정해서 보조배터리를 충전하도록 구성.

 1단에서 입력 전압은 16~17V가 측정되고 출력은 13.8V가 측정.

 2단에서 입력 전압은 13.8V가 측정되고, 출력은 5V정도가 측정. 배터리를 연결하면 전압강하가 많이 발생한다.


 충전검사 기능은 테스트를 해보지 않았다. 단락(쇼트)방지 기능을 넣었는데 제대로 작동할련지는 =ㅅ=;


 효율이 어떻게 될련지는 모르겠지만 일단 되는걸루 만족.



12f675-PwmFet-NEW-2.zip


 타이밍 조절을 한 새로운 펌웨어. 4MHz는 전압에 대한 PWM값을 조절하는데 역시 부족한 타이밍이다. 좀 더 전압 변동이 적도록 노력을 해봤지만 장담하기엔 어렵다. 자잘한 기능을 없애고 검사 루프만을 넣는게 최선인 듯. 무부하시에 전압 변동률은 좀 크다. 부하시에는 0.03이 최고 변동.


 대충 태양광 패널에서의 동작은  전류가 충분한 경우에는 1단의 PWM은 안정적인 느린 점멸을 함. 전류가 부족하면 빠르게 깜박인다. 전류가 충분하면 입력값은 17v(최고 전류 전압)이고 출력은 조정한 값이 그대로 나온다. 반대로 부족하면 전압강하가 발생한다. 전압이 6~8V까지 떨어진다.


 아직 이게 제대로된 동작인지는 확실히 모르겠다. 전류량이 충분할 때 보조배터리에 유입되는 전류량과 1단 회로와 2단 회로의 사이의 전류량은 서로 다른 값이라 가늠하기가 어렵다.


 무부하시 리플이 커서 최대값 5.25V(허용오차 최대값)정도의 전압으로 조정하는게 가장 나은 것 같다. 부하시엔 큰 문제가 없다. 조정값의 안정적인 확인은 샤오미 USB LED로 확인. 폴리퓨즈가 들어있는 것 같은데, 큰 전압이 걸리면 꺼진다. 계속 켜져 있으면 허용값 안에서의 전압으로 조정되는 것을 의미.



12f675-PwmFet-New-3.zip

 크게 다른 점은 없고, 충전 기능에 대한 코드 보강과 루프 단순화와 최적화.



12f675-PwmFet-NEW-4.zip

이전의 방법론은 다 틀림. 타이밍 문제로 많은 코드를 루프안에서 돌릴 수 없는 상황을 간과한 탓,

가장 짧은 코드로 만드는게 이롭다는 것을 깨달음.



'하드웨어' 카테고리의 다른 글

변화값을 가지는 입력에서 OP AMP에서 ADC입력을 만드는 법.  (0) 2015.08.16
PWM 고민의 해결.  (0) 2015.08.03
12F675롤 이용한 PWM,  (0) 2015.07.23
kicad  (0) 2015.06.22
LM2576-5.0을 이용한 PWM buck 컨버터.  (0) 2015.06.18
N채널 FET의 Bootstrap.  (1) 2015.06.16
Trackback 0 Comment 0
2015.06.18 09:20

LM2576-5.0을 이용한 PWM buck 컨버터.





 간단히 기본 회로에서 약간의 구성을 바꾼 buck 컨버터로 5v 출력 전원을 위한 회로. LM2576-5.0이 800냥, 쇼트키 다이오드 150냥 코일 350냥 등등의 가격이다. 출력단에 쇼트키를 물린 것은 배터리 같은 부하를 연결했을 때 반대로 흐르지 않게 하기 위함. 필요가 없을지도 모른다. 최대 출력 전류는 3A.


 RV1은 쇼트키 다이오드의 전압 강하(0.4v정도)를 보완하기 위해서 조절이 필요하며, 더 높은 전압을 뽑아내는 것도 가능하다. RV1은 10k 이상의 값을 사용하면 된다. 출력전압을 측정하기 위해서는 부하가 물려야 제대로 테스터로 확인이 가능. D2 앞단에서 5.5v로 조절하면  5.3v정도 찍으면 출력으로 5.0v 전압이 나온다.


 (회로도를 업데이트) R2 10k를 추가했는데, 보다 잘 출력값을 조절하기 위함. 저항값을 늘리면 더 조절이 편해진다. R1:RV1 비율이 1:1이면 더 쉽다.


'하드웨어' 카테고리의 다른 글

12F675롤 이용한 PWM,  (0) 2015.07.23
kicad  (0) 2015.06.22
LM2576-5.0을 이용한 PWM buck 컨버터.  (0) 2015.06.18
N채널 FET의 Bootstrap.  (1) 2015.06.16
PWM 회로의 펌웨어 업데이트.  (0) 2015.06.12
납축전지 충방전 컨트롤러.  (0) 2015.05.31
Trackback 0 Comment 0
2015.06.12 13:01

PWM 회로의 펌웨어 업데이트.

 기존의 PWM회로의 성능을 더 안정시킨 것으로, 전력 컨트롤 회로의 경우에는 확실히 높은 PWM 주파수를 써야 한다는 것을 깨달음. 1W 정도의 부하에서는 FET에서 미열조차 없어서 그냥 차가운 상태로 기존의 펌웨어에서 발열이 심하던 문제의 해결.


 그리고 PWM을 약 1KHz로 조정해서 보다 나은 안정된 전압이 나오도록 함. 기존에는 64레벨로 미세전압 조정이 어려웠지만, 255레벨로 늘려서 더 미세 간격의 조절이 가능해짐.


 출력 합선을 인지해서 전압을 낮추는 기능을 넣었고, 이 부분의 소스는 공개하지 않을 예정.



12f675-PwmFet_firmware.zip

LED는 안정된 전압에 도달하면 깜박이는 속도가 느려지고, 평소에는 빠름.


 PWM 인터럽트 부분의 소스만 공개하자만 다음과 같고, 응용하는데 크게 어렵지 않음.


// 상수 선언들.

const
   c138 = 942;    // 13.8 * 1024 / 15
   { 4MHz }
   PWM_MAX = 255;   // 1000000 / 4 / 255
   PWM_LOW = 0;
   TMR1L_LOAD=$38; // 1000000 / 1000
   TMR1H_LOAD=$fc;



// 인터럽트 초기화 부분

     OPTION_REG:=%11010001;        // ~1KHz @ 4MHz, PSA->time 0, 001=> 1:4

     TMR0IE_bit:=1;
     PEIE_bit:=1;
     TMR1CS_bit:=0;
     TMR1IE_bit:=1;
     TMR1L:=TMR1L_LOAD;
     TMR1H:=TMR1H_LOAD;
     TMR1ON_bit:=1;
     GIE_bit:=1;      // enable Interrupt


// 1ms 딜레이.

function Delay1ms(var t:byte; limit:byte):Boolean;
var
  ts:byte;
begin
  if limit>0 then begin
    ts:=TICK_1000;
    if t<=ts then
      ts:=ts-t
      else
        ts:=255-t+1+ts;
    Result:=ts>=limit;
  end else
    Result:=True;
  if Result then
    t:=TICK_1000;
end;


// 인터럽트 핸들러

procedure Interrupt(); iv 0x0004; ics ICS_AUTO;
begin
     if T0IF_bit=1 then begin
       { PWM MAX 96% }
       if PWM_SIG=1 then begin
         ON_PWM:=VOL_PWM;
         if ON_PWM=0 then
           TMR0:=ON_PWM
         else begin
           TMR0:=PWM_MAX-ON_PWM;
           PWM_SIG:=0;
         end;
       end else begin
         TMR0:=ON_PWM;
         PWM_SIG:=1;
       end;
       T0IF_bit:=0;
     end;
     if T1IF_bit=1 then begin
       Inc(TICK_1000);
       TMR1L:=TMR1L_LOAD;
       TMR1H:=TMR1H_LOAD;
       T1IF_bit:=0;
     end;
end;


 타이머 1을 이용해서 1밀리초를 체크하도록 수정했고, 타이어 0로 PWM을 컨트롤. 소프트웨어 PWM이라 한계가 있는데, 최대 PWM이 96%정도.


 간단하게 실험한 결과, 부하가 걸리면 전압강하로 본래 패널의 전압이 나오지 않고 상당히 하락함. 위의 펌웨어에서는 0.6v미만이면 합선으로 간주하던 것을 0.3v로 더 내린 펌웨어.


12f675-PwmFet-firmware-03v.zip


5v PWM 옵션을 추가. 2번핀을 접지시키면 5v출력으로 조정됨.


12f675-PwmFet-firmware-03v-add5v.zip


'하드웨어' 카테고리의 다른 글

LM2576-5.0을 이용한 PWM buck 컨버터.  (0) 2015.06.18
N채널 FET의 Bootstrap.  (1) 2015.06.16
PWM 회로의 펌웨어 업데이트.  (0) 2015.06.12
납축전지 충방전 컨트롤러.  (0) 2015.05.31
PWM 레귤레이터.  (0) 2015.05.29
KiCAD r5640 32비트.  (0) 2015.05.24
Trackback 0 Comment 0
2015.05.29 15:42

PWM 레귤레이터.

 간단하게 삽질을 해서 만든 FET로 구동하는 PWM 레귤레이터.



D3이후의 회로는 일반적인 Buck converter 회로이고, 중요한 것은 바로 Q1,  Q2, Q3의 부분이다. Q4는 논리신호를 N ch FET를 켜기위한 BootStrap회로를 컨트롤하는 목적을 가진다. 주의할 점은 Q4로 신호가 반전되어 Q3에서는 반전된 신호가 전달되게 된다.





 D2는 역전압이 흘러나가지 않게 하기 위해서 사용. PIC는 ADC의 값을 받아서 출력의 전압을 조절하고 PWM값을 수시로 변동시킨다. D3도 아주 중요한데 N ch FET의 기생다이오드로 통해 역방향으로 전류를 흐르지 않게 한다. 이 D3가 없으면 제대로 전압 조절이 안된다. 여기서는 3A의 쇼트키 다이오드를 사용했다. 그냥 3A의 다이오드를 사용해도 상관없다. D1는 쇼트키를 사용하는게 좋다.



regulator.pdf


 (펌웨어를 파일에 추가)

 소프트웨어 PWM이라 정확하진 않지만, 전압을 제대로 뽑아내는데는 문제가 없다. 기본으로 12MHz로 설정되어있고, 4MHz 펌웨어도 포함하고 있다. 컴파일러는 Mikro Pascal 6.0을 사용.2K word 제한이 있지만, 12F675는 내장 플래시에 1K word로 펌웨어를 만드는데는 문제가 없다.



12f675-pwmfet-1.zip


Trackback 0 Comment 0
2014.08.14 16:56

12F675에 대한 이야기 더하기 아두이노 전원부 이야기.

 12F675가 만든 시기에 따라서 특성이 약간 다르다는 것은 확인. 칩의 맨아래 숫자는 yyww라는 4자리 숫자인데 년도와 만든 주(week)를 표시. 묘하게 여러개 구입한 칩에 2010년도와 2013년도의 제품이 혼합되어 있었다.


 가장 주목할만한 특성은 PWM의 노이즈로 2010년도는 1uf의 콘덴서로 잡아내기 힘든데 반해, 2013년도는 많이 줄어든 특성을 보임. 그리고 다르게 내장 클럭 발생기의 정확도는 2010년도가 정확해서 아주 칼같다. 하지만 2013년도는 약간 더 클럭이 높은 상태로 설정되어 있어서 560Hz까지의 범위에 이르는 클럭이 PMW으로 나온다.


 결국 2010년도의 노이즈 문제를 잡을려면 트랜지스터의 C와 E단에 1~4uF의 콘덴서를 붙어주는게 나은 것 같다. 1uF도 많이 작아지기는 하는데 여전히 좀 들린다. 노이즈 문제에 대해서는 좀 더 개선해야 할 것 같다. 좀 더 실험해본 결과, 1uF으로는 어림도 없다는 결론을 내림. 2uF나 3.3uF정도까지 고려해야함. 4.7uF은 어떨지 모르겠으나 현재론 칩의 특성이기도 하지만 PWM관련이기 보다는 신호적 특성이고 콘덴서 붙이는 것 말고는 빠른 대안은 없다는 것. 지금 현재는 2uF으로 다른 칩에서 소음을 많이 줄임.


 실험용 이외로 또 하나를 만들어 둔 것으로 2013년도 생산칩을 이용해서 내부 케이스 쿨링팬에 대충 붙여서 소음도 적고 잘 돌아가는 것을 여차저차 확인.



 그리고 그동안 못했던 아두이노의 전원부에 대한 이야기가 있는데, 만약 USB와 외부전원을 동시에 연결하면 어디의 전원이 사용될까라는 의문에 대한 답을 얻었다. 전원부에는 OPAMP가 있어서 전원부에서 얻어지는 전원이 7.5V이상이면 USB 전원을 사용하지 않고 외부 전원을 사용하며 USB 신호연결은 가능하다. 전원만 차단되는 것으로 외부 전원을 연결시켜도 문제없이 USB로 연결할 수 있다.


 

 대충 전원의 회로는 외부 전원의 분압된 전압과 아두이노 보드의 3.3V를 비교해서 분압된 전압에서 3.3을 빼서 그 결과 음수가 나오면 하단의 P패널 FET를 동작시켜 USB 전압을 받고 아니면 외부 전원을 사용하는 방식. 입력 전압이 3.3의 두배이거나 크면 OPAMP의 결과값이 0보다 크거나 같아져서 USB전원은 차단된다. 아마도 안정적인 공급을 위해 표준화된 전압인 7.5V라고 잡은 듯하고 6V는 아슬아슬하다. 6,7.5,9,12이런식의 표준화된 전압이 주로 사용되는 이유에서 그런 것 같다.


Trackback 0 Comment 0