「Arduinoの基礎」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
107行目: 107行目:
  {
  {
     state != state;
     state != state;
}
</source>
<br><br>
== ArduinoでPWM制御 ==
Arduinoでは、PWMによるアナログ出力(任意の出力値)をサポートしている。<br>
デジタル信号としてHIGH(3.3[V]や5[V])とLOW(0[V])だけでなく、2[V]等の中間の値も出力できる。<br>
これにより、LEDの明るさを変化させることができる。<br>
<br><br>
==== PWMとは ====
PWM(Pulse Width Modulation)とは、電圧を制御する方法の1つである。<br>
出力のオンとオフを行うことで、 パルス幅に比例した電圧を得ることができる。<br>
例えば、下図のように信号の基本周期の間で、25[%]の時間だけオンにすることにより、<br>
平均で電圧の25[%]の電圧(5[V] * 25[%] = 1.25[V])を得ることができる。<br>
尚、この場合はオン時間をデューティーサイクル (Duty Cycle) といい、最大電圧に対する出力電圧の割合になる。<br>
<br>
[[ファイル:Arduino PWM 01.png|フレームなし|中央]]
<br><br>
==== Arduino の PWM 出力 ====
Arduino Unoでは、デジタル出力ピンの3, 5, 6, 9, 10, 11番の6個のピンがPWM制御に利用できる。<br>
ピン番号の前に ~記号が付記されており、PWM制御が利用可能であることがわかる。<br>
[[ファイル:Arduino PWM 02.jpg|フレームなし|中央]]
<br>
基本的にPWMの周波数は約490[Hz]だが、Arduino Unoでは5番と6番ピンは980[Hz]である。<br>
周波数が2倍ということは、波長が半分ということである。しかしながら、デューティーサイクルが同じであれば出力電圧は同じである。<br>
<br><br>
==== analogWrite の使い方 ====
Arduinoでは、PWM出力にはanalogWrite関数を使用する。<br>
analogWrite関数は、第1引数にピン番号、第2引数にデューティーサイクルを受け取る。<br>
<br>
デューティーサイクルは、パーセント表示ではなく、0(0%)から255(100%)の値をとる。<br>
したがって、5[V]の動作電圧の時には、<math>255 / 5 = 51</math>より<math>\mbox{電 圧} * 51</math>として、更に整数に丸めた値)を<br>
analogWrite関数の第2引数に渡す。<br>
<br>
analogWrite関数を1度呼ぶと、同じピンに対してanalogWrite関数、digitalWrite関数、digitalRead関数を呼ぶまで、一定のPWM波を出力する。<br>
analogWrite関数を呼ぶためにpinModeを事前に呼ぶ必要は無い。<br>
<br><br>
==== PWM出力のサンプルコード ====
次に、analogWrite関数によるPWM出力のサンプルコードを記述する。<br>
Arduinoの3番ピンにて2[V]を出力している。<br>
<br>
<source lang="c++">
const int PIN_PWM = 3;
const float V_OUT = 2;
void setup()
{
    int i = (int)V_OUT * 51;
    analogWrite(PIN_PWM, i);
}
void loop()
{
  }
  }
  </source>
  </source>

案内メニュー