打印
[51单片机]

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

[复制链接]
3451|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sorm|  楼主 | 2014-9-16 10:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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的方式。

使用特权

评论回复
5
sorm|  楼主 | 2014-9-16 16:06 | 只看该作者
coody 发表于 2014-9-16 11:50
不明白“定时器只输出固定频率的PWM,再通过设计计数器改变频率上限”这是什么意思。

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

输出5路互不干扰,频率可调的方波。1Khz-4Khz

使用特权

评论回复
6
wh6ic| | 2014-9-16 16:23 | 只看该作者
sorm 发表于 2014-9-16 16:06
输出5路互不干扰,频率可调的方波。1Khz-4Khz

可以找 集成5路以上PCA的51核MCU实现,最高4KHz 50% 占空比,则最小时间125uS,用汇编还是比较容易做五路的。用C做有一定难度(也可以做出来就是)

使用特权

评论回复
7
coody| | 2014-9-16 17:17 | 只看该作者
可以用任何MCU,产生65536HZ定时器中断,然后模拟DDS输出5路方波,累加字长16位,频率字长16位,步进1HZ,会有一点点抖动,最大抖动时间为1个中断时间(大约15us)。当输出频率比较高时会明显一些,如输出4KHZ时,周期为250us,但是会有15us的抖动。

如果你的MCU速度够快,你同时产生几十路相互独立的频率都可以。

使用特权

评论回复
8
coody| | 2014-9-16 17:18 | 只看该作者
还有,如果要求抖动小,则可以输出经过RC滤波后接74HC14整形,就可以得到非常稳定的方波了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝