Quantcast
Channel: So-net blog 共通テーマ 趣味・カルチャー
Viewing all articles
Browse latest Browse all 121462

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

$
0
0
今回からいよいよ 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 &ltavr/io.h&gt

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) について見てみたいと思います! (^_^)/~
サインスマート(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/サーボ シールド

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


Viewing all articles
Browse latest Browse all 121462

Trending Articles