找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

一个定时器生成多路PWM波形的原理和方法

查看数: 9509 | 评论数: 3 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-3-30 21:16

正文摘要:

在很多工程应用中,需要使用到PWM波(脉宽调制),例如电机调速、温度控制调整功率等。本文讲述怎么利用单片机的一个定时器生成多路PWM波形。 一般的,PWM的周期t1是一个固定值,如1ms,10ms,100ms等,在一个周期中包 ...

回复

ID:609560 发表于 2019-11-12 09:43
樓主思路同我常用思路應同
如下復一個流星燈程序參考

#include<reg52.h>
unsigned int led=0x0;
unsigned char Duty_ratio[3]={75,90,98};
unsigned char freq,i,j;
void init(void)
{
        TMOD=0x02;     
        TL0=TH0=0xff-200;  
        TR0=1;                               
        ET0=1;                       
        EA=1;               
}

void timer0(void) interrupt 1
{
        freq++;
}

void PWM(void)
{
        led=0x01;
        for(j=0;j<3;j++)
        {
                led=led<<1;
                if(freq>Duty_ratio[j]) led=led+1;
        }
}

void main(void)
{
        init();
        while(1)
        {
                if (freq>=100)  
                {
                        freq=0;
                        i++;
                        if(i>=90) i=0; //移動速度
                }
                PWM();
                P1=~((led<<(i/5))>>4);
        }
}
ID:639666 发表于 2019-11-12 07:14
很好的思路,赞一个。
ID:296417 发表于 2018-4-13 15:12
楼主可以分享代码吗?谢谢!

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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