これは学問的な質問です(必ずしもそうするつもりはありません)が、どのように機能するのか不思議です。私はユーザーランドのソフトウェア(ハードウェアではなく)ソリューションを考えています。CPUを壊さないソフトウェアPWM?
私はPWM信号を生成したいと考えています(少数のデジタルGPIOピンを1つ以上とします)。私はおそらく、Pthreadを作成したプログラムを書いて、そのスレッドの適切なsleep()
などを使ってデューティサイクルを無限にループさせて、比率を正しく取得します。
これはCPUをひどく壊さないでしょうか?私は周波数が100Hzのマークのまわりのどこかにあると思います。私は前にこのようなことはしていませんが、定数ルーピング、コンテキストスイッチなどがマルチタスキングやCPU使用にはあまり適していないと想像することができます。
この場合のCPUについてのアドバイスと、マルチタスクの使用について教えてください。 FWIW私はシングルコアプロセッサを考えています。私は答えがからあなたのシステムを使用不可能にすることができると感じている〜'関連する数字は現代のプロセッサに影響を与えるよりも小さい桁である'!
Cが最も適切だと思われるのでCとします。
EDIT:ハードウェアGPIOピンにアクセスできるマシン上のLinuxまたはその他の汎用POSIXオペレーティングシステムを想定します。
EDIT:PWMをスリープモードで実装する方法がわかっていると思っていました。疑いを避けるために、次のようなものがあります。
while (TRUE)
{
// Set all channels high
for (int c = 0; x < NUM_CHANNELS)
{
set_gpio_pin(c, 1);
}
// Loop over units within duty cycle
for (int x = 0; x < DUTY_CYCLE_UNITS; x++)
{
// Set channels low when their number is up
for (int c = 0; x < NUM_CHANNELS)
{
if (x > CHANNELS[c])
{
set_gpio_pin(c, 0);
}
}
sleep(DUTY_CYCLE_UNIT);
}
}
デューティ・サイクルは、ピンがハイになる時間と信号の周期の比を表し、パーセンテージで示されます。 100Hzは信号周波数であり、10msの周期を有する。 – guga
PWMの特性、特に出力信号の精度と安定性を指定する必要があります。デューティ・サイクルまたはベース周波数のいずれかでPWM信号のジッタを抑えることができますか?ソフトウェアPWMは、多くのタイミングジッタを持っています。 –
趣味目的のためだけに、照明調光器を駆動します。正確さはそれほど重要ではありません。私はジッタが予想されると思います。私が言ったように、学問的な質問ではなく、私は必ず構築するものではありません。 – Joe