パララックスPropellerの使い方(その3):各コグのカウンタの利用法、PWMやDA・AD変換や周波数カウンティングなど
24-March-'08 05:11
Age: 2 yrs



Category: PSoC




ParallaxのPropellerが持つ8個のコグにはカウンタモジュールが組み込まれています(右上の画像)。色々なデジタル信号処理はこのカウンタを使ってできるようになっています。実際に、このモジュールを利用することによって以下のような動作を実現しています(パララックスのサイトにあるアプリケーションノートAN001-PropellerCountersv1.1.zip):

・波形生成(square, saw-tooth, sinusoid, audio)
・PWM出力(motor control, LED fading)
・DA変換
・AD変換
・周波数カウント
・イベントカウント(measuring pulse widths)
・RFキャリア生成(up to 128MHz)
・その他(many other applications)

各コグに2つのカウンタ(AとB)が組み込まれています。右下の画像はカウンタのブロック図です。各カウンタをコントロールするのは3つのレジスタです:CTRx; FRQx; PHSx。

カウンタはシステムクロックやイベント毎にレジスタFRQxの値をレジスタPHSxに加える動作をします。PHSxはOUTPUT-MUX(アウトプット・マルチプレクサ)を介して指定したピンに繋がりPHSxの状態またはキャリーオーバービットがピンに出力されます。ので、一定時間後にPHSxの値を読むことによってラップタイムや信号入力の回数をカウントしたり出来ますし、繋がっているピンの出力によりPWMや波形生成も実現されます。

32ビットのレジスタCTRAとCTRBは以下の様な構成になっています:

 

31

30..26

25..23

22..15

14..9

8..6

5..0

-

CTRMODE

PLLDIV

-

BPIN

-

APIN

このCTRxのビット[26..30]のCTRMODEに入れる数値によって: 1)PLL; 2)NCO/PWM; 3)DUTY; 4)POS検出; 5)NEG検出; 6)LOGIC; の6種類(全部で32モード)の動作が選択されます。NCO/PWMは波形生成やPWM、PLLはPLLDIVを使ったNCOパルス生成、DUTYはDA変換や音声波形合成、POS・NEG検出はパルス検出やAD変換、等に利用されます(詳しくはアプリケーションノートAN001のマニュアルを参照)。前回の周波数カウンタの例の設定は以下の通りでした:

CTRA := (%01010 << 26) | (%001 << 23) | (0 << 9) | (Pin)

これは、CTRMODE = %01010、PLLDIV = %001、BPIN = 0、APIN = 5、に設定していることになります。CTRMODEの数値によってカウンタの動作モードが”POSエッジ検出”に指定されます。

Spin言語は動作が遅いので、音声波形合成など時間的にタイトなアプリはアセンブラでプログラムする必要があるようです。ので、結局、初心者はオブジェクトライブラリーを利用することになります。教育キット用にダウンロードできるサンプルが一番参考になりそうです(PE-Kit-Counters-Lab-v0.81.zip;現在、リンク先不明;下記補足)。マニュアルはダウンロードキットの中のPE-Kit-Counters-Lab-v0.81.pdf。一読してみたらカウンタを使った応用とオブジェクトの宝庫でした。

補足:(2008/03/30)教育用カウンタのサンプルと説明のリンクフォーラム内にありました。








<- Back to: メイン ・セクション

サイト内のページ検索

Searchword:

Search in:


(上のページ検索は通常ページのみでブログ風ニュースの内容は検索できません)