chenglong 发表于 2008-6-15 03:34:34

ATmega16有没有可能产生两路16位PWM输出?

  课程设计中用PWM做输出控制比例阀,用ADC接收压力传感器的信号,可是测下来特性曲线不太好,可利用线性部分太窄(如图),所以想将现在8位的PWM改为16位,以提高精度。不知道,ATmega16有没有可能输出两路16位的PWM信号?

  OC1应该是可以的吧。OC0和OC2都是8位的,有没有办法把他们合并成16位的?

  谢谢!

http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_311542.gif
(原文件名:adc-pwm.gif)

elchb 发表于 2008-6-15 11:26:21

有OC1A与OC1B

chenglong 发表于 2008-6-17 00:42:23

OC1A和OC1B如果同时用的话,好像只能生成两路8位PWM信号吧;如果要16位的话,OC1A和OC1B只能一路输出吧。

以前好像看到过一个贴子,说是把OC0和OC2合起来当16为计数器用,就可以输出16位PWM信号了。可是这个贴子找不到了。

panxiaoyi 发表于 2008-6-17 03:59:31

/*****************************************************
www.avrdiy.com   panxiaoyi
CodeWizardAVR V1.25.9 Professional
Chip type         : ATmega16L
Program type      : Application
Clock frequency   : 8.000000 MHz
Memory model      : Small
External SRAM size: 0
Data Stack size   : 256
*****************************************************/

#include <mega16.h>

void main(void)
{   

TCCR1A = 0b10100010;   //快速PWM
TCCR1B = 0b00011001;   //时钟1分频
ICR1H= 0xFF;         //TCNT计数上限(最高16位)
ICR1L= 0xFF;
DDRD   = 0x30;         //PWM输出

while (1)
{

    OCR1AH=0x7F;         //设置OCR0A的占空比1:2
    OCR1AL=0xFF;
   
    OCR1BH=0x3F;         //设置OCR0B的占空比1:4
    OCR1BL=0xFF;
   
};
}

rabbitx2006 发表于 2008-6-17 08:22:44

lz观点有误,M16可以产生2路16位pwm信号,只是频率相同。

feng_matrix 发表于 2008-6-17 18:42:41

【2楼】 chenglong 成龙

瞎讲,OC1A和OC1B同时产生PWM都是16位的
频率一致因为公用一个16位计数器
占空比可分别调节因为16比较寄存器有2套

chenglong 发表于 2008-8-7 05:38:32

本来以为没人回复了,家里又没网络,所以就没再来看。今天发现,还竟然有朋友把代码都贴出来了,真的是好感动。

非常感谢各位的帮助。我试一下,希望能够成功。

chenglong 发表于 2008-8-12 01:45:55

再次谢谢【3楼】 panxiaoyi 啊艺!


#include <stdlib.h>
#include <avr/io.h>

int pwm16_Init(unsigned char pwmbit)
{

        TCCR1A = 0b10100010;   //Fast PWM
        TCCR1B = 0b00011001;   //No prescaling
               

        unsigned int icr1_temp=0x0000;
        if (pwmbit>16) pwmbit=16;
        for (;pwmbit>0;pwmbit--)
                icr1_temp=icr1_temp+(1<<(pwmbit-1));
        ICR1=icr1_temp;
       
        DDRD   = 0x30;         //PWM Output
       
        OCR1A=0;
        OCR1B=0;
       
        return 0;

}

liiww 发表于 2008-9-2 11:01:34

不错

kevinzcp 发表于 2008-9-2 11:22:35

好贴,收藏

maganet 发表于 2010-8-8 10:59:16

MARK

holyfire 发表于 2012-7-13 10:39:10

学习学习

ppffs 发表于 2012-7-28 15:43:18

学习一下

洋葱头1991 发表于 2012-11-27 19:31:35

mark!{:lol:}
页: [1]
查看完整版本: ATmega16有没有可能产生两路16位PWM输出?