搜索
bottom↓
回复: 15

马老师您好!请教AVR高频PWM问题

[复制链接]

出0入0汤圆

发表于 2008-4-23 10:42:30 | 显示全部楼层 |阅读模式
我新接的项目:需要产生90KHz 40%到50%占空比的PWM脉冲,
而且最好8脚封装的。请问马老师,我用AVR做能达到这个要求吗?
急!急!急!

出0入0汤圆

发表于 2008-4-23 17:23:26 | 显示全部楼层
可以的,但PWM的精度只有177,做不到255的.

出0入0汤圆

 楼主| 发表于 2008-4-24 09:30:38 | 显示全部楼层
谢谢马老师!
那我用ATtiny13外接12MHz晶振,使用CTC模式
可以产生90KHz 45%占空比的PWM脉冲吗?

出0入0汤圆

发表于 2008-4-24 11:20:38 | 显示全部楼层
我已经给出了提示.具体请看器件手册,考虑如何实现.

其他在学习使用AVR的,也可给出自己的方法

出0入0汤圆

发表于 2008-4-24 13:03:42 | 显示全部楼层
我看了一下ATtiny13的手册,提供2个参考方法:

1.使用内部RC(9.6M),9.6M/90K =  107.OCR0A = 107(TOP),OCR0B = 50, 可以得到89.719KHz,占空比为46.729%的PWM.
2.外部输入20M脉冲(浪费一个I/O)作为系统时钟,20M/90K = 222.OCR0A = 222(TOP),OCR0B = 111, 可以得到90.090KHz,占空比为50%的PWM.

第2种方法浪费一个I/O口,但优点是PWM的频率稳定(内部RC震荡频率不是非常精确和稳定),PWM的占空比调节相对精细些(222>107).

如果使用ATtiny13产生2个90K的PWM,外部要使用22.95M的脉冲(可以尝试).如果按20M(手册上限)计算,可以产生78.431K的2个PWM.占空比分别由OCR0A和OCR0B控制,精度255.

注意:使用10M以上时钟,系统电压应为5v.

出0入0汤圆

 楼主| 发表于 2008-4-24 13:14:22 | 显示全部楼层
谢谢马老师!
我是AVR的初学者,所以用起来比较困难。
非常感谢您这么详细的指导!

出0入0汤圆

 楼主| 发表于 2008-4-25 14:23:26 | 显示全部楼层
可是马老师,上面您提的方案里用的是哪个工作方式啊?
为什么直接用,系统时钟频率/期望的PWM值呢?

出0入0汤圆

 楼主| 发表于 2008-4-25 14:37:37 | 显示全部楼层
ATtiny13中共有四种工作方式:
方式一:普通模式
    此模式一般用于定时。
方式二:CTC模式
    输出的PWM频率:F(OCnx)=F(cpu)/(2*N*(1+0CRnx))
方式三:快速PWM模式
    输出的PWM频率:F(pwm)=F(cpu)/(256*N)
方式四:相位修正PWM模式
    输出的PWM频率:F(pwm)=F(cpu)/(510*N)

按照上面的公式看,马老师用的是不是CTC模式,可是又不像
请问用的哪种方式?

出0入0汤圆

发表于 2008-4-25 15:47:21 | 显示全部楼层
我所讲的,都是方式三.方式二本身不适合做PWM的应用(手册上没有讲作为PWM应用!),方式四为慢速的PWM应用,对你的要求也不合适.

    输出的PWM频率:F(pwm)=F(cpu)/(256*N)
Fast PWM Mode

The fast Pulse Width Modulation or fast PWM mode (WGM02:0 = 3 or 7) provides a high frequency PWM waveform generation option. The fast PWM differs from the other PWM option by its single-slope operation. The counter counts from BOTTOM to TOP then restarts from BOTTOM. TOP is defined as 0xFF when WGM2:0 = 3, and OCR0A when WGM2:0 = 7. In non-inverting Compare Output mode, the Output Compare (OC0x) is cleared on the Compare Match between TCNT0 and OCR0x, and set at BOTTOM. In inverting Compare Output mode, the output is set on Compare Match and cleared at BOTTOM. Due to the single-slope operation, the operating frequency of the fast PWM mode can be twice as high as the phase correct PWM mode that use dual-slope operation.

This high frequency makes the fast PWM mode well suited for power regulation, rectification, and DAC applications. High frequency allows physically small sized external components (coils, capacitors), and therefore reduces total system cost.

In fast PWM mode, the counter is incremented until the counter value matches the TOP value. The counter is then cleared at the following timer clock cycle. The timing diagram for the fast PWM mode is shown in Figure 31. The TCNT0 value is in the timing diagram shown as a histogram for illustrating the single-slope operation. The diagram includes non-inverted and inverted PWM outputs. The small horizontal line marks on the TCNT0 slopes represent Compare Matches between OCR0x and TCNT0.

1.使用内部RC(9.6M),9.6M/90K =  107.OCR0A = 107(TOP),OCR0B = 50, 可以得到89.719KHz,占空比为46.729%的PWM.
2.外部输入20M脉冲(浪费一个I/O)作为系统时钟,20M/90K = 222.OCR0A = 222(TOP),OCR0B = 111, 可以得到90.090KHz,占空比为50%的PWM.

上面2个使用OCR0A作为TOP(WGM2:0 = 7),N =1,所以输出的PWM频率:F(pwm)=9.6M/107 或 20M/222
===========================================================================================
同时产生2个90K的PWM,外部要使用22.95M的脉冲(可以尝试).如果按20M(手册上限)计算,可以产生78.431K的2个PWM.占空比分别由OCR0A和OCR0B控制,精度255.  

使用TCNT0的MAX作为TOP(WGM2:0 = 3),N =1,所以输出的PWM频率:F(pwm)=22.95M/255 或 20M/255.

=============================================================================================
我都冒汗了!你还"新接项目"!? 唬你的老板吧.

出0入0汤圆

发表于 2008-5-22 00:04:34 | 显示全部楼层
学习了。
仔细研究一下PWM的各种方式很有意思。  快速模式分辨率最高,其他模式都减半。
但是分辨率也是随着频率而变的,频率太高,相对的时钟百分比大了,分辨率显著降低。
频率太低,16位的计数器又不够用。

我还有一个问题是,选择 “当比较匹配时(或到达TOP时),输出引脚的动作”,不用/反向一下/置位/复位。
这个选择影响分辨率和频率,“匹配时反向一下”,实际上频率降低了一半吗?,此后计数到TOP有没有输出动作?
那么这个功能有何用? 输出反正是方波。

出0入0汤圆

发表于 2008-5-22 00:16:05 | 显示全部楼层
还有请问马老师:外部输入时钟给计数器,手册上说的不能超过2.5分之一的系统时钟,20MHZ是怎么回事? CLKi/o是怎样提高的?

(这个问题看了ATtiny26的手册解决了,PLL锁定在内部RC振荡器上,可以做一个64MHZ时钟源PCK。不知道有没有AVR能让PLL锁定在晶体上?)

出0入0汤圆

发表于 2008-5-22 00:57:42 | 显示全部楼层
to :ar3000a

你对T/C的基本概念和工作方式还是不清楚,建议下载我编写教材的电子稿中相关部分仔细学习.下面是几个解释:

1.T/C可作为定时和计数器使用的.作为定时器方式使用,通常使用内部系统提供的时钟(T/C对自己的系统时钟计数),最高频率与系统时钟频率相同.20M是指定时器方式的情况.产生PWM是定时器方式的延伸功能.

2.作为计数器使用,通常是指对外部输入的脉冲计数(当然,T/C本身就是一个计数器,上面所讲的定时器,实际就是对系统已知频率脉冲计数).此时要求外部输入的计数信号频率必须小于系统时钟的1/2以上.因为,MCU是在系统时钟的同步来检测这个外部信号的变化(上升或下降沿)实现计数的.如果外部信号频率接近或大于系统时钟,就无法进行正确的检测了.

3.“当比较匹配时(或到达TOP时),输出引脚的动作”,不用/反向一下/置位/复位。是针对输出匹配方式的.设置成“匹配时反向一下”主要生成一定频率的方波,调整TOP值,方波频率就变化了,主要应用于产生音乐,固定的方波调制信号,如38K的红外调制信号等.

4.第3点也是产生PWM的过程,但产生PWM一般不采用输出匹配方式,而是采用专门的PWM方式.在PWM方式中,输出引脚的动作是没有"反向一下"的配置的.

AVR的T/C比标准51的T/C复杂,功能也强大的多.许多"会"51的人,实际并没有真正掌握T/C的基本工作机理,但由于51的T/C本身简单,所以还能混过去,当它看到AVR\ARM等现在的芯片中的T/C,往往就晕掉了.

在学校中,刚开始学习和接触可编程的T/C在8086的课程的8253.我目前就在上这门课,马上就要介绍8253了.真心希望现在的学生能认真学习,打好基础.

出0入0汤圆

发表于 2008-5-22 01:53:48 | 显示全部楼层
感谢老师详细的回复。

出0入0汤圆

发表于 2010-1-6 20:17:19 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-4-3 22:54:53 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2011-8-3 16:24:05 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-19 03:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表