ANT直下型チューナーの制作

コロナで時間ができたので、ちびちびと [直下型チューナー+制御器] を制作していたので紹介します。(2020/7 ~ 2020/9)

リグ内蔵用のANTチューナー基盤の中古を以前ヤフオクで入手し、5年ぐらいほったらかしだった。

tuner1.JPG

やっとこれをどうにか活用する気力がでてきた。うまくいったら現用の 7MHz モノバンド VCH アンテナをバーチカルに置き換えて直下にこれを設置する。そうすればマルチバンドにオンエアできる、と期待。なお、ここで作ったのは自動で整合がとれる「オートチューナー」ではありません。シャックからアンテナ直下に設置したチューナーを「手動」で調整できる制御器です。つまり手元でアンテナカップラを調整してSWRを落とすのと操作は同じです。PCのソフトで制御器を操作できるようにします。

チューナーモジュールについて

形式:CLC-T型(パイマッチではない)

バリコン:たぶん 330pF x2

コイル:容量不明。タップをリレーで切り替え。

  • コイルタップ位置変更リレー:6個 電圧12V(基板上にダイオードが実装されているのでリレー電源接続極性を間違えないようにすること!)
  • バリコン制御モーター電圧3V以下:2個
  • バリコン位置検出用VR10KΩ:2個

http://take103.blog.fc2.com/blog-entry-64.html にて確認するぶんには回路図の部品番号と基盤上のシルク印刷が同じなので TRIO のリグのものだった模様。
まず、Arduino を仮組みで接続して動作確認。リレーもモーターも問題なく動作。このチューナーの恐ろしいところは、バリコンモーターに機械的なリミッタが付いていないこと。バリコンは何回転もできるからよいが、角度検知するボリュームはただのボリュームなので360度は回らないからボリュームの最大・最小を超えると破損する。制御側が確実に動作するようになるまではチューナーをつないでの実験はできない。
P1080194.JPG

リレー制御

モジュール上コイルリレーのコネクタピンアサイ

1

2

3

4

5

6

7

GND

K106

K105

K104

K103

K102

K101

動作

トロイダルL109 を除外

トロイダル L109+L108 除外

コイル8T で接地

コイル 5 ¾で接地

コイル 4 ¾で接地

コイル 3 ¾で接地

用途

3.5MHz?

7MHz?

10~18M?

21~24M?

28MHz?

29MHz?


IO からのバッファはトランジスタでよいと思っていたが、TR+抵抗2個の配線も面倒なのでトランジスタアレイを使うことにする。基盤のリレーコイルは片方はGNDに落ちているのでソースタイプが必要。


8chソースタイプDMOSトランジスタアレイ TBD62783APG

http://akizukidenshi.com/catalog/g/gI-10957/

デジタルIO 出力について

必要なデジタル IO 出力:リレー6個+モーター4個 = 10個

しかし WROOM-02 のデジタル出力は9個しかない。しかも、アナログ入力の ADC SPI 接続のためデジタルピンを4個も使う。つまり、5個しかデジタルIOが使えないためモーターのぶんを差し引くとコイルリレー用に使えるのは1個になってしまう。これではどうしようもない。


GPIO 早見表

http://eleclog.quitsq.com/2015/08/esp-wroom-02.html


http://doc.switch-science.com/schematic/ESP-WROOM-02_devboad/ESP_WROOM_02_FTDI.pdf


Arduino(or AVR) + WROOM でやるしかないかと思ったが、世の中には I/O エキスパンダーというものがあった。


ESP-WROOM-02 ( ESP8266 )の GPIO を増設して キャラクタディスプレイ 8bitモード制御してみた

https://www.mgo-tec.com/blog-entry-character-oled-gpio-expander-wroom-esp8266.html

↑のサンプルは古い SPI ライブラリを使っている。新しいライブラリ使用は以下のサンプル。


MCP23S08 With Arduino

https://www.instructables.com/id/MCP23S08-With-Arduino/


↓これは I2C を使用した例。

デジタルピンを増設する「IOエキスパンダー」の使い方 [Arduino]

https://www.petitmonte.com/robot/howto_io_expander.html


8ビット SPI I/Oエキスパンダー MCP23S08-E/P

http://akizukidenshi.com/catalog/g/gI-10643/

mcp23s08.png

ピン接続

MCP23S08

接続

1 SCK

CLK Uno=13, ESP=14

2 SI

MOSI Uno=11, ESP=13

3 SO

MISO Uno=12, ESP=12 (IO出力のみの場合は無くてもよい)

4 A1

SPI アドレス上位 (GND)

5 A0

SPI アドレス下位 (GND)

6 RESET

Any Pin (Vdd 5V に繋ぐ場合は無くてもよい)

7 CS

Any Pin

9 Vss

GND

18 Vdd

3.3V


https://www.arduino.cc/en/reference/SPI



16bit SPI I/Oエキスパンダー MCP23S17-E/SP

http://akizukidenshi.com/catalog/g/gI-10644/

mcp23s17.png

注意事項

  • ピン接続は 8bit 版と同じ。
  • アドレスピンは A0, A1,A2 と3ピンあるので全部 GND する。
  • IOCON コマンドで BANK=1 に設定したが動作しなかった。BANK=0 なら動作する。仕様書に以下の説明があるが意味がわからない。mcp23s17imi.png
  • コマンドはアドレス幅は 8bit で変わらず GPA と GPBで別々のレジスタ指定で操作する(SPI では 16bit でデータを送る仕様は無いため)。
  • バッファには TR アレイを使う
8chソースタイプDMOSトランジスタアレイ TBD62783APG

http://akizukidenshi.com/catalog/g/gI-10957/

  • WiFi 接続確認用LEDを GPB4 に接続する

参考

I/OエキスパンダーのMCP23S17をArduinoで使ってみる。

http://dad8893.blogspot.com/2016/10/iomcp23s17arduino.html


注意:ビット演算は以下のように行う。


ビットを立てる

(現在のポート値)| (立てるビット列)

ビットをオフにする

(現在のポート値) & not(オフにするビット列)


参考:

  1. ビット演算は集合演算

https://qiita.com/drken/items/7c6ff2aa4d8fce1c9361#5-%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97%E3%81%AF%E9%9B%86%E5%90%88%E6%BC%94%E7%AE%97

バリコン位置検出

必要なアナログ IO 入力:VR 2個


ESP-WROOM-02 は1個しかアナログ入力がない。WROOM-32 は2個あるようだが、1個は WiFi と同時に使えないらしいのでこちらも足りない。仕方ないので、外部の ADC デバイスを使うしか無い。


ESP8266(ESP-WROOM-02)でアナログ値を見るには?

https://qiita.com/ryokai/items/9b0c56616b4550eb05f1


10bit 2ch ADコンバータ MCP3002-I/P

http://akizukidenshi.com/catalog/g/gI-02584/

mcp3002.png

ピン接続

MCP3002

接続

1 CS (負論理)

Chip Select (Any pin)

2 CH0

アナログ入力

3 CH1

アナログ入力

4 Vss

GND

5 Din

MOSI Uno=11, ESP=13 (必要)

6 Dout

MISO Uno=12, ESP=12 (必要)

7 CLK

SCK Uno=13, ESP=14

8 Vdd

3.3V


なお、VR は 180度回ればいいので VR の端から端まで回さなくてもよい。

抵抗値 (1.7K ~4.5K)x2 ぐらいの範囲。だとしても VR機械的ストッパーが無いのは不安。

Arduino アナログ入力で計測した、バリコン位置と analogRead() 値。この値の範囲内だけモーターが動作するようにする。

C=0pF(バリコン羽が抜けた状態): 220

C=330pF(バリコン羽が入った状態): 810


チューナーモジュールのバリコン関連コネクタピン割り当て

通し番号

1

2

3

4

5

6

7

8

電線色

役割

GND

VR L

VR Vcc

VR R

M L-

CW

M L+

CCW

M R-

CW

M R+

CCW

電線色(232)

PIN

外皮

PIN

芯線

DSUBコネクタ番号

#

2

#

3

4

5

7

8

DSUB側色

#

#


モーター制御

リレーとDRV8835 どちらがいい?

DRV8835使用DCモータードライブキット

http://akizukidenshi.com/catalog/g/gK-10346/


DRV8835 のほうが場所もとらず実装も楽であるが、制御電圧範囲 2V~11V なので、モーターをかなり低速で回したい場合、もう少し電圧が低くならないとつらい。キットでは Uno からアナログ出力で回転数を変えているように見えるが、DRV8835 の入力ピンはアナログ値を受けるようには見えないのでこれは間違いではないだろうか。

リレーは回り込みには強いのではなかろうか? ジャンク箱にDC15V のリレーが大量に余っているので使える。なかなか使いみちがなかったのでこれはちょうどいい。


寝ながらバリコンの位置制御モーター制御も基盤の VR でスピードを決めるのではなくソフトで変えられると楽だなあと思った。たしか ESP の TOUT I/O が余っているが使えないのだろうか?と思って調べると TOUT はアナログ入力のみであった。そうなるとまたまた IO エキスパンダーを使うしかない。

10bit DAコンバータ MCP4911-E/P

http://akizukidenshi.com/catalog/g/gI-11988/


DAコンバータ MCP4922(SPI)を利用しD/A変換を行う

http://zattouka.net/GarageHouse/micon/circuit/D_A.htm


arduino/DACを試す

http://www.pwv.co.jp/~take/TakeWiki/index.php?arduino%2FDAC%E3%82%92%E8%A9%A6%E3%81%99

mcp4911.png

ピン接続

MCP4911

another end

1 Vdd

3.3V

2 CS (負論理)

Chip Select

3 SCK

SCK Uno=13, ESP=14

4 SDI

MOSI Uno=11, ESP=13 (必要)

5 LDAC (負論理)

High にすると設定値がすぐに Vout に出る。Low だとCSの立ち上がりのタイミングで Vout に出力される。気にしない場合は  GND にしておいてよい。

6 Vref

Vdd へ接続

7 Vss

GND

8 Vout

アナログ電圧出力


レジスタ設定

mcp4911reg.png

出力値 value は D0-D9 にセットする。

int16 value を上記の high, low バイトに分ける必要がある。


value (10bit)

           

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0


low = (value<<2) & 0xff

D5

D4

D3

D2

D1

D0

x

x


high = ((value>>6) | 0x30 )& 0xff

0

0

1

1

D9

D8

D7

D6


実験にてアナログ出力電圧を確認すると、2N4401 の動作点の問題かも知れないが、設定値とコレクタ電圧が全然リニアにならない。電流制御なので負荷をかければ変わるだろうか。


こんな感じ

設定値, 電圧

0, -1.4V

170, 0V

200, 1.5V

300, 2.5V

550, 2.9V

制御器の仕様など

入力電圧 DC12V

内部電圧:リレー 12V、ESP-WROOM 3.3V、モーター 1V~3V

構成

  ESP-WROOM-02: 制御およびWiFi接続

  MCP3002: VR 出力を A/D 変換し、ESP で VR 値を取得する

  MCP23S17: リレーおよびモーター出力のための IO 10出力を得る

  MCP4911: モーターの速度制御のため D/A 出力から TR 制御

  TBD62783APG: ダーリントントランジスタアレイ


ESP WROOM-02 ピン割当

EN, IO2

Pull up

IO0

Pull up (トグルSWでGND)

RST

Pull up (プッシュSW でGND)

IO15

Pull down

IO4

SPI CS (A/D)

IO5

SPI CS (IO Exp.)

IO12 MOSI

SPI

IO13 MISO

SPI

IO14 CLK

SPI

IO16

SPI CS (D/A)


結局 ESP の空きピンは無くなってしまったので、デジタルIO はすべてエキスパンダー側から接続するしかない。リレーとモーターで10個必要なので、エキスパンダーは 16bit 版が必要となる。

3端子レギュレータについて

  • 万一、3.3V の 3端子レギュレータのノイズがのるようであれば TOREX のに変えないとだめだろう。

参考:

「3端子レギュレータ起因のノイズは100kHz~3MHz」とメーカーから公開済み。長波~短波帯。

http://takinx.dcnblog.jp/radio_kit_/3100khz3mhz.html


  • 完成基板で試してみたところ、損失が 700mW 弱あり、小型ヒートシンクでは放熱しきれなかったため、DC/DC 方式のレギュレータに変更した。

三端子DC/DCレギュレータ 3.3V BP5293-33

http://akizukidenshi.com/catalog/g/gM-11187/


これまでの経験では 5V 入力でも 3.3V のレギュレータを使うと発熱して、小さい機器では放熱が影響することがある。入力 5V 以上になったら余程余裕がないとシリーズレギュレータは使えないように思う。


クライアントプログラムの要件

操作

UI

I/O

コイルリレーの設定 

ラジオボタン 7個 (一個はすべてのリレーOFF=L最大)

クライアントから送信

バリコン2個の設定 

それぞれ CW/CCW ボタン

クライアントから送信

バリコン2個の操作スピード

スピード指定 TextField

クライアントから送信

バリコン2個の位置表示

プログレスバーと値テキスト

本体から送信

メッセージ表示領域

TextArea

 

クライアントプログラムと本体間の通信について

当初、tcp/udp のソケットを互いに張り、適当なフォーマットでやりとりすることを考えていたが、その場合の難点としてテストがやりにくいことがある。本体の動作確認のためにプログラムを動かしてソケットにコマンドを送る必要がある。

以前作った Google Home で制御するリモコンで用いた Web Hook の方式ならブラウザでも操作できるので、これで実装してみることにした。

なお、VR 位置情報だけは 本体から送信となり、HTTP の結果としてクライアントにも送れるが、リアルタイムな位置情報として得るには UDP で送信するほうがよいと思われる。


例:

モーターL を時計方向に回転

http://192.168.10.74/motor?MR_CW=ON

モーター速度を 500 に設定

http://192.168.10.74/motor?SPD=500

コイル(リレー)  K101 をオフ

http://192.168.10.74/coil?OFF=1 (2進の1、オフにするビットを指示)
回路図
結構電線数も多いので手書きもなんなので真面目にPCで描きました。
チューナーコントローラ4.jpg
基板完成。何本配線しただろう!? ポリウレタン線をひとつのランドに2本以上ハンダ付けするときは、先に付けておいた線がはずれないようにピンセット(つまむと離れるタイプ)で押さえておけばいいことに気がついた。気がつくまでにずいぶん年月がかかった。。
しかし、ポリウレタン線の被覆を剥がすのにハンダを付けて熱するのが結構面倒。うまくやる方法他に無いだろうか?
ジャンク箱に往年のトランジスタ 2SC733 がいっぱいあったので今回2個使った。
P1080241.JPGP1080238.JPG
ケースに収めました。底面にコネクタ類をつけました。最近は面倒でレタリングもコネクタを判別できるように最小限の一文字だけ。。
P1080254.JPGP1080260.JPG
チューナーはタッパウェアに収めました。なかなかぴったりです。高周波が制御器に回り込んでリレーやモーターが勝手にONになると壊れてしまうので、電線にはパッチンコアをつけました。私にはこの程度の対策しか思いつきません。
P1080264.JPG
初めてこのチューナーで整合がとれるかどうか、ドキドキしながらテスト。ANT側にはワニ口で 50Ωの抵抗をつないで試しましたが、無事にどのバンドでもバリコンとリレーの操作で SWR は下がりました。50MHz でもオッケー。
P1080269.JPG
ソフトはこんな感じに Java で作成。UI を使うソフトはたまにしか書かないので作ろうとする気力がでないとなかなか出来ないのですが、なんとか作っているうちにカタチになりました。ほしいUIを作るのにどうやってレイアウトマネージャを組み合わせるのがいいかいつも悩みます。コイルのラジオボタンでインダクタンス切り替え、[CW] [CCW] で2つのバリコンを回転操作します。バリコンのプログレスバーはバリコンの羽の入り具合を示すので 100% で 330pF ぐらいということになります。
anttuner-soft1.JPG
制御器の Arduino のソースと PC の Java ソースがほしいかたは差し上げますのでコメント欄より連絡ください! (受付後、表示なので連絡先を書いてもらっても大丈夫なはず。)
さて、必要なコンポーネントは完成したのであとはベランダに設置するだけ!。
(続く)