ATmega8中使用定时器产生PWM输出信号.docVIP

ATmega8中使用定时器产生PWM输出信号.doc

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ATmega8中使用定时器产生PWM输出信号 对于ATmega8来说可以通过T/C1和T/C2定时器来产生三路PWM 输出信号供外部器件使用。 快速PWM 的产生就是先设定一个TOP值再设定一个比较值,然后,计数器开始计数,比如保持输出1,计数到设定的比较值时,电平变为0,并维持,然后继续计数到TOP电平再变为1,如此重复循环. 1.T/C1可以产生2路(OC1A即PB1 OC1B即PB2).T/C2产生一路(OC2即PB3). 2.需要设定T/C1的寄存器有四个 TCCR1A TCCR1B(这两个寄存器一起决定了两路PWM信号的产生方式,频率和TOP值)OCR1A(此值/TOP就是占空比) OCR1B(设定第二路PWM的占空比) 2.需要设定T/C2的寄存器有2个 TCCR2(同理,这个寄存器决定了第三路PWM信号的产生方式,频率和TOP值 ) OCR2(这个寄存器决定占空比) 上面所述只能产生几个固定频率的PWM信号(占空比可以随便调),并且前两路的频率是一样的.如果想产生自己想要频率的PWM,需要用OCR1A 设定OCR1B的TOP值,由OCR1B产生PWM,此时OCR1A只能产生占空比50%的PWM. 下面是我用ATmega8产生三路频率31.25K,占空比分别为1/3 1/2 2/3 PWM 的程序. 8M #include <avr/io.h> void main(void) { PORTB=0x00; DDRB=0x0E; // T/C1 初始化 TCCR1A=0xA1; TCCR1B=0x09; //匹配时清零,TOP:255,频率:8M/256=31.25K OCR1A=85; //占空比:1/3 OCR1B=128; //占空比:1/2 // T/C2 初始化 TCCR2=0x69; //匹配时清零,TOP:255,频率:31.25K OCR2=170; //占空比:2/3 while (1); } 用示波器观察过,占空你很精确,频率实测是30.22K,与理论值有点误差,可能频率高了,精确度就达不到了. 我把注释再做详细一些,发上来。 同时做了一个占空比调节循环,可以观察到占空比从0~100%的变化过程(在Proteus中仿真) #include<avr/io.h> void delay(void) { unsigned int i,j; for(i=0; i<100; i++) for(j=0; j<10; j++); } int main(void) { unsigned char i; PORTB=0x00; DDRB=0x0E; // T/C1 初始化 TCCR1A=0xA1; //COM1A1~0 = 10 -> 升序计数时比较匹配将清零OC1A/OC1B,降序计数时的比较匹配将置位OC1A/OC1B //COM1B1~0 = 10 //WGM11~10 = 01 -> 8位快速PWM TCCR1B=0x09; //WGM13~12 = 01 //CS12~10 = 001 ->时钟选择:无预分频 //匹配时清零,TOP:255,频率:8M/256=31.25K OCR1A=85; //85/255 = 1/3 ,占空比:1/3 OCR1B=128; //128/255 = 1/2 占空比:1/2 // T/C2 初始化 TCCR2=0x69; //WG21 = 1, WG20 = 1 -> 快速PWM, TOP=255 //C0M21 = 1, COM20 = 1 -> 比较匹配发生时OC2置位,计数到TOP时OC2清零 //匹配时清零,TO

文档评论(0)

139****2545 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档