Atmega2560ベースのチュートリアル(XII) - 16ビットタイマ(TIM1 / 3/4/5)位相基準PWM動作
位相基準PWM動作タイマ16ビットは、一般的に6つのレジスタOCRxA、OCRxB、OCRxC、TCCRxAを必要とするように4つの16ビット・タイマ、タイマ1、タイマ3、タイマ4、タイマ5のAtmega2560合計、TCCRxB、ICRx(X = 1,3,4,5)、16ビットタイマ基本的に同じ構造、以下に例示タイマーである1
1.作品
位相基準PWM動作、固定周波数の下で、デューティサイクルは、我々はビットモードの可変数を使用する位相基準PWMモード、タイマ4つの16ビットの合計を変更することができます。ICRxにインクリメントするとき、タイマの値が上方にインクリメントされ、タイマは、0X00のデクリメントを開始し、等、このプロセスは、数値又はOCRxB OCRxAまたはOCRxC値は操作が発生し、それぞれの接続タイマに等しくなるたびにつながります特に、動作モードのためにそれぞれの設定、操作上昇過程と反対の下降プロセスに従って決定される
周波数の計算式:
2.OCRxAレジスタ
タイマーの比較は、操作が発生し、ピンポイントに接続されています。
3.OCRxBレジスタ
ピンBの動作点が発生するタイマーを比較した場合
4.OCRxCレジスタ
Cピンポイント動作に比べタイマーが発生
5.ICRxレジスタ
意思決定桁タイマーだけでなく、周波数出力
6.TCCRxAレジスタ
主に決定され、ときにタイマーまたはOCRxB OCRxA OCRxC値が等しいか、どのような操作ピンのためのものであり、ビット4 TCCRxB共同位相基準PWMタイマモードで決定
7.TCCRxBレジスタ
主分割数を決定し、異なる周波数の分割数を変更することができます
8.具体例
/*
* 定时器1,工作在Phase Correct PWM模式4,PB5,PB6,PB7输出,当匹配时置低,当重置时置高
*/
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/sfr_defs.h>
#include <avr/interrupt.h>
float duty=10,duty1=40,duty2=70; //3通道的占空比分别为,10,40,70
int i,i1,i2;
int main(void)
{
duty=65536-duty*65536/100;
i=duty;
OCR1A=i;
duty1=65536-duty1*65536/100;
i1=duty1;
OCR1B=i1;
duty2=65536-duty2*65536/100;
i2=duty2;
OCR1C=i2;
DDRB=0XFF;
PORTB=0XFF;
ICR1=0XFFFF; //16位
TCCR1A |=_BV(WGM11)|_BV(COM1A0)|_BV(COM1A1)|_BV(COM1B0)|_BV(COM1B1)|_BV(COM1C0)|_BV(COM1C1);
TCCR1B |=_BV(WGM13)|_BV(CS10); //Phase Correct PWM模式4,不分频
while (1)
{
}
}
波形チャート