0

スイッチング作業を行うインバータ/ドライバ IC で BLDC モータを制御しています。ドライバーに 6 つの PWM 信号をすべて同じ周波数で提供する必要があります。5kHzから10kHzの間で、すべてのPWMピンが同じである限り、正確な周波数は実際には問題ではありません。

私は現在Arduino Unoを使用しています。特定のタイマー(0、1、2)と同じ周波数で各PWMピン(3、5、6、9、10、11)をプログラムする方法がわかりませんピンのクロック速度は異なります。

  • ピン 5 と 6: timer0 によって制御、基本周波数 62500Hz
  • ピン 9 と 10: timer1 によって制御、基本周波数 31250Hz
  • ピン 11 および 3: timer2 によって制御され、基本周波数 31250Hz

timer1 と timer2 は問題なく、プリスケーラ値 8 (7812.5Hz) だけスケールダウンできます。timer0 を同じ周波数にする方法がわかりませんか?

http://playground.arduino.cc/Main/TimerPWMCheatsheet

回避策は比較的簡単だと確信しています。タイマ 0 の周波数をプリスケーラ値ではない数、たとえば 40 で割ることは可能ですか?

前もって感謝します。

パット。

4

1 に答える 1

0

モーター コントローラーのチップ番号が含まれていませんが、6 つの異なるタイマーで目的を達成することはできないと確信しています。問題は、適切な時間だけオンとオフを切り替えるだけでなく、さまざまなピンの PWM をすべて同期する必要があることです。

代わりに、単一のタイマーを使用して、正しい同期ですべての出力を切り替える必要があります。このページには、「ビットバンギング パルス幅変調」セクションの例の始まりがあります。より多くのピンを切り替えるには、それを変更する必要があります。

その例はおそらくまだ十分ではありません。代わりに、割り込みサービス ルーチンを使用してピンを切り替える必要があります。そうすれば、PWM はより独立して動作し、ループ機能がより多くのことを実行できるようになります。

ルーチンはタイマーの出力比較割り込みに接続され、いくつかの揮発性変数にさまざまな PWM 出力の値を保持する必要があります。出力比較レジスタは、次のトグルのためにウェイクアップするように設定されます。ルーチンが実行されると、トグルが実行され、トグル用の出力コンペア レジスタが設定されます。タイミングと同期の詳細は、コントローラーのデータシートによって異なります。

ループ機能は、入力を読み取り、揮発性変数を調整してモーター速度を変更できます。

これらすべてを行うモータードライバーもあります。方向と速度を指定するだけで、チップが 6 つの PWM を作成します。

于 2014-11-20T11:39:44.903 に答える