リグ内蔵用のANTチューナー基盤の中古を以前ヤフオクで入手し、5年ぐらいほったらかしだった。
やっとこれをどうにか活用する気力がでてきた。うまくいったら現用の 7MHz モノバンド VCH アンテナをバーチカルに置き換えて直下にこれを設置する。そうすればマルチバンドにオンエアできる、と期待。なお、ここで作ったのは自動で整合がとれる「オートチューナー」ではありません。シャックからアンテナ直下に設置したチューナーを「手動」で調整できる制御器です。つまり手元でアンテナカップラを調整してSWRを落とすのと操作は同じです。PCのソフトで制御器を操作できるようにします。
チューナーモジュールについて
形式:CLC-T型(パイマッチではない)
バリコン:たぶん 330pF x2
コイル:容量不明。タップをリレーで切り替え。
- コイルタップ位置変更リレー:6個 電圧12V(基板上にダイオードが実装されているのでリレー電源接続極性を間違えないようにすること!)
- バリコン制御モーター電圧3V以下:2個
- バリコン位置検出用VR10KΩ:2個
http://take103.blog.fc2.com/blog-entry-64.html にて確認するぶんには回路図の部品番号と基盤上のシルク印刷が同じなので TRIO のリグのものだった模様。
リレー制御
モジュール上コイルリレーのコネクタピンアサイン
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 |
接続 |
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/
注意事項
- ピン接続は 8bit 版と同じ。
- アドレスピンは A0, A1,A2 と3ピンあるので全部 GND する。
- IOCON コマンドで BANK=1 に設定したが動作しなかった。BANK=0 なら動作する。仕様書に以下の説明があるが意味がわからない。
- コマンドはアドレス幅は 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(オフにするビット列)
参考:
- ビット演算は集合演算
バリコン位置検出
必要なアナログ 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 |
接続 |
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+ |
M R- CW |
M R+ |
電線色(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
http://www.pwv.co.jp/~take/TakeWiki/index.php?arduino%2FDAC%E3%82%92%E8%A9%A6%E3%81%99
ピン接続
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 |
アナログ電圧出力 |
レジスタ設定
出力値 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 制御
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、オフにするビットを指示)