2014年8月18日月曜日

@autoreleasepool { }

久しぶりのiOSネタ。

ALAssetから引っ張ってきたPNG(スクリーンショット)画像をUIImageViewに表示して、これをボタンで高速でめくっていくと「メモリ足りない」って落ちる現象に遭遇。

ゆっくりページめくりしている時は大丈夫。

【ALAssetからdefaultRepresentationを取得し、その後UIImageに変換してUIImageViewにセットする】だけの簡単な処理だけど、高速でめくるとreleaseする前に次の画像を取ってきてしまうので落ちる。落ちる前に手を止めると、メモリのグラフがガタガタと下がっていく。

一瞬、「めくる速度を制限しようか」という悪魔の声が聞こえたけど、それは最後の手段として取っておくことにした。

でも、__weak試したりnil代入しても状況は変わらない。

最終的には上記【】の処理を@autoreleasepool {}で囲って強制的に掃除したらスクリプトで超高速めくりを実行してもメモリサイズは安定したままで落ちなくなった。

いやはや。

それにしても、どうしてこういう問題は、定時で帰る5分前に発生するのでしょうか。15分ぐらいで解決できたから良いんだけど。

2014年8月10日日曜日

CL6807 LEDドライブ

SOT-23-6が私のハンダ付けの限界@老眼的な意味で

はい、秋月で売っているアレです。

チップ製造元の推奨回路そのものなので面白くも何ともないのですが、以前150円のミニブレッドボードで組んだものをユニバーサルボードで作りなおしました。Rsは1Ω、100mAの定電流回路です。

安ブレッドボードはお手軽でよく使うのですが、どーやっても計算通りの数値が出ませんでした。調べた結果、ブレッドボードの接触抵抗が最大2Ωぐらいあってふらふらと変動していました。そのぐらいの変動は低速のデジタル回路で使う分には問題ないのですが、0.2-1.0Ωの電流検出抵抗を使う回路では大問題です。

CL6807はそれきりで、しばらくもっとお手軽(LM317と同じ考え方)に電流を設定できるNJM11100による定電流回路をいじっていたのですが…安定化電源チップのNJM11100はPWMを前提としていないため低デューティー比領域での制御性が悪くて、LED読書灯として使っていると「ふーっと消えていく」あたりがガタガタしてどうにも美しくありません。

ということで、改めてCL6807でちゃんと組み直してみた次第。私にしては珍しく配線ミスもなく一発で動作しました。ブレッドボード版ではジャンパ線に触ると電圧出力がふらついて使い勝手が悪かったのですが、今度はしっかり配線したので大丈夫です。

次は制御ソフトをもうちょっと何とかしたい。一応低消費電力化やUIを改善したRTOS対応版のコーディングは終わっているのですが、読書灯として使っている配線を外して机まで持ってくるのが面倒で着手できません。

夏休み終了間際にならないと宿題に着手しない病は一生治らないのだろうか…。

2014年8月8日金曜日

MSP430 LauchPad + I2c液晶 + RTC + 3軸加速度センサ



どうもI2Cとは相性が悪いというか、今まで一発で動いたことがありません。今回も散々苦労しました。

・I2Cの信号が出ていない?▶オシロの設定間違い
・I2Cのクロック波形が鈍りすぎ▶プルアップを10kから1kへ
・念のためアドレスを左右にシフトしてみた▶ダメ
・念のため液晶変えてみた▶動いたorz

最近の部品は強いんですが、やっぱり壊れるときは壊れます。しばらく行方不明になっていて、アクリル板の下敷きになっているところを発見された液晶なので、静電破壊でしょうね…。

しかしこのμA単位で動作する低消費電力MCUでプルアップ1kΩ☓2ってのはキツい。LOWの時だけとはいえ6mAなどという大電流が流れるなんて…。ということで10kに戻してみたけど特に問題ありませんでした。それでも0.6mAはかなりの大電流ですが。

とりあえず液晶が動いたので、その後RTC(RTC-8564NB)と3軸加速度センサ(ADXL345)をつないでみました。

例によってRTCが動かず苦労しましたが、これはレジスタの数を間違えていて、一回りしてスタートビットを叩いているつもりが別のレジスタ叩いていた、という軽いボケ。

3軸加速度センサは以前Arduinoで書いたコードをそのまま貼ってすんなり動きました。

というわけで「振動を検知すると超高輝度赤色LEDが点灯するデジタル時計(またかよ)」の出来上がりです。

で、MSP430G2553IN20ですが…Energiaで書いている分には「小さな低消費電力Arduino」として使えるのでお手軽です。同じぐらいお手軽なmbed LPC1114FN28といい感じで使い分けできますね。14ピンのMSP430でEnergiaが動いてくれればLPC810M21FN8よりも使い勝手が良いのですが、見当たらないのが残念。

Energiaのフォーラムを見ていたら、32768hzの水晶を直結してRTCとして使うライブラリが公開されていたので、今度試してみようっと(「今でしょ!」禁止)。

2014年7月26日土曜日

PayPalさんありがとうおおお!

ちなみにAmazonからは翌日届いた。
いくら海外発注とはいえ、今どき通販でモノが7週間も届かない、しかも担当者が嘘つきでいうことがコロコロ変わり、送り直したとかいうけどtracking numberは変わらない。「もう良いから金返せ」って言っても「ご連絡ありがとうございます」という定型文が返ってくるだけ。

通販業者の名前は、悪名高きDealExtream.com / DX.com…まぁ悪名高いってのは後で知ったわけですが。中国にもまともなビジネス/まともなヒトが居るのかもしれないけど(まだ会ったことないけど)、これが私の嫌中をさらに加速しました。

その状況を救ってくれたのがPayPalでした。普段カード払いなのに、その時は何故かたまたまPayPalで、しかもPayPalだったことを思い出したのが、紛争解決センター締め切りの直前(発注から45日以内なら、業者との間に立ってトラブルを解決してくれる)というクリチカルっぷり。しかも仕事が早くて、やりとりの経緯などをWebから送ったところ、1週間ほどで「クレジットカードに返金しました」と連絡が。最高です。

わずか$20の取引に対応してくださって、本当にありがとうございました。

以下、経緯の詳細です。赤文字がdx.com青文字がPayPalさん私はデブだから太字dx.comとは英語、PayPalさんとは日本語のやりとりでした。

6/01 赤外線放射温度計を$20.12でDX.comに発注、納期は最大20日とのこと
6/21 届かないのでWebから「届かない。トラッキングナンバーも該当する業者がない」とクレームを入れた。

メールで届いたトラッキングナンバーを調べようにも、「このフォーマットはこの配達業者」という一覧に該当するフォーマットがない辺りでもうダメな予感。

6/25 「申し訳ありません。通常7-30日で届きます。もう少しだけお待ちください。なお、トラッキングナンバーはここのページで調べてください」との返事。そのページは、もちろん、上のページで該当しないからクレームを入れてないということは華麗にスルー

6/27 だから、そのナンバーは載ってないじゃん!と少し怒り気味の返事を送る

6/29 「不便かけてすみません。でも、心配しないでください。出荷の遅れは国際便にはよくあることです。私達は確実な到着を心がけています。もう7日だけお待ちください。お客様の忍耐に感謝します」と返事。話が通じてねえ…これが中華4000年クォリティか。

7/11 7日すぎても当然届きません。「もう我慢ならない。金返せ」とだけ返事

この辺から相手のメールの文面でplsとかtksなどの略語が目立つようになる。真剣にトラブル対応する気、ねーだろ。書いてて怒りが蘇ってきたので、以下ゼンジー北京フォーマットにします。

7/14「こんなに待たせて悪いあるなー。実は、マレイシア便が糞詰まりしてて、出荷担当がマレイシア当局と相談してるある。きっと良い解決するあるからよろしくな。1-2週間待ってくれるヨロシな。この問題が解決するまではちゃんと対応するアル。2週間待ってまだ届かなかったら連絡するのコトよ」と返事が来た。

7/14「金返せ。ビジネスとしてありえねえだろ」とだけ返事する。

この時、PayPalさんで支払ったことに気づき、何かできる事はないかと思ったら「紛争解決」というリンクを発見。さっそくこれまでのやりとりをまとめて送付。紛争解決の有効期間は45日間とのことで、あと2日でアウトでした。「トラッキングナンバーなどを確認してみます」との返事あり。

7/16「いやいやゴメンよー。あなた荷物な、これsecurity checkに通らなかったあるよ。もう一回別便で発送するヨ。1週間で新しいtracking numberに更新されるのコトよ。だからまた1週間待つヨロシ」

7/17「じゃ、新しい番号を1週間だけ待ってやる」と返事。甘いなオレも。

7/22「あと5日待てるアルか? もし何か質問あたら、戻ってくる良いアルヨー。ごきげんようねー 原文:If you have any questions, pls come back to us. have a nice day  :)  」

私は怒っている相手に顔文字がどれだけの着火力をもたらすかを再認識しましたw

7/22 PayPalさんに、その後の経緯を伝えエスカレーションを依頼。

7/24 PayPalさんから「先方から『送り直した。新しいトラッキングナンバーはこれだ』という返事がありました」という連絡。それに対して私から「それは発注当初のトラッキングナンバーと同じです。『送り直した』という言葉と矛盾しています。対応をお願いします」と返事。

7/25 PayPalさんから「こちらでも調べたところ、トラッキングナンバーは長期間更新されていないままですので、ケースを終了しました。代金はクレジットカードに返金しました」との連絡。

長かったけど、PayPalさんにエスカレーションを依頼したあとはあっという間でした。素晴らしいとしか言い様がありません。改めてお礼申し上げます。

今後何か支払うときの第一選択肢はPayPalだ。もう孫子の代まで家訓として伝える(子供居ないのが残念です)。

その後。

7/25 Amazonに放射温度計(新モデル)を発注
7/26 届きました。

さぁ、これではんだリフローができる!…と思ったら、外は40度近い灼熱地獄。室内でリフローすると有害物質やら悪臭で大変なことになるので、家の中ではできない。ということで、早朝涼しい時間にでもやりますわ。

関係ないけど…放射温度計と一緒に注文した「銀のニーナ」、これあかんやつやろ…最近流行の「大人の男と童女が突然一緒に暮らすことになった困惑やらほのぼのを描く日常マンガ」というジャンルっぽいけど、作者は意識してるかどうかわからんけどロリコン的なニュアンスを感じる…。

2014年7月12日土曜日

MSP430 Launchpad + MacOS X


さて、というわけでLauchPad届きました。月曜の朝Mouser.comに注文してテキサスを発送、木曜日の昼に東京都下に届くんだから地球も小さくなったもんやで。一緒にFRDM46も届いたので、こっちも楽しみ。



LauchPadにはいくつか環境があります。純正環境はMacでは動きませんが、サードパーティなら大丈夫。Xcodeから動かすツールなどもありますが、とりあえず手っ取り早く動かしたいので、それも後回し。レジスタなどを調べるのもめんどくさいし、とにかく週末まで待たされたのだからすぐ動かしたいのが人情じゃないっすかw

まずは勝手知ったるSkitchで書くことのできるEnergiaを試してみます。ところでEnergiaって何て読むんでしょう。つい「エネルギア」って読んじゃったりするんですが@シンフォギア的な意味で 

参考にするのはこのページ(https://github.com/energia/Energia/wiki/Getting-Started)です。ここでは先にドライバ落とせって書いてあるけど、アプリ本体にドライバ入っているので次に進んで大丈夫です。

Energia本体のダウンロード。「download」から「energia-0101E0012-macosx.dmg」を落とします。ダウンロードしたら解凍します→フォルダが開きます。


Energia.appアイコンをApplicationsアイコンへドラッグ&ドロップします。そしてドライバをインストールしましょう。MSP430LPCDC 1.0.3b.pkgをダブルクリック、「開発元が未確認なのでインストールできません」が出てきたら、そこは自己責任でpkgを右クリック→開く→「未確認だけど開く」で。インストール後再起動を求められますので、他に問題ないことを確認してからクリック。

なお、Java for OS Xも必要ですので、普段インストールしていない方はこちらでどぞ(MacでのJavaのインストール方法)…EnergiaのサイトにJDKのバージョン書いてないけど、Java 7なら大丈夫、かな…。

その間に開封します。しまった、開封直後の写真を撮り忘れたw


再起動が終わったら、Energiaも起動します。懐かしいArduino IDEを赤くしたようなアプリが起動します。Macと付属のUSBケーブルで接続。さっそく赤と緑のLEDが交互に点滅します。ちょっとウザいので、LED近くのSwitch2を押すと黙ります。


さて、Getting Startedに戻ります。USBのシリアルポートを選び、ボードとチップの種類を選びます。シリアルは「Macの場合は/dev/cu.uart-XXXXを選べ。/dev/tty.uart-XXXX」はダメって書いてあるんだけど、cuが出てこねぇorz ターミナルで見ると/dev/cu.uart-C1FF4A7AB7450931ってのが出てくるんですが…とりあえずこれを選んでおきます。

ボードは当然LaunchPadですが、チップは一応LaunchPad上のMSP430を確認してください。老眼にはしんどいですが、2553がついていたので、Toolsメニューから「LauchPad w/msp430g2553」を選びます。

まずは動作テスト(上のシリアルポートのこともありますので)、手っ取り早くテンプレートを動かしてみます。 ファイル>スケッチ例>1.Basics で、Skitch Windowが開いたらUpload Buttonをクリック。赤のLEDがのーんびりと点滅を始めれば、とりあえず問題なし、ということになります。

さて、環境は整った(環境を整えるのは30分もかからないんだけど、ブログ書いたり再移動するついでにメンテしてたら2時間かかってしまった…)。次は恒例のデジタル時計を…と思ったら、ジャンパ線の在庫が足りないっぽい…。

2014年6月30日月曜日

Beaglebone Blackで7セグメントLEDデジタル時計

同梱

■約5日で到着

欲しいと思ったのが3月、5月上旬に発売されると聞いてMouser.comに発注したのが4/23、秋月やAdafruitへの入荷を見送って待ち続けてきましたが、Adafruitに再度入荷したので我慢できずに6/25に注文。6/29の11時ごろ配達されたのですが、買い物に出かけていて留守、やっと本日11時半ごろ入手しました。いえー。



■というわけで、7セグメントデジタル時計をまた作った

事前にブレッドボード上に回路を組んであり、Bonescriptでも一応書き終わっていたものの、初めての環境だとやっぱり色々ありますね…。ピン配列の資料を見て、「じゃ、P8の3番以降を使おう」と決めてあったのですが、実際に走らせると「そこのピンはMMCが使っているからダメよ」とエラーが。

間違った配線の図

じゃ、どうすりゃいいのよ、とそれらしい資料を探し出すのに小一時間かかりました。Getting Startedにあったんですけどねorz

やっと1桁表示できたw

それからソフトのバグをプチプチ潰しつつ、「せっかくの時計なんだからちゃんとntpで時間合わせしないと」と思ったのが運の尽きでちょっとハマったり。出来上がったのが、以下のムービーです。


ムービーのフリッカーを合わさって、ほとんど判読不能ですね…。実物はもうちょっと読めるのですが、ともかく実用にはなりません。Cloud9上で90桁/秒程度、コマンドライン上で170桁/秒程度です。170だと普通に読み取れますが、チラついてることが誰にでもはっきりわかるレベルです。

BCDデコーダが手元にないので7セグメントを1ピンずつループまわしてドライブしました。TC4511あたりを使えばもう少し早くなるかもしれませんが、それでも1Ghz ARM上のnode.jsだとこのへんが限界かもしれません。少なくとも、高速化のためにあれこれいじるよりCで書いた方がラクだと思います。

■設定など

SDカードを買い忘れてしまったので、まだなーんにもやってませんw

とりあえず、日付を毎回合わせるのは面倒くさいので、ぐぐって見つかったこちらのページ(Thank you!!)を参考にターミナルで
    ntpdate -b -s -u ntp.jst.mfeed.ad.jp
と実行。何の問題もなく設定された。なお、あんまり当然すぎて書いてないのだと思いますが、この設定はUSBとMac(PC)つないだだけではダメみたいです。DHCPのあるネットにEthernetをつないでからrebootし、USBのコンソールから入ってifconfigでen0のipアドレスを調べ、一度USB経由で接続したシェルからログアウトして、再度en0のIPアドレスにroot@<アドレス>では入ります。

2014年6月13日金曜日

MacでXBeeの設定をする:X-CTU for Mac


■X-CTU

ちょっと古い本/Webには「Mac版のX-CTUはない」と書いてあるけど、あります。ここからダウンロード&インストールできます。xctung、X-CTUのNew Generation。


起動するとすぐアップデータのチェックが始まり、「このアップデータは署名されてないけど、アップデートするかい?」と聞かれるのでOKボタンをクリック、アップデートが終わると再起動されて再度アップデータのチェック(数秒)後、無事立ち上がります。

立ち上がったらAdd Deviceボタンをクリックします。するとシリアルポート一覧が現れます。他にいろいろつながっていると区別が難しいですが、その場合は一度USBポートを抜いてRefresh portsボタンをクリックし、接続してから改めてRefresh portsボタンをクリックします。そこで新しく追加されたのがXBeeです。


ポートを選択し、FinishボタンをクリックするとXBeeとの通信が行われ、取得された情報がメインウィンドウ上左側に表示されます。


これをクリックすると右側に詳細情報が表示されます。XBee本などに書かれているように、まずはXBeeをアップデートしましょう。Firmware Updateボタンをクリックします。



インストールするFirmware選択ダイアログが表示されます。初期状態で、現在インストールされているFirmwareの最新バージョンが選ばれているはずです。私の場合は「ZB24-ZB」、機能セットとしてはZigBee RouterのATコマンド、Firmwareバージョン22A7(Newest)が選択されていました。

XBeeネットワーク内のうちの1つはCoordinatorにしなければいけないので、Coordinator ATとそのNewest versionを選びFinishボタンをタップします。すると少し待たされた後、再設定と設定確認のための読み込みが行われて、画面右側に現在の設定状況が表示されます。

これで一つのXBeeをCoordinatorとして設定することができました。

2014年6月8日日曜日

小ネタ:回路図を書くには

FritzingもEagleも、ちょっと変わった部品を使おうとすると「not found」の壁にブチ当たります。基板を発注するのであれば、しっかり部品を定義するべきなのですが、ブログにちょっと回路図を載せる程度でいちいち部品を定義するのも面倒くさい。

では何を使うか。

私はマカーなので当然Keynoteを使いました。どや。

笑ってくださいw

抵抗の記号、昔ながらのギザギザを書いてみましたが、どうにもきれいに作れないので新しい規格で書きました。バランス的にはコンデンサが少しデカすぎですね。

あと、フォントがOCRですが、これは当初Fritzing用に部品を作ろうと思っていたため。でもFritzingの回路図イメージはsvgで、Keynoteはsvgへのexportが出来ないので挫折。

■折角なので■

某知人から「たまにKeynoteで回路図書くけど、パーツがなくて困る」というコメントをいただいたので、少し整理してgithubにあげてみました。

もっと絵心のある方にもご協力いただけると幸いです。ダイオードとFETはまだしもトランジスタが書けないw JIS記号をトレースすれば良いのかしら。

Arduino時計+温度計(RTC+7セグメントLED編)

■久しぶりのユニバーサルボード■

未だに中耳炎+喉頭炎+副鼻腔炎が治りません。発症して8日目、抗生物質を変えて2日目なのですが。

それはともかくとして、少し前にブレッドボード上で作った4桁赤色7セグメントデジタル時計を作りましたが、あれをプロトタイプとしてユニバーサルボード上に黄色で作りました。そのままでは芸がない(←それじゃプロトタイプの意味がないだろ)ので、LEDを黄色にして、安価かつDIPなRTCを使ってみました。DIP好きっす。

■部品集め■

ユニバーサルボードは秋月のArduino用ユニバーサル・プロトシールド基板200円を使います。最初からヘッダピンやリセットスイッチなどの乗ったプロトシールドも市販されていて、それはそれで便利なのですが、今回のように多めの部品を載せる用途には向いていません。うちにも1枚あるのですが、DIPパターンの部分がうまくLEDディスプレイと合わなくて良い位置に表示器を置けないので諦めました。また、最初からヘッダピンが着いているのはラクに見えるのですが、両端を塞いでいるのでハンダ付けの際にとても邪魔になります。何より高いしね。秋月で揃えたのは以下の部品(ほとんど部品沼にあった…新しく買ったのは黄色LEDだけ)


  • Arduino用ユニバーサル プロトシールド基板(P-07555)
  • ピンヘッダ 1×40 (40P)(C-00167)
  • ダイナミック接続4桁高輝度黄色7セグメントLED表示器(I-04422)
    アノードコモン アノード共通接続
  • I2C接続RTC(リアルタイムクロック)DS1307+(I-06949)
  • クリスタル(水晶発振子) 32.768kHz(P-04005)
  • ボタン電池基板取付用ホルダー CR2032用(小型タイプ)(P-00706)
  • 高精度IC温度センサ LM35DZ(I-00116)
  • 丸ピンICソケット (シングル40P)(P-01591)
  • タクトスイッチ(黄色)(P-03650)

()は同社通販コードです。同じ名前で似たようなものがたくさんありますので、お店で「これください」と言う時には通販コードで伝えるのが一番手っ取り早いです。この他に10kΩの半固定抵抗(時刻合わせに使う)、1/8w 220Ω抵抗7本、1μFの積層セラミックコンデンサ、配線用AWG30のテフロン線が必要です。

■まずレイアウト■



他の部品と当たらないか、表示は見やすいか、スイッチは押しやすいか、配線の取り回しはラクか…などを考えながらレイアウトを決めます。上記の写真は完成品と違いますが、それはハンダ付けする際に間違えたからですorz

昔は決めたレイアウトを記録するのが大変でしたが、今はスマフォで写真取っておけばいいだけなので簡単。折角簡単になったので裏も取っておきます。



■背の低い部品からハンダ付け■

これが基本なのですが、今回絶対に守らなければいけないのは、電池ホルダよりも先にヘッダピンをハンダ付けする、ということです。ホルダの陰に隠れてしまうので、忘れると大変なことになります。幸い、電池ホルダはRTCとGNDだけにつながるので、最後の方でも構いません。前述の通りヘッダピンは邪魔なので、最後から2番めにヘッダピン、最後に電池ホルダでいいでしょう。あと、RTCとLEDはソケットに取り付けます。今どきの半導体は直接ハンダ付けしても簡単には壊れないのですが、まぁ一応。

ICソケットやヘッダピンを取り付けるときには、まず端を1点だけハンダ付けして、ちゃんと水平・垂直になっているかを確かめてから残りをハンダ付けします。もちろん曲がっていてもあまり性能には影響ないのですが、カッコ悪いので。今回配線にはテフロン線を使いました。硬くて被覆を剝くのも取り回しするのも少し面倒なのですが、コテ先が接触しても被覆が溶けたり焦げたりしないので仕上がりがきれいです。

…なお、製作途中の写真撮っていませんでした。楽しくて、つい夢中になってしまって。ということで、配線面の写真と横から見た図。

青はセグメントで緑はカラム、黄色はLM35

左上のハンダ付けがちょっと荒れているのはLM35Dの信号がノイズまみれで温度表示がピコピコ変わるのでいろいろ試行錯誤した結果です。ソフトで移動平均とってもダメで最終的に1μFのコンデンサを打ち込むという乱暴技で解決しました。

たれ背負う
横から見るとLEDのピンが長いですね…貧乏性なので部品のピンを最後まで切れない。たかだか250円、牛丼よりも安い部品なのに。手前右側でそそり立っているのは水晶です。32.768hzの水晶なんて昔は何百円もしたのに30円だもんなぁ(以下昔話20行削除

■ソフトの修正■

赤色LED+ブレッドボードではRTCにRTC-8564NBというモジュールを使っていました(これも秋月)。今回は別のチップなので、I2Cまわりの処理を変更します。I2Cの基本的な処理とはあまり変わりありません。

もう一つ、赤色LEDはカソードコモンでしたが今度はアノードコモンを使いました(買ってくるときに間違えた)。ので、LOWとHIGHを入れ替えてやります。

で、点灯したら…とてつもなく眩しい時計になってしまいました。

これは温度表示。暑いな。
黄色LEDは赤色LEDよりも発光効率が高いのです(それゆえ、高効率かつ安価な照明用白色LEDは黄色+青色だけで出来ていたりして色がヘンなのですが)。同じ抵抗・同じ電流だととても眩しくなります。今から7本の抵抗を変更するのも面倒だなので、単純に各カラムをon/offしている時間の比率を変えて調整しました。抵抗220Ωで各セグメントをドライブし、昼間はon:0ff=1:10、夜はon:off=1:100にして、いい感じの明るさになりました。電流はセグメントあたり (Vcc-Vf) / 220 = 13mA、ダイナミック駆動なので夜の場合実際に発光している時間は1/700ってことになりますが、それでも結構明るいから恐ろしいです。

実用品を作るのは楽しい。

■追記■

当初1日1分以上誤差があって「やっぱ1本30円の水晶は無調整だとあかんかw」って諦めていたのですが、その後日差1秒ぐらいまで安定してきました。このところ気温が低いせいもあるかもしれませんが、やっぱ水晶発信器ってエージングが必要なんですね。

NJM11100F1を定電流源として使う

■動機は安直■

最近妙にLEDに関係するものを作ることが多いのですが、50-300mA程度の定電流を確実かつ簡単に提供できるデバイスというのはあまり選択肢が多くありません。定番はLM371ですが、Vin-Voutドロップ電圧が2-3vほどもあるので、基準電圧の1.25vと合わせるとバカにならないロスになります。かといって、CL6807などのLED専用スイッチング式定電流デバイスは効率は良いもののチョークコイルなど外付け部品が多くなってしまいます。1A流すならともかく、50-150mA程度の電源にインダクタとSBDはちょっと大げさかなと思います。

何か適当なデバイスがないか物色していて新日本無線のNJM11100という「出力可変型 逆電流保護回路内蔵 低飽和レギュレータ」が目に止まりました。TK11100と置き換え可能だそうです。

  • 逆電圧、過電流、サーマルプロテクション
  • 低ドロップ電圧(200mV)
  • 出力コントロール端子
  • SOT-23-6-1パッケージで小さい
  • 1.25v基準電圧タイプ
  • 最大出力電流240mA
  • 秋月で5個150円(CRDより安い)

比較的ロスの少ない定電流源としても使えそうな予感がします。パッケージ小さいですが、何とか手でハンダ付けできるサイズ。ドロップ電圧0.2vなのでLM317よりもかなりロスを小さくなります。個人的には先日CRDを壊してしまい壊れたCRDによってLED数本を焼いてしまったので、いろいろな保護回路が入っているというのも安心です。

なお、秋月でこのICについて配信されている資料は完全なものではありません。こちらの新日本無線のWebで配信されているものには回路例のパラメータや過渡特性が加筆されています。

■お約束■

この記事の情報はあくまでも個人の実験結果を報告するものであって、内容を保証するものではありません。

以下はメーカーにより提示あるいは示唆された使用法ではありませんし、私を含め他の如何なる製造業者等によって保証されたものではありません。場合によっては貴方のPCを始めとする家屋財産等に損害を与える危険性があります。記載された情報等により惹起された如何なる結果に関しても著者は責任を負いません。

予めご了承の上、この前にお進みください。

■さっそく試作■

というわけで試してみました。秋月のSOT-23-6-1オペアンプ用基板がパスコンの位置も含めて丁度使えます(2016サイズ, 0.1uF)。最初に基板にフラックスを塗って、生乾きのうちにチップを置くといい感じに固定できます。あとは少なめのハンダをピンに載せてからランドとの間に染み込ませるようにすればいい感じでハンダ付けできます。

2番ピン(GND)にハンダが回ってない…orz

出来たものをまずブレッドボード上で基本の定電圧回路として動かしてみると、基準電圧VadjはVoutとの差ではなくGNDとの差であることが判明。LM317などの可変三端子レギュレータを定電流として使う場合Voutと負荷の間にシャント抵抗を入れて、シャントとVoutの差をVadjにつなぐのですが、NJM11100は違います。

■定電流回路■

てことで、NJM11100を利用した定電流回路図。

…さくさく進んだように書いてますが、VadjがGNDから1.25vであることに気づくまでは試行錯誤しまくりでした。まぁそれでも壊れなかったのだから、なかなか丈夫な良いチップです(待て


ご覧のように、共通のグラウンドからシャント抵抗(R = 1.25V / 電流値、50mAの場合は25Ω)を通してLEDカソード(ー)につながり、アノード(+)からVoutへ。カソードからさらにVadjにつなぎます。こうすれば、電流によって生じた電圧が1.25vに保たれるようにVoutが制御され、結果として定電流回路として働きます。

■PWMを試す■

LM317などの三端子よりはジャンパ多いですが、コントロール端子によるスイッチは比較的低速のPWMぐらいなら追従してくれそうな感じ。で、結果ですが…立ち上がりは比較的速いものの、立ち下がりが遅く、Vcc9vで500Hz, 50%のPWMを入力した場合、3vまではストンと落ちるものの3v以下ではダレてしまって完全にoffになる前に次の立ち上がりが来る状態でした。白色LEDのVf以下なので、それほどロスや発熱にはならないと思いますが…まぁ本来の利用方法ではないので仕方ありません。

…スクリーンショットを貼れるようなオシロが欲しいorz

PWMなしで動かすのであれば100mAぐらいなら放熱器なしで使えるので、基準電圧などによるロスを除いても白色LEDをギリギリ直列5個までドライブできそうです。合計しても15v x 0.1A = 1.5wなので明るさはそれなりですが。