使用Atmega64单片机T/C3生成PWM信号
程序员文章站
2022-06-09 10:47:53
...
1、首先确定工作模式为 “快速PWM模式”。计数器上限值由OCRnA中的值确定。结合下图选择模式15。
2、在模式15的情况下,根据下图可知,
COMnX1:COMnX0=0:1,OCnA只能输出50%的占空比,频率可调。
COMnX1:COMnX0=1:0,OCnA输出高电平。(原因看图3)
COMnX1:COMnX0=1:1,OCnA输出低电平。(原因看图3)
OCnB和OCnC可以输出任意占空比PWM波形。
根据要求编写程序
void T3_init(void)//定时器1,扫描检测io口电平变化
{
DDRE|=0x38;//设置PE3,PE4,PE5为输出
TCCR3A=0x6B;//COM3A1 COM3A0=1 0时,OC3A输出50%占空比的PWM信号
//COM3A1 COM3A0 COM3B1 COM3B0 COM3C1 COM3C0 WGM31 WGM30
0 1 1 0 1 0 1 1
//WGM31:WGM30=1 1 采用15模式快速PWM
//A、B比较输出模式,匹配A时取反,匹配B时置0(10).
TCCR3B=0X1A;//WGM33:WGM32=1 1 计数器数值累加到OCRn。 8分频
//ICNC3 ICES3 – WGM33 WGM32 CS32 CS31 CS30
1 1 0 1 0
// CS2 CS1 CS0=0 1 0 ;8分频
TCNT3=0x0000;//设置定时器的初始值
ETIMSK=0x00;//0x04;//溢出中断使能
OCR3A=9999; //PWM信号频率=8M/(8*(1+9999))=100Hz
OCR3B=1000; //OCR3B/OCR3A 占空比
OCR3C=2000;
}
由于OCA3在一个计数周期反转一次信号,所以该脚的PWM信号频率是其他引脚的二分之一。