非職業的技師の覚え書き

JK1EJPの技術的検討事項を中心に記録を残します。

Teensy(17)Keiths' SDR用Backpackボードの組立と点灯試験

Backpackボードの概要

Keiths' SDR用Backpackボードを組み立てました。このボードは4.3'' TFT LCDディスプレイの背面に取り付け可能になっており、ディスプレイを含めた各種入出力デバイスとTennsy 4.1とのインターフェースを提供してくれます。

Wiring pattern of Backpack PCB for Keiths' SDR.

Block diagram of the interface functions provided by the Backpack PCB for Keiths' SDR.

Assembled Backpack PCB for Keiths' SDR.
(Only components needed for immediate debugging are mounted.)

当面の動作確認に必要なコネクタを実装しました。イーサネット/USBコネクタ、GPSコネクタ、日付/時刻保持用コイン型電池フォルダ等はまだ実装していません。

部品の調達

Backpack PCB

このPCBはN0CTL局 John Scherer OMがEasyEDAを用いて設計したもので、設計データは下記のホームページに公開されています。

EasyEDAの上記ホームページからJLCPCB社にPCB製作の発注もできるようです。他の方が発注した余り?がeBayに出品されていたため、割高とは思いましたが今回は取り急ぎeBayから入手しました。

ディスプレイ

ディスプレイに描画するためには、提供されるドライバのAPIに対してSDRアプリケーション側から描画コマンドを発行する必要があります。SDRアプリでは特に、スペクトルウオーターフォールを高速に描画するための工夫(更新部分のみのブロック転送等)が必要なようです。描画コードはまだ調べていませんが、Windowsの世界のように標準化されたAPIは組込みの世界(Aruduinoの世界)にはないものと思います。ディスプレイのコントローラが異なればドライバAPIも異なるため、描画コードの書き直しが必要になります。

Keiths' SDRのK7MDL局Mike OM版では2つのコントローラがサポートされています。4.3インチ用のRA8875と7インチ用のRA8876です。ディスプレイ描画コードに足を踏み入れたくない場合は、この2つの中から選択するのが無難です。

しかし、サイズとコントローラの型番だけではディスプレイ選定の仕様として不十分です。例えば4.3インチの場合は、次の仕様を充足する必要があるようです。

  • Display resolution: 800x480
  • Interface: Pin Header Connection-4-Wire SPI
  • Power Supply: 5.0V
  • Touch Panel: 4.3"Capacitive Touch Panel

大手通販でこれらの仕様を全て満たすディスプレイを探すのは至難の業と思います。Mike OMの調達先としてGitHubの下記Wikiに記載のあるEastRising Technology Co.,LimitedのディスプレイをマーケットプレイスBuyDisplay.comから購入するのが安心と思います。

それでも、BuyDisplay.comでは膨大な種類のディスプレイが販売されているため、その中から適切なディスプレイを探し出し、適切なオプション仕様を選択するのも困難です。型番を指定してくれれば簡単になるのですが、なぜか型番の指定は長らくありませんでした。「お好きなディスプレイでDIY」ということでしょうか・・・。

しかし、Keiths' SDRのフォーラムで「間違えて解像度480x272の4.3"ディスプレイを購入してしまった。何を買えばいいんだ!?」との旨の投稿があり、Mike OMがWikiに下記リンクを乗せてくれました。ベース型番はER-TFTM043A2-7Rとなるようです。

上記のフォーラム投稿を見た時に当局は既に4.3"ディスプレイを購入済みでした。悪い予感がしたため、発注伝票を再確認したところ解像度の記載はありませんでした。製品ホームページのDescriptionの詳細説明の中に小さい字で解像度480x272の記載がありました。投稿者と同じ間違いをしていました。

間違えた製品名は「4.3 inch TFT LCD Display Capacitive Touchscreen
w/RA8875 Controller」で解像度の表記無し。他方、正しい製品名は「SPI 800x480 4.3'' TFT LCD Module Display Touch Panel Screen RA8875」です。おそらく低解像度480x272の製品が初めに出て、高解像度800x480の製品が後に出たため、区別する必要のなかった前者の解像度の説明が控えめなのでしょう。

間違えた理由はもう一つあります。製品ページのディスプレイのベゼルの色は、後者がシルバーで前者は黒です。そしてMike OMの投稿写真のベゼルは黒色でした。購入してから分かったのですが、ディスプレイのベゼルを含めた筐体の色はシルバーで、その表面に設置するオプションのタッチスクリーンのベゼル部の色が黒なのです。製品ページにタッチスクリーン付きのCGを乗せるかどうかの違いに惑わされました。

Display appearance with and without touchscreen.

フォーラムには「BuyDisplay.comと交換について相談してみては」とのアドバイスが載っていましたが、そのような語学力はありません。円安の声が聞こえ始めていたため、至急、再発注しました。解像度480x272はジャックボックス直行です。

XHコネクタ

JST製の極数3のXH基板用コネクタが、秋月でもDigi-Keyでも在庫ゼロになっていました。半導体不足の余波としては、極数3だけ欠品なのが不思議な感じがします。どこに大量需要があったのでしょうか・・・。

Backpackボードでは4個必要で、中1つは電源コネクタのため必須です。大手通販に互換品のセットがあったため助かりました。結果として、極数を確認して1個づつ発注するより楽でした。

XH connectors.

互換品の場合は成形型の公差による相性の問題が発生しそうですが、基板ポスト、ハウジング、コンタクトの全てが同じメーカ品で揃うため、相性の問題は発生しないと思われます。

レギュレータ

Scherer OMのBOM(部品構成表)では、12V電源から5Vに変換するレギュレータとしてLinear RegulatorのLM7805(出力1A)が指定されています。

入出力デバイスの消費電力は不確定です。Mike OMはこれをSwitching RegulatorのLC78_05-3.0(出力3A)に換装しています。Switching frequencyは150KHzです。リップル等のノイズは問題ないとの報告がありました。変換効率は95%弱あるためヒートシンクは必要なく、リード配置はLM7805と互換性があります。ネジによる密着固定の必要はなく、リードのはんだ付けだけで済みます。当局もこちらを採用し、Digi-Keyから入手しました。

5V power supply.

なお、5V電源はBackpackボードからTeensyに供給するため、TeensyのUSB電源パッドを切断する必要があります。TeensyのI/Oは3.3Vです。3.3V(250mA)のレギュレータはTeensyおよびAudio Adaptorに搭載されています。

タンタルコンデンサ

22uF成形タンタルコンデンサは高価です。京セラの米国子会社AVX製のコンデンサですが、国内の調達先を見つけることが出来ず、これもDigi-Keyから入手しました。「2022年4月以降を目途に日本、中国はじめアジアにおける営業組織も統合を予定」とのことですから、国内小売に潤沢に流通するのはもっと先になるかもしれません。

Scherer OMのBOMでは入出力の両方に22uFが配置されていましたが、LC78_05-3.0のデータシートの標準回路では入力側が安価な10uFになっていました。これ幸いと10uFに変更しました。パターン寸法が合わないため、リードの切れ端で継ぎ処理をしました。

組立の注意点

SMD部品

SMDのパスコンとTwin Peaks検出用ラインのインピーダンス抵抗は裏面に取り付けました。表面にも若干のSMDコンデンサダイオードを付ける必要があります。コネクタポストやピンソケットが林立するため、これらSMDは定石通りに先に付ける必要があります。

Teensy 4.1 ピンヘッダ剣山

Teensy 4.1は一瞥ではDIP(Dual Inline Package)配置のピンヘッダで接続するように見えます。しかし、Teensy 4.1は24x2のDIP配列のピンヘッダの他に以下のI/Oを接続するピンヘッダが必要になります。

  1.  USB Host (5x1 Pin Header)
  2.  Battery (5x1 Pin Header)
  3.  Ethernet (3x2 Pin Header)(2㎜ pitch)

Pin header sword mountain on the back side of Teensy 4.1.

これらの高密度に配置された孤島ピンヘッダは、本来はTeensy 4.1の表面に立ててフラットケーブル等で信号を引き出すことを想定しているようです。しかし、Backpackボードにはこれら孤島ピンヘッダに対してもスルーホールと配線パターンが準備されているため、なんとしても下にピンヘッダを降ろしてボードと接続する必要があります。

孤島ピンヘッダの中であい路になるのは、(3)Ethernetの3x2配列のピンヘッダです。これだけがフラットケーブル用の2.0mmピッチです。2.0㎜ピッチのヘッダ/レセプタクルの組み合わせは簡単には見つかりません。探し回って、唯一見つかったのがMETZ CONNECT社の下写真のヘッダ/レセプタクルです。

2mm pitch header and receptacle from METZ CONNECT.

しかし、2.5mmピッチのソケットとは高さが合いません。慎重に寸法を計算したところ、レセプタクルを2段重ねにすると、出っ張ることなく且つボードに届きそうな感じでした。ヘッダのピンの長さは3.9mm、対してレセプタクルのリードは細い上に長さは2.2mmでピン長さの56%しかありません。レセプタクル同士の嵌合は正しい使い方ではないため、接続の信頼性には懸念が残ります。

実物を入手してレセプタクルを2段重ねに嵌合したところ、挿入時に抵抗感があったため内部のコンタクトとの接合は取れたようです。テスタで導通チェックをしたところ、Teensyからボードのパターンまで導通を確認できました。

Audio Adaptor ピンヘッダ剣山

Audio Adaptorも14x2のDIP配列のピンヘッダの他に以下のI/Oを接続するピンヘッダが必要になります。

  1.  LINE IN(2x2 Pin Header)
  2.  LINE OUT(3x1 Pin Header)
  3.  Mic(2x1 Pin Header)

Pin header sword mountain on the back side of Audio Adaptor.

唯一、Headphone出力のみが基板上のステレオミニジャックに接続するようになっています。

LINE INとLINE OUTが同じ配列になっていないのは、誤挿入を避けるためでしょうか。5x2配列のピンヘッダの一本の頭をニッパで切ってAudio Adaptor付けました。ソケットの方はスルーホールの無い3本のコンタクトを抜いてBackpackボードに付けました。

 

以上で動作検証に向けた当座の組立は完了です。ディスプレイと合体しました。

The Backpack board, assembled and combined with the display.

点灯試験

点灯試験用ソフトウェア

点灯試験に用いたKeiths' SDRソフトウェアは2022年4月3日のMike OM版です。2022年4月24日に公開されたこのBackpackボードをMike OMは当時まだ利用していなかったと思います。最新版に更新すべきですが、コンパイルを通すまでに工数がかかることが予想されるため、取り急ぎコンパイル済みの古いバージョンで点灯試験を行いました。

コンパイラによるメモリの割付状況は以下の通りでした。

Memory Usage on Teensy 4.1:
    FLASH: code:160548, data:129616, headers:8840  
     free for files:7827460
    RAM1: variables:201408, code:132632, padding:31208  
     free for local variables:159040
    RAM2: variables:156576   
     free for malloc/new:367712

コードはPCからFLASH(8MB)に書き込まれ、実行時にRAM1に読み込まれます。RAM1(512KB)とRAM2(512KB)はチップ混載のメモリです。マルチコアではなくシングルコアにした代わりに、大容量のメモリを混載している点がIMXRT1060RMマイコンの特徴です。混載メモリの有効活用がポイントですが、今のところコンパイラの自動割り付けにお任せです。

超高速アクセスのRAM1がコードおよびローカル変数用で、RAM1を有効活用すればDSP演算が高速になるはずです。197KBがローカル変数に割り付けられ、まだ155KBの余裕があります。

RAM2はDMAアクセスに最適化されており、コーディックからのIQデータはRAM2に格納されると思われます。153KBが割り付けられ、359KBが未使用です。

点灯

Display lights up with no problem.

無事に点灯しました。まだディプレイに保護シールが付いたままですが、実物は写真よりも綺麗に発光しています。

最初はバックライトが点灯するのみでGUIが描画されず焦りましたが、何回か書き込みとRESETを繰り返すと無事にGUIも点灯し一息つきました。原因は不明ですが、規模の大きなSDRソフトのため、シリアルFLASH(W25Q64JV)へのSPIによるコード書き込み、あるいはその後のオンチップRAMへのコード転送に思ったよりも時間を要していたのかもしれません。

RFフロントエンドをまだ接続していないため、IQ信号コネクタは解放状態です。それにも係わらず、初期設定の28.074MHzの両側にピークが立っています。事前に信号処理連鎖を調査してきたため、この正体が何かは推測できます。

"Twin Peaks"状態検出用のテスト信号と思われます。矩形波であるためスペクトルが拡散していることも確認できます。テスト信号はAudio AdaptorのIQ信号ラインに重畳しているため、Audio Adaptorのコーディックが正常に動作していることも確認できました。

"Twin Peaks"状態検出テストおよび補正は一瞬にして終わり、テスト信号発振を終了して受信状態に遷移するはずですが、"Twin Peaks"状態検出テスト状態に留まったままなのはバグと思われます。そのバグのおかげで動作確認ができたわけですが・・・。Backpackボードに合わせて一部のコードを修正していますが、まだ不完全なのかもしれません。

Serial.print()文

無事に点灯したため、デバックに移行できます。Serial.print()文が重要なデバック手段になります。VisualTeensy導入時に、TeensyとPCの間の通信を担うTyCommanderを導入していました。

TyCommanderの"Serial"ボタンの"Serial"タブに、TeensyがSerial.print()文で出力したテキストが書き出されます。

In the "Serial" tab of the "Serial" button in the TyCommander, the text output by Teensy in the Serial.print() statement is written out.

以下、Mike OMが出力したテキストメッセージを確認します。

Initializing SDR_RA887x Program
FFT Size is 4096
**** Running I2C Scanner ****
Scanning...
I2C device found at address 0x0A  (SGTL5000)
I2C device found at address 0x38  (RA8875,FT6206)
done

最初にI2Cスキャナが走り、Teensyに接続されたI2Cデバイスを探索しています。コーディック(SGTL5000)、ディスプレイコントローラ(RA8875)、タッチコントローラ(FT6206)が見つかったとの報告が出力されています。I2Cエンコーダはまだ接続していないため、過不足なくI2Cデバイスが見つかっています。

Initializing RA8875 Display
RTC has set the system time
0:00:01 1 1 2019
Clock Update
Start of Spectrum Parameter Generator List.
This is a complete parameter record for the current window.
Cut and paste the data in the braces to modify the predefined records.
{798,0,0,0,798,398,14,8,157,179,179,408,400,110,111,289,289,0,153,799,256,50,20,2,330,1.0,0.9,1,40,-175,70}
End of Spectrum Parameter Generator List
Current Preset=0  Selected Preset=0  Current Waterfall Style=2  Current Color Temp=330

RA8875コントローラを搭載したDisplayの初期化をしています。Displayコードはまだ調査していないため詳細は不明です。スペクトルウオーターフォール関係のパラメータ設定が表示されているようです。

Initial Dial Frequency is     28.074.000MHz
Start W7PUA AutoI2S Error Correction
Using I/O pin for cross-correlation test signal.

Update  ------------ Outputs  ------------
Number  xNorm     -1        0         1   Shift Error State
7,  142.300888, -2.565808, 69.527359, 0.903492, 0,   0,    2
FM Initialization errors: 0
Initializing Notch/NR Feature = 32
Switching to Rx
 Reset Codec 

"Twin Peaks"状態検出テストの結果が表示されています。RF受信信号がテストの外乱にならないように、VFO周波数を28.074MHzに設定しています。国内のバンドプランではCWおよび狭帯域データのバンドに含まれます。

テスト結果の出力は以下の通りです。

  1. Number(nMeas):7 (測定7回)
  2. xNorm(xNorm):142.300888(相関関数絶対値の総和、理論値124)
  3. -1(xcVal[3]):-2.565808(シフト3のIQデータベクトル積和、理論値0)
  4.  0(xcVal[0]):69.527359(シフト0のIQデータベクトル積和、理論値62)
  5.  1(xcVal[1]): 0.903492(シフト1のIQデータベクトル積和、理論値0)
  6. Shift(neededShift):0(IQシフト補正不要)
  7. Error(TPerror):0(テスト信号エラー無し)
  8. State(TPstate):2(TP_RUN ← TP_MEASURE、補正実行モード)

"Twin Peaks"(IQシフト)は検出されず、終了しているようです。IQ相関係数の正規化前のIQデータベクトル積和はノイズによって理論値からずれますが、大きなずれは無いようです。

とすると点灯後の残照スペクトルは、IQコネクタを解放していることによりノイズが混入しているのかもしれません。信号レベルはS1~S2で大きくはありません。

最後に、受信状態に遷移してコーディックのリセット関数を終了した旨のメッセージを表示しています。

Help: Available Commands:
   h: Print this help
   C: Toggle printing of CPU and Memory usage
   T+10 digits: Time Update. Enter T and 10 digits for seconds since 1/1/1970
Loop T=2049  Spectrum T=106

Serialデバックのヘルプです。TyCommanderから送信入力できますが、入力するとTeensyのディスプレイ画面がフリーズします。

タッチ操作も効かないようです。Keiths' SDRソフトウェアMike OM版をこのBackpackボード上で開発した最新版にアップデートすることが次の課題です。