Arduino Nano の PWM 機能を使ってみた(FastPWM 編 その2) [Arduino]
Arduino Nano の4種類ある PWM 機能のうち FastPWM (TOP:OCRnA) について確認してみます。
(1) Fast PWM (TOP:0xFF)
(2) Fast PWM (TOP:OCRnA)
(3) Phase Correct PWM (TOP:0xFF)
(4) Phase Correct PWM (TOP:0CRnA)
今回も TIMER2 を使って確認をしてみましょう。PWM 機能については、下記サイトが参考になります。
Secrets of Arduino PWM
http://www.righto.com/2009/07/secrets-of-arduino-pwm.html
TIMER2 の PWM 出力は D11(OC2A)、D3(OC2B) になります。それぞれの出力を COM2A / COM2B ビットで設定できます。
D11(OC2A) をトグル出力に設定します。
タイマーが OCR2A に設定した値になると出力をトグルします。この時 WGM22 を 1 に設定します。
D3(OC2B) は通常出力に設定します。
次に Fast PWM を WGM ビットで設定します。
CS ビットで分周率を設定します。今回も 1/64 に設定してみました。
このモードでのD11(OC2A) の出力周波数は、次の数式で算出できます。
出力周波数 = システムクロック / (2 * 分周率 * [OCR2A + 1])
トグル出力になるので、出力周波数は設定値の半分になることに注意(ノコギリ2つ分で一周期)。
これらのビットを TCCR2A、TCCR2B のレジスタに設定します。
OCR2B に閾値を設定することで、D3(OC2B) の出力にデューティ比を設定することができます。このモードで出力される波形のしくみを示します。
D11(OC2A) は OCR2A でトグルしますので、常にデューティ比は50% です。
スケッチは、OCR2A = 127、OCR2B = 40 を設定してみました。
実際の出力をみてみましょう。
期待どおりの出力です。D11(OC2A)の出力周波数もほぼ 976Hz ですので成功です。次は Phase Correct PWM (TOP:0xFF) について確認していきましょう。
(^_^)/~
関連記事
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 編 その1)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-12
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
(1) Fast PWM (TOP:0xFF)
(2) Fast PWM (TOP:OCRnA)
(3) Phase Correct PWM (TOP:0xFF)
(4) Phase Correct PWM (TOP:0CRnA)
今回も TIMER2 を使って確認をしてみましょう。PWM 機能については、下記サイトが参考になります。
Secrets of Arduino PWM
http://www.righto.com/2009/07/secrets-of-arduino-pwm.html
TIMER2 の PWM 出力は D11(OC2A)、D3(OC2B) になります。それぞれの出力を COM2A / COM2B ビットで設定できます。
D11(OC2A) をトグル出力に設定します。
タイマーが OCR2A に設定した値になると出力をトグルします。この時 WGM22 を 1 に設定します。
D3(OC2B) は通常出力に設定します。
次に Fast PWM を WGM ビットで設定します。
CS ビットで分周率を設定します。今回も 1/64 に設定してみました。
このモードでのD11(OC2A) の出力周波数は、次の数式で算出できます。
出力周波数 = システムクロック / (2 * 分周率 * [OCR2A + 1])
トグル出力になるので、出力周波数は設定値の半分になることに注意(ノコギリ2つ分で一周期)。
これらのビットを TCCR2A、TCCR2B のレジスタに設定します。
OCR2B に閾値を設定することで、D3(OC2B) の出力にデューティ比を設定することができます。このモードで出力される波形のしくみを示します。
D11(OC2A) は OCR2A でトグルしますので、常にデューティ比は50% です。
スケッチは、OCR2A = 127、OCR2B = 40 を設定してみました。
#include <avr/io.h> void setup() { pinMode(11, OUTPUT); // OC2A pinMode( 3, OUTPUT); // OC2B TCCR2A = bit(COM2A0); // Toggle OC2A on compare match TCCR2A |= bit(COM2B1); // OC2B None-inverted Mode TCCR2A |= bit(WGM21) | bit(WGM20); // TCCR2B = bit(WGM22); // Fast PWM (OCR2A) TCCR2B |= bit(CS22); // clock/64 OCR2A = 127; OCR2B = 40; } void loop() { // put your main code here, to run repeatedly: }
実際の出力をみてみましょう。
期待どおりの出力です。D11(OC2A)の出力周波数もほぼ 976Hz ですので成功です。次は Phase Correct PWM (TOP:0xFF) について確認していきましょう。
(^_^)/~
関連記事
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 編 その1)
http://makers-with-myson.blog.so-net.ne.jp/2016-02-12
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)
- メディア: Personal Computers
Arduino Pro Mini 328 3.3V 8MHz
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
コメント 0