[51单片机] 51单片机,输出5路占空比为50%频率可变的PWM。

[复制链接]
3766|7
 楼主| sorm 发表于 2014-9-16 10:23 | 显示全部楼层 |阅读模式

51单片机,输出5路占空比为50%频率可变的PWM。
定时器只输出固定频率的PWM,再通过设计计数器改变频率上限。请问大家有什么好的思路。
ayb_ice 发表于 2014-9-16 11:29 | 显示全部楼层
一般是频率固定,脉宽可调
ayb_ice 发表于 2014-9-16 11:38 | 显示全部楼层


typedef unsigned char        U8;
typedef unsigned char        bool;

typedef struct{
        U8 set;
        U8 run;
        bool out;
}t_PWM;

t_PWM pwm[5];


void pwm_set(U8 index, U8 set)
{
        if(index >= 5){
                return;
        }

        pwm[index].set = set;
}

void isr_t0(void) interrupt 1
{
        U8 i;

        reload_1ms();        // 100uS,250us,500us....

        for(i=0; i<5; i++){
                if(++pwm[i].run >= pwm[i].set){
                        pwm[i].run = 0;
                        pwm[i].out ^= 1;
                }
        }

        P0_0 = pwm[0].out;

}

void main(void)
{
        U8 set = 1;

        init();

        while(1)
        {
                delay(3SECOND);

                pwm_set(0, set);
                set++;
        }
}
coody 发表于 2014-9-16 11:50 | 显示全部楼层
不明白“定时器只输出固定频率的PWM,再通过设计计数器改变频率上限”这是什么意思。

50%的PWM。不就是波嘛。你要求的最高输出频率、频率步进分别多少? 最高频率不高的话,可以考虑模拟DDS的方式。
 楼主| sorm 发表于 2014-9-16 16:06 | 显示全部楼层
coody 发表于 2014-9-16 11:50
不明白“定时器只输出固定频率的PWM,再通过设计计数器改变频率上限”这是什么意思。

50%的PWM。不就是波 ...

输出5路互不干扰,频率可调的方波。1Khz-4Khz
wh6ic 发表于 2014-9-16 16:23 | 显示全部楼层
sorm 发表于 2014-9-16 16:06
输出5路互不干扰,频率可调的方波。1Khz-4Khz

可以找 集成5路以上PCA的51核MCU实现,最高4KHz 50% 占空比,则最小时间125uS,用汇编还是比较容易做五路的。用C做有一定难度(也可以做出来就是)
coody 发表于 2014-9-16 17:17 | 显示全部楼层
可以用任何MCU,产生65536HZ定时器中断,然后模拟DDS输出5路方波,累加字长16位,频率字长16位,步进1HZ,会有一点点抖动,最大抖动时间为1个中断时间(大约15us)。当输出频率比较高时会明显一些,如输出4KHZ时,周期为250us,但是会有15us的抖动。

如果你的MCU速度够快,你同时产生几十路相互独立的频率都可以。
coody 发表于 2014-9-16 17:18 | 显示全部楼层
还有,如果要求抖动小,则可以输出经过RC滤波后接74HC14整形,就可以得到非常稳定的方波了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部