adsens1

2017年4月14日金曜日

ArduinoでパワーMOSFETを使ってみる その1

ごぶさたしております

今回はArduinoでパワーMOSFETを駆動します.

まずはArduinoの電源制限の復習.本家Arduino.ccのこちらをごらんください

簡単にまとめると

VCCが5Vの時,ArduinoのI/Oピンで流せる最大定格電流は40mAとのことですので
各ピンあたり通常は20mAで使用するのが無難でしょうか.

また,ピン一本あたりの制限の他に何本かまとめた制限もあります.

ソース(供給)電流は
0~4ピン, A0~A5の合計が150mAを超えないこと
5~13ピンの合計が150mAを超えないこと
が推奨されています.
またシンク(吸い込み)電流は
ポート0~4ピンの合計で100mAを超えないこと
ポート5~13ピンの合計で100mAを超えないこと
ポートA0~A5ピンの合計で100mAを超えないこと
が推奨されています.

というわけでArduino単体でモーターや電流の大きな負荷駆動することはできないためパワーMOSFETを使用します.

秋月で手に入るパワーMOSFETに2SK4017(50V, 5A)や2SK2232(60V, 25A)があります. 
端子は図のように刻印を正面にして左からゲート,ドレイン,ソースです.



はじめに簡単な例としてLEDを駆動してみます.
必要なもの

  • Arduino UNO 1個
  • MOSFET 2SK4017 1個
  • LED OSDR3133A 1個
  • 抵抗 100Ω 1個
  • 抵抗 300Ω 1個
  • 抵抗 100kΩ 1個(省略可)
  • 単三電池 2個
  • 電池ボックス
  • 電池ボックス用リード線
  • ブレッドボード
  • 配線
を用意します.

LED一個でしたらArduinoの電源で十分ですが,この先モーターなどの大電流の負荷を駆動することも考え,電源を別に用意します.ここではこの電源をパワー系の電源と呼び乾電池を使います.

Arduinoへの接続は図のように接続します.
図1 実体配線図(クリックして拡大してください)


回路図は次のようになります.
図2 回路図(クリックして拡大してください)

MOSFETは負荷(ここではLED)に対して上側(電源の+側),下側(電源の−側)どちらにつけることも可能ですが,今回は回路が簡単なので下側に入れています.(一般に上側に入れる場合は制御電源のグランドを別に分けるなど回路の工夫が必要です.今回は乾電池使っているので問題ありませんが)

スケッチは
const int gate_pin = 11;
void setup() {
pinMode(gate_pin, OUTPUT);
}

void loop() {
digitalWrite(gate_pin, HIGH);
delay(1000);
digitalWrite(gate_pin, LOW);
delay(1000);

 }
としておきましょう.

ためしに動かしてみてください.LEDが点滅しているのが確認できます.

次に回路の簡単な説明をします.
R1はLEDの電流制限抵抗です. LEDの順方向電圧が2Vなので電源の3Vに対して10mA程度になるように電流を(適当に)調整しています.

R2はゲート抵抗です.
MOSFETはゲートに制御信号,ドレイン・ソースに制御したい系を接続します.
MOSFETは電圧駆動デバイスのため,ゲートに閾値以上の電圧をかけた場合にドレイン・ソース間の抵抗が下がります. ゲート・ソース間の抵抗は非常に高いためほとんど電流は流れず,MOSFETをオンの状態に保つ電流量はほとんど必要ありません.

注意が必要なのはパワーMOSFETスイッチング時です.
次の図にMOSFET等価回路の一つを示します.
図3 MOSFETの等価回路

MOSFETのデバイスの内部にはゲート電極とドレイン電極との間に構成されたキャパシタCgd, ゲート電極とソース電極との間に構成されたキャパシタCgsが存在します.
データシートによれば2SK4017のCgdの容量は60pF, Cgsの容量はは670p,2SK2232のCgdの容量は200pF, Cgsの容量は800pFです.
端子間の電圧は充電された電荷に応じてQ=CVで決まりますから,オフからオン,オンからオフする際には,これらのキャパシタに対して充電及び放電を行っていることになります.

一般に電荷が充電されていないキャパシタに電圧を印加すると,充電初期は回路はショートとみなせるため,電流は無限大となり回路が焼損する可能性があります.
これはMOSFETのゲートにマイコンをつなぐ場合も同じです.
もともとMOSFETのゲートには内部ゲート抵抗があるため,無限大の電流が流れるということはありませんが,抵抗なしでMOSFETのゲートにマイコンを繋ぐとスイッチング時のキャパシタの充電・放電電流でピンの許容電流を超える可能性があります.

そこでゲート抵抗が必要になります.この回路ではR2に相当します. 
もっとも安全サイドに考え, どんなときでも電流が20mAを超えないようした場合のゲート抵抗は250Ωになります.
よってお手軽にマイコンで駆動しようと思ったら300Ωもしくは1kΩ程度をつけて置くのが良いでしょう.

実際にスイッチング時にどのくらい電流が流れているのかを確認したのが下記の図4です. 図1, 2の回路においてR2の両端電圧をオシロスコープで測定しました.
ピーク電圧は5Vで1usec程度かけてCRの直列接続の挙動に従い減衰していきます.R2の抵抗は300Ωですのでピーク電流値は16.7mA程度流れていることがわかります.

図4 R2(300Ω)両端電圧


大きい抵抗を付ける場合スイッチング速度は遅くなるので,スイッチング損失が増えてしまいます.スイッチング損失が重要な場合は,ドライブのためにトランジスタやドライブICを使うことになりますがその話はまた.

次にR3です. MOSFETの動作自体には直接関係のない抵抗です.
この抵抗は制御系が動作していない状態でゲート電圧が0Vとなるようにプルダウン抵抗として使っています.
通常,制御系とパワー系の電源は制御系,パワー系の順番で投入します(オフ時はパワー系,制御系の順).
制御系が動作していない時はゲート電圧が不定であり,この状態でドレイン・ソース間に電圧をかけるとMOSFETに電流が流れてしまうことがあります.そこで仮にパワー系の電源だけを先にいれたとしてもMOSFETに電流が流れないようにするために100kΩの抵抗をグランドとゲートの間に入れています.

今日のおまけにLEDの明るさをPWMで調整してみましょう.

先ほどのスケッチを

const int gate_pin = 11;
void setup() {
pinMode(gate_pin, OUTPUT);
}

void loop() {
analogWrite(gate_pin, 25);
delay(1000);
digitalWrite(gate_pin, LOW);
delay(1000);

 }

と書き換えてみましょう.

LEDの明るさが変わったと思います.

いちごしっくり