LM1983をユーザー定義フォーマットで使うためのレジスタ設定
苦節半年。TexasInstrument社のLM1983というビデオクロックジェネレータのPLL1をユーザー定義フォーマットでようやくロックさせることができました!
LM1983というGenlock PLLは様々な映像信号に対応できるPLLなのですが、ユーザ定義フォーマットで使えるようにするためのレジスタ設定には苦労します。
このPLL ICにはAFD(Auto Format Detect)という機能があります。AFDを使うと水平同期や垂直同期信号の幅から画像フォーマットを自動的に認識してくれます。AFDを使わない場合は自分でレジスタに画像フォーマットを設定する必要があります。
まず、AFDがどのようにして画像フォーマットを識別しているかというと、ぶっちゃけ水平同期信号の周波数だけで見ています。正確にいえば20回分の水平同期信号の間にある27MHzクロックの数を数えて画像フォーマットを識別しています。
NTSCやPAL、1080pといった標準的な画像フォーマットであれば当然ながらこのICは知っているのですが、CMOSイメージセンサのような独自の水平垂直周波数で動くカメラの場合には標準フォーマットにはあてはまりません。
そこで、ユーザ定義フォーマットを使う場合には0x51,0x52,0x53,0x54にあるAutoLockHighValueとAutoLockLowValueというレジスタに上限と下限を設定するのですが、ほかにもいろいろとやらなければならない設定があります。
ユーザ定義フォーマットを使う場合でもAFDは必須ではないのですが、AutoLockValueの設定は必要です。
まずはAFDを使わない設定のやりかたについて説明します。
●AFDを使わない設定
0x05 0x0b・・・レジスタ0x05に0x0bを書き、AFDをdisableにする。Genlockモード
0x51 AutoLockHighValue の上位8bit
0x52 AutoLockHighValue の下位8bit
0x53 AutoLockLowValue の上位8bit
0x54 AutoLockLowValue の下位8bit
0x55 Rの上位2bit
0x56 Rの下位8bit
0x57 Nの上位2bit
0x58 Nの下位8bit
0x20 0x1f・・・ユーザフォーマット指定
重要なポイントはレジスタ0x20に0x1fを指定するのを一番最後に行わなければならないということでした。AutoLockやRの値よりも先に設定するとユーザ定義フォーマットでロックしません。
また、AutoLockHighValue とAutoLockLowValue は、AFDを使わない場合でも指定してください。これらの値を求めるには、まず理想的な中心値を
AutoLockValue = 27000 / 水平周波数(kHz) ×20
で求め、AutoLockHighValue = AutoLockValue + 100、AutoLockLowValue = AutoLockValue - 100とすればよいでしょう。
RとNはPLLの分周比です。水平周波数* N / R = 27MHzになるように決めます。
なお、AFDを使った場合はPLL1のロックが完了してもInput formatは3e(Unknown)となりますが、これで正常です。1fを書き込んでも変化しません。
●AFDを使う設定
AFDを使う場合は以下のようになります。
0x05 0x2b・・・AFDを有効。Genlockモード。デフォルトの設定
0x5d 0x80・・・EN_USERMODEフラグを立て、AFDでユーザモードを認識できるようにする
0x51 AutoLockHighValue の上位8bit
0x52 AutoLockHighValue の下位8bit
0x53 AutoLockLowValue の上位8bit
0x54 AutoLockLowValue の下位8bit
0x55 Rの上位2bit
0x56 Rの下位8bit
0x57 Nの上位2bit
0x58 Nの下位8bit
AFDを使った場合、PLL1のロックが完了するとInput formatは1f(User Defined)となります。
●AFDとTOFを使う設定
LM1983にはTOF(Top of Frame)という機能があります。インタレース等のフォーマットであってもフレームの先頭を教えてくれる信号です。
このICは、垂直同期の間の水平同期信号の数を数えているようで、TOFレジスタの値と実際に数えた値が一致するとより確実に画像フォーマットを特定できるようです。
RとNを設定した後で以下の設定を行います。
0x11 0x04を設定(デフォルトでは[5:4]が11 Never Alignなので、00 Auto-Alignにする)
0x5a 垂直ライン数の上位5bit
0x5b 垂直ライン数の下位8bit
これでTOFが有効になるのですが、垂直同期信号間に含まれる水平ラインの数が変わるとPLLのロックが外れるので、ユーザ定義フォーマットで使用する場合のメリットはあまりないと思います。
●ロックを速くする方法
ユーザ定義フォーマットではPLL1がロック判定になるまで5秒くらいかかりますが、速くするには以下の設定が有効です。
0x2d 0x01 Lock Step Sizeを変更0x08→0x01に減らす
0x1c 0x1f Loss of Lock Thresholdを0x10→0x1fに増量
これで1秒くらいでロックするようになります。
●ロックするまでの過程
LM1983にはチャージポンプに与えている信号を内蔵ADCで見ることができます。このADC値も含めてロックするまでの過程を見てみます。
① AFD非使用(デフォルトのロック速度)
おおよそ6.5秒でロック信号(青)が立ち上がっています。PLL1ロック信号(レジスタ0x06のbit4)が安定したときには、PLL1(27MHz)、PLL2(74.25MHz)の周波数は±2Hzくらいの範囲に落ち着いています。
② AFD使用(デフォルトのロック速度)
AFDを使用した場合でも、ロック時間には差はありません。
③ AFD非使用(ロック高速化)
ロック高速化を行った場合、フラグが立つまでの時間は早くなりますが、この時点では周波数は数百Hzずれています。ADC電圧の傾向がちょっと変わっています。
④ AFD使用(ロック高速化)
AFDを使用してもロックフラグが立つまでの時間や波形には変化はありませんでした。
●まとめ
LM1983をユーザ定義フォーマットで使用するためのレジスタ設定方法を見つけました。
また、レジスタ2d(LockStepSize)と1c(Loss of Lock Threshold)を設定すればロックフラグが立つまでの時間を短くすることはできますが、周波数の偏差が落ち着く時間にはそれほど差はありませんでした。
それから、LM1983は水平同期信号のみでロックできるので、FINは固定でも構わないようです。TOFを使うならVINは必要です。TOF非使用ならVINを固定しても動くかどうかはわかりません。
| 固定リンク






コメント