dsPIC33FJ64GP802 (19) --- 周波数シフター (3)

 前回示したオブジェクト・プログラムでサポートしている

  • 外付け 12.288 MHz 水晶振動子を使用した回路
  • 外付け 16 ビット ADC を使用した回路

を示します。 ただし、簡単のため、電源の配線など前回の基本回路図で表されている部分は省略し、追加すべき部分についてのみ記述します。

続きを読む

dsPIC33FJ64GP802 (18) --- 周波数シフター (2)

 dsPIC33FJ64GP802 を使った「Bode frequency shifter」のプログラムの基本的な部分がほぼ機能するようになりました。 「スケルチ」などは、まだ実装していません。
 クロックに関しては

  • 内蔵 FRC オシレータ (7.37 MHz) 使用
  • 外付け 12.288 MHz 水晶振動子使用

の 2 通りと、入力アナログ信号を変換する AD コンバータに関しては

  • 内蔵 12 ビット ADC 使用
  • 外付け 16 ビット ADC 使用

の 2 通りを組み合わせた、合計 4 種類の構成に対して、1 種類のオブジェクトで対応します。
 現在のバージョンでのプログラム・サイズは 1744 ワード (24 ビット・ワード)、データ・サイズは 2554 バイトです。 (2019 年 2 月 16 日追記: ヒルベルト変換器のタップ数を増やしたプログラムに差し替えて、プログラム・サイズは 1770 ワード、データ・サイズは 3194 バイトとなりました。)
 この記事の後半に hex フォーマットのオブジェクトを掲載します。
 「コピー・アンド・ペースト」して hex ファイルを作り、
PICkit 3 などで dsPIC33FJ64GP802 に書き込めば動作させてみることができます。
 ソース・リストについては近日中に公開する予定です。

続きを読む

dsPIC33FJ64GP802 (17) --- 周波数シフター (1)

 2018 年 11 月に開催された「アナログシンセ・ビルダーズ・サミット 2018」で、「公生32+」さんと「yama」さんが、「Bode Frequency Shifter」(以下「周波数シフター」と略記) の構成に基づいた (アナログ) シンセ・モジュールを出品されていました。
 この周波数シフターを dsPIC33FJ64GP802 を使って「ディジタル的」に実現しようと試みていましたが、「性能」や「実用性」はともかく、「周波数シフト」という基本機能については動作することが確認できました。
 内蔵 12 ビット ADC / 内蔵 16 ビット DAC を使用し、入出力の「シグナル・コンディショニング」用の OP アンプを除けば、主要なチップとしては dsPIC33FJ64GP802 ワンチップだけで実現できています。
 外部 16 ビット ADC を接続すれば性能の向上が期待できます。
 外部 ADC 対応、使用メモリ量の低減など、プログラムの整理がついたら公開したいと思っています。
 周波数シフターの構成について、簡略化したブロック・ダイアグラムをディジタル実現の場合について下に示します。

続きを読む

PSoC1 (6) --- スイッチトキャパシタ・フィルタ (6)

 フィルタのユーザモジュールのウィザードでは、フィルタ仕様を入力して設計するほかに、外部のプログラムでコーナー角周波数を 1 [rad/s] として設計したフィルタの s-平面上の「極」の配置を入力して使うこともできます。
 ELPF ユーザモジュールでは、「ノッチ」となる「零点」の入力も必要ですが、こちらは s-平面上の位置ではなく、ノッチ周波数を入力します。
 MATLAB および GNU Octave には、ディジタル / アナログ両方に対応した楕円フィルタ設計関数「ellip( )」があるので、これを試してみました。
 GNU Octave で記述したプログラム (ELPF4.m) を下に示します。

続きを読む

PSoC1 (5) --- スイッチトキャパシタ・フィルタ (5)

 SC ブロックを「フィルタ」として使うために特化した「ユーザモジュール」として、下の 6 種が用意されています。

  • BPF2 (2 次バンドパス・フィルタ)
  • BPF4 (4 次バンドパス・フィルタ)
  • LPF2 (2 次ローパス・フィルタ)
  • LPF4 (4 次ローパス・フィルタ)
  • ELPF2 (2 次楕円ローパス・フィルタ)
  • ELPF4 (4 次楕円ローパス・フィルタ)

 2 次のフィルタは ASC + ASD のペアを 1 組使い、4 次のフィルタは ASC + ASD のペアを 2 組使います。
 SC ブロック間の接続は自動的に行われ、ユーザは入力の接続および出力の接続だけを指定すればすみます。
 キャパシタの値の設定も、「ウィザード」を利用すれば、周波数応答のグラフを見ながら調節することができます。

続きを読む

PSoC1 (4) --- スイッチトキャパシタ・フィルタ (4)

 オーバーサンプリング比 (OSR) = 100 の場合の回路を下に示します。 キャパシタの「値」は、SC ブロックのパラメタとして指定する数値 (整数値) を示しています。
 C1 は 0、あるいは 1 (通過域 ゲイン = 1 の場合) となります。
 CP および CPP は 0、あるいは 16 (通過域 ゲイン = 1 の場合) となります。

続きを読む

PSoC1 (3) --- スイッチトキャパシタ・フィルタ (3)

 「フルスペック版」スイッチトキャパシタ回路を下に再掲します。
 この回路図では、積分器のフィードバック・キャパシタの値を「1 F (ファラド)」とする、正規化された形で表現していますが、実際の FCap の値としては、標準値で約 80 fF (フェムト・ファラド) のキャパシタを単位 (CSC) として、その 16 倍あるいは 32 倍のいずれかを選択する形となっています。
 ACap / BCap / CCap については、CSC の 0 倍 ~ 31 倍の 5 ビット整数値で表せる倍率を選択できるようになっています。

続きを読む