0

C18 コンパイラが提供するライブラリを使用して、PWM 使用のデューティ サイクルを開いて設定しています。100% のデューティ サイクルで取得できる最大 PWM 周波数は約 13.5 KHz であることに気付きました。デューティ サイクルが低いほど、PWM 周波数は高くなります。100% のデューティ サイクルで、より高い PWM 周波数を達成するにはどうすればよいですか? 少なくとも 13.5 KHz 以上を取得することは可能ですか? 何が欠けているのかわかりません。誰かがここで助けてくれるかもしれません。私はPIC18F87J1を使用しています。

C18 C コンパイラ ライブラリは次のとおりです。

ここにPIC18F87J1のデータシートがあります

これは、PWM に関して使用しているコードのスニペットです。

 TRISCbits.TRISC1 = 0;
 OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1);
 OpenPWM2(0x03ff);
 SetDCPWM2(255);

あなたの助けに感謝します、ありがとう!

4

1 に答える 1

1

まず、関数のパラメーターを逆にします。Open() は 256 未満の char 値を取り、Set() は 10 ビットの数値を取ります。

とはいえ、最低周波数を与える最大値 (255) を選択したことになります。データシートで説明されているように、Open() 関数は期間の値をパラメーターとして受け取ります。より高い周波数はより短い期間に相当し、その逆も同様です。

最後に、なぜ 100% のデューティ サイクルが必要なのですか? これは、ピンを常にハイにすることと同じです。その場合、頻度はまったく問題ではありません。ピンをオンにするだけで、PWM はまったく使用しないでください。

この PWM で何を駆動しているかはまだ述べていませんが、一般的に言えば、周波数が高すぎると問題が発生する可能性があります。無線干渉、過熱などを引き起こす可能性があります。

あなたの質問は、PWM の目的と用語が何を指しているのかを誤解していることを示しているので、ここに tl;dr があります。

PWM は、ピンを急速にハイとローに切り替えることで、0 と Vcc の間の電圧をシミュレートします。シミュレートされた電圧は、time_high/(time_high + time_low) に比例します。ピンが Vcc にある時間の割合は、デューティ サイクルと呼ばれます。(したがって、100% デューティは常にオンで、Vcc ボルトを与えます。0% デューティは常にオフで、0 V を与えます。)

このオン/オフ サイクルが繰り返される速度は、PWM 周波数と呼ばれます。周波数が小さすぎる (周期が長すぎる) 場合、負荷によってピン電圧が変動します。目標は、負荷にかかる電圧を平滑化するのに十分な速さで PWM を実行することですが、他の問題を引き起こすほど速くはなりません。利用可能な周波数は、ほとんどのアプリケーションに適しています。また、周波数を高く (周期を小さく) 設定すると、デューティ サイクルの精度も低下することに注意してください。これはデータシートで説明されています。その理由は基本的に、デューティ サイクルを最終的にクロック ティック オンとクロック ティック オフに変換する必要があるためです。周波数が速いほど、各サイクルでクロック ティックを分割する方法が少なくなります。

于 2014-05-07T20:27:27.773 に答える