So-net無料ブログ作成
検索選択

Arduino Nano の PWM 機能を使ってみた(FastPWM 編 その1) [Arduino]

今回からいよいよ Arduino Nano の PWM 機能を詳しく見たいと思います。Arduino の PWM 機能については下記サイトが参考になりました。非常に分かりやすく助かりました。

Secrets of Arduino PWM
http://www.righto.com/2009/07/secrets-of-arduino-pwm.html


さて、Arduino の PWM 機能は次の4種類あります。

(1) Fast PWM (TOP:0xFF)
(2) Fast PWM (TOP:OCRnA)
(3) Phase Correct PWM (TOP:0xFF)
(4) Phase Correct PWM (TOP:0CRnA)


今回は(1) Fast PWM (TOP:0xFF) を TIMER2 を使って試してみました。


ArduinoNano.jpg


TIMER2 の PWM 出力は D11(OC2A)、D3(OC2B) になります。それぞれの出力を COM2A / COM2B ビットで設定できます。

D11(OC2A) は通常出力に設定してみました。

0_COM2Asetting.png


D3(OC2B) を反転出力に設定してみます。

1_COM2Bsetting.png


次に FastPWM を WGM ビットで設定します。

2_WGMsetting.png


CS ビットで分周率を設定します。今回は1/64 に設定してみました。

3_CSsetting.png


このモードでの出力周波数は下記の数式で算出できます。

出力周波数 = システムクロック / (分周率 * 256) = 16MHz / (64 * 256) ≒ 976Hz


これらの設定ビットを TCCR2ATCCR2B のレジスタに設定します。

4_TCCRsetting.png


OC2AOC2B それぞれにしきい値を設定することで、デューティ比を設定できます。このモードで出力される波形のしくみを示します。分かってみれば簡単ですね。

5_IdealOutput.png


スケッチは OC2A = 180、OC2B = 75 で設定してみました。

#include <avr/io.h>

void setup() {
  pinMode(11, OUTPUT); // OC2A
  pinMode( 3, OUTPUT); // OC2B
  
  TCCR2A  = bit(COM2A1);  // OC2A None-inverted Mode
  TCCR2A |= bit(COM2B1) | bit(COM2B0); // OC2B Inverted Mode
  TCCR2A |= bit(WGM21)  | bit(WGM20);  // Fast PWM (0xFF)
  TCCR2B = bit(CS22); // clock/64
  
  OCR2A = 180;
  OCR2B =  75;
}

void loop() {
  // put your main code here, to run repeatedly:
}


さて、実際の出力波形を見てみましょう!

6_RealOutput.png


期待したとおりの出力となりました!周波数も973~977Hzでジッタはあるものの狙い通りです。次は Fast PWM (TOP:OCRnA) について見てみたいと思います!
(^_^)/~


関連記事
Arduino Nano のTimer 機能を使ってみた
http://makers-with-myson.blog.so-net.ne.jp/2016-01-29

Arduino Nano の Counter 機能を使ってみた
http://makers-with-myson.blog.so-net.ne.jp/2016-02-04

Arduino Nano の PWM 機能を使ってみた(FastPWM 編 その2)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-16

Arduino Nano の PWM 機能を使ってみた(Phased Correct PWM 編 その1)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-18

Arduino Nano の PWM 機能を使ってみた(Phased Correct PWM 編 その2)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-20






サインスマート(SainSmart) Nano 3.0 互換ボード for Arduino

サインスマート(SainSmart) Nano 3.0 互換ボード for Arduino

  • 出版社/メーカー: サインスマート(SainSmart)
  • メディア: Personal Computers






Adafruit I2C接続16チャンネル12ビットPWM/サーボ シールド

Adafruit I2C接続16チャンネル12ビットPWM/サーボ シールド

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス