CMOSイメージセンサの原理を応用して,RGB LEDを256個並べてフルカラーイメージセンサを自作しました.
Maker Faire Tokyo 2024の出展・Young Maker Challenge 2024 最優秀賞作品です.
概要
LEDをフォトダイオードとして使い,CMOSイメージセンサの原理を応用してフルカラーイメージセンサを自作しました.
本来発光素子であるLEDを逆に受光素子として使い,光を受けて電気信号にするカメラのセンサにしてフルカラーの写真を撮影するというものです.
こういう背景でやってます.
- イメージセンサの研究室に所属するので,先に近い領域で個人制作をやりたい.
- 個人でMaker Faire Tokyoに出展するための作品を作成したい.
- イメージセンサの自作に関連し,完全に新規性のあるものを作成したい.
LEDを使ったイメージセンサの原理
フォトダイオードの光電効果
イメージセンサの受光素子には,フォトダイオードという素子が使われています.
フォトダイオードは光が当たると電流が流れる性質があり,これを利用して光の強さを電気信号に変換します.おおまかにはPN接合の禁制帯幅より大きいエネルギーを持つ光が当たると電子が励起して電流が流れる仕組みです.
LEDをフォトダイオードとして使う
LEDは電気を流すと発光しますが,これと反対に光を当てると電流が流れる性質があります.
フォトダイオードが禁制帯幅より大きいエネルギーを持つ光を受けると電流が流れるのに対し,LEDは電流を流すと禁制帯幅程度のエネルギーを持つ光を発光します.
LEDの発光と光電効果はおおよそ真逆の現象であり,効率は大きく異なりますがLEDをフォトダイオードとして使うことができます.
LEDの発光色は禁制帯幅により決まり,受光特性も同様になります.今回は,発光色の違うRGB LEDの受光特性の違いを利用してフルカラーのイメージセンサを作成しました.
LEDの光電流は非常に僅かです.0lxと200lx(やや暗めの室内の明るさ)で,10MΩのシャント抵抗で測定すると6mVの差があり,電流としては0.6nAであることが分かります.測定対象は3mm緑色LED 525nm OSG5GL3E34Bで,照度はスマートフォンのアプリで測定しました.(正弦波のような波形が見られますが,これは50Hz周期でありAC電源のハムノイズと考えられます)
0.6nAに対しフォトダイオードは一般的なもので200lxで10μA程度で,104倍程度の差があります.
フォトダイオードを使った自作イメージセンサの事例では電流が大きいため,単純なシャント抵抗による測定が可能になっていました.
このイメージセンサで使われているフォトダイオードALS-PT19は200lxで30μA程度の電流が流れます.
これに対し,1nAよりも小さいLEDの微弱な光電流を検出するためには実際のCMOSイメージセンサのような回路が必要です.
CMOSイメージセンサの画素回路
微弱な光電流を検出するイメージセンサの画素回路は,以下のような構造になっています.
フォトダイオードの光電流によって,キャパシタ(寄生容量)の電荷が流れ出し電圧が下がっていくことを利用して,光電流を電圧に変換します.
電流を抵抗によって電圧に変換するのではなく,時間をかけて電子を蓄積することで高精度な測定が可能になります.
画素をリセットしてから一定時間後にどれだけ電圧が下がったかを測定することで,光の強さを測定します.
実際にはソースフォロワを用いて出力インピーダンスを小さくしています.
リーク電流により暗電流が大きく0lxでも電圧が下がっていますが,拡大して比較すると電位差は30mV程度であり,シャント抵抗による測定に比べて低ノイズかつ高感度な測定が可能であることが分かります.
回路・基板の詳細設計
画素数・LEDの決定
イメージセンサでは多くのLEDを使用するため,秋月電子の最安(1個あたり5円)のフルカラーRGBLEDを採用しました.
自作イメージセンサの例では画素数は32x32となっていますが,これにはLEDが1024個必要です.LED単体では5000円程度で許容できないことはないですが,画素回路のトランジスタを含めると予算オーバーです.
またLEDのフットプリントは3.6×3.2mmであり,5.08×5.08mmを1ピクセルの面積とするとセンサのエリアサイズが約16×16cmとなります.これに十分な光学系を用意するのは困難です.
画素数を8x8に減らすと写真として解像度が低すぎると判断し,16x16に設定しました.撮影対象のドット絵としてマインクラフトのテクスチャも16x16であり,十分な解像度だと考えました.
フットプリント制約の解決
自作イメージセンサ基板では表面にLEDを5mm間隔で敷き詰めるため,裏面の回路に使える面積も限られます.RGB LEDなのでチップ1つに3つの素子がありますが,配線を含めると1素子あたりチップトランジスタ1つが限界です.
実際のCMOSイメージセンサでも,レイアウト設計で面積が足りない場合は画素共有という手法が使われます.読み出すダイオードを切り替えるスイッチを使って,リセットトランジスタやソースフォロワを複数の画素で共有します.今回の自作基板では,16行の画素を左右に分け,8画素を1つの読み出し回路で共有しています.
読み出すダイオード以外のトランジスタがOFFになっていても,多少のリーク電流が存在します.これを無くすためには,使わないフォトダイオードを浮かせるのではなくGNDに固定するのが良さそうです.
この回路はまさにインバータと同じです.3つのチップトランジスタで単純な画素共有回路を組むより,3回路入のインバータICTC7WU04FKを使った方がコンパクトで低ノイズになります.インバータICのGNDは共通化され,さらに画素出力として使いたいピンもVDDピンとして共通化されていて好都合です.
画素回路の確定
リセットトランジスタとソースフォロワのトランジスタにはそれぞれ秋月電子で最安の2SJ648とBSS138を使用しました.本来であれば寄生容量やリーク電流,閾値電圧などを考慮すべきですが,最安の部品で動作は可能だったため詳細な選定は行っていません.
インバータICを含めた2×2画素回路などを作成し,動作時の波形を詳細に確認しました.いくつか問題がありましたがそれぞれ原因を特定し,回路規模を16×16と大きくしたときイメージセンサとしての動作が可能であることを確認したうえで基板設計に進みました.
暗電流の原因特定
暗電流が大きく光を当てなくても画素の出力電圧が落ちる問題がありました.また,出力電圧の降下には下限値がありました.
全ての列を非選択にしても同じスピードで電圧が下がっていくこと,下限電圧が変わらないことを確認しました.
降下速度が変わらないことから,LEDやインバータ内のNMOSのリーク電流が原因でなく,インバータICのVDDピンからGNDピンへのリーク電流か,ソースフォロワのリーク電流が原因と考えられます.
さらに回路を切断してインバータの数を減らしても降下速度が変化しなかったため,ソースフォロワのNMOSのゲートソース間のリーク電流が原因と特定できました.
また電圧の降下の下限値について,列を選択したとき明るさにより下限値が変わる現象が見られました.下限値を下回ると何かの原因で電荷が流入するのに対し,光が強ければある程度それに抗って電圧が降下すると考えられます.
インバータICを接続せずにリセットトランジスタとソースフォロワのみで検証すると,僅かに降下率が大きく,下限値が0Vになることが確認できました.
これにより,インバータICにより電荷が流入していることが分かります.
さらにインバータICを接続しなおし,すべて非選択(L)とすると,下限値が0Vになることから,インバータの入力がHのときVDDピンに電荷が流入していることになります.これは静電気保護のTVSダイオードの影響と考えられます.
結論として,リークの原因はソースフォロワのリーク電流であり,出力電圧が一定以上下がるとインバータ入力の静電保護ダイオードで非選択の入力(H)からVDD(共通信号ライン)に電流が流れ下限値になると特定しました.
ソースフォロワのNMOSトランジスタをリーク電流の少ないものに変更することも検討しましたが,コストを考えてこのままで動作が可能か検証しました.
インバータのスイッチとしての動作は理想的でリーク電流はなく,非選択のインバータからはESD対策ダイオードの影響もないため,1つを除きLEDをつけずにインバータICのみを複数接続したテスト基板を作成しました.
インバータICを8個接続して8画素共有をして1セットのリセットトランジスタ・ソースフォロワで読み出しても問題ないことを確認し,基板設計に進みました.16画素共有の場合,スイッチによる寄生容量が大きく現実的ではありませんでした.
リセットノイズの原因特定
リセット時に電圧が3.3Vより跳ね上がる現象が見られました.これはリセットトランジスタのゲートドレイン間寄生容量によるチャージインジェクションと考えられます.リセットトランジスタを使わずに手動で直接電圧を3.3Vラインに繋げてから切り離すと電圧が跳ねなかったため,リセットトランジスタのゲート電圧がL→Hになることで電圧が跳ねたと考えられます.
リセット時のランダムノイズ(kT/Cノイズ)は大きくありませんでしたが,画素値は部品ごとのばらつき(FPN)除去も兼ねてリセット後の電圧と放電後の電圧を差し引くデジタルCDSで読み出しています.
LEDの各色の特性の確認
RGB LEDの各色の特性を確認しました.10MΩのシャント抵抗を使い400lxの照度で,赤:3nA,緑:4nA,青:0.5nA程度であることを確認しました.
青は他の色に比べて光電流が微小ですが,露光時間を伸ばすことにより必要最低限の信号は得られることを確認しました.赤緑は50ms,青は500msで撮影しています.露光時間を長くするとリーク電流により出力電圧が下がりきってしまうため,これが限界でした.
列並列ADC・行選択回路
物理的なレイアウトは16×16にしますが,8画素を共有し1つのソースフォロワに接続するため,回路構成としては8×32のマトリクスとなります.32列のうち読み出す列を切り替えてAD変換しても良いですが,動作速度と回路構成の点からそのまま32列並列ADCの構成としました.(コストはかかりましたが)
AD変換には4chのMCP3424T-E/SLを使用,8画素共有のうちどの行を使用するかを制御する行選択回路にはシフトレジスタTC74HC595AFを使用しました.
基板レイアウト
基板は6層で設計しました.画素部分はKiCAD_layout_clonerによりPythonでコピーして配置しました.
それぞれの層構成はおおまかに以下の通りです.制御用のマイコンであるRaspberry Pi Picoは別基板に搭載しています.
表面:LED・画素トランジスタ・シフトレジスタ
裏面:行選択インバータ・ADC
- 画素トランジスタ周辺のパターン
- ベタGND
- 画素出力信号
- ベタGND
- 行選択信号
- 行選択インバータ周辺のパターン・ADC周辺のパターン
基板の製造はJLCPCBに発注しました.6層基板でも発注から到着まで1週間で非常に早くおすすめです.
KiCadで普通にガーバー出力すれば問題ないですが,6層基板の場合はデータをアップロードしたあとJLCPCBのガーバービューアーでレイヤーが正しい順番になっているか確認することをお勧めします.
ちなみに部品実装は気合の手ハンダです.
光学系・ケース
手頃な価格でF値(焦点距離/口径)が小さく明るいレンズを選定し,口径45mm・焦点距離65mmの凸レンズを使用しました.
ケースは雑な厚紙製です.右側に撮影対象のiPadの画面があり,真ん中のレンズを通して左側のイメージセンサに投影します.レンズフードをつけており,さらに撮影時は上に蓋をします.MFTまでには3Dプリンタ製にするつもりでしたが,なんやかんやそのままに…
撮影対象のChromeのアイコンも滑らかではなく画素数に合わせてドット絵にしていますが,これは滑らかにすると1つの画素内のRGB LEDそれぞれに入射する光の色が異なり偽色が発生するためです.サンプリング間隔を超えた高周波成分があると良くないというやつです.
この光学系ではイメージセンサに当たる照度はセンサの中央部で50lx程度で,400lxでの計測値の十分の一程度と雑に計算すると,赤0.3nA,緑0.4nA,青0.05nA程度の光電流が得られることになります.
ソフトウェア
Raspberry Pi PicoからはデジタルCDSで読み出した画素の電圧値をそのままシリアル通信でPCに送信します.PC側ではMATLABでデータを受信して画像に変換します.
PC側で赤緑青のLEDの出力値をそのまま画像のRGB値にするわけではなく,キャリブレーションが必要です.
例えば,青い光で青色LEDだけが反応するのではなく,それより波長の短い(エネルギーの低い)赤色緑色のLEDも反応するというように,LEDの発光スペクトルと受光スペクトルが異なるためです.他にも暗電流のオフセットを除去する必要があり,事前に真っ暗な状態・赤・緑・青の撮影を行い,それぞれLEDの受光特性が線形であると仮定して行列演算により画素値を求めます.
さらに展示用にMATLAB App Designerを用いてスタンドアロンのGUIアプリケーションとして動作するようにしました.撮影対象のiPadをWindows PCのサブモニターとしているのでアプリケーションからiPadの画面も切り替えられるため,キャリブレーションも撮影もワンクリックで行えます.
撮影画像
撮影した画像は以下の通りです.定量的な性能評価はできていませんが,マインクラフトのドット絵と分かる程度の画質は得られています.
改善点
最低限の画質での撮影はできましたが,改善の余地としては以下の点が挙げられます.
- リーク電流の小さいNMOSソースフォロワを使う
- リセット電圧を低電圧にする
- LEDにかける逆電圧を下げて長寿命にする
- ADCのPGAを使いやすいレンジにする
- フットプリントの小さいLEDを使い,画素数を増やす
- 色再現のアルゴリズムを改善する
- 光学系を改善する(収差・全体の光量・周辺減光)
Maker Faire での展示
Maker Faire Tokyo 2024にこの作品を出展しました.展示の詳細についてはまた別のブログで紹介予定です.
MFTの学生メイカーを審査対象にしたコンテストYoung Maker Challenge 2024でも最優秀賞をいただくことができました.
まとめ
LEDを単なる明るさセンサではなくイメージセンサとすることができ,さらにRGB LEDでフルカラー撮影を行うことができました.
CMOSイメージセンサと同様の回路を組み込むことで微小な光電流を測定できただけでなく,インバータICによる行選択回路の発案によって基板上に回路を収めることができました.
製作で一番大変だったのは手ハンダと不良ピクセルの交換ですが,製作を通してCMOSイメージセンサの基礎を学ぶことができました.