Report
2 years, 5 months ago.

PwmOut の周期について

PwmOut において,周期(period)をdefaoultの 20ms から変えると,duty比が大きく変わってしまい,さらにperiodを例えば50msにすると,まったく動かなくなります. パルスの周期の計算アルゴリズムに問題はないでしょうか?

Question relating to:

The Switch Science mbed LPC824 operates at CPU frequencies of 30 MHz. The LPC824 includes up to 32 kB of flash memory, up to 8 kB of data memory, four ...

PWMには、周期(period)、パルス幅(pulsewidth)、デューティ比(duty)の3パラメータがあって、duty=pulsewidty/periodの関係があります。周期を変えてdutyが変わるという事は、パルス幅を一定にしているのではないでしょうか。周期を変えてもdutyを一定にするには、パルス幅を設定せずに、dutyを一定にしてください。

posted by Yoichi Hamazaki 14 Apr 2015
Comment on this question

1 Answer

2 years, 5 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 Toyomasa Watarai 2 years, 5 months ago.

This means that the question has been accepted and is being worked on.

To post an answer, please log in.