スポンサーサイト

--.--.--.--.--:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PWMでアナログっぽい出力

2013.08.05.Mon.01:31
引き続き、netduinoネタです。

今回は、PWMを使ってアナログっぽい出力を実現します。


.Net MF 4.2 では、PWMクラスという、そのまんまのクラスがあります。

このクラスを使うことで、PWM出力ができ、LEDの明るさの調整、サーボモーターの制御などが行えます。

以下、今回作成したサンプルコードです。

private static void PwmTest()
{
const int STEPS = 10;
PWM pwm = new PWM(PWMChannels.PWM_PIN_D3, 200.0, 0.3, false);
pwm.Start();

while (true)
{
for (int step = 0; step <= STEPS; step++)
{
pwm.DutyCycle = (double)step / STEPS;
Thread.Sleep(200);
}
}
}


PWMクラスのコンストラクタをIntellisenseに任せて入力すると、第一引数にCpu.PWMChannel列挙体がサジェストされ、PWM_0~PWM_7のどれかを選ぶことになりますが、どれがどのポートやらさっぱりです。

代わりに、上記コードのようにPWMChannels列挙体を使用することで、netduinoのポートと対応したポート番号を指定することができます。

・IntellisenseでサジェストされたPWM可能なポート一覧
inteli.png

ONBOARD_LEDと、D3/D5/D6/D9/D10/D11が使えるようです。


第二引数はPWMの周波数です。上記ではとりあえず、200Hzに指定しています。
私が調べた限りでは15Hz以下では例外が発生し、300KHz以上ではPWM出力が停止しました。
なので、周波数は16~300KHzを指定するようにしましょう。

第三引数はDuty比です。
この値を0.0~1.0に変化させることで、Duty比が変わります。

第四引数は出力の反転です。
falseの時、1.0で常にHighになり、trueの時、1.0で常にLowになります。(多分)

while内で、Duty比を0~1.0に段階的に変化させています。
このとき、netduinoのD3ポートにLEDなどを接続していると、段階的に明るさが変わる様子が観察できます。

スポンサーサイト
コメント

管理者のみに表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。