[[FrontPage]] #contents 2013/02/24からのアクセス回数 &counter; 今週も大野さんの本に8章を勉強します。 簡単だと高をくくっていたのですが、アナログブロックとカウンターの接続にはまりました。 ** AM変調に挑戦 [#h8f760dd] 8章のレッスン2には、以下の図((原著図8-10))のブザーの音をAM変調を使って再現する例が紹介されています。 &ref(fig8_10.png); 本文には記載されていませんが、このブザーのsin波の様な外形が50Hzのようです。 最初はよく分からなかったのですが、元の信号に変調信号を反転増幅するとAM変調した波形が、 出力されるのことが以下の図をみて理解できました。 &ref(fig8_11.png); AM変調を意識してなのか、SCブロック(タイプC)の内部構造((原著図7-2 bから引用)) は以下の様になっています。 &ref(fig7_2b.png); *** 串団子の波形 [#r0382da9] AM変調を使った串団子のような波形は、元の信号として50Hzのsin波、変調信号として1kHzを使用します。 オリジナルは、BPF2を2個使ったBPF4を使ってsin波を生成していますが、 ここでは練習としてBPF2を1個だけでsin波を出力してみます。 PSoCのFilter DesignフォルダーのBPF2 Design.xlsを起動して &ref(L8_2_filter.png); ユーザモジュールの「BPF2_V5R5_2 ポール バンドパス フィルタのデータシート.pdf」によるとクロック周波数は、サンプルレートの4倍と記載されているので、フィルター設計で求められた2000Hzの4倍の8000Hzがフィルターの入力クロックの周波数となります。((スイッチト・キャパシタを使ったフィルターでは、信号のスルーレートの4倍のオペアンプスルーレートが必要となるとの記載もある)) 例題のブロック図 &ref(fig8_13.png); でBPF4_1をBPF2_1に変更してプロジェクトを作成します。 *** PSoCの設定 [#ta316fe4] 最初にグローバルセッティングを以下の様にセットします。 &ref(L8_2_global_setting.png); グローバルセッティングについては、桑野さんの [[ユーザモジュールの配置とグローバルリソースの設定>http://www.pastelmagic.com/tips/psoctutor/part04/pstutp04.html]] に説明があって助かりました。 大野さんのプロジェクトの設定では、 - Op-Amp Bias: Hight - A_Buf_Power: Hight となっていましたが、デフォルトのままでも動作しました。しかし、レッスン3のスピーカーへの出力ではこの設定が必要になるのかも知れません。 次にユーザブロックを配置します。 Counter8を3個デジタルブロックを以下の様に配置します。 &ref(L8_2_DBlock.png); 同様にアナログブロックに、PGAを3個、BPF2、SCBlockを以下の様に配置します。 &ref(L8_2_ABlock.png); Counter8のパラメータは、以下の様にします。 &ref(L8_2_Counter8_1.png); &ref(L8_2_Counter8_2.png); &ref(L8_2_Counter8_3.png); PGAのパラメータも以下の様にします。 &ref(L8_2_PGA_1.png); &ref(L8_2_PGA_2.png); &ref(L8_2_PGA_3.png); BPF2は、先のフィルター設計の値を以下の様にセットします。 &ref(L8_2_BPF2_1.png); SCBLOCKは、大野さんの設定の通りとしました。 &ref(L8_2_SCBlock_1.png); アナログの配線では、BPF2_1のクロックをDBB00から取ります。 *** main関数 [#u4f44572] main関数は、以下の様にセットします。 #pre{{ void main(void) { // M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts Counter8_1_Start(); Counter8_2_Start(); Counter8_3_Start(); PGA_1_Start(PGA_1_HIGHPOWER); PGA_2_Start(PGA_2_HIGHPOWER); PGA_3_Start(PGA_3_HIGHPOWER); BPF2_1_Start(BPF2_1_HIGHPOWER); SCBLOCK_1_Start(SCBLOCK_1_HIGHPOWER); AMD_CR0 |= 0x20; // データシート13.2.11参照 } }} 8章のレッスン2の最大のポイントは、SCBLOCKの入力に1kHzのクロックと重ね合わせる部分ですが、 この部分はプログラムで制御しなくてなりません。 データシートの13.2.11にAMD-CR0のアナログ変調制御の設定方法が記載されています。 これからGOE0を選択するには、AMD_CR0の6-4bitを、010にセットします。 それで、AMD_CR0の設定が、 #pre{{ AMD_CR0 |= 0x20; }} となります。 *** 実行結果 [#oc2b4b92] 私のオシロスコープは、2CHしかないので、P0[5]の50HzのSin波とP0[0]の1kHzクロックを表示します。 &ref(L8_2_Signal1.png); 次にP0[5]の50HzのSin波とP0[4]の出力波形を表示します。 &ref(L8_2_Signal2.png); ** はまったところ [#s805b247] *** 教訓その1 [#q2d3942d] デジタル回路のカウンターの接続を間違えて、正しいクロックを供給できていませんでした。 クロックはピンに出力しておけば、テスターで簡単に確認できるので次回からはチェックしながら進めたいと思います。 P0[1]の50HzとP0[0]の1kHzのクロックを確認したところ。 &ref(L8_2_P0_1.png); &ref(L8_2_P0_0.png); *** 教訓その2 [#nf835fb7] PGAのパラメータ設定で「未設定」項目があったのに気づかず、アナログ回路から出力がでなくて悩みました。 *** 教訓その3 [#p5285848] ユーザブロックのStartコマンドをmain関数に入れ忘れてどうして、動かないのか悩みました。 ** コメント [#v12757ef] #vote(おもしろかった[5],そうでもない[0],わかりずらい[0]) #vote(おもしろかった[6],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。 #comment_kcaptcha