PICマイコンによるBFOの実験 (途上)
PICマイコンで実験してみたかったことの一つに、発振器として使う、というのが有ります。
PICマイコンはクロック数十MHzで動いていますし、PWM(Pulse Width Modulation)に使えるカウンタ回路を持っている物が多いです。これなら数百KHz〜数MHzの発振は十分できるだろうし、それなら中波帯、あわよくば短波帯の何かに使えるだろう、という思惑です。
ということで、まずはPWMを動作させて発振波形を取り出してみました。何かターゲットが無いと面白くないので、短波ラジオ(スーパヘテロダイン)用の外付けBFO(Beat Frequency Ocillator)になるかどうか試すことにしました。BFOでしたら殆ど発振器そのままで使えるからです。
(画像クリックで大きな図が開きます。)
回路としては、PIC16F88のPWM出力にカットオフ周波数700KHzのLPF(Low Pass Filter)を入れただけです。
WEB等で調べたところBFOとして使用するためには、スーパヘテロダインの中間周波数455KHzよりも1.5KHz高い456.5KHzで発振させれば良いということです。
16F88のPWM用分周回路と、内部クロック微調整機能でその周波数の近くまでいけると思っていたのですが。。。。実際にやってみたところ、内部クロックを使った8MHz動作ではどうもうまくいきませんでした。
これは主にOSCTUNEレジスタによる内部クロック微調整の分解能が0.4%単位ということによります。(0.4%は455KHz近辺ですと1.8KHz単位となります。今回の目的にはちょっとでかいです。)
他にPWMの最小分解能がクロックの4倍というのも制約です。
可能な限り近くまで合わせたところが、以下の写真です。
← 457.4KHzで目標の456.5と1KHz近い差が有ります。
このときのPICマイコンのプログラムは以下の通りです。(短いので文中に記載します。)
// PWM for BFO test
// 2010.05.07
// By T.K
#include <htc.h>
void main(){
ANSEL = 0; // No analog input is used.
TRISB = 0; // Port B all output
OSCCON = 0b01110000; // Clock Base = 8MHz
OSCTUNE = 0b00101001; // Clock is near7.304 MHz (456.5KHz * 16)
CCP1CON = 0b00001111; // CCP module is PWM mode
PR2 = 3; // Clock/16 = Near 456.5KHz
CCPR1L = 2; // duty 50%
TMR2 = 0; // TMR2 clear
T2CON = 0b00000100; // Timer2 = on , pre 1/1 post 1/1
while (1){}
}
波形は以下の通り。左がPIC出力、右がフィルタ出力です。
フィルタ出力が正弦波から遠いですねえ。。。やっぱりCRフィルタくらいじゃだめですか?
とはいえ、一応は動いたので、短波ラジオに繋いでみました。
← 正確には繋いだ、ではなく、出力の線でラジオを巻いています。
これで7MHzのアマ無線のSSBを聞いてみて。。。全然明瞭にならないです。
周波数の誤差のせいと思いますが、こういうものだとこれ以上のアナログ的な微調整ができないことがつらいです。
今回はクロック8MHzで動かしてますが、PICマイコンを40MHzの物に変えれば誤差も1/5になるはずですので、次はそれを試したいと思います。
今回は以上
補足: 明日から2,3日都内の方に出かけますので、次のアップは月曜以降になります。
にほんブログ村 ←記事が面白かったらクリックしてやってください。
コメント