Pakurino (3)

9 ビット Fast PWM モードを使った 2009/6/26 版の FMmelody スケッチでは、出力波形のひずみが大きくなるという問題があったので、8 ビット Phase Correct PWM モードに変更し、 2009/6/29 版としてリリースしました。
6/26 日付けの記事と、Web 上のスケッチのアーカイブ・ファイルを修正しました。
具体的には、「PWMDAC.cpp」ファイルを修正しました。
もとの FMmelody スケッチを改造して、オペレータを単なる正弦波発生器として約 1 kHz の正弦波を発生させ、「Wave Spectra」でひずみ率を測定してみたところ、2次高調波のレベルが基本波に対して -26 dB 程度までしか下がらず、ひずみ率も約 5 % となっていました。
PWM 出力に接続している 3 次バタワース LPF 特性のアクティブ・フィルタのコンデンサに積層セラミックを使用しているので、それが原因かと思って、フィルムタイプのコンデンサに交換してみましたが、改善されませんでした。
結局、これは外部回路が原因ではなく、Fast PWM モードを使ったのが原因であり、Phase Correct PWM モードに変えたら、2 次高調波のレベルは -53 dB 程度、ひずみ率も 0.3 % 程度まで下がりました。
PWM 周波数 31.25 kHz を維持するためには 8 ビット Phase Correct PWM モードにする必要があり、結局、Arduino システムでデフォルトで設定されている PWM モードと同じことになりました。
そのため、PWM のセットアップでは PWM 回路への入力クロックのプリスケーラの設定を 1/64 から 1/1 に変更するだけで、他の設定はシステムのデフォルト設定を使っています。