楽天市場
[無料でホームページを作成] [通報・削除依頼]

USB_NCO

前回のプログラムを改変し、PIC12F1501を用いてUSBからNCOを操作するプログラムを作成しました。


考えかた。
①発振周波数をできるだけ広範囲に取りたいので以下の工夫をしました。
1.PIC12F1501のクロックに規格外の30MHzを使用。
2.CLCでリングオシレーターを構成して、30MHzより更に高い周波数を作成。
3.外部クロック入力にも対応させる。
②周波数カウンタの機能を残しクロックソースの周波数を計測できるようにする。
③クロックソースが定まるとPICはクロックソースの周波数をホストに転送。
④ホストはクロックソースの周波数と入力された出力周波数(目標値)からNCOの加算値を算出し、設定値をPICに送出する。
⑤転送するデータは4バイト

<回路図>
img_20150407-005641.png


<配線図>
img_20150407-005716.jpg
CB0:発振出力
CB1:外部クロック入力
VIO:IO用電源+5V

<ピンアサイン>
PORTA,0 計測信号入力
PORTA,1 計測信号のモニター出力
PORTA,2 D+
PORTA,3 接続なし
PORTA,4 D-
PORTA,5 30MHzクロック


<内部接続図>

img_20150407-005812.png


<ホストプログラム>
左側でクロックソースを選択すると下のテキストボックスにソースの周波数がモニタされます。
次に右側のテキストボックスで出力したい周波数を入力し、下のチェックボックスをクリックすると出力されます。
img_20150407-005947.jpg


<作動に関して>
①1回のパルス計測時間を0.5msとし、パルス計測を20回行って10ms間の入力パルス数を計測するように定めました。
ホストはこの値を100倍してクロックソースの周波数とします。
②HIDの問い合わせ間隔は50msと定めました。

<リングオシレータに関して>
PIC12F1501のCLCではPIC10F322の時のように、CLC一段でリングオシレーターを構成することが出来ませんでした。
※15XXのCLC一段でリングオシレーターを構成することが出来ないことはこちらのページにも記載されています。
(http://www5b.biglobe.ne.jp/~YASUSI/gallery/electronics/pic_clc/pic_clc.htm)
CLC2とCLC1を直列に配置し、CLC1の出力をCLC2に戻すことで発振回路が構成できました。
CLC2を反転回路、CLC1を非反転回路として反転の回数を奇数にしています。
発振周波数は50MHz程度でPIC10F322で作成するリングオシレーターに比べ低い周波数になりました。


ダウンロードはこちらから

https://drive.google.com/file/d/1fEug84nX9Vy0-1DN0Ut7OmHtTlEKY6Am/view?usp=sharing