superdogszf 发表于 2014-4-10 13:36:50

定时器2相位修正PWM的设置

本帖最后由 superdogszf 于 2014-4-10 13:44 编辑

AVR的PWM使用一直比较头疼,当然现在还是很头疼。
使用时都是找到以前使用过的代码,然后修改参数,改变频率和占空比。
这次做红外信号发送,要调整频率到38KHZ,
demo上用的是定时器2的相位修正PWM,看看demo上的代码,再看datasheet,还是糊涂。这个510,认为是255×2=510,这么算下来,如果分频不变,那PWM输出频率也不变,晕倒。那demo中的38HKZ怎么来的。 #define TIMER_CONFIG_KHZ(val)   \      constbyte pwmval = SYSCLOCK / 2000 / (val) ;   \      TCCR2A= _BV(WGM20) ;    \      TCCR2B= _BV(WGM22) | _BV(CS20) ; \      OCR2A= pwmval ;      \      OCR2B= pwmval / 3 ; 从demo中看,OCR2A控制频率,OCR2B控制占空比,和datasheet上说的不一样啊。 不管了,先往下做,下到板子后,用逻辑分析仪抓数据看了一下,明白了。 相位修正PWM:计时器重复地从BOTTOM计到TOP,然后又从TOP倒退回到BOTTOM,当计时器往TOP计数时若发生了TCNT2与OCR2x的匹配,OC2x将清零为低电平;而在计时器往BOTTOM计数时若发生了TCNT2于OCR2x 的匹配, OC2x 将置位为高电平。 这里的BOTTOM=0,TOP=OCR2A的值,OCR2x=OCR2B,这样就理论就和实际测量结果一致了。

superdogszf 发表于 2014-4-10 13:45:26

晕倒,把word上的东西拷到这边来,不会弄。图片还要保存下来再上传。
页: [1]
查看完整版本: 定时器2相位修正PWM的设置