PSoC5Lp CY8Ckit-059の観察
Ver.1.009a 2023. 2.25
更新履歴
2023. 1.21 Ver.1.001 DDSもどき
2023. 1.22 Ver.1.002 DDSを考える
2023. 1.23 Ver.1.003 DDSを考える-2
2023. 1.24 Ver.1.004 DDSを考える-3
2023. 1.25 Ver.1.005 DDSもどき-2
2023. 2. 7 Ver.1.006 DDSもどき-3
2023. 2. 8 Ver.1.007 WaveForm DAC
2023. 2.12 Ver.1.008 DSPとデジタルフィルタ
2023. 2.25 Ver.1.009 DSPとデジタルフィルタに文書(和文)、Analog 、ADC
ESP32にDDSもどきをしました。PSoC5Lpでは、どのくらい速いか比べてみました。デフォルトの設定です。
CPUクロックは、24MHzです。
図1回路図
図2 main.c
図3 math.hを#includeすると、linkerにこの設定が必要です。
三角関数など数学関数を使うときは、gccの決まりで、これが必要です。
図4黄色 基本波 15.5mS 青5倍波 3.39mS
ちなみに、ESP32では、
図5 青 基本波 40.74mS 黄色 5倍波 8.23mS
PSoC5LpのデフォルトのCPUクロックは、24MHzです。 設定を変えると、もっとあげられます。
一方、ESP32は、CPUが240MHzでありながら、3倍位遅い。
ここでは、sinのテーブルを間引いたり、繰り返したりしているが、そういうROMを使ったDDSもある。
しかし、DDSは、加算器から成り立っている。多分、これは、アナログコンピュータの微分器、積分器を使って、発振器を作るのがアイデアの元になっ ているの だろう。
sin(x)を積分すると-cos(x)になり、更に、積分すると-sin(x)になる。更に積分すれば、cos(x)になり、更に積分すれば、 sin(x)に戻る。つまり、加算器をループすればよい。
積分は、端的いえば、加算器だから、加算器を冲づつずらして、4回使えば、不思議なことに、正弦波ができることになる。
実は、CY8C29466では、float sine_table[1024]は、4096バイトになり、メモリオーバーだし、しかも、バンク切り 替えの RAMであるから、でき なかった。
そこで、なんとかならないかと考えて、積分方式を思いついた。
もちろん、微分器を使えば、sin(x)→ cos(x→) -sin(x)→ -cos(x)→ sin(x)となる。微分は差分であり、引き算になるのでソフト的にはかんたんであるが、デジタル的には鬱陶しい。
CY8C29466では、デジタル的に、CPUから独立した2つのそれぞれ独立した32bitアキュムレータがある。積分器として大変都合がいい。
絶対値を取れば、積分器では、sin(x)→ |-cos(x)|=cos(x)→ sin(x)となるし、微分器を使えば、sin(x)→ cos(x)→ |-sin(x)|=sin(x)となる。
そうか、ex を積分しても、微分してもexなんだな。ループができる。まずい。これは、だめだ。
アプリケーションノートAN2109にPSoC1で、DDSを作るのがあります。
DDSもどきをもう少し周波数アップしてみましょう。
図6 floatをintに変えて、整数化し、DACを1つにしました。CPUクロックは66MHzです。基本波の20倍です。
図7 X2△1 7.4387uSより、134.432KHz
フィルタをつければ、きれいな正弦波になるだろう。
図8 CPUクロック 66MHz
図9CPUクロック 72MHz
図10 X2△1 6.9482uS 143.922KHz
フィルタをつければ、きれいな正弦波になるだろう。
図12 基本波の32倍化
図13 X2△1 4.2657uS 234.428KHz
フィルタをつければ、きれいな正弦波になるだろう。
図 14 基本波を見る
図15 X2△1 135.8uS 7.364KHz
カーソルの測定誤差程度の違いはあります。フィルタをつければ、128倍くらい行けるからおよそ940KHzくらいまで行けそうだ。
PSoC5Lpは、DSPも内蔵しているので、「試食版ARM PSoCで作るMyスペシャル・マイコン」には、DSPの「IIRフィルタで正弦波を発生させる」というDDSの記事があるが、50KHzまでである。
また、Mixerもあるので、周波数を移動することができる。かんたんに自分同士をMIxすると、2倍の周波数にできる。
まあ、アナログデバイセズのDDS IC AD9833のシリーズを使えば、WROOM-02で10MHzくらいかんたんなんだけどね・・・
よくよく調べてみると、
図16 部品リスト
部品リストのDACにWaveformDACがあるじゃないですか。これは、メモリ上の波形データをDMAでDACに転送するものだそうです。
図17 WaveformDACのプロパティ
DACは、max1Ms/Secなので、Sine波の場合、1波100Samplesにすると、10KHzになりますね。この後に、LPFをつけれ ば、いい。
波形データは、自分で書くこともできます。
DACは、電圧源、電流源をえらべて、4つまで使えます。
PSoC5Lpには、DSPが内臓されています。
図24 DSP DSPは、2チャンネルある
このDSPのプログラムをアセンブラで書く手順も残されていますが、典型的なフィルタの設計アシストがあります。
例えば、4KHzのLPFなら、
カットオフはいまいちですが、ステップ応答はいいですね。
図27 フィルタステージ2段 BiquadのChebychevのOrderが16のフィルタ
切れ味はスパッと切れますが、ステップ応答は長いです。
という具合に、DSPを設計できます。もちろん、DMAを使えますし、Sample rate も変えられます。I2Sから、入力もできる?
文書は、これで す。
図1−1 部品リスト全体
図1−2 Analog 全体
ここで、PSoC5lpにしかないMixerを見てみましょう。
図1−3 Mixerのシンボル
Mixerとは、アナログの乗算器と言えばいいでしょう。図1−4 Mixerのプロパティ
Mixer Typeは、Upとdownがあります。2つの周波数のうち、一つはアナログで、もうひとつはデジタルです。これもPSoC5にしかないものです。
図1−5 シンボル
図1−6 プロパティ
文書は、これで
す。
図2−2 シンボル
文書は、こ れで す。
図2−3 シンボル
図2−4 プロパティ
文書は、これで す。
図2−5 シンボル
つづく