RFの電界強度からADC電圧を計算してみる

ようやく設計した基板を製作しようかというところですが、そもそもラジオを受信してADCでデジタルデータに変換した際に、 一体どれくらいの電圧になるのか、ということを知りたかったので、少し調査してみました。

中波受信用ループアンテナ その6 (AMラジオ放送の受信電界強度を予測) に計算例があり、記載されている条件では39.5[mV/m]という値が予測されています。

次に、この値をdB表記と突き合わせて検算してみます。 こちらのページで39.5[mV/m]を入力して計算してみると、 39.5[mV/m]は-15.0578dBmに相当しそうです。

ところで、dBmによると、0dBmは50Ωの終端で1mWの電力に相当します。 これは電圧でいうと、0.224Vになります。電力なので、10dB増加すると10倍の電力になります。3dBでおおむね2倍の電力です。

戻って、-15dBmは-16=-10-3-3よりは大きいので、1022=40で1/40の電力(以上)に相当します。電力が1/40なので、 抵抗値が固定ですからP=I^2 Rからして、I^2が1/40になります。したがって、電流値が1/sqrt(40)=0.158倍。 V=IRで線形なので、電圧についても0.158倍。よって、0dBm=0.224[V]から-15Bm=0.224*0.158=0.0354[V]=35.4[mV]と求められます。 元々の値が39.5[mV/m]という値でしたので、dBとの変換はこの考え方で正しそうです。

2Vp-pで12bit分解能のADCを使用すると、1LSBは2 / 4096=0.488[mV]になります。

上記の計算が間違っていなければ、39.5 / 0.488=81LSB程度の波形が観測できることになります。 この程度の値が出てくるのであれば、ADCの実効分解能が10bit程度(=1/4)でも20LSBになります。

同様に、TBSラジオのカバレッジエリアでは、 当地は2mV/m圏内なので、2Vp-pでの4.1LSB。 これからすると、2mV/m程度の強度になると、12bit分解能でギリギリのように思われます。

ADC基板ほぼレイアウト完成

前回から回路図をさらに追加し、オーディオ出力部分も回路を引きました。 それからBOMを作成し、部品のフットプリントを作成、レイアウト、と進んで、 ようやく基板のデータがほぼ完成しました。一連の作業はKiCadにて行っています。

とにかく大変でした。まずはKiCadで基板レイアウトをするための操作に慣れるのも。 こればかりはDon’t think, feel.という感じです。とにかく手を動かしているとわかってきました。

4層基板でレイアウトしてみましたが、最初はどうやっても片面ではADC周辺部分に部品が載り切らなかったです。 見積もりをWeb上で試してみたところ、やはり両面実装になると、値段はそれなりにアップしてしまいます。 それで、セラコン、チップ抵抗を0603パッケージから0402に一部変更して、なんとか片側に載せきりました。

電源プレーンは、ビアもない空間がかなり広がってしまっています。最初は最低限の幅でレイアウトしていましたが、 考えてみれば、その下には配線層があるので、できるだけベタにしたほうが良いのかな?と思い、面積を広げました。

また、40MHzのクロックラインもなんとなく周りをGNDの配線でガードしてみました。 トップ面のGND塗りつぶしも試してはみましたが、あまり美しくないのでやめました。

ADC基板

上にある80ピンのコネクタがZ-turn boardと接続するためのものです。電源は+5.0Vと+3.3Vが供給されていますが、 今回は3.3Vのみ使用しました。基板の左と下にはSMAメスのライトアングルコネクタがあります。 基板右側がヘッドホン端子です。ほぼ真ん中にある45度傾いているICがLTC2292(ADC)になります。 データシートに記載されている基板レイアウトは、ADCは傾いていませんが、 その代わりにADCへの入力が傾いています。結局は同じようなレイアウトになってしまうものですね。

無駄に何も部品がない空間があるように思いますが、肝心の信号入力部をできるだけ直線になるように配置した結果、 こうなってしまいました。BPFに使っている部品が0603なので、これも長さを食っています。 これでも一応10cm角には入るので、とりあえず良しとします。

これから基板の製作と実装の見積もりを依頼します。 実装も以来できる業者として、PCBCARTElecrowあたりを考えています。

KiCadでのゾーンの切り抜き

KiCadのゾーンは少し癖があります。

KiCadのPcbNewでゾーンを作成すると、その内側にあるゾーンとショートしてしまうことがあります。 この原因は、ゾーンの優先順位です。同じ優先順位を付けるのではなく、内側の優先順位を高く設定することで、 内側の領域が外側の領域とショートしなくなります。

また、塗りつぶしを実行してから、望み通りになっていない領域ができてしまう場合、 当該領域を切り抜くことができます。これも若干操作に問題があって、バージョン4.0.5では、 「表示」メニューから「描画キャンパスを標準に切り替え(F9)」が選択されていないと切り抜きができません。 標準になっていれば、切り抜きを追加したいゾーンを右クリックして「ゾーン」->「切り抜きを追加」で切り抜き領域を設定できます。 設定後に、外側のゾーンを再度塗りつぶすと、指定領域が切り抜かれます。

GALA湯沢で久々のスキー

昨日、数年来でスキーに行きました。GALA湯沢です。

GALAは新幹線で直通で行けるという利便性があるので、わざわざ車で行くのはどうか、 とこの混雑を見て思いました。車で行くなら車でしか行けないスキー場の方が、空いていて良いですね。

ゲレンデに向かうゴンドラはこんな感じでした。

ゴンドラの列

すごい人です。ゲレンデ自体は、晴れていて見晴らしも良く、景色は素晴らしかったです。 雪質も夕方は少し硬くなっていましたが、おおむね良い状態でした。

景色

半日程度しか滑れなかったので、やっと体が慣れてきて、少しチャレンジしてみようか、 というところで終了です。もう一日くらい滑らないと、なかなか上達できそうにありません。

それから夕食は、田畑屋で"田畑屋セット”を食べました。

田畑屋セット

蕎麦はへぎ蕎麦で、 若干緑がかっています。それと、こしがとても強かったので、つなぎが多めかもしれません (あるいはこれが布海苔の効果かもしれませんが)。

全体的に特別に美味しい、というほどではありませんでしたが、ボリュームがすごいです。 写真に写っているサラダも、お慰め程度に入っているのではなく、それなりの深さの器にしっかりと盛ってありました。 蕎麦も十分な量があります。天婦羅はカリッと揚がっていたので、揚げ方は良いと思いました。 これで約1,200円なら十分満足です。

基板作成でしばらく寝不足気味でしたので、帰りの車の中では爆睡してしまいました。 運転してくれた友人には申し訳ない気持ちでいっぱいです。

ADC基板のRF入力部分

前回、SDRの実験用基板について記載しましたが、 やっとRF入力についての回路図が大体できたと思います。

RF入力回路図

我ながらごちゃごちゃして見にくいです。1枚に詰め込みすぎ。

図面の上半分が、ADCの入力の回路です。 片方は70-90MHzのBPFを通し、RFアンプ、RF balunを通して差動入力されています。こちらはFM用です。 RFアンプのデータシートを見てみると、一般的にはLNA(Low Noise Amplifier)を通してから、 このアンプに信号を入力するようです。ただ、Interfaceの特集記事ではLNAは使用しないで実現していましたので、 FM程度の帯域だったら問題ないのかもしれません。

もう一方の入力は、シングルエンドモードで使用し、かつRFアンプを使用するパスと使用しないパスをジャンパで選択できるようにしています。 ジャンパでRF信号を通すのは少し気が引けますが、こちらはAM帯域をターゲットするので、 まぁそれほど高速性は要求されないから良いでしょう。

ADCの入力インピーダンスは、データシートによると100Ω以下とするように記載されていますが、 どちらの入力も基本的には50Ωに揃えてあるつもりです。 RFアンプは入力も出力もインピーダンスが50Ωとなるデバイスです。

また、SENSEピンはジャンパにて2Vp-pか1Vp-pかを選択します。

図面真ん中左側にあるのは、ADCのクロック生成部です。 TCXOから出力される40MHzをCDCLVS1102で2つに分岐します。片方はADCのCLKA,CLKBに入力され、 もう一方はコネクタを介してFPGAのCCピンに接続します。ADCからのクロック出力は無いためです。

2017/2/20追記:当初予定していたTCXOは2.5ppmのものでしたが、 digikeyでは在庫がなくなっているため、 ちょっと怖いですがMEMSの5ppmのクロックに変更しました。 お値段もそれなりにアップしてしまいました。

図面下側はADCの電源部です。VDDはMax 3.4V、Typical 3.0Vです。LDOで3.3Vから3.0Vを生成し、 かつ生成された3.0Vと3.3Vから使用する電圧をジャンパで設定できるようにしています。 クロックが3.3Vなので、VDD=3.0Vで動作させるのはどうかな、という懸念があるためです。 この回路全体で使用されるのは最大で150mA程度と想定されますので、300mA出力のLDOを選択しています。

この回路を作成していたら、オーディオ出力も載せたくなってきました。 最終的にFPGAでSDRを実装したら、そのまま音を出してみたいですしね。 元々の予定だと、この程度の回路で基板を描くつもりでしたが、 オーディオ部分も回路を作成しようと思います。

回路作成すると、いろいろと欲が出てきます。

Z-turn Boardが到着

先日注文していたZ-turn Boardが到着しました。動作確認をひとまず行いました。 東芝の4GBのMicroSDカードが付属しているので、それを装着して電源を入れると、 Linuxが起動します。HDMIモニタに映像も出力されます。

USB_UARTで電源供給とターミナル接続ができますが、USBコネクタがMini-Bタイプでした。 最近珍しいですね。

いきなりdmesgで恐らくSDカードでのファイルシステムエラーが出ていますが、 ボードとしての機能は問題なさそうです。 先行して到着していたXilinx互換ケーブルで認識できることも確認しました。

ちなみに、PayPal経由での請求は、$144が16437円でした。レートにすると114.16円くらい。最近変動が激しいですが、 1%くらいしか手数料は乗っていないのではないかと思われます。

freeroot@localhost:~# free
             total       used       free     shared    buffers     cached
Mem:        771712     319528     452184          0      18980     124896
-/+ buffers/cache:     175652     596060
Swap:            0          0          0

root@localhost:~# dmesg
Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
Memory: 640440K/786432K available (5236K kernel code, 261K rwdata, 1616K rodata, 200K init, 207K bss, 145992K reserved, 8192K highmem)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    vmalloc : 0xf0000000 - 0xff000000   ( 240 MB)
    lowmem  : 0xc0000000 - 0xef800000   ( 760 MB)
    pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
    modules : 0xbf000000 - 0xbfe00000   (  14 MB)
      .text : 0xc0008000 - 0xc06b9588   (6854 kB)
      .init : 0xc06ba000 - 0xc06ec380   ( 201 kB)
      .data : 0xc06ee000 - 0xc072f7a0   ( 262 kB)
       .bss : 0xc072f7ac - 0xc07634a4   ( 208 kB)
Preemptible hierarchical RCU implementation.
        Dump stacks of tasks blocking RCU-preempt GP.
        RCU restricting CPUs from NR_CPUS=4 to nr_cpu_ids=2.
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS:16 nr_irqs:16 16
slcr mapped to f0002000
zynq_clock_init: clkc starts at f0002100
Zynq clock init
sched_clock: 16 bits at 54kHz, resolution 18432ns, wraps every 1207951633ns
timer #0 at f0004000, irq=43
Console: colour dummy device 80x30
Calibrating delay loop... 1332.01 BogoMIPS (lpj=6660096)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)
Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
CPU: Testing write buffer coherency: ok
CPU0: thread -1, cpu 0, socket 0, mpidr 80000000
Setting up static identity map for 0x4f15f8 - 0x4f1650
L310 cache controller enabled
l2x0: 8 ways, CACHE_ID 0x410000c8, AUX_CTRL 0x72760000, Cache size: 512 kB
CPU1: Booted secondary processor
CPU1: thread -1, cpu 1, socket 0, mpidr 80000001
Brought up 2 CPUs
SMP: Total of 2 processors activated.
CPU: All CPU(s) started in SVC mode.
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
regulator-dummy: no parameters
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
cpuidle: using governor ladder
cpuidle: using governor menu
zynq device is 7z020
hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
hw-breakpoint: maximum watchpoint size is 4 bytes.
zynq-ocm f800c000.ocmc: ZYNQ OCM pool: 256 KiB @ 0xf0080000
VCCPINT: 1000 mV
vgaarb: loaded
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
media: Linux media interface: v0.10
Linux video capture interface: v2.00
pps_core: LinuxPPS API ver. 1 registered
pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
PTP clock support registered
EDAC MC: Ver: 3.0.0
Advanced Linux Sound Architecture Driver Initialized.
cfg80211: Calling CRDA to update world regulatory domain
Switched to clocksource ttc_clocksource
NET: Registered protocol family 2
TCP established hash table entries: 8192 (order: 3, 32768 bytes)
TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP: reno registered
UDP hash table entries: 512 (order: 2, 16384 bytes)
UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
PCI: CLS 0 bytes, default 64
hw perfevents: enabled with ARMv7 Cortex-A9 PMU driver, 7 counters available
futex hash table entries: 512 (order: 3, 32768 bytes)
bounce pool size: 64 pages
jffs2: version 2.2. (NAND) (SUMMARY)  \xffffffc2\xffffffa9 2001-2006 Red Hat, Inc.
msgmni has been set to 1490
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
dma-pl330 f8003000.dmac: Loaded driver for PL330 DMAC-2364208
dma-pl330 f8003000.dmac:        DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
e0000000.serial: ttyPS1 at MMIO 0xe0000000 (irq = 59, base_baud = 6249999) is a xuartps
e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 82, base_baud = 6249999) is a xuartps
console [ttyPS0] enabled
xdevcfg f8007000.devcfg: ioremap 0xf8007000 to f006a000
[drm] Initialized drm 1.1.0 20060810
brd: module loaded
loop: module loaded
m25p80 spi0.0: found s25fl129p1, expected n25q128
m25p80 spi0.0: s25fl129p1 (16384 Kbytes)
7 ofpart partitions found on MTD device spi0.0
Creating 7 MTD partitions on "spi0.0":
0x000000000000-0x000000080000 : "qspi-boot"
0x000000080000-0x0000000a0000 : "qspi-bootenv"
0x0000000a0000-0x000000500000 : "qspi-bitstream"
0x000000500000-0x000000980000 : "qspi-kernel"
0x000000980000-0x000000990000 : "qspi-devicetree"
0x000000990000-0x000000f90000 : "qspi-rootfs"
0x000000f90000-0x000001000000 : "data"
CAN device driver interface
libphy: MACB_mii_bus: probed
macb e000b000.ethernet eth0: Cadence GEM at 0xe000b000 irq 54 (00:0a:35:00:01:22)
macb e000b000.ethernet eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=e000b000.etherne:03, irq=-1)
e1000e: Intel(R) PRO/1000 Network Driver - 2.3.2-k
e1000e: Copyright(c) 1999 - 2014 Intel Corporation.
PPP generic driver version 2.4.2
PPP BSD Compression module registered
PPP Deflate Compression module registered
usbcore: registered new interface driver rtl8192cu
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
ehci-pci: EHCI PCI platform driver
ULPI transceiver vendor/product ID 0x0424/0x0007
Found SMSC USB3320 ULPI transceiver.
ULPI integrity check: passed.
zynq-ehci zynq-ehci.0: Xilinx Zynq USB EHCI Host Controller
zynq-ehci zynq-ehci.0: new USB bus registered, assigned bus number 1
zynq-ehci zynq-ehci.0: irq 53, io mem 0x00000000
zynq-ehci zynq-ehci.0: USB 2.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usbserial
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial support registered for generic
usbcore: registered new interface driver option
usbserial: USB Serial support registered for GSM modem (1-port)
mousedev: PS/2 mouse device common for all mice
usbcore: registered new interface driver synaptics_usb
ft5x0x_ts_init successful
input: gpio-beep.3 as /devices/amba.1/gpio-beep.3/input/input0
i2c /dev entries driver
input: ADXL34x accelerometer as /devices/amba.1/e0004000.i2c/i2c-0/0-0053/input/input1
sii902x 0-003b: sii902x_probe
Sii902x: read id = 0xB0
-0x02-0x03
-0x00
myir_stlm75x_probe()
myir-stlm75x driver initialized successfully!
cdns-i2c e0004000.i2c: 400 kHz mmio e0004000 irq 57
cdns-wdt f8005000.watchdog: Xilinx Watchdog Timer at f007a000 with timeout 10s
zynq-edac f8006000.memory-controller: ecc not enabled
cpufreq: __cpufreq_add_dev: CPU0: Running at unlisted freq: 666666 KHz
cpufreq: __cpufreq_add_dev: CPU0: Unlisted initial frequency changed to: 666667 KHz
Xilinx Zynq CpuIdle Driver started
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
mmc0: no vqmmc regulator found
mmc0: no vmmc regulator found
mmc0: SDHCI controller on e0100000.sdhci [e0100000.sdhci] using ADMA
ledtrig-cpu: registered to indicate activity on CPUs
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
TCP: cubic registered
NET: Registered protocol family 17
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
Registering SWP/SWPB emulation handler
mmc0: new high speed SDHC card at address 1234
mmcblk0: mmc0:1234 SA04G 3.63 GiB
 mmcblk0: p1 p2
xylonfb video mode: 1280x720-32@60
Console: switching to colour frame buffer device 160x45
sii902x 0-003b: sii902x_fb_event event=0x5,
sii902x 0-003b: Sii902x: setup..
xylonfb 1 registered
sii902x 0-003b: sii902x_fb_event event=0x5,
xylonfb 0 registered
input: gpio-keys.4 as /devices/amba.1/gpio-keys.4/input/input2
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
sii902x 0-003b: det_worker
ALSA device list:
status: 0X1F, sii902x.retries: 2
sii902x 0-003b: EVENT=plugin
sii902x_poweron
  No soundcards found.
sii902x 0-003b: exit det_worker
sii902x 0-003b: det_worker
status: 0XB9, sii902x.retries: 2
sii902x 0-003b: EVENT=plugout
sii902x_poweroff
sii902x 0-003b: exit det_worker
sii902x 0-003b: det_worker
status: 0X1D, sii902x.retries: 2
sii902x 0-003b: EVENT=plugin
sii902x_poweron
sii902x 0-003b: exit det_worker
EXT4-fs error (device mmcblk0p2): ext4_mb_generate_buddy:756: group 19, 9856 clusters in bitmap, 9858 in gd; block bitmap corrupt.
JBD2: Spotted dirty metadata buffer (dev = mmcblk0p2, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
EXT4-fs error (device mmcblk0p2): ext4_mb_generate_buddy:756: group 1, 3 clusters in bitmap, 0 in gd; block bitmap corrupt.
JBD2: Spotted dirty metadata buffer (dev = mmcblk0p2, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
EXT4-fs (mmcblk0p2): 4 orphan inodes deleted
EXT4-fs (mmcblk0p2): recovery complete
EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 179:2.
Freeing unused kernel memory: 200K (c06ba000 - c06ec000)
EXT4-fs error (device mmcblk0p2): ext4_mb_generate_buddy:756: group 2, 474 clusters in bitmap, 507 in gd; block bitmap corrupt.
EXT4-fs error (device mmcblk0p2): ext4_mb_generate_buddy:756: group 7, 147 clusters in bitmap, 97 in gd; block bitmap corrupt.
EXT4-fs error (device mmcblk0p2): ext4_mb_generate_buddy:756: group 8, 21679 clusters in bitmap, 21684 in gd; block bitmap corrupt.
JBD2: Spotted dirty metadata buffer (dev = mmcblk0p2, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
random: init_stage2 urandom read with 121 bits of entropy available
random: nonblocking pool is initialized
EXT4-fs error (device mmcblk0p2): ext4_mb_generate_buddy:756: group 0, 17407 clusters in bitmap, 17409 in gd; block bitmap corrupt.
JBD2: Spotted dirty metadata buffer (dev = mmcblk0p2, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
udevd[760]: starting version 175
NET: Registered protocol family 10
IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
init_stage2: failsafe main process (1281) killed by TERM signal
init_stage2: atd main process (1341) terminated with status 1
init_stage2: atd main process ended, respawning
xylonfb video mode: 1280x720-32@60
sii902x 0-003b: sii902x_fb_event event=0x1,
sii902x_fb_event event=[FB_EVENT_MODE_CHANGE]
sii902x 0-003b: Sii902x: setup..
sii902x 0-003b: sii902x_fb_event event=0x10,
sii902x 0-003b: sii902x_fb_event event=0x9,
sii902x 0-003b: FB_BLANK_BLANK
sii902x_poweroff
sii902x 0-003b: sii902x_fb_event event=0x10,
sii902x 0-003b: sii902x_fb_event event=0x9,
sii902x 0-003b: FB_BLANK_UNBLANK
sii902x_poweron
FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

ADC基板の構想

FPGAと基板を接続して、簡単なSDR(Software Defined Radio)の実験をしてみたいと 思っています。Interface 2015年7月号に触発されました。

上記記事では、LPC-Link2を使ってAMとFMの受信を行っています。 私も、まずはマイコン上でソフトウェア処理する前に、一回ADCデータをパソコンにすべてダンプして、PC上で オフライン処理をしてみようと試みたことがありました。 実際にLPC-Link2で実験してみたところ、USBの転送速度からして、10M sample/sec程度が良いところ、という印象でした。

上記特集ではこの程度のサンプリングレートでAM/FM復調を行っていますので、まぁ十分なのですが。

単に基板を作ってみたいという個人的趣味が先行しています。

それで、Z-turn Boardに接続する、ADCとUSB3.0が搭載されたボードを作ろうと目論んでいます。 今はいろいろと基本的な部品の選定を行っています。ある程度固まってきたので、記録しておきます。 随時追加予定です。使用する部品は、Elecrowあたりで実装することを考えて、digikeyやmouserで容易に入手できそうなものを選びます。

また、ADC周りの設計は完全に素人なのですが、自分なりに調査した結果、AM/FMならばとりあえず、 BPF->RFアンプ->RFトランス->ADCという信号の流れで良いのではないかと考えました。 ADCは差動入力なので、RFトランス(Balun)にてシングルエンド信号を差動に変換します。 ただし、RFトランスは低周波数(1MHz以下)あたりでは性能が悪化するようです。それで、FMについては上記信号経路とし、 BPF, RFアンプ, RFトランスについてはジャンパでそれぞれバイパスできるようにします。 また、ADCについても、ジャンパにて差動モードとシングルエンドモード両方で使えるようにしたいです。

実際に上記雑誌の特集では、AMについては一切外付け部品を使用せず、アンテナを直接ADCに繋いでいます(ADCの前にLPFが入っていますが)。

2017/2/17追記:上記のようにジャンパで信号パスを選択することを想定しましたが、Linear Technology LTC2292CUPは2チャンネル入力があり、 かつ比較的安価なので、こちらを使用してFM, AM用としてそれぞれ使おうかと思います。 また基板は、ADCが乗ったものと、USB3.0が乗ったものを別々に製作しようと思います。 ADCとUSB3.0基板では、必要なPCBの層数も違いますし、基板製作に失敗したときのダメージも分けたほうが小さいので。

  • RFアンプ:BGA2818 (6-TSSOP)
  • P1dB: 4dBm, Gain: 30dB, 雑音: 3.3dB
  • RFトランス:MABAES0060 (RF1:1 Flux Coupled Transformer, 0.3-200MHz, 1:1 impedance)
  • digikeyにて297円. 画像がいかにもトランスです。果たしてElecrowで実装できるのか?
  • データシート
  • ADC:LTC2292CUP (12bit, 40M sample, 64-QFN)
  • ADC:AD9235BRUZ-40 (12bit, 40M sample, TSSOP-28) こちらは対象外に脱落
  • USB:CYUSB3014-BZXC

(本当はLVDS出力のADCが良かったのですが、結構お高いので、まずはできるだけ安いもので実験してみようと思いました。 ただし、このADCはレジスタ設定のようなものが無い代わりに、ピンの電圧などで動作が変わるという奇妙なデバイスです。)

Xilinx Platform Cable USB(もどき)到着

先日Z-turn Boardを注文しましたが、それが到着する前に、 Amazonで注文したXilinx互換ケーブルが到着しました。

Platform Cable USB

もろにロゴと商品名まで使ってます。本体のコネクタは2.54mmピッチ, オス, 14pinです。ちなみに、 写真に写っているUSBケーブルも付属していました。最近A-Bタイプはあまり使わなくなってきたので、 ちょっと助かります。

重要なのは付属品の方です。

付属品

左から、

  1. 2.54mmピッチ, メス-メス, 8pinのブレークアウトケーブル
  2. 2.54mmピッチ, メス-メス, 10pinのフラットケーブル
  3. 2.54mmピッチ, メス-メス, 14pinのフラットケーブル
  4. 2mmピッチ, メス-メス, 14pinのフラットケーブル
  5. 2.54mmピッチ, メス-メス, 用途不明ブレークアウトケーブル

となっています。

そして、写真の上に写っている黒い基板が大切で、こちらの裏側は、JTAG本体に刺さる2.54mmピッチのメスコネクタが実装されています。 写真に写っている側には3つのコネクタが実装されており、 一番左、左から2番目、左から4番目のケーブルがそれぞれ刺さるようになっています(左から3番目は変換基板なしで本体に刺さる)。 これで基板に実装されているJTAGコネクタの各種に対応できるようになっています。

まだ肝心のZ-turn Boardが到着していませんが、Vivadoからの認識はできているようでした。 Z-turn Boardが到着し次第、双方の動作確認を行います。

KiCadでの多ピンICのライブラリの作成にはQuick KICAD Library Component Builderがおすすめ

KiCadで多ピンICのライブラリを作成する際、コンポーネントエディタで1本ずつピンを配置しても良いのですが、 ピンの入出力などの設定をいちいちマウスの右クリック->編集で行うのは面倒です。

そのような多ピンのICの場合にどうしたら効率よくライブラリを作成できるのか、試行錯誤しましたが、 次のような方法が私にはしっくりきました。

  1. Quick KICAD Library Component Builderにて、ひな形を作成する。
  2. ダウンロードしたひな形をコンポーネントエディタで編集する。

まずは、Quick KICAD Library Component Builderにて、 必要なピン数などを選択します。ここで大切なのは、 最初の画面のComponent Features > Parts Countにコンポーネントの分割数を指定することです。 ここで指定した数のユニットに分割されたコンポーネントとしてICが作成できます。

Component Builder画面

次の画面では、画面上でピンをずらーっと一覧でき、シンボル上のピンの向きや、 どのパートにピンが所属するか、ということも設定できます。

これが必要なのは、多ピンICになると、回路図を書く際に、例えば複数の電源ピンを1つのブロックとして、 データ信号は別のブロックで、というように、ピンの機能ごとに異なるブロックになっていたほうが、 すっきりとして理解しやすい回路図が書けるためです。

(公式ドキュメントだと、Pythonでパートの番号などを入れ替えるスクリプトが示されていますが、私には最初の作成時から上記Webアプリで作成してしまったほうが楽だと感じました。)

最後に、“Build Library Component"を押すと、指定したコンポーネントが含まれるライブラリがダウンロードできます。

次に、ダウンロードしたlibファイルに含まれるコンポーネントを、コンポーネントエディタで編集します。 例えば、データバスが32本ある場合、ビット並び順に上から下へ、というように並べ替えます。 ただ、ここでも注意点があります。次の図にあるように、画面右上にある、 “パーツ/ボディ形状ごとのピンの編集"というのを押した状態にして作業する、ということです。

パーツ/ボディ形状ごとのピンの編集

これが押されていないと、ユニットAでピンを動かすと、ほかのユニットの同じ場所にあるピンも動いてしまいます。 これがなかなかわからなくて、「KiCadはこんなこともできないのか!!」と私は小一時間以上悩みました。

後はピンを自分の気に入るように移動すれば完成です。

結局、Z-turn boardを購入しました

前回、FPGA基板を探していると書きましたが、早速注文してしまいました。 結局、Z-turn Board (MYS-7Z020-C-S, 7020の方)にしました。$119と送料$25で合計$144でした。 日本の税関を通すあたりでまたいくらか取られるのかもしれません。

あと、さらに調べて分かったのは、こちらのボードはJTAGケーブルは別途必要だということです。仕方ないので、これは別途調達しようかと思います。

注文はPayPalで決済されるのですが、私は初めて利用しました。レートなどが気になったので調べてみたら、 どうやらPayPalは手数料が高いらしいです。このあたりを参考にして、 クレジットカード側にてレートが決まるように設定しました。あとはこれが日本円でいくらになるのか?ですね (2017/3/28追記 144USD=16437円でした。1USD=114.146円です。2/7のレートは111.6-112.4円/USDあたりでしたので、 それほど手数料はかかっていないと思います)。

なかなか時間が取れないですが、少しずつ進展させていきたいと思います。

**追記:**早速注文しました。@marsee101さんに教えていただいた、 JTAG-HS3です。でも、こちらのJTAGはコネクタのピッチが2.0mmなのに対して、 Z-turn Boardはおそらく2.54mmピッチのようです。変換ケーブルも発注しなければ。

**さらに追記:**変換ケーブルも調べてみたら、なかなか工作不要の2mmピッチ(オス)<->2.54mmピッチ(メス)は見つかりませんでした。 2mmピンヘッダを買って工作すれば2.54に変換できまずが、できるだけやりたくないので、 やはりAmazonのやつを買おうかと思います。これは商品の写真にもあるように、何種類かのピッチに変換する コネクタが付属しているようです。これがあるだけでも1,000円だけ高いのは自分としては十分許容されます。