”重大な懸念”に関する調査報告(1)
開発中のスペクトロメータの波長がズレているのではないかという問題について調査中。
結論から言うと、まだ、よくわからない。既知の波長の正確な光源が欲しい。
さて、Video信号を取得するタイミングが正しくないのではという懸念について検証した途中結果。
まず、タイミングチャート。これは開発当初のブログにも記載した内容。
データシートではトリガーの立ち上がりでVideo信号を読むことになっている。下図は黄色がクロック(CLK)、水色がトリガー(TRG)。
左側の細かいパルスは蓄積時間中のパルス。RP2040のPIOを用いて正確なパルスを刻む。
Video信号を取得しているコードは以下の通り。
TRGの値を取得したり、CLKのタイミングをずらしてVideo信号を取得してみたが(コメントアウト部分)、大きな差はなく、特に問題ないと思われる。補足すると、CLKとTRGはトグル状態な関係であるから、CLKが下がった段階でVideo信号を読めば良いことになる。
1 2 3 4 5 6 7 8 |
for i in range(288): clk.value(1) #print("%d TRG Pin: %d" % (i, self.TRG.value())) #data.append(self.adc.read_u16()) clk.value(0) #print("%d TRG Pin: %d" % (i, self.TRG.value())) data.append(self.adc.read_u16()) |
もう一つ、これは2nmほど、長波長側にスペクトルをシフトさせる効果があった。
インデックスを波長に変換するメソッド。0からか、1から始めるのか不明。Docstringに示したように0からにしていたが、1を加えてみた。
(追記)
データシートは1〜288になっているので、この対応は正しいのかもしれない。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
def wavelength(self, i): """ Convert a video signal index i to a corresponding wavelength using the coefficients for C12880MA (Lot No.17L00381). Args: i (int): The ordinal index of the video signal. 0 to 287 Returns: float: The corresponding wavelength value in nanometers (nm) as calculated from the coefficients. Convert index i + 1 to wavelength. """ i = i + 1 # ← 追加した。 A1 = 3.1310128600E+02 B1 = 2.7129660890E+00 B2 = -1.5390563150E-03 B3 = -4.6602480920E-06 B4 = -1.0601979700E-09 B5 = 1.8327779170E-11 return (A1 + B1 * i + B2 * i ** 2 + B3 * i ** 3 + B4 * i ** 4 + B5 * i ** 5) |
正確な光源を用いて、これで調整しちゃうのが早いのかな?