查看: 577|回复: 0
打印 上一主题 下一主题

【转】AVR单片机同时产生三路PWM的程序和PWM转电压电流电路

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-20 23:30:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用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>      
int 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);   
}


PWM转成电压电路图其中G15A为地 (原文件名:a.jpg)


pwm转成电流电路 (原文件名:b.jpg)







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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