搜索
bottom↓
回复: 125

告诉你怎么用ATmega8产生三路PWM信号(修正了上个帖子内容)

[复制链接]

出0入0汤圆

发表于 2008-5-14 09:28:07 | 显示全部楼层 |阅读模式
上次的帖子频率计算有点问题,现在修正一下.

小弟我因为做毕设用到AVR的三路PWM功能,所以开始学习ATmega8,刚开始到论坛里看了一些有关帖子,
还是没弄明白,最后我用了2天时间专心研究数据手册和其他一些ATmega8资料,终于知道怎么产生了.
用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入0汤圆

发表于 2008-5-15 11:14:49 | 显示全部楼层
我是初学者,楼主的资料有用!我学会了,谢谢!

我把注释再做详细一些,发上来。
同时做了一个占空比调节循环,可以观察到占空比从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清零

//匹配时清零,TOP:255,频率:31.25K  
        OCR2=170;       //170/255 = 2/3 , 占空比:2/3  
//占空比循环变化
        while (1)
        {
                for(i=0; i< 255; i ++)
                {
                        OCR1A = i;
                        OCR1B = i;
                        OCR2 = i;

                        delay();
                }
        }  
}  


(原文件名:1.gif)

出0入0汤圆

发表于 2008-5-21 16:02:56 | 显示全部楼层
记下

出0入0汤圆

发表于 2008-12-23 18:03:29 | 显示全部楼层
学习,留个位,

出0入10汤圆

发表于 2008-12-28 19:52:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-12-28 21:15:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-12-28 22:19:56 | 显示全部楼层
mark&nbsp;

出0入0汤圆

发表于 2008-12-29 09:31:36 | 显示全部楼层
学习了,谢谢楼主。

出0入0汤圆

发表于 2009-1-8 21:02:34 | 显示全部楼层
留个记号

出0入0汤圆

发表于 2009-5-4 21:57:28 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-5-4 22:18:00 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-4 22:30:01 | 显示全部楼层
mark!

出0入0汤圆

发表于 2009-5-5 12:42:06 | 显示全部楼层
HAO!!!

出0入0汤圆

发表于 2009-5-5 13:05:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-6 08:46:27 | 显示全部楼层
马上就能用到了

出0入0汤圆

发表于 2009-6-5 09:08:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-9 11:29:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-9 11:33:05 | 显示全部楼层
搬个凳子学习

出0入0汤圆

发表于 2009-6-9 11:33:29 | 显示全部楼层
搬个凳子学习

出0入0汤圆

发表于 2009-6-9 12:44:43 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-6-9 12:48:38 | 显示全部楼层
呵呵,谢谢分享~

出0入0汤圆

发表于 2009-6-9 12:54:05 | 显示全部楼层
不错

出0入0汤圆

发表于 2009-6-11 13:13:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-6-11 22:34:22 | 显示全部楼层
没试过, 记号

出0入0汤圆

发表于 2009-6-12 08:22:06 | 显示全部楼层
占位学习!

出0入0汤圆

发表于 2009-9-17 10:31:39 | 显示全部楼层
GOOD!

出0入0汤圆

发表于 2009-9-18 17:30:53 | 显示全部楼层
不错!正在用!

出0入0汤圆

发表于 2009-9-19 18:46:47 | 显示全部楼层
学习!

出0入0汤圆

发表于 2009-9-20 13:28:47 | 显示全部楼层
mark1

出0入0汤圆

发表于 2009-9-26 15:27:37 | 显示全部楼层
xuexi

出0入0汤圆

发表于 2009-9-27 17:47:56 | 显示全部楼层
学习

出0入0汤圆

发表于 2009-10-10 10:04:38 | 显示全部楼层
初学者,正弄到PWM波,真有用~

出0入0汤圆

发表于 2009-10-10 16:39:53 | 显示全部楼层

出0入0汤圆

发表于 2009-10-10 20:21:38 | 显示全部楼层
记号,有空看

出0入0汤圆

发表于 2009-10-12 18:53:08 | 显示全部楼层
谢谢咯

出0入0汤圆

发表于 2009-11-13 23:40:48 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-1-21 20:23:26 | 显示全部楼层
不错,好东西

出0入0汤圆

发表于 2010-1-21 20:30:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-22 13:11:55 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-1-22 14:01:54 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-4-3 10:53:04 | 显示全部楼层
学习了

出0入0汤圆

发表于 2010-4-3 11:00:36 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-4-3 11:42:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-4-29 13:57:18 | 显示全部楼层
记号~~

出0入0汤圆

发表于 2010-5-8 20:29:18 | 显示全部楼层
记号

出0入0汤圆

发表于 2010-5-8 21:56:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-17 23:21:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-5 16:48:17 | 显示全部楼层
做个记号

出0入0汤圆

发表于 2010-6-14 15:46:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-14 16:11:55 | 显示全部楼层

出0入0汤圆

发表于 2010-6-14 19:24:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-14 22:21:40 | 显示全部楼层
mark

出0入4汤圆

发表于 2010-6-14 23:10:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-17 15:52:51 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-25 10:34:16 | 显示全部楼层
好像很不错的样子

出0入0汤圆

发表于 2010-7-25 11:21:02 | 显示全部楼层
記下,AVR PWM

出0入0汤圆

发表于 2010-7-25 11:24:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-26 17:15:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-31 15:46:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-1 01:32:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-1 15:32:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-2 20:20:55 | 显示全部楼层
学习 对直流机调速!

出0入0汤圆

发表于 2010-8-28 16:30:22 | 显示全部楼层
MARK

出0入42汤圆

发表于 2010-8-28 17:18:15 | 显示全部楼层
三路PWM

出0入0汤圆

发表于 2010-9-11 21:55:08 | 显示全部楼层

出0入0汤圆

发表于 2010-9-14 10:59:18 | 显示全部楼层
果然好贴啊,我想再问下6路PWM控制无刷电机怎么操作?

出0入0汤圆

发表于 2010-10-5 16:36:37 | 显示全部楼层
markl

出0入0汤圆

发表于 2010-10-5 21:02:29 | 显示全部楼层
有什么实际应用呢?

出0入0汤圆

发表于 2010-10-24 14:39:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-30 09:00:04 | 显示全部楼层
谢了 很好用

出0入0汤圆

发表于 2010-11-8 21:03:41 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-11-10 16:09:15 | 显示全部楼层
LZ真是说的言简易懂!!狂顶!!!

出0入0汤圆

发表于 2010-12-10 16:52:10 | 显示全部楼层
初学者,多谢楼主:)

出0入0汤圆

发表于 2010-12-11 23:37:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-12-12 09:41:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-25 22:52:56 | 显示全部楼层

出0入0汤圆

发表于 2011-2-15 19:13:38 | 显示全部楼层
学习了,谢谢!

出0入0汤圆

发表于 2011-2-15 21:58:33 | 显示全部楼层
ddddddddd

出0入0汤圆

发表于 2011-2-15 22:05:02 | 显示全部楼层
学习了,谢谢!

出0入0汤圆

发表于 2011-2-16 10:01:46 | 显示全部楼层
标记备用

出0入0汤圆

发表于 2011-2-16 17:15:50 | 显示全部楼层

出0入0汤圆

发表于 2011-2-16 23:23:38 | 显示全部楼层
记号 M8三路PWM

出0入0汤圆

发表于 2011-2-18 08:38:41 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-3-19 18:34:34 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-3-21 23:39:14 | 显示全部楼层
三路PWM可以做RGB调色。

出0入0汤圆

发表于 2011-3-22 11:51:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-22 13:18:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-23 16:48:27 | 显示全部楼层
正需要呢 谢谢了

出0入0汤圆

发表于 2011-3-23 17:38:57 | 显示全部楼层
mega8 pwm  谢谢

出0入0汤圆

发表于 2011-3-23 19:22:50 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-3-26 22:45:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-27 00:52:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-27 09:10:28 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-11-23 19:21:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-19 17:02:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-23 10:44:35 | 显示全部楼层
不错啊!

出0入0汤圆

发表于 2011-12-23 20:34:52 | 显示全部楼层
搬个凳子学习

出0入0汤圆

发表于 2011-12-24 01:31:41 | 显示全部楼层
受教了

出0入0汤圆

发表于 2012-1-3 09:13:57 | 显示全部楼层
good!!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-29 03:24

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

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