水晶振動子のLTSpiceをシミュレーションする上で問題がある。起動が遅い。ふと、外から刺激を加えたら早くなるのではないかと思った。
幾分か早くなった。共振周波数くらいで揺さぶってあげると良いかもしれない。
ダイオードのコンデンサの分だけ影響がでるのか、やや振幅が変わる。
さて、肝心の周波数だが、Cs=0.5pF, Ls=0.1256mH, Rs=3Ω, Cp=10pFにて約20MHzほどとなる。
水晶振動子のLTSpiceをシミュレーションする上で問題がある。起動が遅い。ふと、外から刺激を加えたら早くなるのではないかと思った。
幾分か早くなった。共振周波数くらいで揺さぶってあげると良いかもしれない。
ダイオードのコンデンサの分だけ影響がでるのか、やや振幅が変わる。
さて、肝心の周波数だが、Cs=0.5pF, Ls=0.1256mH, Rs=3Ω, Cp=10pFにて約20MHzほどとなる。
自転車につけるテールライトだが、振動を検知して光るというもの。
発光の条件は「暗いこと」、「振動があること」の2つ。
振動センサーがどのようなものなのか気になったので分解してみることにした。振った時にカラカラ音がするので、アタリはついていたのだが。
構造はネジで止めているだけなので、簡単に分解できる。
振動センサーは電解コンデンサの隣のもの。ボールを2つ使ったもののようだ。中に入っているボールが金属の板と接触したり離れたりすることで、細かく回路が開閉されることで、振動を検出しているようだ。なるほど。安く済む方法だ。
明るさのセンサーはフォトトランジスタですね。
縦方向への取り付けにも対応できるようにボールが2つのタイプがあるのだろう。
金メッキされている部品が振動検出部品。
基盤背面には制御用のICと細かい部品が並んでいる。ICには東芝の刻印が入っている。VOX 00 509との刻印だが、どんなICなのかはわからない。CMOSロジックのICだろうか、マイコンだろうか。
動作は
・暗い
・振動がある
状態で、LEDを点滅させ、振動がなくなったら1分程度でLED消灯となる。
待機時の消費電流は
・明:90uA
・暗:3.2uA
という結果。
やはり、明るいところではセンサーの都合、やや電流が大きく流れるようだ。
できれば電力回生をしたいが、受け入れ先がないので、しょうがない、熱にする。
仕様:48V 4.8Aにて250Wの熱を発生。
端子を繋いが瞬間に電流が流れると危ないかと思って、MOSFETでON/OFFする。オン抵抗は実測5.5mΩと小さいものなので、放熱のフィンは不要である。
なお、24V 4.8Aでも放電できるように、内部の回路は24Vの放電回路が2直列となっている。
いかんせん電力がかつて扱ったことがないくらい大きい&すべて熱になるので、連続通電試験を実施。
といって、電源装置が35Vまでしか発生できないので、35V 3.5Aにて連続通電中。ファンは手に入る中で最も風量が大きいものを選んだので、大変うるさい。
ざっと回路図はこんな感じ。
太線は5A程度の電流に十分耐えるようなワイヤを使います。また発熱するホーロー抵抗との接触で被覆が溶けたりすると危ないので、配線は基本的にテフロン系の耐熱ワイヤーを使います。
安全装置としては、うっかり何かがショートした時のためにヒューズ。入り口端子に最も近いところに配置。
二次的な安全策としてホーロー抵抗の部分のハンダ付けを共晶ハンダで実施。183℃ではんだが溶けるので、そこで回路が遮断されるようにとしました。ホントかな?とりえずコシの強い配線をUの字に曲げて配線したから、残留の応力でハンダ溶けた時に配線外してくれないかなと期待。
連続通電試験がそろそろ30分になるが、発熱の問題はなさそうだ。風が結構流れてるからね。電圧も低いしね。
最悪を想定して、ファンが停止したときや、逆接続をしたときのことを考えるべきなんだが、逆接続はファンが壊れて終わり。あ、ファンが壊れてるのに電流が流れ続けるからダメじゃん。MOSFETも内蔵ダイオードでの電圧ロスがあるから発熱ひどそうだな。5Wくらいなら大丈夫かな。
ダイオード入れておこうかな。連続5A流してしまうと、ダイオード結構発熱するんだよなぁ。ファンのところにダイオード入れて、ファンが壊れないように保護。ファンが回らなかったら逆接続だから気がついてね、でいいかな。
あ!MOSFETつかって逆接続の保護回路できるじゃないか。それだな。NMOSが大量にあるから、それを使って実装してみよう。ローサイドスイッチになるけど、そこはご愛嬌。
で、変更した回路がこちら。MOSFET一つ追加するだけ。理解しにくい回路だが、これで逆流阻止できる。内蔵ダイオードを使ってうまいこと起動処理します。
さて、保護回路の解説だが、MOSFETをひっくり返して配線するだけ。逆方向接続の場合、下側に入れたMOSFETがOFFなので、逆電圧は下のMOSFETがすべて担保する。
順方向接続の場合、下のMOSFETのボディーダイオードを流れて全体の回路がONになる。いざONになると、下のMOSFETのVgsが12VになるためMOSFETがONになる。ボディーダイオードに電流は流れていたがMOSFETがオンになるので、もはやオン抵抗のみが支配する世界がやってくる。
いや、これいいね。
そして、本日実際の電源(電池)を接続しての試験を実施した。で、懸念点が出てきた。最後にMOSFETのVgs程度の電圧になったとき、MOSFETがON/OFFの中間状態になるとかなりの発熱があるのではないかと。
電圧が定価したら、電流遮断するような回路があってもいいかな。
市販のMOSFETを見ていると結構な性能のものが幾つもある。
http://akizukidenshi.com/catalog/g/gI-08421/
などはオン抵抗2.6mΩでドレイン電流は100Aを謳っているがすごいもんだ。
いつも気になるのが、このTO220のパッケージのリード線に100Aも流して大丈夫なのかと。。。
とりあえずマイコンから直接ドライブできるので、ありがたい限りです。今回は5A程度の電流遮断に使いますが、能力が余剰かもしれません。
でも、下手にオン抵抗の大きなMOSFETを使うよりは、ON抵抗の小さなMOSFETを使って放熱板を省いたほうがアマチュアにはコストメリットがあったりする気がする。
both asy and lib files are ascii plain text file, use simple text editor e.g. notepad.exe
asyファイルもlibファイルもasciiファイルなので、普通のテキストエディタ(メモ帳とか)で作成・編集できます。
MC34063.asyファイルを次の内容で作成する。
prepare MC34063.asy file as this
MC34063.libファイルを次の内容で作成する。
MC34063.lib is this
or download file from here http://www.onsemi.com/pub/Collateral/MC34063A%20ORCAD%20MODELS.ZIP
*==========================================================
* MC34063
* ON Semiconductor
* DC-DC controller
*
* This model was developed for ON Semiconductor by:
* AEI Systems, LLC
* 5777 W. Century Blvd. Suite 876
* Los Angeles, California 90045
* Copyright 2002, all rights reserved.
*
* This model is subject to change without notice.
* Users may not directly or indirectly re-sell or
* re-distribute this model. This model may not
* be used, modified, or altered
* without the consent of ON Semiconductor.
*
* For more information regarding modeling services,
* model libraries and simulation products, please
* call AEi Systems at (310) 863-8034, or contact
* AEi by email: info@aeng.com. http://www.AENG.com
*
* Revision: 1.0
*==========================================================
**********
.SUBCKT MC34063 swc swe ct 90 2 vdd isns drc
* SW-col SW-em Ct gnd cinv vdd isns drive col
*DC-DC controller
* PSpice translation by Christophe Basso, christophe.basso@onsemi.com
EB5 5 90 Value = { IF ( v(9,90)>2.5 & v(8,90)>2.5, 0, 5 ) }
Q3 ct 22 vdd QN2907
V10 isns 22 DC=.3215
EB6 7 90 Value = { IF ( v(4,90)>2.5 & v(10,90)>2.5, 0, 5 ) }
R3 5 10 100
R9 13 swe 100
C2 10 90 100p IC=5
R4 2 90 10MEG
C10 2 90 50p
R5 7 8 100
C3 8 90 100p IC=0
XTOF1 srst 90 ct 90 SWhyste params: VT=1.25 VH=.8
R1 srst vdd 10k
Q2 drc 14 13 _Q3_mod
EB4 6 90 Value = { IF ( v(2,90) > (v(vref,90) + v(voff,90)), 0, v(vdd,90) ) }
GB2 vdd ct Value = { IF ( V(srst,90) > 3, 35U, -220U ) }
EB3 9 90 Value = { IF ( v(diff,90) < 1, v(vdd,90), IF ( (v(6,90) > 3), 0, v(vdd,90) ) ) }
EB7 16 90 Value = { IF ( V(vdd,90)-1.5 > 1.25, 1.25, IF ( V(vdd,90)-1.25 < 0, 0, V(vdd,90)-1.25 ) ) }
V7 16 vref
R6 vref 90 400
R7 vref vdd 90k
Q1 swc 13 swe _Q4_mod
R8 diff 90 10k
D1 14 15 DN4148
D2 swe 14 DN4148
V3 drc 15 DC=700m
GB8 swe 14 Value = { IF ( v(5,90) > 2.5, 10m, -10m ) }
V4 voff 90 DC=2m
C5 srst diff 10p
EB1 4 90 Value = { IF ( (v(diff,90) > -1), v(vdd,90), 0 ) }
R10 vdd isns 10k
** discrete models **
.MODEL QN2907 PNP BF=200 BR=6 CJC=19PF CJE=23PF IKF=100E-3
+ IS=1.1E-12 ISE=1.3E-11 MJC=.2 MJE=1.25 NE=1.9 NF=1.21 RC=.6
+ TF=5E-10 TR=34E-9 VAF=50 VJC=.5 VJE=.30 XTB=1.5
.MODEL DN4148 D BV=100V CJO=4PF IS=7E-09 M=.45 N=2 RS=.8
+ TT=6E-09 VJ=.6V
.MODEL _Q4_mod NPN BF=50 RC=.125 RE=.125 TF=10n
.MODEL _Q3_mod NPN BF=50
.ENDS
**********
* PSpice hysteresis switch made by Chris Basso
.subckt SWhyste NodeMinus NodePlus Plus Minus PARAMS: RON=1 ROFF=1MEG VT=5 VH=2
S5 NodePlus NodeMinus 8 0 smoothSW
EBcrtl 8 0 Value = { IF ( V(plus)-V(minus) > V(ref), 1, 0 ) }
EBref ref1 0 Value = { IF ( V(8) > 0.5, {VT-VH}, {VT+VH} ) }
Rdel ref1 ref 100
Cdel ref 0 100p IC={VT+VH}
Rconv1 8 0 10Meg
Rconv2 plus 0 10Meg
Rconv3 minus 0 10Meg
.model smoothSW VSWITCH (RON={RON} ROFF={ROFF} VON=1 VOFF=0)
.ends SWhyste
***** Example models *****
.MODEL DN5819 D BV=5.33E+01 CJO=1.44E-10 EG=0.69
+ IBV=6.00E-04 IS=1.65E-05 M=.671 N=1.41 RS=4.47E-02
+ TT=7.20E-11 VJ=1.45 XTI=2
*****
.SUBCKT MC34063A 1 2 3 4 5 6 7 8
*BY KEHINDE OMOLAYO 2-20-03
*TERMINAL ID
*SWITCH COLLECTOR=1 SWITCH EMITTER=2 TIMING CAPACITOR=3 GND=4
*COMPARATOR INVERTING INPUT=5 VCC=6 IPK SENSE=7 DRIVER COLLECTOR=8
* Translation by Chris Basso
E1 10 0 5 4 1
R1 4 5 10MEG
V1 20 0 PULSE 0 2
E2 11 0 3 4 1
EB1 13 0 Value = { 1M/(ABS((27.475-195M*V(12))+(36.002+244M*V(12))*V(9)-
+(302.302+651M*V(12))*V(9)^2)+1F) }
E3 12 0 6 4 1
E4 9 0 6 7 1
R2 6 7 10MEG
EB2 14 0 Value = { 1M*((-10.765-151M*V(12))+(45.344+864M*V(12))*V(9)-
+(35.99+1.378*V(12))*V(9)^2+(8.341+839M*V(12))*V(9)^3) }
EB4 15 0 Value = { IF ( V(9)>0.32, V(14), V(13) ) }
C1 19 0 10P
EB5 16 0 Value = { IF ( V(20)<1, 2, IF ( V(24)>1, 2, IF ( V(19)>1, 0, 2 ) ) ) }
R3 16 17 150
C2 17 0 10P
EB6 18 0 Value = { IF ( V(20)<1, 0, IF ( V(24)>1, 0, IF ( V(11)<(1.083-1.239*V(29)), 2,
+IF ( V(17)>1, 0, 2 ) ) ) ) }
R4 18 19 150
D1 4 3 DMC34063
D2 3 6 DMC34063
C3 11 31 1N
GB7 4 36 Value = { IF ( V(17)>1, -(224.4U+2.359U*V(12))*0.77, V(15)*0.77 ) }
C5 23 0 10P
EB9 21 0 Value = { IF ( V(20)<1, 2, IF ( V(17)>1, 2, IF ( V(26)>1, 0, 2 ) ) ) }
R5 27 26 150
C6 26 0 10P
EB10 27 0 Value = { IF ( V(20)<1, 0, IF ( V(17)>1, 0, IF ( V(10)<1.25, 2, IF ( V(23)>1, 0, 2 ) ) ) ) }
R6 21 23 150
EB12 33 0 Value = { IF ( V(11)>(1.148+184.6M*V(29)), 2, 0 ) }
R13 33 24 10K
C8 24 0 10P
Q1 8 30 25 QSWITCH
Q2 1 25 2 QSWITCH
R15 25 2 100
D5 2 30 DMC34063
G1 2 30 26 23 5M
R16 2 4 10MEG
R23 31 28 1M
V6 28 0
V7 36 3
EB13 29 0 Value = { I(V6)/(I(V7)+866.8M*I(V6)) }
***
.MODEL DMC34063 D (CJO=2P N=0.05)
.MODEL QSWITCH NPN BF=75 CJC=2P IS=3E-9 RB=1 RC=0.45 RE=0
+ VJC=.75 VJE=.75 VJS=.75
***
.ENDS
*********
save MC34063.asy at LTC\LTspiceIV\lib\sub
save MC34063.lib at LTC\LTspiceIV\lib\sym\PowerProducts
now you can use MC34063 on LTSpice ;-)
発振回路あるあるですが、Start external DC supply voltage at 0Vにチェックをしれてください。刺激がないと開始しませんので。
don't forget to check start up option, check "Start external DC supply voltage at 0V" on the simulation option window.
ICが実はbottom viewなのだが、top viewにもできる。
See also: 両方デッドリンクになっていましたorz EEVBlogもだめとは(2020/6/25)
http://www.koka-in.org/~kensyu/handicraft/diary/20050609.html
http://www.eevblog.com/forum/beginners/simulate-mc34063-on-ltspice/
電池を放電するための装置だが、こんなのになりそう。
最初の仕様:
33Ω×3並列
ファンの電圧はLM317にて生成
半導体を無くした最終仕様:
10Ω×2直列×2並列
ファンの電圧は抵抗から取り出す。回路には5Aくらい流れるので、ファンに0.2A程度流れたところで誤差である。ファンがDCで電流を消費する気がしないので、直列にしたファンの間の電位は抵抗の分圧点にくっつけて置かないとファンが死ぬだろう(コンデンサでもいいかもしれません)
部品が多くなるとお金もかかるので、本当に100V 1000Wのニクロム線ヒーターをそのままつかうのが安いかもしれない。
回路を実際に組み立てるとなると、A4サイズに収まるのではないかと。
こんなかんじになるかな。ファンの風をまっすぐ導くように囲いが必要かもしれないが、まあ、こんなものでよろしかろうと思う。
ホーロー抵抗とファンがそれぞれ1000円オーバーとなり、部品代と送料で9000円くらいになってしまいそうな予感。高いなぁ。
ファンが1000円くらいするので、これを12Vの格安DCファンにしてLM317使ったほうが安くなるかもしれません。
33Ω抵抗3パラレルで、風を送らない仕様ですと、抵抗の値段だけなので4000円未満。。。でもホーロー抵抗の温度が相当上がるはずだから、パンチングメタルor金網でガードするとその分コストアップになる。
月曜日に費用のOK/NGを聞いてみよう。
回路図はBSch3V
実体の図はJWCadを使いました。
暗くなったらしばらく光るライトがほしい。という要望があって、ぼーっと考えていたのだが、マイコンのスリープの項目を見ていると、パワーダウンモードからの復帰にピン変化割り込みは使えないらしい。
でマイコンの消費電力を下げるべく色々やったが、思ったほど消費電流は低減できず、0.2mAほど常に流れる。スリープにしているはずだが、スリープにしなくても電流が一緒。あれ、sleepのプログラム間違えたかな。まずはマイコンで徹底的に電力を消費しないようにしたいのだが、ふとアナログ的にマイコンを電源から切断してもいいんじゃないかと思った。
当初は内蔵プルアップ抵抗を経由してCdSセルを接続し、明るさの変化をトリガにしてLEDを光らせるようにしようかと思ったが、CdSセルでMOS-FETを駆動し、それがマイコンをOn-Offしてもいいんじゃないかと。
電気が消えたタイミングから動作開始すればよく、一定時間LEDを点灯したらマイコンはシャットダウンさせてしまえばよい。データシートによれば0.1uAまで電流抑えられるらしい。
週末ちょっと実験をしてみよう。
pn接合の電圧降下は常温で0.65Vから0.7V程度である。温度係数があって-2mV/Kくらい。
広い温度領域でリニアなようなので、これを積極的に使った温度センサーがある。仕事でもそんな温度センサーをつかっていたことがある。センサーは安価じゃないけどね。
汎用のシリコンダイオードを使って温度計測ができないかと思う次第。まあ、温度係数はわかっているのでいいんだが、シミュレータでやってみようと思った次第。シミュレータも部品のデータの温度係数使うだけだから、まあ、傾向を見る程度にしかなりませんので、ご注意を。特に汎用ダイオードはVFが結構ばらつきますので、常温でのVFをあらかじめ測定しておかないと温度のオフセットが結構でるようです。
さて、シミュレーター(LTSpiceIV)で個別の部品の温度を設定する方法だが、部品のラベル(1N4148のところ)をクリックして、temp=50と書けば当該部品が50℃の状態のパラメータにしてくれる。
下のように、パラメータのスイープもできる。
LM358を使おうと思っていたが、トランジスタのVBEも同じ温度係数を持っているので、これを使って別の回路でもうちょっと温度に敏感な電圧変化を得られるものも考えてみた。常温でトランジスタのVBEと同じ程度のバイアスをかけておき、温度が上がるとトランジスタのVBEが下がって、トランジスタがONになっていくというもの。トランジスタのVBEのばらつきでぜんぜん特性が違ってしまう見込みなので、個別にトランジスタの特性を把握しないと、相当な誤差が生じる見込み。
グラフの縦軸は電圧、横軸は温度(℃)
3線引っ張るの面倒だなとおもってこんなのも考えてみた。外に引っ張っていくのはD1のダイオード。いや、ダイオードひとつでいけるんじゃないかと。エミッタのダイオードと抵抗にして、ああやって、こうやって・・・
いや、少なくともダイオードがひとつトランジスタと熱結合してないと気温に敏感になってしまいそうだが・・・下の右側の回路だと、D3とQ2が同じ温度で、D1とD2の温度差がミソなのだ。バイアス電流はいじれるようにしておかないと。D1側のVfを電流で微調節しようとしてるからね。
温度の閾値を50℃くらいにしたいので、50℃で電圧の変化率が大きいものがいいかな。
また後日検討しよう。
シャープの測距モジュールGP2Y0A21YKであるが、
ふざけた仕様で、3つあるケーブルは、
白:出力
黒:+5V
赤:グランド
というものである。赤黒逆じゃないのかと。
余裕で逆接続しましたとも。電源装置に接続したのだが、設定していた電流リミットの1.5Aまで流してしまったよ。電流制限ない電源だったら壊れていたかも。ふう。皆さん、電源装置は電圧・電流の設定できるものにしましょうね。
余談でした。
さて、このモジュールですが距離は出力電圧の逆数に比例である。なのでArduinoなどのマイコンに入力したあとに計算させるときは逆数計算して処理したらいい。
エレキジャックのページ(2017/8で消滅した)でシャープ測距モジュールGP2Y0A21YKの距離-出力電圧の評価結果が書いてあるが、複雑な関数(指数関数だか)でフィッティングしている。ちょっとマイコンには負荷高いんじゃ無いのかその計算。
ということで、検討。逆数になりそうなのはなんとなくアタリをつけてあったのでもう逆数でいけるだろうの決め打ち。
|
![]() |
![]() |
うん。出力電圧は距離に反比例ですね。
個体差により上記の計算方法は異なるだろうから、実測で合わせ込むのがよろしいかと。80cmの彼方でもADCで1の変化があれば1cm刻みで値が計算出来る見込み。そんなに精度良く対象物に赤外ビームを照射できるかは不明。
原理的にも反比例なのを確認してみた。
装置の原理としては、三角測量であり、人間の目が奥行きを感じる視差を使ったものである。じゃあ、幾何学的に計算できそうですので、ちょっと計算してみましょうか。
スクリーン(オブジェクト表面)までの距離をx、投光器の軸と受光器の軸のオフセットをp(ピッチ?)、ディテクタのレンズの焦点距離をf、一次元イメージセンサー上の軸からのずれをdとすると、d=fp/xとなり、dは1/xに比例することが分かる。
装置としてもおそらく受光したピーク位置を出力するだけの単純な機構だろうから、きっと、距離はセンサー出力値の逆数をいじってあげればいいんじゃないかと思う次第。
別に三角関数使わなくとも、x:p=f:d だから、pf=xdでd=fp/xであることは計算できますな。
さて、当該機種、外からの光の影響を除去するために、赤外線リモコンのように点滅させて運転させているだろうと思う。しらべたら、http://cyberworks.cocolog-nifty.com/blog/2010/04/psd-gp2y0a21y-1.htmlで調査しているひとがいた。繰り返し周期1024usのうち、発光時間128usとのことで、点滅周期は約1kHzのようだ。
実際にモジュールを買ってみたので、測定してみた。60cmくらいから値がちょっとずれるが、電源装置のツマミをひねってしまったようで、電源5Vで開始したけど測定終わったら電源装置が4.7Vになっていた。まあ、いいか。
![]() |
|
そして、80cm以上も測定できるんじゃないかと思う人はいないだろうか?できそうな見込み。もう一度測定したけど、やっぱり手で装置を移動していくと値がふらふらする。
職場の同僚、子供のおもちゃが壊れたとのことで、直したいとのこと。預かって様子を見ることにした。
かつてUSJで販売されていたスヌーピーバブルメーカー(Snoopy Bubble Maker)というものだ。
内部の回路はとても簡単。単四電池×2でモーターを回すのだ。しかし、スイッチがいけてない。50mA定格のタクトスイッチだ。モーターの起動電流は実測で1.5Aを超えるし、定常の電流も0.5Aほどになっている。なるほど、これは壊れる。
スイッチ部分をどうしようか迷ったけど、ローサイドのMOSFETにして、タクトスイッチはゲートのON/OFFに使うだけにした。
モーターへの通電をやめたときに逆起電力が結構大きいかとおもって、ダイオードをいれておいた。
MOSFETは表面実装のを使った。4×4の基板は秋月のもの。だいぶ隙間があるが、気にしない。ゲートとグランドをつなぐ抵抗が一番でかい^^;。
チップ抵抗無いとおもったが、あったので実はもっと小さくできたかも。空中配線はワイヤーの張力でぶっ壊れるので、やらないことにした。
壊れたタクトスイッチを交換し、半導体スイッチにて無事に動くようになりました。
めでたしめでたし。
・・・・・光ったら子供が喜ぶのではないか、と先の同僚がささやくもんだから・・・・
スヌーピーの尻尾のフルカラーLEDを接着。しかし、電源が最大3Vと緑、青LEDには少々つらい電圧なので、昇圧が必要に。
じゃあ、昇圧回路作るかということで、HT7750Aをつかった5Vの電源を用意。こちらも4×4の基板に実装。←テスト用のリードがついたまま。
あまっていたOSコン(16V 22uF)を入力側に使ってみましたが、後で削除。部品箱をあさっていたら4.7uFのチップ積層セラミックスコンデンサが出てきたので、それを4つほど付けた。
あとはマイコンにプログラム書き込んで、ちょっとごちゃごちゃするが、内臓を詰め込んで出来上がり。
シャボン玉メーカーということで、湿度の高い環境で使われるだろうから、基板はエポキシで埋めてしまい、むき出しの半田付け部分はヒューミシールみたいなもので覆って出来上がり。.
小さな子供が使うということで、色の変遷は穏やかに。
手持ちのマイコンは2chまでしかPWMできないので、フルカラーLEDのためにソフトウェアPWMで対応。ピンをhigh/lowどんどん切り替える。ほかに処理はないので、これでいい。
部品と費用
■基板
秋月4x4基板×2。20円
■半導体スイッチ部分
IR IRLML6344TRPBFTR 15円 ただし頂き物
ショットキーダイオード 15円
10kΩ抵抗 1円
■昇圧回路
HT7750A×1 ×1。40円
チップコイル(47uH 0.36A)。 10円
ショットキーダイオード 15円
積層セラミックスコンデンサ。合計20円くらい。
■LED部分
ATTiny13A 50円
マルチカラーLED 87円
カーボン抵抗×3。3円
■その他ワイヤー・接着剤など
誤差
合計約280円。
かかった時間:不明
効果:プライスレス(報告まち)
MP4212というフルブリッジICのハイサイド(P-MOS)の駆動がどうなるか検討してみる。ゲートの充放電を滞りなく行う。
回路シミュレータは例によってLTSpiceIV。
R1の値を1k、3.3k、10kと変更してのシミュレーション。P-MOSはMP4212のP-MOSと同じ程度のゲート入力電荷(22nC)程度のものをつかった。
黄色:MOSFETの電力損失
紫:MOSFETのゲート電位
赤:入力のロジック信号(グラフ右端で0に落ちている)
緑:R1に流れる電流
10kΩの抵抗ではターンオフ開始まで70us、オフ完了までに120usもかかるが、1kΩ抵抗にするだけでかなり早くなる。たぶんMOSFETの損失も1/10くらいになる。
スイッチオフしたつもりでもまたMOSFETがONのままである時間が結構あるので、ここも要注意。ブリッジ回路だと上下のトランジスタが同時にONになるとまずい。
これでも満足できない場合は次のようにトランジスタを入れることでゲートの放電をサクっとやってしまう方法があります。しかしながらP-MOSのスレッショルド電圧があまりにも低いとトランジスタでオフしきれないばあいがあるので注意が必要です。
3usくらいでスイッチオフできているが、上の1kΩのものは大体5usでスイッチオフできているので、微妙といえば微妙かもしれない。12Vで動かしたとき、1kΩ抵抗だと12mAが無駄にながれるが、こっちは1.2mAだ。モーターを駆動するような電流の食い方をする回路では12mA程度はもしかしたら無視できるものかもしれない。
注意点はあまりにもスレッショルド電圧の低いMOSFETだとターンオフしきれない可能性がある点。ゲート電圧はVccまでは到達せず、トランジスタのベースエミッタ電圧だけ低い電位になる(Vcc-VBE)。なのでスレッショルド電圧が0.6VとかいうMOSFETを使うとこの回路ではだめ。
MOSFETのターンオフ(ターンオンもだけど)で、ゲート電圧が一定になっている箇所があるが、MOSFETのチャンネルに電荷を送り込むだけのゲートの電荷なのだろう。
実際のデバイスの動きがちゃんと盛り込まれているようだ。以下ルネサスの資料から抜粋。
DC-DCコンバータを作るうえでいつもコイルをどう選ぼうか悩ましい。
ちゃんと選んだことはないような気がするので、ちゃんと計算してみよう。
条件:太陽電池は2W (ピーク電力は6V 0.33Aのとき)、充電対象は鉛蓄電池(13V程度を見こむ)
コイルのインダクタンスをL[H]、コイルに流れる電流をI[A]とすると、コイルに蓄積されるエネルギーは1/2 LI^2なのでこれをスイッチング周波数繰り返してエネルギーを運ぶ。
スイッチング周波数をf[Hz]とすると、毎秒コイルが輸送するエネルギーは1/2 fLI^2 [W]
2Wの太陽電池から電力を吸出そうとすると、上記の1/2 fLI^2が2[W]にならないといけない。いま、マイコン側の都合でスイッチング周波数を約20kHzとすると・・・
fLI^2 = 4
20e3 * LI^2 = 4
LI^2 = 2e-4
仮にL=100uHとすると、I^2 = 1.4[A]となります。よってコイルのピーク電流は1.4A程度を見こむ必要があります。
上記の20kHzの間に1.4Aまで電流が増えるようなコイルじゃないとそもそもエネルギーが輸送できない。特にインダクタンスが大きいと十分に電流が増大しないのでエネルギー輸送ができない。かといってコイルが小さいと電流が大きくなりすぎてしまう。コイルが飽和しなければ大丈夫だが。
次にスイッチング周期が50usで、昇圧比が2程度なので、duty比1/2程度での運用になる可能性がある。電源電圧E[V]の電源をコイルに繋いだとき、コイルに流れる電流はI=Et/Lと直線的に増えていくので、
50us×duty = 25us、t=25usになる。ほかはE=6[V] L=100[uH]なので、
I=6*25e-6/100e-6 = 1.5[A]とちょうど良い感じ。
絵に描いてみる。電流不連続モードの場合、ピーク電流は平均電流の2倍程度でよさそうだが・・・
昇圧比がすごく大きいときは、トランジスタoffになったとたんに電流が立ち下がるはずなので、
最大限を考えると、duty比1/2でもピーク電流が平均電流の4倍ほどになる。。
3Vから2V程度まで電流一定動作をする回路が必要になった。ちょっと大きな電池を放電しきってから捨てるらしい。
始めはDC-DCで昇圧して5Vの電源を作り、オペアンプでMOSFETを制御したが、部品が多いし、放電回路をいくつかってなると面倒なので、バイポーラトランジスタでの回路でお手軽簡単に済ませようかと思った。
回路は簡単。PNPトランジスタが少々大きくて電流増幅度βが100程度しかないので、NPNトランジスタと組み合わせたインバーテッドダーリントンにしてます。空中配線でも何とかなるかと思ったけど、ちょっとつらい。
シミュレーションではまあ、2V程度までならまあ、よさそうな特性を持っているのでまあ、勘弁してほしい。
当然のようにトランジスタは相当発熱するので放熱には多少の気遣いが必要である。回路では2SA1943-Oを使っているが、TO-220くらいのパッケージ(Tc=25℃でPc=25Wほど、放熱板なしでPc=2W程度)のものでもいいと思う。
この回路、たぶん壊れないだろうが、うっかり放熱板が取れたら発熱を担うトランジスタが壊れる可能性がある。温度が上がってブレークダウン(→これはショートモードで破損のはず)なので、念のためヒューズでも入れておけばまあいいかな。
この回路、逆に接続したら電流流れるかな?シミュレーションモデルはベースとコレクタ間のダイオードを考えてない気がするから、トランジスタを全部上下反転させてマイナス電源でシミュレートしてみたらいいかな。
I tried to use dot matrix led with Arduion UNO R3
Arduino UNO R3でドットマトリックスLEDを点灯させてみた。
I bought this matrix leds at Nihonbashi Osaka, this is easy to use on bread board.
the interface is serial with clock signal (receiving data with HC595).
ドットマトリックスは、大阪日本橋のデジットで購入。ブレッドボードに刺すだけ超簡単。
クロックドシリアル接続 Dot812_88D_13SU ダイナミック駆動8×8ドット LEDモジュール
共立エレショップにはまだ登場してないかも
詳細はデジットブログへ
http://trackback.blogsys.jp/livedoor/digit4555/51883614
カラム側が0で点灯なので間違えないこと。以下のArduinoプログラムも反転出力させています。
active low with column lines.
データの作成はさすがに面倒臭いのでエクセルを使いました。というか、このテのものはデータ作成がほぼすべてですね。
I used microsoft Excel to make binary data as below. I have no idea to make font data.
条件付書式で、1を書き込むと赤くなるようにしてある。コレで絵が見やすくなります。
上から1,2,4,8,16,32,64,128(2^0~2^7)と重みを乗算してから全部加算し8ビットのデータにします。文字の下の部分の列をメモ帳に貼り付け、TABを,に置換して配列にすればOKさ。
以下Arduinoのプログラム内容
//Define Pins connected to 74HC595
int latchPin = 2;
int clockPin = 3;
int dataPin = 4;
//Data. Make sure to use PROGMEM
prog_uchar Data[] PROGMEM = {
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
254,16,16,16,254,0,28,42,42,26,0,254,
0,0,254,0,28,34,34,28,0,3,0,0,60,2,28,2,60,0,
28,34,34,28,0,62,16,32,32,0,254,0,28,34,34,254,0,250,0,0,0,
60,2,28,2,60,0,94,0,32,124,34,0,254,32,32,30,0,0,0,62,72,136,72,62,0,
62,16,32,32,0,28,34,34,254,0,60,2,2,62,0,94,0,62,16,32,32,30,0,28,34,34,28,0,0,0,
252,2,2,2,252,0,254,64,56,4,254,0,124,130,130,130,124,0,0,0,
254,144,152,148,98,0,68,146,146,146,108,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
//Macro to access data on flash memory
#define DataList(number) pgm_read_byte(&Data[number])
void setup() {
//uses 3 pins for output, Latch, Clock, and Data.
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
//ground latchPin and hold low for as long as you are transmitting
for(unsigned char k =0;k<156;k++){
for(unsigned char j =16;j>0;j--){
/* counting j for speed control */
for(unsigned char i=0;i<8;i++){
digitalWrite(latchPin, LOW); //start sending data
shiftOut(dataPin, clockPin, MSBFIRST, ~DataList(i+k+8)); //column data to right side LED matrix, Low to light
shiftOut(dataPin, clockPin, MSBFIRST, 1<<i); //common data, High to light
shiftOut(dataPin, clockPin, MSBFIRST, ~DataList(i+k)); //column data to left matrix
shiftOut(dataPin, clockPin, MSBFIRST, 1<<i); //common data
digitalWrite(latchPin, HIGH);
}
}
}
}
今回は左側、右側の順番にデータを送っているのだが、ところてん的なデータの流れがあるので右側に送り出す信号を予めぶち込んでおいて、左側のデータをたたき込む、こんな手順です。
左右逆転するときは、データを送り出す順番に気をつける。