打印

2007年9月专题讨论----PWM的讨论

[复制链接]
楼主: 救火车
手机看帖
扫描二维码
随时随地手机跟帖
41
maychang| | 2007-9-2 18:12 | 只看该作者 回帖奖励 |倒序浏览

建议所长

把PWM工作与双积分A/D工作对比,这样才可以让众网友理解更深刻。

使用特权

评论回复
42
zhang123| | 2007-9-2 18:37 | 只看该作者

路过 我比较关心 CPLD FPGA 生成PWM

使用特权

评论回复
43
su_tech| | 2007-9-2 21:40 | 只看该作者

这个题目有味道,争取半个月脱忙

使用特权

评论回复
44
coldra| | 2007-9-2 21:40 | 只看该作者

关注

使用特权

评论回复
45
iC921| | 2007-9-2 22:43 | 只看该作者

匠人找到个帅才了!

这样的活动,实在是太棒了。让不让我们“盗版”呀?

使用特权

评论回复
46
dai_weis| | 2007-9-2 23:53 | 只看该作者

PWM方面我只做过LED背光的调节

其他的还没有用到

使用特权

评论回复
47
edanzg| | 2007-9-3 00:06 | 只看该作者

关注中ing...

PWM我只弄过模拟的,以前大概花了1个月时间摸索过,对驱动及输出部分有所了解。 关注单片机的PWM处理方法。。。

使用特权

评论回复
48
mannerfh| | 2007-9-3 10:23 | 只看该作者

郁闷了

前天发了N次,也发不上来!
    之前,我把占空比和周期混在一起了(古道热肠也帮我指出来了)。
    在我用过的带有PWM模块的单片机中,是D/A的一种。大致原理是这样的:有一个计数器,两个16位的比较器。其中,一个比较器用于控制占空比(比较器1),一个用于控制一个脉冲的周期。
    运行时,计数器自动加一个步长(可设置,相当于加几是自己定),输出D/A值。
    在当计数器的数与比较器1中的设定值相等时,则开始输出低电平
    在当计数器的数与比较器2中的设定值相等时,则计数器重要开始计数,下一个周期开始。
     输出的电平在经过RC滤波平滑处理后,输出。
     图我没发过不知道怎么发,就用文件的形式发了,请高手指点,下次改正。
相关链接:https://bbs.21ic.com/upfiles/img/20079/200793102341759.pdf

使用特权

评论回复
49
zhf0964| | 2007-9-3 10:38 | 只看该作者

先留个记号。

使用特权

评论回复
50
大大山| | 2007-9-3 12:19 | 只看该作者

PWM波实现..

PWM波软件实现很容易,用循环程序可以实现所有不同的PWM波.
如果要用硬件来实现的话,就可以用555定时器来实现
总而言之,PWM波的实现只要能够输出各种占空比的方波即可

使用特权

评论回复
51
救火车|  楼主 | 2007-9-3 18:51 | 只看该作者

学习中。。。

使用特权

评论回复
52
hsw_21| | 2007-9-3 20:14 | 只看该作者

这个论题很好,值得深入研究。

使用特权

评论回复
53
Swd21ic| | 2007-9-3 20:43 | 只看该作者

PWM..

呵~哪位用PWM做音频有经验指导下哦..

小弟要用PWM驱动扬声器,基于SPWM原理..

前段时间做出单频音来了..500HZ.1000Hz.2000Hz等..
用录音软件录下后,发现谐波成分存在,我是用16K的采样率(PWM周期),最严重的问题就是喇叭发出的声音包含有16K的载波频率...听起来噪音很严重..

有点郁闷.. 我后面没加滤波的,直接占空比变化的PWM接喇叭(利用喇叭的感性)

使用特权

评论回复
54
古道热肠| | 2007-9-4 11:04 | 只看该作者

大家多说说具体如何用的吧。

   我现来开个头,我做过单片机的PWM输出控制LED亮度的试验。
1、选用单片机 P89C51RA2 DIP40封装
2、硬件架设,将P89C51RA2替换ME5103仿真器的8031单片机,并在P14引脚串联电阻后接一发光二极管到VCC.
3、实现功能:发光管由亮变暗,短暂停顿后,由暗变亮。
4、软件源代码:

#define uint     unsigned int 
#define uchar     unsigned char
#define ulong     unsigned long
#define bool bit
#define true 1
#define false 0

sbit c_PWM_LED = P1^4;
sfr CCON = 0xD8;
sfr CMOD = 0xD9;
sfr CL   = 0xE9;
sfr CH   = 0xF9;
sfr CCAP0L = 0xEA;
sfr CCAP1L = 0xEB;

sfr CCAP0H = 0xFA;
sfr CCAP1H = 0xFB;

sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sbit CR = 0xDE;

sbit c_MCBoard_LED = P1^4;
#define c_MAX_PWM_Value      0xFE
#define c_Min_PWM_Value      0x02
#define c_StepValue          0x01
#define c_DelayCount   0x100
void TestPWMLED(void)
{
    ulong ulCount;
    uchar ucTempValue;

    CMOD = 0x02;
    CL = 0x00;
    CH = 0x00;
    CCAP0L = 0x10;
    CCAP0H = 0x10;
    CCAPM0 = 0x42;

    CCAP1L = 0x10;
    CCAP1H = 0x10;
    CCAPM1 = 0x42;

    CR = 1;
    ucTempValue = 0;
    while(1)
    {
        while(1)
        {
            if(ucTempValue < c_MAX_PWM_Value)
            {
                ucTempValue += c_StepValue;
            }
            else
            {
                break;
            }
            
            CCAP0H = ucTempValue;
            CCAP1H = ucTempValue;

            for(ulCount=0; ulCount<c_DelayCount; ulCount++)
            {
                ;
            }

        }

        for(ulCount=0; ulCount<0x10000; ulCount++)
        {
            ;
        }


        while(1)
        {
            if(ucTempValue > c_Min_PWM_Value)
            {
                ucTempValue -= c_StepValue;
            }
            else
            {
                break;
            }
            CCAP0H = ucTempValue;
            CCAP1H = ucTempValue;

            for(ulCount=0; ulCount<c_DelayCount; ulCount++)
            {
                ;
            }

        }

        for(ulCount=0; ulCount<0x10000; ulCount++)
        {
            ;
        }

       }

    while(1)
    {
        for(ulCount=0; ulCount<0x1000; ulCount++)
        {
        }
        c_PWM_LED = 0;
        for(ulCount=0; ulCount<0x1000; ulCount++)
        {
        }
        c_PWM_LED = 1;
    }
}

使用特权

评论回复
55
孤独泪| | 2007-9-4 12:39 | 只看该作者

好,好题目

使用特权

评论回复
56
5_0_5| | 2007-9-4 12:56 | 只看该作者

贴个PIC汇编的软件模拟PWM


200ms调一次脉宽
一次变动0.4ms
周期为20ms
    list      p=16F54
    #include <p16f5x.inc>

    __CONFIG   _CP_OFF & _WDT_OFF & _HS_OSC


WIDE    EQU        11H
DO_200M    EQU        12H
TURN    EQU        13H
MID        EQU        14H
        ORG     0x1FF            ; processor reset vector
        GOTO    START
        ORG     0x000

;初始化
START    NOP
        CLRF    10H
        MOVFW    10H
        TRIS    PORTB
        CLRF    PORTB
        BSF    PORTB,3
        MOVLW    02H
        OPTION            ;8分频
        MOVLW    .206
        MOVWF    TMR0    ;定时400us
        MOVLW    .50
        MOVWF    WIDE    ;脉宽20ms
        MOVLW    .10
        MOVWF    DO_200M    ;200ms调整一次占空比
        MOVLW    .50
        MOVWF    TURN    ;初值为全占空
        MOVWF    MID
LOOP    ;0.4ms
        MOVFW    TMR0
        BTFSS    STATUS,Z
        GOTO    LOOP
LOOP1
        MOVLW    .206
        MOVWF    TMR0
        ;灭
        DECFSZ    TURN,F    ;
        GOTO    $+4
        BSF    PORTB,2
        MOVFW    MID
        MOVWF    TURN
        ;判断是否为20ms
        DECFSZ    WIDE,F
        GOTO    LOOP
        ;亮
        BCF    PORTB,2
        MOVLW    .50
        MOVWF    WIDE
        MOVFW    MID
        MOVWF    TURN
        DECFSZ    DO_200M,F
        GOTO    LOOP
        ;递减脉宽
        MOVLW    .10
        MOVWF    DO_200M
        DECFSZ    MID,F
        GOTO    LOOP
        BSF        PORTB,2
        BCF        PORTB,3
        GOTO    $

使用特权

评论回复
57
yewuyi| | 2007-9-4 13:24 | 只看该作者

俺只对用PWM做步进电机细分感兴趣……

使用特权

评论回复
58
ddb_21ic| | 2007-9-4 22:19 | 只看该作者

Microchip 16bit会上,就是有个pwm音频演示

不过重点是介绍软件滤波

使用特权

评论回复
59
dwq175| | 2007-9-5 14:56 | 只看该作者

脉冲调制

pwm就是脉冲调制,通过调制高(或低)电平所占脉冲周期的时间(占空比),
来控制输出的接通时间,以达到功率控制.一般的开关电源都是使用此原理
来稳压的.还有白光LED使用PWM来控制功耗.

使用特权

评论回复
60
lyon.wang| | 2007-9-5 15:08 | 只看该作者

PWM 挺有意思

之前用STC12系列的一款芯片,用到了它的AD采样和PWM输出
AD采回热敏电阻的电压变化,然后改变占空比控制风扇启动~
但不能完全实现PWM输出高电平或低电平,这是为什么?

使用特权

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

本版积分规则