PuresignalのAutoattenuation機能実現のためのPeregine PE4302を使った入出力調整機能


1.はじめに
RedPitayaのINおよびOUTのレベルは固定でレベル調整機能がない。このためSDRへの応用に際して、受信機能のATT機能は外付で実現しなければならない。同様に送信機能はソフトで制御するか外付けATTとなる。RedPitayaのHPSDR用のソフトにはこの制御機能が付いているがD/A量子化雑音が増加する懸念が指摘されている。

外付けのATT機能の実現方法が複数提案されているがPeregine社から発売されている「RF Step Attenuater」はデスクリートの抵抗と機械式スイッチで従来の構成ではなく、サファイア基板上にシリコン層を形成した集積回路で実現しており50Ω入出力でDCから4GHzまで使えて+18dBm入力でIP3が52dBとなっている。制御機能もこのICに内蔵されている。このためRedPitayaのINおよびOUT用には適していると考えた。eBayでも評価基板が送料込みで$13程度で販売されているので1個購入してみた。

2.使用方法
eBayで販売されている基板はPeregine社の資料に記載されているEvaluation Kitに似ているがもう少し製品化しているようだが実際の回路図がネットで見当たらない。仕方ないのでデータシートとテスターで実際に使いながら使用法を習得した。

電源は+3.3Vではなく+5Vとなっている。レギュレータはU2のようで赤色のLEDが煌々と輝く。一番気を遣うのは8ピンのDIPスイッチの使いかたで、制御入力はポジションをONにするとHIGH=3V、OFFにするとLOW=0.2Vになる。データシートから基板上のDIPスイッチでマニュアル制御する(=direct parallel programing)には

LE=HIGH( and P/S=LOW (OFF))

となっているのでRedPitayaのOUTとTS-680Sの間に入れて8番スイッチをONにして電源をいれるとC16からC0.5のスイッチが動作することを確認した。ちなみに挿入損を14MHzでPOWER計で確かめてみると100W出力が80Wになることから1dBとなりカタログの1.5dB(type)以内なので正常に動作しているようなので安心した。

ソフト制御は直並列が可能でシリアルの場合はDIPスイッチの7番スイッチP/SをONして8番スイッチのLEをオフにする。並列の場合はP/Sをオフとする。LEはともにオフである。

電源を供給すれば基板上のDIPスイッチでマニュアル制御ができる


3.直列制御
HPSDRアプリではRedPitayaのE1コネクタのGPIOはすべて予約割り当てされており「ALEX CONNECTION」のように外付けIC、TPIC6B59S とか「I2C CONNECTIONS」のように外付けIC、PCA9555 を用意しなければ並列制御は難しい。幸いにもE2コネクタにあるSPIインターフェースは現状では割り当てされていない。そのためこのSPIを利用することにした。

未使用のSPIピン

4.受信S-ATTとsdr_transceiver.hpsdr.cの変更
RedPitayaのOSは/devディレクトリーにはspidev1.0が認識しているため、C言語で試験用によく使われている「SPI testing utility」でSPIインターフェースのSPI_MOSIとSPI_MISOをショートしてループ試験を試みたら正常に動作している。

送信レベルの制御は現状のソフト制御でも実用上問題ないので優先度は低いので、受信用のATT制御を手始めにしてソフトの改造を試みることにした。

優先度が高い主な理由は

1)RedPitayaのA/Dは14ビットでダイナミックレンジが狭い。そのために必要に応じて入力レベルを抑制することは受信特性を維持するために望ましい。

2)送信出力は必ずしも定格電力で利用されるとは限らない。よってPureSignalのフィードバック信号レベルは送信出力の変動に比例して変化する。一方補正のためのフィードバック信号レベルは受信機内部雑音レベルに比べて十分に高くかつ一定レベルである必要がある。このために受信部に可変ATTが必須になるが減衰量は連続的でなければならない。PureSignalの「Auto-Attenuate」は1dB単位のステップアッテネーターを前提に設計されている。

である。

追加のプログラムはC言語では一バイト単位でのファイル出力ルーチンなので「sdr-transceiver-hpsdr.c」への変更箇所は

1)「main」の最初にデバイスのオープン機能設定を加えた。設定のパラメーターは「書き込みのみ」「モード'3'=CPHA,CPOLともON、CSはLOWであるためSPI_CS_HIは使わずかつMSBからの書き込み」「クロック1MHz」で「RF Step Attenuater」は正常動作することを実機で確認した。

 /*SPI initial setting*/

  uint8_t mode;

  /* Opening file stream */
  spi_fd = open("/dev/spidev1.0", O_WRONLY | O_NOCTTY); /*write only*/
  if (spi_fd < 0){
  printf("Error opening spidev0.1. Error: %s\n", strerror(errno));
  return -1;
}

  /* Setting mode (CPHA, CPOL) */
  mode |= SPI_CPHA;
  mode |= SPI_CPOL;

  if (ioctl(spi_fd, SPI_IOC_WR_MODE, &mode) < 0){
  printf("Error setting SPI MODE. Error: %s\n", strerror(errno));
  return -1;
  }

  /* Setting SPI bus speed */
  int spi_speed = 1000000; /*1MHz*/
  if (ioctl(spi_fd, SPI_IOC_WR_MAX_SPEED_HZ, &spi_speed) < 0){
  printf("Error setting SPI MAX_SPEED_HZ. Error: %s\n", strerror(errno));
  return -1;

  }

2)受信S-ATT制御を「void process_ep2(uint8_t *frame)」の「case 20:case 21:」に加えた。S-ATTは1dB単位なのでC0.5を書き込まないように常に「0」としたこととdevspiが8ビット単位の書き込みなのでMSBの2ビットは書き飛ばすことにした。

  case 20:
   case 21:
      rx_att_data = frame[4] & 0x1f;
  if (spi_fd) /*OpenHPSDR controls both RX1 and RX2 S-ATT via C4 (0 - 31dB [4:0]) at C0 = "20" or "21". Open HPSDR should limit S-ATT maximum value as 31 as C4 is only five bits. */
  {
  if (misc_data_0 != rx_att_data)
  {
  misc_data_0 = rx_att_data;
  rx_att_data = rx_att_data << 1; /*insert "zero" valued C0.5 bit to LSB*/
  write(spi_fd, &rx_att_data, 1); /*write from MSB for 8 clocks ignoring two MSB bits*/
  }
  }

3)実際の書き込みのルーチンを以下にfunctionとして記載した。

/* Write data to the SPI bus */
/* Constants definition */
int spi_fd = -1;
static int write_spi(char *write_buffer, int size){

int write_spi = write(spi_fd, write_buffer, size);

if (write_spi < 0){
printf("Failed to write to SPI. Error: %s\n", strerror(errno));
return -1;
}

return 0;
}

実際のソフトは以下のGithubにある。

https://github.com/ja5aea/My-Radio-Amateur-Life/tree/TS-680SDR

5.まとめ
OpenHPSDRのS-ATT機能を有効(HPSDR Setup-->General-->Options-->Hermes Step Attenuatorをチェック)にしてS-ATTの設定値によって「RF Step Attenuater」が動作することを確認した。

面白いことにOpenHPSDRでは受信信号の値はS-ATTに依存しないように自動補正されている。画面も同じである。(内部)受信雑音もS-ATTの値を考慮して表示される。例えばS-ATTが0の時に-182dBm/HzであればS-ATTを10にすれば-172dBm/Hzとなる。これはアナログ機に慣れているものにとってはちょっとした驚きである。理由は4.1)項に記載した目的のためであろう。

RedPitayaの外付け基板を設計するにあたってPeregine社のICを利用すれば20PinのQFNパッケージ2個で2つの受信機のS-ATTが実現できる。HPSDRは2つのS-ATTを同時に制御するので既にある未使用のSPI端子を利用してコンパクトな追加制御ソフトで実現できる。

以上。



コメント

  1. THANK YOU for this modification to Pavel's software! Specifically I'm referring to the PE4302 control. It works perfectly on RX2 for PureSignal attenuation.
    73 de W1NJC

    返信削除
  2. Thank you for your modification to Pavel's software. The PE4302 control works perfectly in my setup for PureSignal.
    73 de W1NJC

    返信削除
  3. W1NJC,

    Thank you very much for finding my blog.

    I think my approach described in this blog is one of the simplest AUTOATTENUATED Puresignal implementation for RedPitaya board users utilizing never used SPIs pins in E2 connector.

    Regards,

    take

    de JA5AEA

    返信削除

コメントを投稿

このブログの人気の投稿

RedPitayaを使ったSDR構成のまとめ

Thetis完全対応:sdr-transceiver-hpsdr-ananxd(3月1日改定)

DAIWA CNW-518 アンテナチューナのフィルター特性