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ビット値です。よってこの「アンマスク値」を大きくすればノイズの振幅は大きく、小さくすれば小さくなる、という動作をします。
この時のノイズ波形(時間DIV=10ms)を観察したものが以下に。
その時の波形が以下に。振幅がデカくなっている(画面に入りきれなかったので電圧方向のDIVも小さくしてある)のが分かると思います。
「ノイズ」振幅8ビット時の波形
ちょっと「ピンクノイズ」っぽいかもしれまへん。狭い周波数範囲でみたらほぼほぼ平に近いから「ホワイト」とみなせる?いい加減な。まあ、疑似乱数だし。なお、1MHzのちょっと下にピークが見えるのはLFSRとは関係ないハード的なノイズが見えているみたい。知らんけど。