PSoC発振器(実験中)
Ver.1.002 2009.01.25
更新履歴
2009.01.18 Ver.1.000 新規作成
2009.01.20 Ver.1.001 ソフト公開
2009.01.25 Ver.1.002 周波数設定機能追加
【はじめに】
これは、いきがかりの都合ではじめたという実に不純な動機の代物です。
さて、2つの発振器を持ってきて非線形の素子でミックスするとその2つの発振器の周波数の和と差が生成されるという原理にもとずいています。
いま、簡単にするため、sin(ω1t)、cos(ω2t)の信号を乗算器に入れると、(これを変調といいます。)
sin(ω1t)×cos(ω2t)=(この式の右は高校生以上なら分かるので省略します。私のホームページは、高校生(へたすると中学生でも)の数学で事足りる....)
とはいえ,三角関数の積和の公式は以下のとおり。
となりまして,sin{(ω1+ω2)t}とsin{(ω1-ω2)t}あるいは,cos{(ω1+ω2)t}とcos{(ω1-ω2)t}の2つの成分ができます。(これを上側波帯と下側波帯といいます。)
まあ、sinであれ、cosであれ、特に意味はありません。
2つの正弦波を掛け算すると和と差の2つの周波数の正弦波がでてくるということです。
図1 1KHzと200Hzの正弦波の乗算回路のシミュレーション
図2 乗算器の出力 1KHz-200Hz=800Hz(下側波帯)と1KHz+200Hz=1.200KHZ(上側波帯)のみ
これをLPFでばっさり切ってsin{(ω1-ω2)t}を取り出すものです。この例では800Hz。
しかし、マイコンはデジタルなのでsin(ω1t)、cos(ω2t)は作れてもD/Aするわけですから低い周波数です。
そこで、対称な方形波(Dutyが50%)は、基本波のほかに奇数倍の高調波から成り立っていますので,これもLPFでばっさり高調波を切ってしまえば,基本波だけ残る、つまり、sin(ωt)ができるのです。
方形波なら,高い周波数を作れます。
さて、乗算器は以下の回路で行います。
図3 乗算器
周波数の差ですから、50Hz作るなら1000Hz-950Hz=50Hzでも、1001Hz-951Hz=50Hzという具合で組合せが無数にできます。
また、LPFでばさっと切るといってもそんなにスパッと切れるわけがありません。とすると高調波が混ざってしまいますので,高調波同士の和差成分も出てしまい,一緒に混ざってしまうのです。
たとえば、先の1000Hzと950Hzでは、
1000Hzの高調波 1000,3000,5000,7000,9000,11000,13000,15000・・・・・,
950Hzの高調波 950,2850,4750,6650,8550,10450,・・・・
すると、3000-2850=150,5000-4750=250,7000-6650=350,・・・
と50Hz以外に近い周波数が一杯できてしまいます。
これを避けるために、高調波同士の差が、求める周波数の遥か上になる方形波を組み合わせます。
ここで、注意することは方形波はdutyが50%でないと2次波成分が出てしまうということです。
これではLPFの設計が厄介になりますので,注意します。
そこで、ソフトを作って、安全な組合せをピックアップします。
以下のルーチンでは高調波の干渉が30KHz以下の組合せを排除しています。7次波まで見ています。
図4 高調波の折り返しのチェックルーチン fmは正弦波とするものfnは乗算器のスイッチ信号
図4の場合,fmは35KHzから50KHzに収まるようにしています。
【初期実験】
算出するmingw用のプログラムは、これ。
算出した基本周波数48MHzの分周比m,nと目標周波数ftとfm,fnはこれ。
なお、抜けている周波数は35K-50KHzに組合せがなかったことを示す。
35KHzの高調波は3次が105KHz、50KHzは150KHzとなりますので、これを50KHzのLPFを通せば,すこしは下がります。
ほって置いても方形波の3次波は振幅が1/3なので、-10dBは下がります。
また、fnとの干渉は30KHz以上なので,出力の10KHzのLPFで下がります。
ブロック図を示します。
図5 全体の構成図
LPF(50KHz)がないと、三角波が出てきます。ですから,これをバイパスするスイッチを用意すると三角波と正弦波が出せます。
以下の回路を組み合わせています。
図6 LPF(50KHz)の回路図 V3はPSOCから来る信号 これはバターワースに近いものです。
図7 図6のシミュレーション
図8 乗算器の部分 V1はPSOCのfn LAP1は図6(チェビシェフではありません) V2はPSOCよりfm R7,C2はなし LAP2は図9 R6,C1,R1はなし。
図9 10KHzのLPF
図9−1 図9のシミュレーション結果
この状態で,
図10 1KHzの高調波特性
PSoCの設定は今のところ,3本の16bitカウンタのみです。
図11 使用パーツ
Counter16_1はタイマーで1秒に設定してあります。Counter16_2はfmでPort0_0(24pin)に出力されます。
Counter16_3は、fnでPort0_4(26Pin)に出力されます。
図12 内部結線図
図13 端子図
Port2にLCDをつなぎます。現在、計算で処理していますので,LCDに結果を表示しています。計算時間ははじめは早いのですがどんどん遅くなってゆきます。
図14 CPUの設定
図15 カウンタ1の設定
図16 カウンタ2の設定
図17 カウンタ3の設定
図18 LCD_1の設定
ファイル一式をまとめました。著作権は私の書いたmain.cと設定ファイルについては,特にさしさわりが無ければ,GPL2に準じるものとします。
しかし,その他のライブラリーおよびヘッダファイル等の著作権は、Cypress Microsystems Inc.およびImageCraft creations Inc.、および関係各社にあります。
なお、このプログラムは51Hzから10KHzまでひたすら発生するもので,周波数は設定できません。実験用です。
ソースを書き換えてコンパイルすれば,できます。
beet_osc_2.lzh のダウンロード
図19 LCDの表示
73Hzは目標です。0.03125Hzはずれを表しています。Mは分周比m、Nは分周比nです。
fm=48MHz÷1148=41,811.84669Hz fn=48MHz÷1146=41,884.81675Hzです。
したがって、fn-fm=72.970064Hzですが、ちょっとゴザがあいません???
もし、該当する周波数がないときNOT FOUNDとM,Nに変わって表示されます。
電源は±12Vと5Vです。±12Vから3端子レギュレータ7805,7905で±5Vを作っています。
OPアンプの電源は±12Vに2SC1815GR、2SA1015GRでリップルフィルタを入れています。
また、OPアンプの電源には0.1UFのセラコンと50WV4.7uFのケミコンを入れています。
正確な,回路図はいずれアップします。実験中なのでこれは作ってもあまり意味がないと思います。
【2009.1.25】
図20 周波数設定プッシュスイッチの回路
周波数を設定したら、誤差を消して周波数入力モードになります。
プッシュスイッチを押すと0.5秒間隔でチェックして一づつ増えますので,ずーと押して目的値になるまで押します。
桁上がりはしませんので、一桁づつ設定したら,決定を押してください。すると、SEARCHING...と表示して計算します。
なお、10KHzは、0Hzにしてから1万の位を押してください。
2345Hzから12345Hzなんかになると仕様を超えますのでエラーになり,2345Hzと表示されて10000Hzにはできません。
なお、外部周波数入力となっていますので24MHzの水晶発振器をPort1-4につけてください。
beet_osc_2-1.lzh のダウンロード
また、図8の回路定数を次のように変更しています。(歪率改善のため)
R3 6.8K→ (6.8Kに3.3Kを直列)
R8 2.2K→ (6.8Kに変更)
R9 2.2K→ (6.8Kに変更)
外部水晶をつけていますので,周波数は正確になりました。
また、演算はfloatからdoubleにしました。
歪率計は1KHzのポジションで最小になる周波数は999Hzで0.11%、100Hzポジションでは0.19%、10KHzポジションでは周波数計算に約40秒かかりますが,0.037%です。10KHzでは-5dBレベルが余計に下がります。
まだ、実験中なので,先は長いです。
つづく
いちおう決り文句を書いておきます。
【使用機器】
デジタルマルチメータ METEX MXD-4660A
オシロ テクトロニクス 7603
オーディオアナライザ 日本オーディオ UA-1S
【注意】
本機をコピーされるのであれば,すべて自己責任で行ってください。相談にのれるかどうかわかりませんが掲示板にどうぞ。
また、本機は実験機であり、しかも程度としては、でっち上げレベルであり、チューニングされているわけでもありません。
再現性は保証されません。
また、測定データ等は、あくまで私の場合こうなったということであって、こうなるものと保証するものではありません。