2015年3月29日日曜日

タブレットのファンクションジェネレータ出力用のLPFの実験

ファンクションジェネレータもそうだが
タブレットにつなげるヘッドホン・アンプにもLPFフィルターをかまさないと
いくら他で頑張ってもダメな気がするのでこの際実験することにした

XperiaとかiPhoneみたいな高級なスマホならまた違うのかもしれないが
音声出力系がクソなスマホを救済するヘッドホンアンプというのもあってもいいような気がする

どういうフィルターを設計するか

Androidのkeuwl Function Genというアプリで10kHzのサイン波を出力してオシロで測定


大体で勘定するとグリッド7つ分で波が9個、1.0us/divなので
1 / (1.0us * 7 / 9) = 1.28MHz
左下の数値も(1)F:1.282MHzとなっている

※アプリの問題かもしれないと思ってFuncGenというアプリで計測したがほとんど同じだった
タブレットの音声出力の問題だと思う

FFT (出力波形は440Hzのサイン波)


625KHz/divなので625kHz~1.25MHzあたりにピークが来ている

タブレットの出力のサンプリングレートは44.1kHz(仕様には載ってないのでたぶん)なので
最大出力周波数はだいたい22kHz

なので通過域が22kHz、遮断域を1MHzぐらいにすればよさそうだ

カットオフ周波数を余裕をみて100kHzとしてこの周波数で-3dB
1MHzは100kHzの10倍なので1次あたり-20dB/decとして

1次 -23dB
2次 -43dB
3次 -63dB
4次 -83dB

になるのかな?

LTSpiceでシミュレーション

LCR LPFなら受動部品3個で2次LPFが作れるのでLTSpiceでシミュレーションしてみた

手持ちのインダクタが10uHのものしかないので、
OKAWA Electric Designさんのツール(http://sim.okawa-denshi.jp/RLClowkeisan.htm)で
ζ減衰比=1で計算して、手持ちのCRでできるだけ近い値のCRでシミュレーションした

LCR 2次LPF



カーソルの値
Freq: 997.0295kHz
Mag: -32.165102dB
LCR 4次LPF

やりなおしのための実用アナログ回路設計」を読みながらバターワース特性を試してみようかと思ったがどのみち部品がないので(^q^;単純に2次LPFの2段重ねにした



カーソルの値
Freq:1.0040407MHz
Mag: -64.367746dB
カーブが緩やかなせいか減衰率が全然違うが気にしない(^q^;

カーソルを10MHzまでずらすと
Freq: 10MHz
Mag: -143.85844dB
となったので1MHzと10MHzの差は-79.490694dB

このあたりまでくると-80dB/decになっているようだ

ブレッドボードで実験


22kHzのサイン波で2次LCR LPF


赤色がタブレットからの出力波形、黄色がLPFを通した波形

十分きれいになっているようだ

22kHzのサイン波で4次LCR LPF


これもきれいだが2次LPFと大して差がない気がする

オシロで可聴帯域を見るためのFGなのでこの際2次LPFでいいか(^q^;

増幅回路をつなぐ

タブレットの出力はRMSで数100mVがMaxなので増幅回路もつないでみた



いろいろ条件を変えて実験したが
結局、入力をPOTの分圧で減衰、ボルテージフォロワーでバッファリングして
10kΩ:47kΩ(5.7倍)の非反転増幅回路で増幅して出力するのがよさそうだ

仮想GNDは単純にRで分圧しただけのものだ



↑実験途中の無駄な部品が入ってます(^q^;

WaveSpectraでFFT(オーディオインターフェイスの入力:Guitar:入力インピーダンス1MΩ)


WaveSpectraでFFT(オーディオインターフェイスの入力:MIC/LINE:入力インピーダンス15kΩ


2次高調波歪は結構出ているが
THD:0.01061%
THD+N: 0.01862%
1kHzサイン波だと結構いい線いってる気がします(^q^/

負荷にRを接続すると330Ωまではちゃんと動いてくれた


負荷220Ωにするとアウト(^q^;


電源はへたり気味の9V電池で330Ωの負荷で
VCC 7.30V
VGND 3.82V (VCCから見ると3.48V)
だった

VGNDはかなり中点からずれているが(+170mV)オシロの計測値では波形のずれは15.76mVだ

Cにもうちょっと小さいサイズの部品を使えばこのサイズのケースにも収められるかな?


2015年3月26日木曜日

Resonant VCVS LowPass FilterのSweep音出し

Resonant VCVS LPFの周波数Sweepの音出し実験をしてみた

回路図

※C1、C2は0.01uFになってますが実際は0.001uFを使った




https://www.youtube.com/watch?v=uiJii6WqkL4

回路図のR1,R2のところを50kΩの2連POTにして0Ω~50kΩ
R3を10kΩ、15kΩ、22kΩに差し替えてスイープしてみた

入力波形は400Hzのノコギリ波でWaveGeneで生成した

10kΩ:15kΩにするとレゾナントがかかるので「うにょ~ん」というシンセっぽい音になった(^q^/

音がぶつぶつ言ってるが、原因はまだ不明だがオーディオインターフェイスの不良かもしれない

→TASCAM US-144MkIIは使ってるうちにノイズがのる時がある

スイープの折り返し地点(2連POTの0Ωか50kΩ地点)で波形がおかしくなるが
今日は頭が回らないのでまたおいおい調べる予定

2in/2outのオーディオインターフェイスの問題点

オーディオインターフェイスから波形を出力するとフィルターを通して戻した音を実際に聞いて確認ができない

オーディオインターフェイスの出力はWaveGeneで生成した波形なので
フィルターから戻ってきた波形をモニタリングできない(録音はできる)

2in/2outだがMono 1chずつという振り分けはできないみたいだ

自作ミキサーをうまく使って分岐させれば同時モニタリングできそうだが

やっぱタブレットでも波形生成できるように環境を整えたほうがいいかな・・・

う~ん(^q^;

WaveSpectra + WaveGeneで実際に周波数特性を測定

fc = 1 / (2 * π * √(C1 * C2 * R1 * R2)) = だいたい15,924Hz

ループバック


R3:10kΩ

若干Qが上昇

R3:16.8kΩ (10kΩ+6.8kΩ直列)

発振寸前!

R3:20kΩ (10kΩ+10kΩ直列)


発振してしもうた(^q^/

fc(15.934kHz)あたりで発振しているようだ

おいおい電圧制御/デジタル制御できるようにするつもりだが
まずは手動制御の方向で使いやすいように組んでみようかと思います

<追記>
意味もなく増幅率はR3/R1だと思ってましたが、「回路の素101 (ライブラリ・シリーズ)」 を眺めてたら1+R3/R1らしいです。
元が非反転増幅回路の形だから確かにそうかも(^q^;

R1=10kΩ、R3=20kΩだと増幅率が3になるので
doepferのサイトに載ってたように(http://dad8893.blogspot.jp/2015/02/resonant-lowpass-filter-vcvs.html)発振するのは理屈にかなってるのか・・・
</追記>

2015年3月24日火曜日

タブレットのファンクションジェネレータの問題点

余力があったのでVCVSフィルターの特性をとって見ようと思ったが
結構ひどい問題が発覚

AndoroidアプリのFunction Genで1kHzのサイン波を生成
さっき作ったケーブルから出力してオシロで計測


WaveSpectraで見たときはわからなかったがオシロで見ると高周波ノイズが乗って
線がぶっとくなってしまった

最初意味がわからなかったが

オーディオインターフェイス(TASCAM US-144MKII 96kHz/24bit)からWaveGeneで
1kHzのサイン波を出力してオシロで計測


比較してみると明らかに差がある。

タブレット(ASUS ME173X)のヘッドホン出力にまともなLPFが入っていない気がする

なんで単体のファンクションジェネレータが欲しいかというと

オシロで波形を見ようとすると、オシロとオーディオインターフェイスと自作の可変安定化電源を
机の上に並べてしまうとほとんど作業スペースが取れないのであった(^q^;;;

オーディオインターフェイスを机の上に出さないで使えればいいので
勢いにまかせて専用ケーブルを作った


手持ちにあったステレオ・フォンプラグと4芯のシールドケーブル(1.5mぐらい)とICクリップで作ってやった(^q^/

TASCAM US-144MKIIは96kHz/24bitまで出せるので48,000Hz程度まで出力できるし
解像度は並のデジタル・ファンクションジェネレータをはるかに上回る

→192kHzのオーディオインターフェイスを使えば96kHzまで出力できる

WaveGeneで矩形波生成して2次VCVSフィルターを通して波形を見てみた

LTSpiceのシミュレーション


4kHzの矩形波の過渡解析



WaveGeneで出力(4kHz)



黄色が元波形、赤色がフィルターの出力

WaveGeneで出力(8kHz)


元波形にリップルが出てるが、もうめんどくさいしこれでいいや(^q^;

気が向いたらやりたいこと

タブレットのファンクションジェネレータの出力にLPFをかける

20kHzまでで制限できればタブレットのファンクションジェネレータも十分実用になると思う

特性を気にすると高次フィルターになると思うが、フィルターの設計のお勉強もかねて

タブレットの出力電圧が低いので(数100mV程度しか出ない)可変増幅回路と組み合わせて
余ってるケースに入れられるサイズに収められるかどうか

アナログのファンクションジェネレーターを作る

アナログの発振回路のお勉強もかねて

割り切れば出力波形の周波数や電圧はオシロで見ればいいので
デジタル回路のノイズと完全に隔離された可聴帯域のサイン波を出力するだけの
ファンクションジェネレーターだ

アナログ回路なら多少ズブズブと深みにはまっていってもいいかと思っている

ファンクションジェネレーターの検証 続き

もうちょっと考えてみた

AVRとDAC

SPIの12bitDACを使って48,000Hzのサンプリングレートで波形を生成しようと思うと
DACとの通信は1サンプル送るのに16bitかかるので最低でも
48kHz * 16 = 768kHz
で処理しなければならない

電源電圧と水晶を節約して8MHz駆動させると10clock程度、
16MHz駆動でも20Clock程度しかとれないので、表示系や入力系のことを考えるとかなりカツカツだ

<追記>↑あ、いやそんなことないか</追記>

しかもデジタル出力のガタガタをとるために出力にフィルターをまじめに設計して入れないといけない

出力波形をGNDを中心に正負に振れるようにしようとすると仮想GNDで両電源にする必要もありそうだ

→純粋な単電源でGNDを波形の中心に持ってくる方法ってあるんだろうか?

AVRのリソースとケースのサイズから考えてなかなか難しい気がしてきた

今までの経験から考えて設計途中でどっか破たんしそう(^q^;

XR-2206

DATASHEETを読んでみたが、サイン波の歪率が0.5%と結構でかい

しかも動作電圧が+10V~

選択している周波数と波形の表示用に結局マイコンを使う必要がある

昔のアナログ機器みたいにダイヤルで数値を読み取れるようにしようとすると
部品代にいくらかかるかわからない(^q^;

秋月のキット

秋月で「ファンクションジェネレーター miniDDS」(http://akizukidenshi.com/catalog/g/gM-06897/
というのが売っている。完成品で4,700円

回路図を見てみるとATMega48を2個使って(波形生成用と入出力等その他の処理用)
波形出力は8bitのデジタル出力とRを組み合わせて8bit DACを構成しているようだ(たぶん)

出力段でLC LPF(3次かな?)を通して出力している

<追記:2015.03.26>
Elliptic Bandstopという回路らしいです(http://cp.literature.agilent.com/litweb/pdf/genesys200801/syn/filter_types/ellipticbandstop.htm

LTSpiceのシミュレーション



</追記>

機能と部品代を考えるとめちゃくちゃ安いが、
スペック的にはPCのオーディオインターフェイス+WeveGeneや
タブレットとファンクションジェネレータのアプリを使ったほうが上だと思う

わざわざ買うほどのものかという気がする

もうちょっと奮発してAnalog Discovery(http://akizukidenshi.com/catalog/g/gM-07738/)を買ったほうがあとくされなさそうだ(^q^;

というわけでタブレットのファンクションジェネレータを使いやすくするために
今回はステレオミニ・プラグとICクリップで専用のケーブルを作ることでお茶を濁すことにした(^q^;



使ってるアプリはFunction Gen(Keuwl)

WeveSpectraで出力波形をそのままとってみた


THD 0.02562%
THD+N 0.03043%

なぜだかたまに音が出なくなる時があって困るが、気軽に使うにはこれで十分かな

2015年3月22日日曜日

ファンクションジェネレーターの検証

100kHzのサイン波をDDSで生成するには200kHzで矩形波を作って
フィルターでなまらせればいいのかな



基板のサイズの制約上DIPタイプのOPAMPは乗せられるかどうかぎりぎりだ

アクティブ・フィルターとバッファを2回路構成のOPAMP1個で済ませればなんとかいけるか

ATMega328Pは水晶を外付けすれば20MHzまでクロック数を上げられるが
手持ちの水晶が16MHzしかないので16MHz駆動で

DAC用のSPIのクロックは適当に分周して

表示用のLCDはやっぱサイズの小さいI2C LCDで

ということでATMega328pは5V駆動(3.3Vだとクロック数を上げられない)
LCDは3.3V駆動ということで

I2Cの5V<->3.3Vのレベルシフトは秋月の変換モジュールを使って

見た目めっちゃ配線がきつそうだが
現物があるので試行錯誤しながら進めてみる

ファンクションジェネレーターの構想

XR-2206のDATASHEETを見てみたが
これはいじってみないとどういう動きをするかわからない
→もう少し温存する方向で

なのでAVR+DACでやってみることにする

基本的にはぴゅんぴゅんマシンと一緒だし(^q^;

ぱっと思いついた要件をまとめると
  1. できるだけコンパクトにしたい。(自作の可変安定化電源はでかすぎて使うのに苦労している)
  2. 常時使うものでもないのでAC電源じゃなくてモバイル機器みたく使いたい。
  3. 出力波形はサイン波と矩形波。ノコギリ波もあると望ましい。
  4. 周波数は10Hz~100kHzぐらい。周波数は視認できること
ということで手持ちの部品で考えてみた(冷蔵庫の掃除みたいなものだ)

一番小さい透明なアクリルのケース



周波数設定用のPOTが2個あるのは、大まかな設定用と細かな設定用だ

POT1個じゃ正確に周波数が決められそうにないので

だがしかし、このサイズのケースではスペース的に収めるのが厳しそうだ

何の気なしに買ってしまった基板とセットのケース

これぐらいのサイズがあればいけそうだが

基板の固定位置とアルミの天板の距離が短いので
天板にPOTやスイッチを取り付けると基板上の部品と干渉してしまう

改良案

本体側は高さの余裕があるので、外から触る部品を本体側に回してみた


アルミの天板は使わないでむき出しか
干渉しなければ透明なアクリル板とかを加工してふたをする

基板から本体側に配線を回すために基板のふちをカットするとか加工しないといけないか

電源のリニアレギュレーターと電解コンデンサーはおいてみたが
AVRのクロック用の水晶とCR類がいるのでが基板に無事収まるかどうか

DACの出力を受けるバッファ・アンプも必要かどうか

実用しようと思うと考えるところが多くて困っちゃいます(^q^/

2015年3月21日土曜日

Resonant VCVS LowPass Filterの実験

こないだブレッドボードで作りかけた増幅ありのVCVSフィルターの波形をとってみた



忘れててただのVCVSフィルターだと思ってなんで発振するんだばかやろ!
と思ったが

2.2倍設定でも発振するらしい(^q^;

増幅率も4倍程度になっている。

同じ条件でLTSpiceでシミュレーションしてみた

OPAMP:4580 増幅用のR: 10kΩ:22kΩ




シミュレーションだと出力が頭打ちになっているが発振していない

理屈では割り切れない世界だ(^q^;

サイン波を入力した出力音声をキャプってyoutubeにあげた


http://youtu.be/kizoRPu-g0c

ただ「ブー」っと言ってるだけだが、元のサイン波を発振すれすれまで歪ませている

音源はタブレットのアプリやWaveGeneを使ったが
ちゃんと動かなくてイライラした

いらないところに気を取られてしまうので
何かスタンドアロンのファンクションジェネレータを作ったほうがよさそうな気がしてきた

XR2206という専用のICをずいぶん昔に買って放置してるんだが
AVR+外付けDACとどっちが楽か考え中

POTとLCDが余ってるので

う~ん

ぴゅんぴゅん3号 ファームウェアのプログラミング

やっとやる気が出たのでファームウェアのプログラミングをした

音出ししてyoutubeにあげました


http://youtu.be/r40BGVstZGs

パラメーターを適当にいじってそれっぽい音を作った

Name FREQ LFO DEPT Wave Shape LFO Shape
Pat Car 504 35 128 SQR SQR
Ame Pat 674 38 124 SQR SW1
Packman 504 35 128 TRI TRI
Invader 612 102 173 SW1 SW1
Psy Trance 157 25 255 SIN SW1
Robo Talk 手動 77 89 SQR SQR

機能的にはぴゅんぴゅん2号とほとんど同じなので目新しさはないですが、
32bit処理しているので音質は向上していると思います

MPUのリソースに余裕があるのでもう少し機能追加するかも

パラメーターを保存できるようにするとか

内蔵のflashメモリーに記録できればいいんだがだめならSDカードかな

3次VCVSローパスフィルタを使ったシールドを完成させれば3号プロジェクトはとりあえず完了とする予定

ファームウェアのPSoC ProjectはGitHubで公開しています

https://github.com/ryood/PSoC-PyunPyun
のPSoC_PyunPyun.cydsn/PSoC_PyunPyun-000.cywrk

いずれ整理して上げなおします

2015年3月18日水曜日

Rの分圧で5V->3.3Vレベルシフト(片方向)続き

ユニバーサル基板で組んでみた



画像の通りLCDは表示された

SPIのSCKの波形


赤色が3.3V側、黄色が5V側

ブレッドボードで組んだ時と同じくLoが0Vまで落ちていない

カーソルを使ってMin、Maxを測ると960mV~3.28Vだった

LCDのコントローラー(pcd8544)のDATASHEETを見るとLoの上限は0.3VDDとなっているので
3.3V * 0.3 = 990mV
なのでかなりギリギリだ

余裕がないので誤動作しても文句は言えない

抵抗値を変えてみる

あんまり電流を流さないように100kΩと220kΩで分圧する回路をブレッドボードで作成

100kΩ:220kΩで分圧したSCKの波形


悪化してしまった(^q^;

LCDも表示されない

逆に電流を流すようにして1kΩと2kΩで分圧

1kΩ:2kΩで分圧したSCKの波形


カーソルで測ると0V~3.2Vできれいな矩形波で変換できた(^q^/

理論的なことはわからないけど多少電流を流したほうがうまくいくようだ

Arduinoからの出力電流は
5V / (1kΩ + 2kΩ) = だいたい1.67mA
仕様では推奨で20mAまでなので収まっている
トータルで200mAまでなので、1.67mA * 4 = 6.68mAでこちらも基本的にOK

またはんだ付けしたくなったら1kΩ:2kΩバージョンもユニバーサル基板で組もうと思います

<追記:2015.03.19>
10kΩ:20kΩバージョンはブレッドボードで組んでた時は一晩ほっといたら表示が崩れたが
1kΩ:2kΩバージョンはブレッドボードでも一晩たっても平気だった

ということはこれぐらいのR値が適正なのかもしれない

変換後の波形がなまるということは出力先のLCDの入力の容量成分が影響しているような気がします

他にやりたいことがあるのでこの件は保留