Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 7 months ago.
PwmOut の周期について
PwmOut において,周期(period)をdefaoultの 20ms から変えると,duty比が大きく変わってしまい,さらにperiodを例えば50msにすると,まったく動かなくなります. パルスの周期の計算アルゴリズムに問題はないでしょうか?
Question relating to:
1 Answer
9 years, 7 months ago.
大森さん、こんにちは。
ご質問頂いた件について、調査してみました。
Quote:
PwmOut において,周期(period)をdefaoultの 20ms から変えると,duty比が大きく変わってしまい
こちらは、複数の PwmOut インスタンスをご使用でしょうか? PwmOut クラスで使用している LPC824 のSCTimer/PWM のカウンタは1つしかなく、PwmOut クラスでそれを共有しています。そのため、複数のインスタンスを使用した場合には、周期を同じ値に設定する必要があります。
Quote:
さらにperiodを例えば50msにすると,まったく動かなくなります.
こちらについては(条件が若干異なっていますが)、mbed SDK LPC824 HAL 側の不具合です。現在の実装では、32-bit カウンタのモードでは無く、16-bitカウンタモード使用してしまっているため、65535 マイクロ秒より大きな周期を設定すると、波形が出力されません。テスト後に修正版のプルリクエストを出しますが、それまでの間はお手数ですが以下のように SCT の CONFIG レジスタの値をアプリ側から設定して頂けないでしょうか。
PwmOut pwm1(dp22); PwmOut pwm2(dp23); int main() { LPC_SCT->CONFIG |= 0x01; // unified 32-bit counter pwm1.write(0.7); pwm2.write(0.5); pwm1.period_ms(70); pwm2.period_ms(70); while(1) { wait(1); } }
単一のインスタンスで、50ms 周期で波形が出ないのであれば別の原因が考えられるので、テスト用のコードを送って頂けないでしょうか?
以上、宜しくお願いします。
Assigned to
9 years, 7 months ago.This means that the question has been accepted and is being worked on.
PWMには、周期(period)、パルス幅(pulsewidth)、デューティ比(duty)の3パラメータがあって、duty=pulsewidty/periodの関係があります。周期を変えてdutyが変わるという事は、パルス幅を一定にしているのではないでしょうか。周期を変えてもdutyを一定にするには、パルス幅を設定せずに、dutyを一定にしてください。
posted by Yoichi Hamazaki 14 Apr 2015