STM32三昧(7) Cube IDE、TIMER6+DACで疑似ノイズ波生成、Nucleo

Joseph Halfmoon

STMicroelectronics社純正開発環境Cube IDEを使用し、STM32のHAL(ハードウエア抽象化レイヤ)を試用中。前回はDACが内蔵する三角波生成機能を使ってみました。今回はもう一つの波形生成機能「疑似ノイズ生成器」を使ってみます。LFSR(リニア・フィードバック・シフト・レジスタ)で生成。

※Windows 11 PC上にインストールしたSTM32CubeIDE Version: 1.13.2上で動作を確認しています。今回のターゲットボードは Nucleo-F072RBです。

DAC設定

今回は前回の三角波生成機能の設定、ソースともにほぼほぼ流用デス。唯一異なるのはDACの設定部分です。TIMER6設定、ピン設定とソースコードについては前回をご参照ください。

DAC内蔵の疑似ノイズジェネレータはありがちなLFSRです。12ビット幅。よって疑似乱数の周期は12ビットとなります。そしてアナログ値の生成はTIMER6からのトリガ信号の度に更新される12ビット幅のLFSRのLSB側から指定のビット数を取り出してDACの出力設定値に加算するという方法で行っています。1ビットであれば0か1の1ビットだけランダム値を加え、2ビットであれば0から3までの2ビット値です。よってこの「アンマスク値」を大きくすればノイズの振幅は大きく、小さくすれば小さくなる、という動作をします。

まずはLFSRの下4ビットを取り出す場合の設定が以下に。DAC_PARAM_NoiseSetting4bit

この時のノイズ波形(時間DIV=10ms)を観察したものが以下に。LFSR4bit_10ms

次にLFSRの下8ビットを取り出す設定が以下に。DAC_PARAM_NoiseSetting8bit

その時の波形が以下に。振幅がデカくなっている(画面に入りきれなかったので電圧方向のDIVも小さくしてある)のが分かると思います。LFSR8bit_10ms

「ノイズ」振幅8ビット時の波形

上記の波形を時間方向に拡大したものが以下に。LFSR8bit_10us

そしてスペアナ機能にかけたものが以下に。LFSR8bit_FFT

ちょっと「ピンクノイズ」っぽいかもしれまへん。狭い周波数範囲でみたらほぼほぼ平に近いから「ホワイト」とみなせる?いい加減な。まあ、疑似乱数だし。なお、1MHzのちょっと下にピークが見えるのはLFSRとは関係ないハード的なノイズが見えているみたい。知らんけど。

STM32三昧(6) Cube IDE、TIMER6+DACで三角波生成、Nucleo へ戻る