P-Ch MOSFETによるハイサイド・ロードスイッチ回路をN-Ch MOSFETでゲートドライブする

(参考)ハイサイドスイッチのはなし
http://sudoteck.way-nifty.com/blog/2011/04/post-76ae.html

参考にした回路図ではゲートドライブにBJT(バイポーラトランジスタ)使うみたいだけど,
BJTだとオン電圧もあるし,手持ちがなかったこともあり,N-Ch MOSFETでやってみたらできた.

ハイサイドドライブにはフローティング電源とか
ブートストラップコンデンサとか使う方法があるらしいけど
Trによるゲートドライブが簡単そうだった.

Pch MOSFETのゲート・ソースがドライブ用Trのオープン時に5Vになるように
分圧抵抗を挿入した.この場合はR1=10kΩ.R2=13.2kΩ,

ゲートドライブ用MOSFETにはゲート抵抗は入れていない.またゲートはプルダウンしていない.
マイコンの電源OFF時も考慮すると,N-Ch MOSFETのゲートはプルダウンしたほうが良さそう
http://todotani.cocolog-nifty.com/blog/2010/01/mos-fet-b7c9.html

負荷側電源電圧は12V安定化電源.
最初負荷抵抗を10Ωにしてたら当たり前だけど焼けた.
12V/10Ω=1.2Aなのでこのときの消費電力P=12*1.2=14.4(W)

使用したトランジスタ
ハイサイドドライブ用メイン P-Ch MOSFET 
パワーMOS−FET 2SJ471(30V30A)
http://akizukidenshi.com/catalog/g/gI-00034/
・ゲートドライブ用N-Ch MOSFET
MOS−FET 2N7000
http://akizukidenshi.com/catalog/g/gI-03918/

回路図

回路動作説明

・ADCでポテンショメータの電圧(0-5V)を取得
・PWMで0-5Vを出力
・ゲートドライブ用N-Ch MOSFETが開く.
最大Trオープン時にR1両端電圧が5V程度になるように
分圧抵抗が挿入してある
・R1両端電圧=ゲート・ソース電圧Vgsなので,
これに従ってP-Ch MOSFETがオープンする.→0V-12V出力

#include <MsTimer2.h>

int val;
int mapval;

void disp(){
  Serial.println(mapval);
}

void setup(){
  pinMode(9,OUTPUT);  
  Serial.begin(9600);
}

void loop(){
  val = analogRead(A0);
  mapval = map(val,0,1023,0,255);
  analogWrite(9,mapval); 
}