-1

プログラム可能な波形発生器 AD9833 と ATmega32-A マイクロ コントローラー (MCLK = 8MHz クロック周波数) を使用して正弦波を生成しようとしています。USART 通信を使用しているため、ハイパー ターミナルで周波数または位相を変更すると、波形の周波数と位相を変更する必要があります。以下に示すように、このための小さなコードを書きました。

しかし、上記のコードから正弦波を生成しています。周波数を入力すると、波形の周波数も正確に変化しますが、位相を変更しようとすると、ここに問題があります。フェーズに 90 度を入力すると、10 度変化しますが、90 度は変化しません。私はビットがありませんか?位相のみの問題。

前もって感謝します。

たとえば2.5度などの位相の浮動小数点値を入力したい場合は、何を変更する必要がありますか。関数の「unsigned int フェーズ」を「float フェーズ」に変更します。そのようにしようとすると、「<<」はフロートと互換性がありません.35.8度としてフェーズに入りたい場合はどうすればよいですか。私に提案してください。

前もって感謝します。

4

1 に答える 1

1

データシートの15ページから:

この信号は、2π/4096 × PHASEREG だけ位相シフトされます。

度数を使用する場合は、送信する前にフェーズを次のように変更します (uint32_t には、おそらく stdint.h ファイルを含める必要があります)。

phase = (uint32_t)phase * 4096 / 360;

精度に特に関心がない場合は、32 ビット除算の代わりに 16 ビット除算を使用する次のようにできます。

phase = phase * (4096 / 360);
于 2012-10-02T23:19:14.307 に答える