ネオピクセルインタフェースのLEDドライバICが、VFDで使えるか実験です。
前回の設計の記事はこちらになります。
PCBgogoから基板が届く
発注しておよそ1週間で基板とメタルマスクが届きました。PCBgogoの基板は、保護のために板に挟まって送られてくるんですね。これはいいですね。
両面ともに綺麗に作られています。シルク印刷も綺麗です。
この基板で一番精密な部分は、USB-Cコネクタのパタンです。長穴と細い穴も正確に作られていますね。
組み立て
クリームはんだの印刷
ネオピクセルインタフェースのLEDドライバICが、VFDドライバとして動作するかわからないので、1枚だけ組み立てることにします。
あ、一つ忘れていました。PCBgogoには注文時にメタルマスクを小さくカットしてくださいと日本語で注文していたのですが、その通りにメタルマスクがカットされています。PCBgogoの注文ややり取りは全て日本語でOKなことがわかりました。
基板とメタルマスクには四隅に0.75mmの穴を開けています。そこにマップピンを刺して、基板とメタルマスクの位置合わせと固定を行います。この方法ですと0.4mmピッチの狭いパタンでも、完璧の位置にクリームはんだを印刷できる精度があります。
メタルマスクの奥側にクリームはんだを載せます。普通のオーブンでもリフローできるように138度で溶ける低融点の鉛フリークリームはんだを使っています。
刃の部分がしなるパテナイフ「フレックスパテ」でクリームはんだを手前に引き寄せながら、印刷していきます。
このパテナイフは先端の加工精度が高く、メタルマスクにほとんどクリームはんだが残りません。均一な量でクリームはんだを印刷することができます。
正確な位置にくっきりとした形で、クリームはんだが印刷できました。
部品の実装
続いて部品の実装を行います。部品の実装にはピンセットではなく、掃除機のように部品を吸着できる「HAKKO394 吸着ピンセット」を使っています。
テープから直接部品を吸着して...
目的の場所に下ろして部品を離します。この方法で実装すると、ピンセットよりも断然速く実装することができます。
ノズルには、これを使っています。純正よりもノズルが短くて使いやすいです。
ノズルを交換するとICも吸着できます。これがネオピクセルインタフェースのLEDドライバICです。
ICも実装できました。この調子でどんどん実装していきます。
部品の実装が終わりました。HAKKO394のおかげで、ピンセットよりも断然速く実装が終わります。たくさん実装するのであれば、ちょっと高いですがメリットが大きいと思います。
リフロー
熱風が庫内を循環する、コンベクションオーブンでリフローします。
90度→140度→165度と温度を上げてリフローします。
リフローが完了しました。
動作テスト
スモークテスト
まずは電源を供給して壊れない(スモークが出ない)かテストです。USBを接続するとUSBコネクタの右側のシアン色のLEDが点灯しました。電源回路がショートなどしていないことが確認できました。
シアン色のLEDとても綺麗ですよ。
PWM動作の確認
続いてLEDドライバICが動作するか確認です。このドライバICはオープンコレクタタイプの出力なので、VFDの電源と出力ピンの間に10kΩの抵抗を入れて、プルアップさせて波形を確認します。
オシロスコープで波形を確認すると、綺麗なPWMの波形が表示されました。VFDがドライブできそうです。
VFDの点灯確認
続いてVFDが点灯できるかテストします。VFDを実装した基板を接続してみましょう。
無。
点灯しません。オシロスコープで出力ピンを測定してみますが、PWM波形が出ていません。ずっとGNDレベルです。
もしかすると、ICを壊してしまったかなと思いました。
冷静になって考えると、今回作ったこの回路は間違っています。
VFDは、フィラメントから出た電子が、VFDのセグメントに衝突して初めて光ります。電子はマイナスの電位を持っており、プラスの電位に向かって飛んでいきます。VFDのフィラメントから出たマイナスの電子が、セグメントに向かって飛んで衝突するためには、セグメントはフィラメントよりも高い電圧でないといけません。しかも20V程度の電圧差が必要です。
しかし、今回の回路は上の図のようになっています。セグメントはドライバICによってGNDの電圧になります。これはセグメントの電圧はフィラメントよりも低い状態で、点灯する状態とは正反対になっています。
ドライバICはオープンコレクタではなく、VFD電圧を吐き出すタイプでないといけませんでした。
間違えてしまいました。
正反対です。さて、どうするか。
回路の修正
修正方法
セグメント電圧がフィラメント電圧よりも20V程度高くあれば、VFDが点灯します。ということは、上の図のようにセグメントをVFDの電圧でプルアップすることを考えます。
こうすると、ドライバIC内のトランジスタがOFFの時にVFDが点灯し、トランジスタがONの時にはGNDレベルになるのでVFDが消灯します。
トランジスタのON,OFFとVFDのON,OFFが逆になってしまいますが、これであれば点灯できるかもしれません。
プルアップ抵抗はとりあえず10kΩにして、点灯するか確認です。
試しに一番右の桁の、一番上のセグメント(セグメントa)だけをプルアップしてみました。
おおお!点灯するではありませんか。
抵抗でプルアップする方法で点灯できそうです。
プルアップ抵抗値の検討
次に抵抗値を検討します。抵抗値は低い方がVFDにかかる電圧が高くなり明るく点灯しますが、消灯時にはプルアップ抵抗を通る電流がトランジスタに流れて消費されてしまいます。このため多くのセグメントが消灯していると消費電流が大きくなるという問題が発生します。消費電流を抑えるためには、プルアップ抵抗を大きくしないといけませんが、大きすぎるとVFDが暗くなってしまいます。
そこで、プルアップ抵抗を47kΩ、22kΩ、10kΩを変えて、Vsegの電圧を測定してみました。VFD用の電源電圧は26Vにしました。
測定してみると、上の表のようになりました。
・Vseg:セグメント電圧(実測値)
・Ioff:OFF時に各セグメントで消費される電流(計算値)
・IoffAll:全てのセグメントがOFFの時に消費される電流(計算値)
抵抗値を低くしてセグメント電圧を高くする方が、VFDを明るく点灯させられまですが、OFF時の消費電流も大きくなっています。時計表示中はおおよそ半分のセグメントは点灯していると思うので、通常時の消費電流はIoffAllの半分くらいと考えて、今回は真ん中の22kΩを選ぶことにします。
改修作業
VFDの全てのセグメントに、22kΩのプルアップ抵抗を取り付けました。
点灯テスト
おおおお!
全て点灯しましたよ。
プログラムを修正
これまで作ってきた時計はダイナミック点灯していたのですが、今回の回路はスタティック点灯です。そのためプログラムを修正します。
まずはTM1926の制御するために、AdafruitのNeoPixelライブラリを導入します。
ネオピクセルはGRBの順番にデータを送信するのですが、TM1926(TM1925)はRGBの順番なので、クラスを以下のように定義します。
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_RGB + NEO_KHZ800);
あとは、各セグメントの値を、各NeoPixelにRGBの順で代入していきます。
pixels.setPixelColor(i, pixels.Color(R, G, B)); pixels.show();
入れる値は0から255なのですが、ONとOFFが反対なので、明るいほど0に近づき、暗いほど255に近づきます。
最後にshowを実行すればVFDが設定した明るさで点灯します。
プログラムの修正が終わり、時計が表示されるようになりました。
完成!
PWMで駆動しているので、徐々に明るくなったり、徐々に暗くなったり、文字がクロスフェードするような演出ができます。
これまでダイナミック点灯とPWMの制御をマイコンで処理していて、マイコンの処理としてはかなり忙しい状態でした。LEDドライバを使うことでこれらの処理を全て任せられたため、マイコンは時計の管理とアニメーション等の演出のみとなりました。
当初大きな勘違いがありましたが、ネオピクセルインタフェースICを使って、VFDを制御できることがわかりました。プルアップ抵抗が各セグメントに必要ですが、TM1926(TM1925)を使って、VFDを簡単にPWM点灯させることができます。
VFDの点灯には、ソースタイプのトランジスタアレイ(TD62784やTBD62783)とシフトレジスタ(74HC595)の2つのICを使う回路をよく見かけます。
TM1926(TM1925)を使うと、各セグメントにプルアップ抵抗が必要ですが、1つのICで調光も可能になります。ワンワイヤで、ネオピクセルのライブラリで簡単に制御できてしまうので、結構便利なICではないかと思います。
次回は、この基板を目覚まし時計の姿にしたいと思います。
2024.2.2 つづきはこちらです。
コメント