AVR-Tiny2313を使ったプログラミングにおいて、8ビットタイマーを利用してPWM信号を生成する際に、予想より低い周波数が出力されることがあります。この記事では、AVR-Tiny2313でPWMの出力周波数がなぜ予想より低くなるのか、そしてその原因と解決方法について解説します。
AVR-Tiny2313のタイマー設定とPWM出力
AVR-Tiny2313は、8ビットタイマーを使用してPWM出力を生成します。具体的には、タイマーのクロックソースとして内部RC発振器を使用し、タイマーの分周器を設定することで、所定の周波数を得ることができます。しかし、設定ミスやパラメータの間違いにより、意図した周波数と異なる結果が出力されることがあります。
上記のプログラムでは、内部クロックとして8MHzを使用し、TCCR0Bレジスタでタイマーの分周を設定しています。分周設定は「00000001」となっており、これは分周しない設定に該当します。
周波数の計算:予想される周波数と実際の周波数
プログラム内で設定された「OCR0A=128」の値に基づくPWMの周波数を計算すると、次のようになります。
タイマーのクロックは8MHzで、分周は行っていないため、タイマーの周期は8MHz/256 = 31.25kHzとなります。OCR0Aの値が128に設定されているため、PWMの周波数は31.25kHz/256 = 約122Hzとなるはずです。しかし、実際に出力されている周波数は約3.9kHzとなっており、予想よりも大きな違いがあります。
考えられる原因と設定ミス
この現象は、タイマー設定が意図通りに行われていない場合に発生します。具体的には、タイマーの設定やレジスタの設定ミスが原因となります。特に、以下の点を確認することが重要です。
- 分周設定の確認: TCCR0Bレジスタの設定「00000001」は分周なしの設定ですが、もしも分周を希望する場合、このビットを変更する必要があります。例えば、分周比を8に設定することで、周波数が1/8に減少します。
- OCR0Aの値: OCR0Aは、タイマーのカウント値に影響を与え、PWM周波数を決定します。誤った値が設定されている場合、意図しない周波数が生成されることがあります。
- PWMモードの確認: TCCR0Aレジスタで指定しているPWMモードが「高速PWMモード」で正しく設定されているか確認しましょう。
解決方法:タイマー設定の修正
問題の解決方法として、まずタイマーの分周比を再確認し、設定が正しいかどうかを確認します。例えば、分周比を8に設定したい場合、TCCR0Bレジスタの値を「00000010」に変更する必要があります。これにより、出力される周波数が適切な値に調整されます。
また、OCR0Aの値も再度確認し、希望する周波数に合わせて調整します。例えば、31.25kHzのタイマー周期を利用して、必要なPWM周波数を得るためにはOCR0Aを適切な値に設定する必要があります。
まとめ
AVR-Tiny2313の8ビットタイマーを使用したPWMの周波数が予想より低い場合、タイマー設定や分周設定にミスがあることが原因であることが多いです。TCCR0BレジスタやOCR0Aの設定を再確認し、分周比を適切に設定することで、望む周波数を得ることができます。
このような設定ミスを防ぐためにも、タイマーのクロックソースや分周比、PWMモードを正確に理解し、設定を確認することが重要です。正しい設定を行えば、期待通りの周波数を出力できるようになります。


コメント