adsens1

2018年8月11日土曜日

Maker Faire Tokyo 2018 ありがとうございました

 おそくなりましたが,Maker Faire Tokyo 2018でブースに来ていただいた皆様ありがとうございました.本当に多くの方に見に来ていただきとても嬉しかったです.

 今年で3回目の出展になりましたが,Twitterでリツイートしていただいたり,Make: の記事にも取り上げていただいたりしたおかげで前回(2016年)よりも多くの方に来ていただいたように思います.
 自分の腕がたらずもじゃもじゃになった配線をあたたかい目で見てくださり,よくやったねぇと(半分あきれながら)声をかけてくださる方.毎回みてますよと声をかけてくださる方,色々な方とお話しすることができてたのしかったです.
 
 今年は,2016年の際に会場でいただいたコメントを元に,走り始められるようにする.速度制御できるようにする.コイルが動いているのが視覚的にわかるようにする.の3つを実現しようと思い作品を作りました.可視化のためにLEDをレールにおいたことではもじゃもじゃ度が増えましたが,車体を目で追うと残像で車体との相対関係がわかって結構面白かったかなと思います.

 レールは2016年のものを流用しましたが,回路は全て新しくしました.その理由をここに書いておこうと思います.
 2016年の回路は3to8ラインデコーダと8to3エンコーダを使っていました. このICはシリアル通信などの複雑なことをしなくとも,配線するだけで, 簡単にI/Oを増やせます.

 ただ,エンコーダはデータシートをみるとわかるように,ある特定のセンサがオンになるとそれよりも前のビットの状態がわからなくなります.
 例えばセンサ0~7をI/O 0~7につないだ場合, センサを0, 1, 2, 3とオンにする分には検出できるのですが,センサ7, 6, 5, 4という順にオンにしていっても, 7がオンになっている間は6のセンサをオンにしてもわからないということになります.
 私のリニアモーターカーはフォトリフレクタの反射で車両位置を検出しています.そのセンサの配置間隔と車体の長さの都合上,複数のセンサの上に車体がまたがります.よって,ある回転方向に回路を組んだ場合, 逆回転はできないということになります.これを直そうというのがモチベーションの1つ.
 
 また,展示ブースでは,浮上原理を説明するために磁石だけをつけたレールと,予備の車体をおいて,つついて見てもらっています.この時に面白いのですが,小さいお子さんは10中8,9,その車両をレールに投入します.つまり2台同時に走らせようとするのです.繰り返しになるのですが,本当にあそびにきてくれた,子達がほとんどそれをやるのです.でもラインエンコーダは一度に1箇所しかオンにできません.(40チャンネル制御するために,3to8エンコーダを2段組にして,オンにするユニットを選択している). この声なき要求に応えられるようにしようというのがモチベーションの2つ目です.

 というわけで,それを実現するために今年はエンコーダ,デコーダを使わずに, I/Oエクスバンダを使って, I/Oを増やすことにしました.2016年は車両の動きに通信速度がついていくのか自信がなく,時間も少なかったのでI/Oエクスパンダは見送ったのですが,今年はレールはいじらないのでその分の時間を回路につぎ込みました.スピードはできるだけ早い方がよかろうということでSPI通信のものを選びました.案の定,通信トラブルがおこってデバッグが大変でしたが,なんとかものにできました.ここら辺は,まとめておこうと思います.

 あれ,結局当日逆回転していないし,2台同時に走っていないんじゃない?というツッコミが当然あると思います.ぅぅぅ.結局, 速度フィードバック制御に時間を取られて,そこまで手が回らなかったんです.あとはプログラムだけなので,動くようになったら動画にしてアップしたいと思います.

 というわけで,改めてありがとうございました.

2018年7月29日日曜日

Maker Faire Tokyo 2018に出展します

 2年ぶり3回目になりますが,Maker Faire Tokyo 2018 に出展します.

 今年も浮上式リニアモーターカーを改良して出品する予定です.

 2016年は「カーブが曲がれるようにする」をコンセプトに出展しましたが,回路設計が今ひとつで,回転方向がハードウエアで決まっていたり,同時に複数チャンネルをオンしたり,センサ値を読み込んだりすることができませんでした.
 そこで今年は, レール側はそのまま再利用して,回路を全部入れ替えることにしました.前回,通信速度と安定性の確保に自信がなくて諦めたI/O expanderを使って,ArduinoからSPI通信で制御する方式をとりました.また,レール側のどのコイルが動いているのかわかるようにならないかというコメントももらっていたので,チップLEDをレール上に配置します(予定).

 完成したらまた動画をあげるようにしますが,8/4, 5はH-16-8で展示しているのでよければ遊びに来てください.




2018年3月14日水曜日

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

はじめに

ごぶさたしております.

以前はLEDを負荷としてArduinoでパワーMOSFETを使う方法を紹介しましたが,
今回はコイルやモータなどのインダクタを負荷としてパワーMOSFETを使ってみます.

負荷にインダクタを用いる場合,フライホイールダイオードを回路につける必要があります.今回は実験を交えながら,なぜフライホイールダイオードが必要なのか考えていきたいと思います.とりあえず回路を作りたい方は次の見出しは飛ばしてください.

誘導負荷スイッチング Switching inductive load

ここでは実験に空芯コイル(以前リニアモーターカーの作成に使ったコイル)を使ってみます.

まず,その1で使った回路図のダイオードを素直にコイルに変えます.

図1. 実験で使用する回路図
図2. 実験で使用する実体配線図

この回路は一見動作しますが,MOSFETが壊れる可能性があります.ポイントはインダクタに流れる電流はMOSFETのスイッチオフの瞬間に0になることができないという点です.

電源電圧をVcc[V]とし, コイルに電流I[A]が流れている状態でMOSFETをオフする場合の回路動作を順を追って見ていくと
  1. 初期状態ではゲート電圧が印加されていて電流が流れている.
  2. MOSFETのゲートへの入力電圧を0Vにする.
  3. MOSFETのゲートの電圧が下がり,閾値電圧(Vth)を下回る.
  4. MOSがオフするため, 低いドレイン電圧で流れていた電流が従来のドレイン電圧では流れなくなる.
  5. インダクタは電流を流し続けるため, MOSFETのドレイン電圧を上昇させていき,最終的にはドレインソース間でアバランシェ降伏を発生させる.
  6. 電流の電流減少が始まる. この時に高電圧で電流が流れることになるため, MOSFETが発熱する. この減少はアバランシェ降伏電圧をVavとするとVav-Vcc=Ldi/dt より, t=(Vav-Vcc)*L*Iかかる.
  7. インダクタの電流が0になれば動作終了.
となります.

1. 初期状態
2. ゲート電圧を切った時
5. アバランシェ降伏を発生させている状態

つまり,インダクタに電流が流れている状態でスイッチをきると,ドレイン・ソース間にインダクタに流れている電流がながれるまで,ドレイン・ソース間の電圧が向上することになります.
MOSFETは高電圧を印加されるとアバランシェ降伏を起こします.(一般に,素子の定格電圧よりも高い電圧です)
アバランシェ降伏電圧は定格電圧を超えてはいますが,スペックシートではアバランシェエネルギーが一定以下であれば許容しています.
例えば通常前回用いた2SK4017では 単発では40.5mJ, 連続では2mJとなっています.
ですので,上記の回路で2mJ以下のアバランシェエネルギーでMOSFETのチャネル温度を定格範囲内に抑えてやれば,一応先ほどの回路でも動作することなります.

実際に実験してみましょう.(この実験はパワーを与えすぎると素子パッケージが破裂して大変危険です.弱いエネルギーで試すか,ケースでおおい,保護メガネをかけるなど十分に注意してください.)

今回用いるインダクタは760uHです.
Aruduinoで簡単なシングルパルスを生成するプログラムを作って,19usecターンオンしてみます.電源電圧は3Vとしました.オフ時の電流はV=L di/dtより3V/760uH*18usec=75mAとなるはずです.その状態でゲート信号をきると, 電圧波形は次の図のようになります.
ゲートをオフにすると, 電圧が急激に上昇し, 75V程度まで上昇していることがわかります.そしてアバランシェ降伏状態は1.8usecほどつづいています.電圧は下がっていますが,アバランシェ降伏時の電圧を75V一定とすると,この結果から, 0.051mJほどになります.

図3 アバランシェ降伏発生時の波形

しかし,一般的にはこのようにアバランシェ降伏をさせるのではなく,フライホーイールダイオードを負荷のLと並列に配置します.

フライホイールダイオード 

繰り返しになりますが,MOSFETのアバランシェ降伏を防ぐためには,負荷インダクタンスと平行にフライホイールダイオードを配置します.フライホイールダイオードにはPiNダイオードやショットキーバリアダイオードなどを用いますが,ここでは簡単のため,ダイオードを使う代わりに,ゲートとソースをショートしたMOSFETを使用します.MOSFETの中には寄生ボディダイオードが存在するため,特性はよくありませんが,ダイオードとして使用することができます.

 さて,負荷と平行にダイオードを置くとなぜ,アバランシェ降伏が防げるのでしょうか.
 それは先ほど紹介した動作モードが次のように変わるためです.
  1. 初期状態ではゲート電圧が印加されていて電流が流れている.
  2. MOSFETのゲートへの入力電圧を0Vにする.
  3. MOSFETのゲートの電圧が下がり,閾値電圧(Vth)を下回る.
  4. MOSがオフするため, 低いドレイン電圧で流れていた電流が従来のドレイン電圧では流れなくなる.
  5. インダクタは電流を流し続けるため, MOSFETのドレイン電圧を上昇させていく. ドレイン電圧が電源電圧+ダイオードのオン電圧(Vf)よりも高くなると, ダイオードはアノードの電圧がカソードに比べて高い順バイアスになる. このときダイオードに電流が流れ始める.
  6. 流れ始めた電流はコイル, ダイオードの間をながれるため, ダイオードの損失, コイルの損失以外の電流減少はない.
  7. インダクタの電流が0になれば動作終了.
図4. フライホイールダイオードを使った実験回路の初期状態
図5. 状態5の回路図
図5. 状態6の回路図

図6. フライホイールダイオードを使った実験の回路図

図7. フライホイールダイオードを使った実験の実体配線図


というように,ダイオードが存在することで,ドレインソース間に発生する電圧を抑制することができます.よって,先ほどはアバランシェ電圧70V程度まで上昇していたMOSFETのドレイン電圧が, Vcc+Vfまでの上昇に抑えられるわけです.


次回はインダクタとしてDCブラシモータを動かしてみます.