前回に引き続き、ATmega168Pで動くフェーズシフトフルブリッジ駆動信号生成プログラムを書きました。
動作確認はATmega168Pで行っていますが、レジスタの名前が同じなのでATmega328Pでも動くと思います。
今回は発振周波数を可変にする事をあきらめて、おとなしく周波数固定の発振モードで
プログラムを書きました。(8bit高速PWMモード)
お蔭で位相のシフト幅を0~100%まで確保する事ができました。
しかしこのプログラムでもまだ宿題が残っています。
プログラム中で位相差を作る場所ではタイマー2のTCNT2レジスタの値を直接いじっているのですが、
これをやるとこのマイコンの仕様として、1周期分そのタイマーの比較動作が無視されてしまいます。
これにより、その1周期だけ出力がHighないしLowで固定されてしまいます。
LEDの制御など、適当な用途なら問題ないのですが、トランスを使う用途において
それが発生すると、磁歪によるトランス鳴きが起こります。
マイコンの仕様にぶつかっている以上もうどうしようもない気がするのですが、
どこかの偉い人がなんとかしてくれるかもしれないので公開します。
適当な用途相手であれば問題無く使用できるし、トランスを使う場合でも
磁歪音をどうにかするなどすれば色々と面白い事ができます
(ただしEMPとラインノイズは勘弁な)
PhaseShiftV2.zip