FPGA FM チューナ


IMGP2475

林さんのFPGA FM チューナ をひろくんのページで知って使っています。こちらは運良く2012年にデジタルデザイン テクノロジNo1(以下DDT)がマルツにあり購入でき、その後たまたまアマゾンで定価より 安い基板付き中古本が手に入り、二枚基板が入手できました。

FPGA FMチューナについてはDDTにも記事がありましたが、その後エレ工房No.1にも記事 があります。こちらはかなり詳しく書かれています。また2015/4のトラ技にはBPFの記事 がありました。

2012年に林さんに基板を頒布してもらい、2012年の暮れからこのチューナを愛用して います。KT-3030もひろくんのページを参考に修理調整してあったのですが、めっきり サブになっています。

FPGA FMチューナは音は良いのですが、結構強烈な高周波ノイズ元になってしまいます。 電波時計などは確実に影響を受けますので、あまり近くに置かない方が良いようです。

DDTの基板付きの中古本は現在はアマゾンやヤフオクで高騰していますが、 港北ネットワークサービスさんのコンパチ 基板が9000円なので、これよりも高い物を買う必要はないかと思います。 港北ネットワークサービスさんの基板のチップは規模が大きいのですが、DDTと同じ チップでもう少し安いと良いのですが。

DDTの基板はLatticeのチップを使っていて、この開発ツールはDiamondと呼ばれ、 フリーでダウンロードできますが、ただし利用するためにはサイトでライセンスを 発行する必要があります。ライセンスは1年間有効で、切れた場合は再発行できます。

DiamondはWindows版とLinux版しかなく、Mac OS Xでは実行できないのでbootcampで Windows 7を導入しました。

Latticeの開発キットは丁度同じ頃、秋月でも取り扱いがあり、たまたま購入しました。 すでにこちらもディスコンになってしまったようです。目的は無くなんとなく購入 したのですが、Diamondの操作になれることができて良かったです。

FPGA FMチューナはAltera/Xilinx社のFPGAを使ったバージョンもありますが、 こちらのFPGAモジュールは完全業務開発用で、港北ネットワークサービスさんの モジュールよりも高価なようです。

FPGAの市場では、XilinxとAlteraが大手で、Latticeは中規模な会社のようです。 まったく関係ない話ですがAlteraなはんとIntelに買収されてしまったようです。 大手の企業が同じ業界の大手を買収とは、まったく独占禁止法が機能していない ようにも思います。

2年前に一度焼いてその後二台目のキットも作っていなかったので、まるっきり忘れ ていて、次回のためにもメモを残しておきたいとおもいます。2年前はDiamond 2.2で したが今回は3.5での処理になります。

Diamondはいくつかの焼き込みケーブルに対応しているようですが、FTDIのFT2232Hにも 対応しているようです。以前買った秋月の基板にもFT2232Hがのっていました。 私は手元にあったストロベリー・リナックスのFT2232Hを使った モジュール を使いました。EEPROMにLatticeのIDを焼く必要があり、 WinではFTDI社の FT_PROGツール で行えるとおもいます。(私はMacで操作しているので未確認です)

FT_PROG

FPGA ピンFPGA 信号名 FT2232H ピンFT2232H 信号名
1VCC13.3V
2TDO5ADBUS2
3TDI4ADBUS1
6TMS6ADBUS3
7GND40GND
8TCK3ADBUS0

LatticeのサイトでDiamondを実行するPCのネットワークインターフェースのMAC アドレスを登録してライセンス(license.dat)をメールで受け取ったら c:\lscc\diamond\3.5\licenseの下にコピーしてください。Diamondの使い方は 日本語のページもネット上にいくつかありますので、検索してみてください。

Diamondを起動したら、FileメニューからOpen->Projectでプロジェクトを開きます。 受信周波数の設定値の変更を行う場合は左側のブロックでFile Listタブを選択して、 top.vhdファイルをダブルクリックして開き変更します。

Diamond35_1

合成するには左側のブロックでProcessを選んでツリーを選択してProcessメニューの Runを実行します。この処理は5-10分くらいかかります。

合成が出来たら、FPGAに書き込みます。ToolsメニューのProgrammerを選択して開いた タブの上側にある書き込みボタンをクリックすると書き込みが実行されます。 ケーブルの認識は右側ブロックのDetect Cableボタンで出来ます。この処理は15秒位 で終わります。

Diamond35_2

リモコンモジュール

IMGP2441

猫のお留守番で留守録するために選局機能のリモコンを 付けてあります。最初にキットを頒布してもらった時にシリアルでの制御を教えてもらい 当初はMacからFTDIのチップで直接つないでいたのですが、Macのノイズにより受信 できなくことがあり、電気的に完全に切り離すためにAVRを使った赤外線リモコン モジュールを作ってみました。

最近だとBluetoothのSPPやWIFIモジュールなどで制御する方法もありますが、ノイズ を考えるとローテクな赤外線リモコンも捨てたもんではないかもしれません。

最初に教えてもらった仕様は、14ピンの拡張コネクタの11ピンにシリアル信号を送る ようになっていましたが、現在の仕様は20ピンの3ピンに変更されています。 また送るデータも最初の仕様はクロックから計算された値で、double計算が必要で 8ビットのAVRのCで書いたところ何か不思議なコンパイルエラーが発生して、ちょっと はまりました。現在の仕様 は周波数をそのまま送れるようになっています。

コンパイルはArduinoのgccを利用しています。Mac OS Xでアプリケーションフォルダに Arduino.appがあればそのままでmakeできると思われます。

ひろくんやいろいろな方がFPGA FMチューナのコントロールモジュールを作られて いますが、このモジュールが一番シンプルではないでしょうか。

留守録時にはアルマジロのお使いからの 信号で制御しますが、リモコンでも選局したかったので使わなくなったSONYのアナログ TVのリモコンを使えるようにする事にしました。

シリアルの仕様が変わったので、モジュールを作り替えようか考えてみたが、20ピンの 方には電源が出ていないんで、14ピンのコネクタにのっかったモジュールはそのまま にして信号線だけQIコネクタで20ピンのピンヘッダーに送る事にした。

newir

赤外線を受けてシリアルを送信するだけなのでAVRで一番小さい、8ピンのATTINY85で 作りました。ATTINY85は秋月電子でも取り扱いを始めており、比較的安価に入手で きます。FPGAは3.3Vのため抵抗を使ってAVRからFPGAへのTxDは5Vから3.3Vへの変換 を行っています。AVRの8ピンのうち電源2本とIR,LED,TxDが3本で残り3本ありますが、 Resetを信号線として使うFuseを焼くと12Vでのリセットが必要になるので、使えるのは 残り2本といったところでしょうか。

ソースコードはGitHubに 置いてあります。たしかいくつか手元にあった赤外線受光素子でうまく動くもとの、 動かなかったものがあったような気がします。かなり部品に依存したコードになって いるかしれません。と書きましたが、最初に作ったモジュールはVS838で作り、 秋月のでPL-IRM2121でも同じコードで正常に動きました。

ATTINY85はハードウエアのシリアルサポートがないので、githubにあったコードを使って データの送信をおこなっています。

どきどき設定されないなどの、エラーがあったために、二度同じ信号を受信しないと、設定しないように なっています。リモコンからだと同じボタンを二度押すと設定できます。アルマジロの お使いでは二度送るようにしています。

最初に作ったモジュールは25mAくらいでした。AVRにはsleep機能があるので消費電力を 減らしてみようといろいろ試してみました。CPUが止まればノイズ削減にも効果が 見込まれます。

このコードはTimer0を回してIRのエッジを拾ってそのLow/Hiのカウント比較により ソニー12bit系のリモコン信号を判断するように書かれています。またシリアルの 送信のためにTimer1を使っています。

処理は論理変化割り込みでおこなっていますが、SLEEP_MODE_PWR_DOWNからの復帰はLow Level割り込みになるため、スリープに入る前に割り込みモードを変えています。 ループで2秒処理が無かった場合スリープに入るようにしました。復帰後に割り込みを 論理変化に戻しています。

uartInit()するとTimer1を動かすのでこれが5mAくらいの消費になるようです。ところ がこれを止めてもSLEEP_MODE_PWR_DOWNしても20mAの消費がありました。いろいろ調べ たところ、TXPORTでTXラインをHiにしている処理で消費していました。これを戻したと ころめでたくIRモジュールの消費分の1mA程度に収まりました。20mAというのはテストで つかたFT232Rに依存していたかもしてません。

あまり意味はないですが、周波数はEEPROMに保存するようにしてあります。


Copyright (C) 2015 Hiroki Mori All Rights Reserved.