« 2010年1月 | トップページ | 2010年3月 »

2010年2月の2件の記事

2010年2月20日 (土)

FPGAを使ったフォトフレーム制作計画始動

出番を待っているディバイスが目白押し(2/11/10)
 SDカードリニアPCMプレーヤーは量産の仕事(?)が残っているが、当面の大きな課題はほぼクリアした。もともとはひょんなことから作り始めた16ビットDACのオーディオプレーヤーである。思いがけなく良い音がしたものでつい深入りし、10台近くを作るところまで来てしまった(まだ4台作らなければならない)。

 プレーヤーの方はおかげさまで沢山の人から注文を貰っただけでなく、ブログを通しても反響があり、セカンドソースがいくつか動き始めているらしい。これはこれで嬉しい限りなのだが、考えてみたら、このプロジェクトは始めて以来、もう1年以上になる。

 レギュレーターの問題、新しく買ったDAC(μPD6376)のテスト、それとブログには書いていなかったが、別のオペアンプ(NJM2114)がうまく動かない問題など、まだやり残している課題が結構ある。しかし、がた老AVR研には、まだテストしただけで使われていない出番待ちのディバイスがごろごろしている。729fpga

 SDカードプレーヤーばかりに関わっているわけにはいかない。そろそろ次のプロジェクトを決めてやらないと、待っているディバイスが可哀そうである。そういうことで言えば、次はやっぱり大物のFPGA雑誌付録基板を使ったプロジェクトだろう。

 実はこれまでの工作の合間にも、FPGAを何に使うか色々考えていた。動画はまだ難しいので、SDカードから画像ファイル(BMPかARMライブラリを使ってJPEG)を読んで画面に出すフォトフレームにしようと思っていた。中古の液晶パネルも買ってある。

 ところが、フォトフレーム自体が市場に多く出回るようになり、このあいだは秋葉原の安売りショップで、\2000の値札を見て少し気分がなえてしまった。とは言え、他に色々考えても、FPGAの応用でこれ以外の面白そうなアプリケーションがなかなか見当たらない。

 今時(いまどき)の液晶グラフィックモジュールは、フレームバッファーを内蔵し、SPIか何かでビットマップデータを送るだけで表示されてしまうらしいが、これではいつまでたってもFPGAの出番がない。

 負け惜しみかもしれないが、こんどのプロジェクトの目標は、フォトフレームを作るというより、FPGAをマスターするというところに力点を置こうと思う。FPGAの幅広い機能を活用して、フレームバッファーや、映像信号を作り、アナログRGBインターフェースを作ることにする。

 FPGAにここまでこだわるのには理由がある。FPGAをマスターしたあとの遠大な目標があるのだ。パソコンのApple][(Ⅱのことを昔はこう書いた)をFPGAで作ってみたい。大型汎用機のプログラマーをしていたとき、このパソコンと出会った時の感動が忘れられない。余り明かしたくないががた老AVR研の究極の目的だ。それにMSXや、PC6001のエミュレーションは既に実例はあるが、AppleIIのプロジェクトは、海外でも例がなかった。

 しかし、久しぶりに検索してみたら、ここのページを見つけた。おおお、動いている。当研究所にはMac Plusは完動品が残してあるが、AppleⅡ(コンパチだけど)はとっくの前に壊れて処分してしまった。しかし、ソフトはまだ残してある(はずだ)。これは楽しみなことになってきた。

Xa2122705

 まあ、それはともかくFPGAである。雑誌のバックナンバーで、XilinxのXC3ES250の雑誌付録基板を入手したのが、2年前の8月。JTAGインターフェースを自作し、雑誌のソースでLEDを点滅させることまではやったが、それ以来手がついていない。特集があるたびに関係雑誌を買い求め、参考書も揃えたが、この山は恐ろしく高い。そう簡単には手がつかない。

 最初は、ビデオインターフェースという目標が高すぎるので、もう少しやさしいアプリケーションをさまざま考えていた。と言って10進カウンターや、7セグLEDを駆動するだけでは今更と言う感じがする。FPGAの特長は、メモリやFIFOバッファー、FFTなどの内部コアをいちから作らなくてもライブラリが利用でき、開発の生産性が高いと聞いている。これを試してみたい。しかし、中間的な難易度のアプリケーションが見つからない。

 迷った挙句、結局、目標のフォトフレームをいきなり作るというアプローチをとることにした。これまでの勉強の成果か、だいたいの道筋が見えてきて何とか作れそうな気がしてきたからである。 去年買った5インチのTFT液晶ディスプレイは、アナログRGBのインターフェースを持っており、おまけのコンポジット変換基板がついているのでリファレンスに使える。

 ブロックダイアグラムを描いてみる。静止画データはARMプロセッサーを使って、SDカードから読ませる。参考プロジェクトにあるように、FPGAにPicoBlazeのようなコントローラーを入れたほうがよいかもしれない。難しそうなところは、ビットマップデータから色信号をとりだして簡易なDACでアナログ信号にし、これを映像信号にのせるところだろう。このあたりの物理回路の良いお手本が見つからない。ビデオDACをつけるほうが楽かもしれない。

 フレームバッファーは当初、FPGA内のブロックRAMでできると考えていたが、まともな絵にする(256色以上)には足らないし、FIFOでは、常時SDカードアクセスが必要で精神衛生上悪い。やはり外付けRAMが必要なようだ。高速RAMにすれば動画にも使える。

 それにしても、まだ雲をつかむような気分である。ARMの時もそうだったが、雑誌の情報というのは、実際に何か自分で作ろうとすると殆ど役に立たないということを思い知らされる。電子工作の初心者の人が、Hello Worldを出し、LEDを点滅させて、次に何かしようとすると突然わからなくなると嘆いておられるのを時折り見かけるが、これと全く同じ状態である。

 初心者から初級にはすぐ上がれるが、中級に上がる壁は厚い。まあ、愚痴を言っていても仕方がない。あのEAGLEだって最初は全く霧の中だったが、何とかなった。今度もすこしづつ攻めて行くことにしよう。

プレーヤー4台完成。(2/14/10)

 FPGAのことを考えながら、手はしっかりリニアPCMプレーヤー第三版の製造をやっていた。あと2台。工程を少し合理化して2台まとめて同じ工程で作っていく。基板のハンダ付けはやりだすと止まらない。電池フォルダーはこのあいだサーキュラーソーのテストを兼ねて台数分作ってあったので進捗が早い。ケースの穴あけも慣れて来て順調だ。電池フォルダーは本体ケースに接着したストッパーと、接点そのもののバネでしっかり固定される。なかなか上手くいった。

A2062700

 次々に残りの2台が完成して、あとは養生テープをはがすだけとなった。プリント基板だ。誤配線はあり得ない。テストもいらないかとは思ったが、念のため通電テストをした。

 ありゃりゃ、音が聞こえない。LCDにメッセージは出るので動いてはいる。しかし、音がしない。ええー、そんなー。あわてて電源コネクターを外し基板をチェックする。どこもおかしなところはない。CPUもオペアンプもきっちりささっている。ヘッドフォンジャックにコードをつけないで音が出ない、出ないと騒いだこともあるので(本当の話です)、ジャックをもういちど差し直す。

 段々、顔が引きつってきた。これはどうしたことだ。完動している1台目と慎重に見比べて行った。画面は動くので問題なのはまたアナログだ。うはあ、見つけた。DACからオペアンプに行く両チャンネルの抵抗が縦に並ぶところを横にしてハンダ付けしている。

 基板のシルク印刷はこういうときのためにあり、縦型に配置した抵抗の印がついているのにこれを無視して半田付けしてしまった。いやいや慣れというのは恐ろしいものだ。しかもご丁寧なことに2台とも逆さま。むなしい気持ちでサンハヤトの特殊ハンダを取り出して取り外す。これ\5000近くするけれど、くやしいことに確かに有用だ。

 4台が完成した。間もなく注文主のところへ旅立つので記念写真をとる。沢山並ぶと壮観だ。ひそかに部屋で、玩具を集めて一人で悦に入る小学生の気分だ。新版のマニュアルを作り直す。リッピングソフトの解説書も作る。注文主はパソコンに慣れていない人が多い。

Xa2132708

 このリッピングソフトの作者は、ChaNさんの仲間の人でChaNさんの掲示板にも出ている人だ。いくつかリッピングソフトを試したが、このソフト(CD2WAV32)が何といっても一番簡便で性能が良い。気に入っている。他のソフトはCDの文字情報を読み込んでくれたり、ファイル名の修飾など沢山機能がついているが、出だしにポップノイズがついていたり、ノーマライズが下手だったりして結局、このソフトが残った。この場を借りて作者の「もろぼし☆らむ」さんに多大な感謝を表明したい。ありがとうございました。

泥沼のオペアンプ選び(2/18/10)
 リニアPCMプレーヤーは、ブログの写真を見ていただければわかるようCPU(Mega328)とオペアンプのところはソケットにしてある。CPUはISPがついていないので必然だが、オペアンプをソケットにしたのは、将来、別のオペアンプで違う音を楽しめるようにと、あえてソケットにしたところがある。

 今は、NJM4580DDを使っている。最初ブレッドボード版では、LM358を入れ、そのころのブログには「結構良い音がする」と書いたが、4580に換えたところ全く次元の違う音がしたのでそれ以来、ずっと4580にしている。秋月で一ヶ\40という廉価も魅力だ。

 大分前に秋月に寄った時、これより少し値段の高いNJM2114を買ってきた。オペアンプの勉強をしている時、ヘッドフォンアンプのWebサイトにはまって、オペアンプの種類でこんなに音が違うのかと、もうちょっとでオーディオの魔力にとりつかれそうになった頃、確か、4580より良いと褒めていた石でたまたま店頭で目に付いた衝動買いである。これだって一ヶ\50。

Xa2202714

 実は、買ってきたとき早速試したのだが、ボルテージフォロワーでは全く出力が上がらず、NJM2114の固有の問題かと思って放置してあった。LM358と4580DDでは問題なく音が出ていたし、他のことで忙しかったこともある。

 このあいだ、量産のための部品を買い足しに秋月に寄って、少し手が空いたので、あのサイトが最高ランクにつけていたNE5532のセカンドソースのNJM5532 を買ってきた。これだって一ヶ\75。

 試聴してみる。音は出た。Xa2202716あれ、何か歪んでいる。ゲインは4580DDと同程度だが、明らかに音がおかしい。オシロで確かめてみた。うーむ、正弦波の上が盛り上がり、下が細っていて明らかに歪んでいる。三角波は、全波整流の脈流のようにお椀型になる。

 これは一体どういうことだ。ボルテージフォロワーは、ピンコンパチではないのか。ボルテージフォロワーは調整するところは何もない。つまりオペアンプに対応して、いじるXa2202715ところがないからソケットにして差し替えが出来るようにしたのだが、これではソケットにした意味がない。

 Webに助けを求める。しかし、的確な答えはない。DACでお世話になっているここのサイトに、DAC出力のバッファーとしてLM358のボルテージフォロワーの回路図があったので試してみたが、NJM2114も、 NJM5532も変化がな かった。やれやれアナログは難しい。

A2202717

| | コメント (7) | トラックバック (0)

2010年2月 6日 (土)

3端子レギュレーターの復讐

XC6202でビート音が出る(2/1/10)
 関西に用事があって3日ほど家を空けていた。前にも書いたが、完全な電子工作依存症にかかっていて、帰宅すると取るものもとりあえず、PCルームにこもる。ブレッドボードと沢山の電子部品、工具に囲まれると不思議に気分が落ち着いてしまう。困ったものだ。

 SDカードを使ったリニアPCMプレーヤーの第三版(3号機)は、出かける直前に1台目が完成している。早速2台目の製作にかかる。ハンダ付けだけなので作業が早い。ほどなく実装が終了した。ケースを作るのを待ちきれず、1台目のケースを使ってテストする。

A2062701

 SDカードを入れて試聴する。何事もなく音が出た。おやあ、無音時にビートが入る。ブレッドボード上のプレーヤーでたまに発生するクォーン(600hzくらいか)という連続音である。大きい音で聞いているときは気にならないが、音が小さくなるとはっきり聞こえる。

 しかも始動時にSDカードをアクセスするとき、小さな「キュルキュル」というデジタルノイズまで音になって聞こえる。これはまずい。売り物ではないが(差し上げた方は気を遣って部品代を下さった)、これでは、人さまに差し上げるわけにはいかない。

 あわててトラブルシューティングを開始した。1台目と変えたところは、秋月で最近売り出した3.3V用の3端子レギュレーター(XC6202)だけである。原因は、これしか考えられない。これまでのTA48M33Fの半額なので量産用に買い込んだ。

 プレーヤーの消費電流は、50mA程度のはずである。電源が不安定になってオペアンプあたりが発振(微量の)しているのだろうか。しかし、このXC6202 は、150mAまで出力できるはずで、この程度で電源が不安定になるのは理解できない。

 念のため、もういちどプレーヤーの消費電流を測る。なんと前のパラレルLCDよりさらに少ない35mAしか流れていない。ミニLCDは、通常のLCDより消費電流が少なく、インターフェースもI2Cなので電流が流れないのだろう。

 レギュレーターが悪いとは思えないので、原因究明のため、ブレッドボード上のプレーヤーに、XC6202を持ち込んだ。うはあ、この新しい3端子レギュレーターXC6202は、ブレッドボード上でも、はっきりしたビート音が出る。Xa2062697

 そういえば、ブレッドボードではテストしていない。前のレギュレーターTA48M33Fに戻す。ビート音は消えた。TA48M33Fは、ブレッドボードでは、電池容量が少なくなったり、配線の具合でたまに出ることがあるが、この時は完全に消えている。

 XC6202の最大出力電流は、150mAである。余裕のはずである。しかし現実には500mAまで出力できるこれまでのTA48M33Fでは発生せず、XC6202ではビート音が出る。

 原因はともかく実機のレギュレーターを前のものに戻すことにする。DIP部品は、例のサンハヤトの特殊ハンダでも取り外しは難しい。ピンを殆ど失う形でやっとのことで取り外し、元のTA48M33Fに換装する。祈る気持ちで電源を入れる。これでビート音が出たら最悪の事態だ。

 ああ、良かった。完全にビート音は消えた。勿論、SDカードのアクセス音もしない。胸を撫で下ろす。やれやれ。これまでの半額だと言うので喜び勇んで買った3端子レギュレーターXC6202は無駄になったけれど、とりあえずは現状復帰した。

 どうも、がた老AVR研究所は、3端子レギュレーターと相性が悪い。研究所の最初の犠牲者は、入力と出力を間違えられて淡い煙とともに往生したレギュレーターだったし、半田ごての熱で始めて壊した半導体も7805だった。今度も10ヶ近く買った3.3V用のレギュレーターが無駄になりそうな気配である。これまでの復讐をされているのかもしれない。

PWMの分解能(2/3/10)
 レギュレーター騒ぎが一段落して、関西に行く前に書き込んだChaNさんの掲示板を覗いて見て驚いた。私の留守の間に、当研究所のリニアPCMプレーヤーのことがいくつか話題になっていて、なかにはMega328のフューズビットの問い合わせまで入っている。

 その後、ご本人は当ブログに書いたあった設定を見つけられたようだが、今度はこの設定では危ないというコメントが入っている。実はこの問題のHighバイトのビット5(SPIEN  SPI動作許可/不許可)は、AVRSPやAVRISPのようなシリアルライターでフューズビットを書いている限り、ここに1を書いても0を書いても関係ない。

 データシートには、このビットは、シリアルプログラミングでは設定できないと明記してあり(パラレルで書くときしか設定できない)、AVRSPではどちらになっているか表示もされない。

 掲示板にすぐコメントを上げようと思ったが、少し考えて止めた。というのは、問題は既に解決し、日も経っていることもあるが、以前の掲示板に余計なコメントを上げてしまったという反省があったからである。

 当研究所のブログは、どこのサイトから飛んできたかが記録されていて見ることが出来る。先日見るともなく、それを見ていたらChaNさんの掲示板からのアクセスが目立ったので、久しぶりに覗いてみた。そのときのことである。

 ChaNさんが最近公開した8ピンAVRのSDカードプレーヤーの音質に関して、当ブログのリニアPCMのことが引き合いに出されていた。ChaNさんのわずか8ピンのAVRプレーヤーの音質向上について、よせばいいのに議論に加わり「止めた方が良い」みたいなコメントを出してしまったのだ。

 コメントを出した後、すぐ後悔する。趣味でやっている電子工作に、投資対効果も無駄もそもそも有り得ない。自分のやりたいことをやるのが趣味なのだから、こういう価値基準こそ意味がない。

 私の場合は、一種の職業病である。この前も書いたが、目的と手段を混同することを異常に恐れる。常に自分が何をやりたいか(目的)を確認しながら、作業(手段)をしていないと落ち着かない。趣味の電子工作でも、この癖が抜け切れない。

 何かプロジェクトを起こす時は、必ず目的を決める。その目的に向かって何が必要かを考え、その解決策をあれこれ考える。8ピンAVRのプレーヤーを作った人が、「もっと良い音を聞きたい」と悩んでいるなら、ついMP3デコーダーチップを使うことを勧めてしまう。

 ChaNさんのプレーヤーの真髄は、あの8ピンのAVRだけでSDカードを読み、8ビットながらステレオで音を出してしまうところにある。LPFも何もついていないのでそれなりの注意は必要だが配線が極めて簡単なので、初心者にもとっつきやすい。

 最近、公開された版では、何とモノーラルながら16ビットPCMを再生してしまう。配線図を見たら、5~10KΩの抵抗でゲインを落とし、上位バイトの1/256の下位データを追加している。ま、固いことを言えばきりがない。半固定抵抗かなにかにして音を聞きながら、適当に調整すれば、というところだろう。いや参った。この遊び感覚はプロ中のプロにして始めて出来る技である。

 それにしても、いったいPWMの分解能と本来の忠実度とはどういう関係にあるのだろうか。サンプリング周波数が44.1khzだとしてリニアPCMのような16ビット分のPWMをだすためには、22.7μs(44.1khzのサンプリング期間)のあいだに65535段階(16ビット)のパルス幅を制御する必要があり、このとき必要なクロックは3Ghzに達する。そんな馬鹿なことはどこでもしていない。

 8ビットPWMだけでデジタル的に分解能を8ビット以上にあげる方法は、ウェブではここのサイトが実験しているが、16ビットを謳うPWMの実装例は見つけられない。このあたりを分かり易く解説してくれるサイトも見つけることが出来ない。

 そもそもリニアPCMのサンプリング値自体が量子化ノイズを含んでおり、サンプリング周波数近くになってくると、たとえ16ビットで精密な値を得たとしても、元の波形が復元できるわけではない。何をもって分解能とするか、リニアPCMのサンプリング値ではなく、原波形に戻って解析する必要がある。とすると、やはり時間軸ではなく、周波数軸(正弦波の集合)から分解能を考える必要があるようだ。

 やはり、昔勉強した周波数軸からのサンプリング理論を理解しないと、最近のDA変換のしくみは理解できない。直感では無理である。1ビットDACなどの内部はリニアPCMの入力を盛大なオーバーサンプリングで一旦波形を滑らかにしたあとPDMのパルス列にしているはずだ。いやこれも時間軸からの見方だな。勉強することがまた増えてしまった。
 (TDMの実装は、ここのサイトが詳細でわかりやすい)

アナログとデジタルの電源分離で解決したが(2/4/10)
 リニアPCMプレーヤーのビートの問題は、元の3端子レギュレーターTA48M33Fに戻して事なきを得た。しかし、本来の問題が解決したわけではない。出力電流が150mAあるというので採用したXC6202だったが、30mA程度の出力で電源レギュレーションか何かの原因でオペアンプあたりを発振させてしまった。

 しかし、プレーヤー量産に備えて沢山買ってある。こいつだけが悪いわけではない。前のTA48M33Fもブレッドボードで、たまにビートがでることもある。謎である。真の原因を探るため、色々実験してみた。

 まず、オペアンプの発振を疑って、ボルテージフォロワーを普通の1.5倍程度の反転増幅器に変えて見たり、出力にコンデンサー(0.1μF)と抵抗(20オーム)の直列で構成される発振止めのZobelフィルターを入れてみる。全く変化なし。うーむ、発振ではないのか。

 次はレギュレーターだ。レギュレーターの両側のコンデンサーを色々かえて試してみる。データシートの指定では、このXC6202は両側に1μFをつけろとある。これを100μFにする。指定外の方がビート音は少し小さくなった。電解コンデンサーや積層セラミック、タンタルと種類も換えてみる。これは全く変化がない。

Xa2062694

 今度は、電源からのノイズ混入を疑って22μHのインダクターと100μFのコンデンサーでデカップリング回路を作りオペアンプやDACの電源に入れる。これも関係がなかった。

 本来は、デジタルの電源と、アナログの電源は独立させるべきである。ここで以前、FPGA基板を動かす時に買った可変出力の3端子レギュレーターLM317を思い出した。こいつは確か2Vくらいからの定電圧を作ることが出来る。しかも1.5Aまで出力を取り出せる。

 アナログ電源を供給する電源のリファレンスとしては申し分がない。早速、部品箱からとりだしブレッドボードで3.3Vを出す回路を組み上げる。分圧抵抗を2kと、3.7kにする。オペアンプの電源を、この余裕たっぷりのLM317から供給した。これでオペアンプは発振しようがないはずだ。

 ありゃりゃあ、ビート音が消えない。これはどうしたことだ。デジタル部はXC6202である。電源レギュレーションによるオペアンプの発振(微量の)という仮説はもろくも崩れた。それならというので、LM317で全体の電源を供給する。

 驚いたことに、かすかなビートが残るのだ。TA48M33Fでは全く聞き取れなかったビートが明らかにしている。XC6202が容量不足だと言っていたが、何のことはない1.5Aを供給できるレギュレーターでもビートが発生した。

 わけがわからなくなってきた。デジタル部からのノイズが廻っているのだ。これはレギュレーターの容量不足ではない。しかしレギュレーターによって出たり出なかったりする。万策尽きて投げ出そうと思った時、ふと気がついた。DACの電源である。考えてみたら、DACは立派なアナログディバイスである。オペアンプだけでなく、ここも電源を独立させなければ意味がない。

Xa2062695

 DACのBU9480Fだけを独立した電源LM317から供給する。おおお、これだ。ビートはぴたりと止まった。今度は、逆にXC6202でオペアンプとDACの電源を供給する。これも全くビート音はしない。デジタル部のノイズがDACのアナログ基準電源にまわってビートが出ていることに間違いないようだ。

 しかし、何故、XC6202や、LM317で共通に電源供給するとビートが発生し、TA48M33だと共通にしてもビートが消えるのかがわからない。謎が残る。どなたか解明できる方はおられるだろうか。

| | コメント (18) | トラックバック (0)

« 2010年1月 | トップページ | 2010年3月 »