2014年03月
ArduinoっていうかAVRはPWM出力端子が多くあるので、初代ファンコンではソフトウェアPWMだったところをハードウェアPWMでやろうか、と思ったりしたわけです。
ただしハードウェアPWMでファンの電源をOFF/ONしまくると、回転数センサーの出力もバシバシ変わってしまってマトモに回転数が検出できなくなるので、コイルとコンデンサで平滑化して、なんちゃってバックコンバータみたいにすればよくね?という考えです。
とりあえず手始めに…
ハードウェアPWMを使うとしたらスイッチング周波数はいくつになるのか。
Arduinoのクロックは16MHzですが、PICと違って1/4プリスケーラとか無いのでこれがそのまま16MHzで動くそうです。すごい。
8ビットのPWMにすると秒間16,000,000回カウンタがカウントアップして256で1回りしますから、単純に16M÷256=62.5KHzですね。
適当にPWMモジュールを設定してデューティ比50%でパルスを出してテスターで測ってみます。
まー大体合っています。
PWMでパルスが出せたので、次はこれを使って12V電源を入・切する回路が必要です。
初代ファンコンではN型FETをファンの−端子にくっつけたローサイドスイッチでしたが、色々と変な事が起きたので今回はP型FETのハイサイドスイッチにします。
最初に何も考えずにこんな風に回路引きました。頭の中で。
Arduinoから0Vを出力すればFETのゲートが0Vになってソースから12Vがドレインに流れる。よっしゃ!
というわけでこの回路をブレッドボード上に組んでArduinoとつなげてみましたが…
Arduinoの出力に関わらずファンが全力で回りっぱなし。
改めて考えてみたら当たり前で、Arduinoから5Vを出力するとFETのゲートは5Vになります。
このときVGSは何V?
はい、ソースは12Vですから、-7Vですね。余裕でFETオンですね。
要するにハイサイドスイッチを切るにはゲートに12Vを掛けなきゃいけないのです。あらー。
Arduinoから12Vを出力することはできませんから、トランジスタを使ってこんな感じにしてみてはどうか。
Arduinoから5Vを出すとTR1にベース電流が流れてFETのゲートが0Vになる。
Arduinoから0Vを出すとTR1のベース電流が止まってコレクタ電流が流れなくなり、R1を通じてゲートに12Vが供給される。
というわけでこれで実験。したところ結果は…OK!!!!!!!ですよ!!!!
Arduinoからの出力をオン・オフするとファンが回ったり止まったり!
あーやれやれ出来た出来た。
と思ったのですが。
この後ろにコイルとコンデンサを付けて、ArduinoからPWM出力して平滑化してみたところ、Arduinoからの出力デューティ比が最少(0.4%)でもファンが回る。
テスターで出力電圧を測ってみると、負荷にもよるけど3〜5Vくらい出てる。
はぁ…?
テスターじゃよく分からんので
FETのゲートの波形がむっちゃ鈍ってる。
これは…噂に聞くゲート容量のせいですか!
FETはその構造上、ゲート・ソース間に静電容量があります。(ほかの端子間にもありますが今回は省略)
等価回路で言うとこんな感じですか。
C1はFET内部にあるように見えるコンデンサです。
トランジスタがONになるとC1には+12Vがモロに掛かるので速攻で充電されます。
そのためFETのゲートはすぐ0Vになりますね。(オシロの画像でいう波形が落ち込んでるとこ)
次にトランジスタがOFFになると、その瞬間、FETのゲートは0V、ソースは12VですのでR1に電流が流れます。
ゲート・ソース間はC1の両端ですから、C1の両端の電位差がなくなるまで(C1が放電しきるまで)R1に電流が流れます。
このC1が放電している期間が、オシロの画像でいう電圧がジワジワ上がってるところですね。
というわけで、FETを素早くオンオフするにはゲート容量を素早く充電・放電してやる必要があるのです。
FETは電圧駆動で電流はほとんど流れないとか言いますが、オン・オフを切り替える時には問題になる場合もあるという事です。
ずっとオンとかずっとオフにしてる分には電流はほとんど流れませんけど。
というわけでー。
どうしたら素早くオン・オフができるのか。
とりあえずすぐ思いつくのは、R1を小さくすること。
R1が小さければ、Cに溜まった電荷が速攻でR1に消費されて消えるので早いでしょう。
ただし、あまり小さくするとトランジスタがONになってる時にコレクタ電流が大量に流れてしまうので、効率が悪いです。
うーん。テストで、100Ωにしてみましょうか。
トランジスタには今は2SC1815を使ってテストしているので、150mAまでなら流せます。
100Ωなら120mAしか流れないので大丈夫でしょう。
抵抗差し替えて測定。
おい!
だいぶマシになったよ!ビンゴ!
と思いましたが抵抗触ったら激アツwwww
やばい燃えるwwwww
・・・・。
で、色々ググったらハイサイドスイッチの回路でトランジスタのコレクタとFETのゲート間にも抵抗が入っている回路が見つかりました。
R3が追加になっています。
これなら、ゲート容量の放電には150Ωしか抵抗がないので放電は早いし、コレクタ電流は300+150=450Ωの抵抗を介して流れるので少な目にできます。
ただし、トランジスタをONにしてもゲート電圧が8Vまでしか下がらないという欠点もあります。
が、今回使うFDS4935AはVGSが-3VあればONになるので、9V以下まで下がれば十分です。(というかそうなるように150+300Ωにしました)
(実際にはFETのデータシートにVGS-ID特性が載っているので、ドレイン電流を流すのに十分なゲート電圧を加えるようにしてくださいね!)
というわけでブレッドボードの接続を変えて電源ON。
ゲートに8V−12Vの、鈍りの少ない矩形波が出るようになりました!
あとはFETのドレインから出てきた電流を平滑化します。
この中の「DC/DCコンバータ回路設計ガイド」を参考にします!
ぶっちゃけ今回の回路はバックコンバータ(降圧型DC/DCコンバータ)と同じなので…
コイルとコンデンサの容量を、こちらの設計ガイドを元に見てみると。
発振周波数30KHz,50KHzならコイルは220μH、
出力電流が500mAまでならコンデンサはセラミック10μFまたはOSコン15μFまたはタンタル22μF。
だそうです!
コイルはたまたま千石で買った220μHがあるのでこれにしましょう。
こいつは980mAくらいしか流せないので、余裕をもって最大出力電流を500mAということにします。
コイルを変えれば出力電流容量を増やせますが、コイル自体がデカくなっちゃうのと、そもそもPC用ファンで500mAも流れるやつはそうそうないので500mAで充分だと思います。
コンデンサはセラミックで10μってなかなか無いし、タンタルは高いイメージなのでOSコンにしましょう。
と思って千石行きましたがOSコンでちょうどいいのがなかったので、代わりに日本ケミコンの導電性高分子アルミ固体電解コンデンサを買ってきました。1個140円でタンタルよりは安いけどアルミ電解よりはかなり高級w
OSコンではないけど同じようなもんでしょ…?ということで。
15uFってことになってますが、Cに関してはデカいほどリップル除去率は良くなるだろうから実装に支障のない程度に容量のでかいやつ…ということで56μF耐圧25Vを買ってきました。
というわけで、最終的に駆動回路は以下のようになりました!
D1はできるだけ早くて漏れ電流が少なくて耐圧が十分で秋月で売っているショットキーダイオードということでRB160Mとかいうのを買ってきました。まあ1N4148でテストしても動いてるからなんでもいけるでしょw
この駆動回路を組み込んだ形で基板を作っていきます。暇を見て。ちまちまと。
※ 2014/04/01更新
USBオシロスコープ買ったので測定波形画像を更新しました。
blogを漁ったら一代目を作ったのは2008〜2009年らしいのですが。
実はファンコンがPICを使った最初の工作だったのです。
今思えば無謀であった。
しかしその後PICを使って色々作ったりしてノウハウも溜まったので、二代目作るかって感じになりました。
ボンボンさんからも消費電力計付きの作ってよ!とか言われてたし、ファンが3系統じゃなくてせめて4系統なら…とか思ったりもしてたので。
そんなわけでPIC18F4550を買ってきてテストボードを作ったりもしたのですが。
PIC版テストボード(ファンコン2号機になるはずだった何か)
仕事忙しかったりで自然とやる気をなくして計画はフェードアウト…。
あーあ…。
という状態だったのですが。
なんかの用事で秋葉原行ったので、ついでに秋月行ってみるかと思ったら
作って遊べるArduino互換機
という書籍(基板つき)が売ってました。
なんか前から耳にしてて興味はあったArduino。
とりあえず書籍買うべってことで買いました。あと部品ないと組み上げられないので部品セットも。
ほんで家で試してみましたが。
なにこれむっちゃ楽やん!
ふつうにC言語で書いたソースをボタン一つでマイコンボードに送り込んで動かせる!
と、ここまで来てやはり思うのはファンコン。
これ使ってファンコン作ればいいんじゃね?という考えになります。
なのですが、書籍についてきたArduino(Uno互換)だと入出力ピン数が足りない。
じゃあピン数の多いArduinoは?となると、Arduino Mega 2560 になるのですが…。
値段高すぎ&ピン数無駄に多すぎ。
しかもATMega2560が秋月で売ってないので、Arduinoで開発→完成品として作り直すときにチップが手に入らない。
これはアカン。
そんなわけで逆に秋月で手に入るAVRでファンコンによさそうなのは?と探してみると…
ATMega1284Pがありました。
ピン数もちょうどいいしQFPパッケージもグッド。こいつをArduino化できないか?
と思ったけど純正ArduinoでMega1284を使ったものはなかったです。残念……
ですが、やっぱり同じことを考える人はいるもので。
以下のサイトが見つかりまして。
Arduino on ATMega1284P | maniacbug
冒頭のくだりが私とほとんど同じ境遇で思わずにやけた。
というわけで、こちらの方が作成されたMighty 1284P Platform for Arduinoを追加でインストールし、ArduinoISPで自作ボードにブートローダーを書き込むことに成功しました。
ブートローダー書き込み中の図
自作ボードはファンコンの元になる機能を一通りつけてあります。
・ATMega1284P
・ISP用6ピン ピンヘッダ
・スケッチ転送用USB端子・FT232RL(セルフパワー)
・100x16ドット有機ELディスプレイ
・ロータリーエンコーダ
・ブザーおよび駆動回路
・消費電力計接続端子
・温度センサー接続端子
・ファン関連端子
ファン関連については駆動回路を後から試行錯誤したかったのでAVRの出力端子をそのまま丸出しにしてあるだけです。
というわけで、そんな感じのを作ってます…。
今のところ基本OS的な感じの部分を作ってまして、ロータリーエンコーダの回転数読み取り、ブザーからのメロディ再生、温度センサーで読み取った温度を表示、ファンの速度制御(ほぼ完)、ファンの回転数読み取りはできてます。
あとはユーザーインタフェースとか、温度に応じてファンの回転数を制御する仕組みとかを作れば大体完成ですね。
…電力計が思いのほか難しくて挫折しそうなんですけどね…。
長くなりそうなんで本当に今日書きたかったことは次の記事にまとめよっと。
あ、あと二代目って書きましたが、PICで作った二代目は闇に葬られたのでArduino版は3代目になります…。
ホームページはこちら。
http://www31.ocn.ne.jp/~yoshio2/
2ちゃん系掲示板に書き込むときのトリップは ◆GBrDo4K0i. を使用しています。
ヨシヲ