DCモータの回転数制御は、PWMが良く使われるが、PWMの固有周波数によって、モータからピーという音が聞こえる場合がある。これをOSCCALをランダムに拡散させれば、固有の音が分散される事を期待する。
普通のPWM制御の波形。速度を変更すると、ある周期でモータからピーっと音が出てくる。
ソフトPWMの部分に乱数でOSCCALを変更するようにした。OSCCALは下2ビットを使用していないので0~63を2ビットシフトして設定。
モータからの音は、静かとは言えないが、固有の周波数の音が耳に聞こえる事は無くなった。PIC12F629で簡単にスペクトラム拡散によるPWMノイズの軽減を期待したが、このデバイスでは難しそうだ。(EMI対策としては有効と思う)
ただ、こういう制御をすることで音の雑音が拡散されるのは理解できた。
ポットでお湯を沸かしている様な雑音と、四六時中ピーとなっているのとでは、有感雑音は歴然だろう。ファンコントローラには応用できそうだ。最適なデバイスや方法をもう少し実験してみたいと思っている。
OSCCALをランダムに設定する方法として、色々実験したので備忘録として書き留めると、
タイマー割り込みでOSCCALをランダムに書き換える
→XC8コンパイラではRAND()関数が割り込みで展開できずビルドエラー
OSCCAL = (unsigned char)(rand()% 256);にしても、2ビットは無視されるので結果は一緒。
XC8でrand()を使うと、メモリーの使用量が一気に40%以上になる。
乱数発生は、もっと別の方法を考えたほうが良さそうだ。
12F683別のPICを使用してハードPWMで動かしたほうがいいかもしれない。このPICはOSCTUNEがあるが、32段階で±12%程。どれだけの効果があるか確かめてみたい。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。