目次
前
次
降圧型DCDCコンバータ
DCDCコンバータは、次の2種類があります。
- 降圧型DCDCコンバータ(Step Down Converter)
- 昇圧型DCDCコンバータ(Step UP Converter)
利用する電源電圧よりも、低い電圧を出力する
場合が、降圧型です。その反対が昇圧型。
電源電圧を下げて、所望の電圧にする回路には
3端子レギュレータを利用して、お手軽に実現
しますが、3端子レギュレータ利用の場合には
降圧型DCDCコンバータとは呼びません。
定電圧電源から、特定の安定化した電圧を得る
場合、OPアンプとパワートランジスタを利用
する回路が使えます。
この回路の設計は、次のようにします。
- トランジスタのエミッタから出力する電圧は、3.3V
- トランジスタのベース・エミッタ間電圧を0.6Vとしてベース電圧は、3.9V
- 右のOPアンプの出力電圧は、3.9Vとする
- 右のOPアンプは、電圧フォロワとして利用
- 左のOPアンプの出力電圧は、3.9Vとする
- 左のOPアンプは、出力電圧を指定する
- 出力電圧4.0Vと近似し、12Vx1/3となるように抵抗を選ぶ
- 抵抗はE24系列から、100kΩと51kΩを選ぶ
パワーエレクトロニクスでの、DCDCコンバータは
発振回路、能動素子(トランジスタ、MOSFET等)、
インダクタ、キャパシタンスを利用して実現します。
変換効率を上げるために、発振回路を利用して
直流→交流→直流と変換します。
チョッパー回路を利用しなければ、DCDCコンバータ
と呼びません。
降圧型DCDCコンバータは、次の回路で実現します。
負荷に抵抗を利用していますが、発振回路の出力を
トランジスタのベースに接続して、直流→交流変換
します。
トランジスタが導通している間に、インダクタL1に
電力を磁気エネルギーとして蓄え、同時に負荷にも
電力を供給します。
トランジスタが直流電力の供給を停止すると、インダクタ
は逆起電力を発生させ、時間とともに電圧が変化する電池
として働きます。
インダクタが電池と等価な動作をするので、負荷に電力を
供給すると同時に、ダイオードD1によりキャパシタに電荷
を蓄えます。
トランジスタのスイッチング操作で、エネルギーはインダクタ
キャパシタの中に往復し、同時に負荷に供給されます。
インダクタ、キャパシタには、抵抗成分も含まれている
のでエネルギーの一部は、熱となって失われます。
しかし、3端子レギュレータや上に示した回路に比べて
エネルギー伝達効率は、よくなっています。
実回路を組む前に、LTSpiceを利用して
シミュレーションしてみます。
上図において、V2に発振器をおいて次のように
パラメータを設定しました。
- 発振周波数 50kHz
- DUTY比 1:1
- 振幅 2.8V
実際に利用するトランジスタ、インダクタ、キャパシタ
ダイオードは、LTSpiceに用意されているライブラリを
みて、日本国内入手可能デバイスと似た、オブジェクト
を使っています。
- トランジスタ 2SC2655相当
- ダイオード S5277相当
- インダクタ 47uH
- キャパシタ 100uF
キャパシタは、より実機に近づけるには
内部直列抵抗値を指定します。
上記パラメータで、どのような電圧が抵抗に
与えられるのかをシミュレーションします。
緑線が電圧で、青線がダイオードに流れる電流です。
電源投入直後は、電圧が上昇するに従いダイオードに
パルス状の電流が流れています。この間にインダクタ
とキャパシタに磁気、静電エネルギーが蓄積され定常
状態に収束していきます。
抵抗R1の値を、100Ωにした場合は、次のような
波形になります。
定常状態になる時間が、1kΩに比べて遅くなっています。
また、与えられる電圧値が低くなっています。
抵抗R1の値が、10Ωの場合
定常状態になる時間が、100Ωに比べて早くなっています。
また、与えられる電圧値が低くなっています。
シミュレーションから、負荷が要求する電力が変化すると
電圧が変化していることがわかります。
実用になるレベルにするには、電圧安定化が必要です。
電圧の安定化は、スイッチング半導体に与える
パルスのDUTY比に関係すると、書籍で確認して
います。
DUTY比を変化させることで、どのくらい出力電圧が
変化するかを、確認してみます。
LTSpiceでシミュレーションした回路を
基板上に半田付けし、CPLDで生成した
PWM波形を与えることにします。
半田付けした基板は、みの虫クリップで電源、インダクタ
PWM波形生成器を接続できるようにしました。また、半導体
を交換できるようにソケット対応です。
回路を構成する部品の中で、キャパシタはESRが小さい
方がよいので、SANYOの有名な低ESRキャパシタを使い
ました。
DUTY比を10%ごとに切り替えて
出力電圧を確認すると、次の
ようになました。
- 10%(0001010) =
- 20%(0010100) =
- 30%(0011110) =
- 40%(0101000) =
- 50%(0110010) =
- 60%(0111100) =
- 70%(1000110) =
- 80%(1010000) =
- 90%(1011010) =
出力電圧を維持するためには、出力電圧を
フィードバックして、誤差電圧からDUTY比
を最適値に制御しなければなりません。
利用したCPLDは、XilinxのXC9572です。
(右にあるコネクタにDIPスイッチ
降圧回路を接続。)
VHDLコードとピンアサインは、以下
としました。
-- adutyx
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity adutyx is
port (
-- system
nRESET : in std_logic ;
CLOCK : in std_logic ; -- 4MHz
-- duty ratio input
DUTY : in std_logic_vector(6 downto 0) ;
-- OE control
ENB : in std_logic ;
-- PWM
POUT : out std_logic -- ;
);
end adutyx;
architecture Behavioral of adutyx is
-- constant values
constant PCNTMAX : integer := 39 ;
constant LCNTMAX : integer := 999 ;
constant PMAX : integer := 99 ;
-- clock (500kHz)
signal iPCLK : std_logic ;
signal iLCLK : std_logic ;
signal iCNT : integer range 0 to PCNTMAX ;
signal iLCNT : integer range 0 to LCNTMAX ;
-- input
signal iDUTY : std_logic_vector(6 downto 0) ;
signal iENB : std_logic ;
-- buffer register
signal iREGX : integer range 0 to PMAX ;
-- PWM handling
signal iPCNT : integer range 0 to PMAX ;
signal iDUTYX : integer range 0 to PMAX ;
signal iPOUT : std_logic ;
begin
-- output
POUT <= iPOUT when ( iENB = '1' ) else '0' ;
-- input
iDUTY <= not DUTY ;
iENB <= not ENB ;
-- divider (generate 100kHz)
process (nRESET,CLOCK)
begin
if ( nRESET = '0' ) then
iCNT <= 0 ;
elsif rising_edge( CLOCK ) then
if ( iCNT = PCNTMAX ) then
iCNT <= 0 ;
else
iCNT <= iCNT + 1 ;
end if ;
end if ;
end process ;
iPCLK <= '1' when ( iCNT = 0 ) else '0' ;
-- divider (generate 100Hz)
process (nRESET,iPCLK)
begin
if ( nRESET = '0' ) then
iLCNT <= 0 ;
elsif rising_edge( iPCLK ) then
if ( iCNT = LCNTMAX ) then
iLCNT <= 0 ;
else
iLCNT <= iLCNT + 1 ;
end if ;
end if ;
end process ;
iLCLK <= '1' when ( iLCNT = 0 ) else '0' ;
-- get duty ratio
process (nRESET,iLCLK)
begin
if ( nRESET = '0' ) then
iREGX <= 0 ;
elsif rising_edge( iLCLK ) then
iREGX <= conv_integer(iDUTY) ;
end if ;
end process ;
-- PWM handling
process (nRESET,iPCLK)
begin
if ( nRESET = '0' ) then
iPCNT <= 0 ;
iDUTYX <= 0 ;
elsif rising_edge( iPCLK ) then
if ( iPCNT = PMAX ) then
iPCNT <= 0 ;
iDUTYX <= iREGX ;
else
iPCNT <= iPCNT + 1 ;
end if ;
end if ;
end process ;
iPOUT <= '1' when ( iPCNT < iDUTYX ) else '0' ;
end Behavioral;
# system
NET "CLOCK" LOC = "P5" ;
NET "nRESET" LOC = "P39" ;
# select
NET "POUT" LOC = "P1" ;
# data output
NET "DUTY<0>" LOC = "P11" ;
NET "DUTY<1>" LOC = "P12" ;
NET "DUTY<2>" LOC = "P13" ;
NET "DUTY<3>" LOC = "P14" ;
NET "DUTY<4>" LOC = "P18" ;
NET "DUTY<5>" LOC = "P19" ;
NET "DUTY<6>" LOC = "P20" ;
NET "ENB" LOC = "P22" ;
マイクロコンピュータATtiny2313でも
PWM波形を生成してみました。
#include <avr/io.h>
#include <avr/interrupt.h>
typedef unsigned char UBYTE ;
typedef unsigned short UWORD ;
#define OFF 0
#define ON OFF+1
#define MASKFF 0xff
#define MASK7F 0x7f
#define MASK80 0x80
#define INTERVAL 399
#define PWM_MAX 100
/* variables */
UBYTE pcnt ;
UBYTE duty ;
UBYTE dutyx ;
UBYTE state ;
void user_initialize(void);
/*------*/
/* main */
/*------*/
int main(void)
{
/* */
user_initialize();
/* enable interrupt */
sei();
/* loop */
while ( ON ) {
/* get duty ratio */
state = PIND ;
state ^= MASKFF ;
/* separate */
duty = state & MASK7F ;
}
/* dummy */
return 0 ;
}
/*-----------------------*/
/* Insert user functions */
/*-----------------------*/
void user_initialize(void)
{
/* PORT B */
PORTB = 0b00000000 ; /* 00000000 */
DDRB = 0b11111111 ; /* oooooooo */
/* PORT D */
PORTD = 0b00000000 ; /* 00000000 */
DDRD = 0b00000000 ; /* iiiiiiii */
/* initialize timer1 */
{
/* compare match (1/1) -> 250ns */
TCCR1B = (1 << WGM12) | (1 << CS10) ;
TCNT1 = 0 ;
OCR1A = INTERVAL ; /* 250ns x 400 => 100kHz */
OCR1B = 1024 ;
}
/* enable TIMER1 interrupt */
TIMSK = (1 << OCIE1A) ;
/* initialize duty ratio */
pcnt = 0 ;
duty = 0 ;
dutyx = 0 ;
}
/* timer1 interrupt */
ISR(SIG_OUTPUT_COMPARE1A)
{
volatile UBYTE bport ;
/* judge */
bport = OFF ;
if ( pcnt < dutyx ) { bport = ON ; }
/* impress */
PORTB = bport ;
/* increment */
pcnt++ ;
/* judge */
if ( pcnt == PWM_MAX ) {
pcnt = 0 ;
dutyx = duty ;
}
}
市販の降圧DCDCコンバータの内容を見てみます。
銘盤がついた状態です。
銘盤を外すと、MOSFET、制御用ICが実装された基板が出てきます。
利用ICは、富士通のMB3759でTL494の上位互換でした。
(MB3759は、2015年8月からCypress社の製造に変更)
データシートを見ると、出力電圧を監視し、指定電圧を
維持するため、PWMによるFETのゲート制御をしています。
換骨奪胎した内部等価回路は、下図の赤線で囲んだ部分
となります。
内部FETで、外部接続したLCの充放電をしています。
指定された電圧になるように、出力電圧をフィード
バックしてFETのスイッチングで、PWM波形のDUTY比
を制御しています。
外付けLC回路は、積分回路とみることもできます。
積分回路であれば、常時供給される電荷を一定に
すると、電荷QからV=Q/Cで電圧Vが一定になると
わかります。
負荷が電力消費するので、電圧Vを一定に保持するため
フィードバックで監視し、減ったなら供給する電荷量を
増やし、電圧Vが増えたなら供給電荷量を減らすように
制御します。
供給電荷量制御には、FETのゲートに加えるPWM波形の
DUTY比を利用します。
DUTY比の制御に鋸歯波を使っています。鋸歯波があれば
キャパシタ電圧を、コンパレータの比較電圧に使えます。
制御がコンパレータひとつで実現できることに注目します。
FETがNchかPchで、PWM波形の反転が必要になりますが
鋸歯波の生成ができれば、降圧DCDCコンバータの実現
は、難しくはないと理解できます。
鋸歯波は、OPアンプを利用すると簡単に生成できます。
左の2OPアンプで、右上がりの波形を生成します。
右下がりの波形が欲しいので、反転器を使います。
1パッケージに4回路入りOPアンプがあるので
制御用コンパレータまで含め、1パッケージに
入ります。
波形生成と反転を1パッケージで実現することは
装置を小型にまとめるため、必要なこと。
最近は表面実装タイプのパッケージを使い、更なる
小型化を目指しています。
目次
前
次