SSブログ

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/サーボ シールド

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




nice!(36)  コメント(0)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 36

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。