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

DDSもどき(2023-1-21)

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倍位遅い。

DDSを考える(2023-1-22)

ここでは、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)となる。

DDSを考える-2(2023-1-23)

そうか、ex を積分しても、微分してもexなんだな。ループができる。まずい。これは、だめだ。

DDSを考える-3(2023-1-24)

アプリケーションノートAN2109にPSoC1で、DDSを作るのがあります。

DDSもどき−2(2023-1-25)

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くらいかんたんなんだけどね・・・

DDSもどきー3(2023-2-7)

よくよく調べてみると、


図16 部品リスト

部品リストのDACにWaveformDACがあるじゃないですか。これは、メモリ上の波形データをDMAでDACに転送するものだそうです。


図17 WaveformDACのプロパティ

DACは、max1Ms/Secなので、Sine波の場合、1波100Samplesにすると、10KHzになりますね。この後に、LPFをつけれ ば、いい。

波形データは、自分で書くこともできます。

DACは、電圧源、電流源をえらべて、4つまで使えます。

WaveForm DAC(2023-2-8)

早速使ってみました。YouTubeにあって、Example codeもあったのですが、チップが違うとCY8CKIT-059には、書きこめなかったので、新しく作りました。
AN69133 PSoC® 3 / PSoC 5LP Easy Waveform Generation with the WaveDAC8 Component
をみると、モデムとかに使えるみたいですね。



図18 回路図



図19 プログラム



図20 WaveformDACのプロパティ Sample rate 1MSPSにした



図21 カーソル間隔 100uSですね。つまり、10KHz

そこで、Waveform1,2は、WaveformDACのws端子の0,1で切り替えするので、2波づつ交互に切り換えてみます。

まず、Sample rate 100KSPSに下げます。測定環境で、ノイズが気になったものですから。



図22 WaveformDACのプロパティ Sample rate 100KSPSに変更

回路図は、t-ffを使って、2波づつws端子を0,0,1,1,・・となるようにしました。



図23 回路図



図24 2波づつ三角波と正弦波 

できました。

DSPとデジタルフィルタ(2023-2- 12)

PSoC5Lpには、DSPが内臓されています。


図24 DSP DSPは、2チャンネルある

このDSPのプログラムをアセンブラで書く手順も残されていますが、典型的なフィルタの設計アシストがあります。

例えば、4KHzのLPFなら、


図25 フィルタステージ2段 BiquadのButterworthのOrderが16のフィルタ

カットオフはきれいですね。ステップ応答はリンギングがありますね。



図26 フィルタステージ2段 BiquadのBesselのOrderが16のフィルタ

カットオフはいまいちですが、ステップ応答はいいですね。


図27 フィルタステージ2段 BiquadのChebychevのOrderが16のフィルタ

切れ味はスパッと切れますが、ステップ応答は長いです。

という具合に、DSPを設計できます。もちろん、DMAを使えますし、Sample rate も変えられます。I2Sから、入力もできる?

文書は、これで す。


Analog(2023-2-25)


図1−1 部品リスト全体


図1−2 Analog 全体

ここで、PSoC5lpにしかないMixerを見てみましょう。

Mixer

図1−3 Mixerのシンボル

Mixerとは、アナログの乗算器と言えばいいでしょう。
数学でいうと三角関数の積和の公式で、正弦波の周波数の足し算と引き算ができます。

図1−4 Mixerのプロパティ

Mixer Typeは、Upとdownがあります。2つの周波数のうち、一つはアナログで、もうひとつはデジタルです。

文書は、これで す。

Sample/Track and Hold

これもPSoC5にしかないものです。


図1−5 シンボル


図1−6 プロパティ

文書は、これで す。

VREF

基準電圧発生源です。


図1−7 シンボル



図1−8 プロパティ(プルダウンメニューを開いてある)

文書は、これで す。

ADC



図2−1 ADCの部品

Delta Sigma ADC


図2−2 シンボル

文書は、こ れで す。

SAR ADC


図2−3 シンボル


図2−4 プロパティ

文書は、これで す。

Sequencing SAR ADC

マルチプレクサのついたSAR ADCです。

図2−5 シンボル


図2−6 プロパティ

入力のChanelsは、シングルエンドなら64まで、差動なら32までできます。しかし、実際は、チップの端子数が限られていますので、他に使われていると、制 限されることがあります。




つづく



メインページに戻る