dopuda 发表于 2011-1-30 16:48:41

M051的PWM在工作的时候怎么改变其占空比?

我用的是NuTiny-SDK-M051,程序是基于固件库的。按照例程程序写完后用示波器看能看到PWM波形。但是我想要改占空比的话就不行了。我是使用一个定时器,在callback程序中加上了        DrvPWM_SetTimerClk(DRVPWM_TIMER0, &sPt); 函数,但是用示波器看PWM的波形并不随着新的sPt参数而变化。

想请教一下如何在PWM工作的时候改变占空比?

machao 发表于 2011-1-30 19:44:10

好象m051的T/C和PWM是分开的,T/C没有产生PWM的功能,产生PWM有专用的PWM硬件,可产生4路16位的PWM和8路8位PWM。
建议:
1。一定要仔细看器件手册
2。先采用直接操作寄存器的方法进行学习
3。积累一定的经验后,再看是否可以使用库

改变PWM占空比:
1。肯定是改写比较寄存器的值
2。任何时间都可以改写,但PWM方式会在一次PWM完成后自动采用新的值(通常采用双缓冲器方式)

以上基本上任何新MCU的PWM都是这样的。

dopuda 发表于 2011-1-30 19:56:31

谢谢马老师,我的意思是我只是用一个定时器产生中断然后在中断服务里来该变PWM占空比,其实就是想起到一个定时改变占空比的效果,方便用示波器来看效果。

那我再用直接操作寄存器的方法试试吧。

再次感谢马老师

machao 发表于 2011-1-30 21:22:37

你还真的把M051当做8051来使用了。

用定时器,配合中断的方法产生PWM是没有办法的办法。有专用的PWM功能为何不用,即简单方便,产生PWM波也准确。

从8051到M051,在水平能力上至少要提高2级,硬件使用要提高,软件编程也要提高的。

tyou 发表于 2011-1-31 01:38:01

在线改变duty cycle 要么用interrupt,要么pwm频率很快的话,只能轮询
当然不在乎pwm忽然来了不确定的周期的话,无所谓,直接改cnr cmr

liu100149 发表于 2013-6-13 15:13:58

我的M051PWM没输出,我看了所有 的配置都对的是那的问题
P2_MFP &= ~(P20_AD8_PWM0 |P22_AD10_PWM2);
        P2_MFP |= (PWM0|PWM2);          //使能P2.0~P2.3为PWM输出
P2_PMD &= ~Px0_PMD;                      //配置P2.0,P2.2为推挽输出
        P2_PMD |= Px0_OUT;
P2_PMD &= ~Px2_PMD;
        P2_PMD |= Px2_OUT;
APBCLK |= PWM01_CLKEN|PWM23_CLKEN;       //使能PWM0,2时钟
        CLKSEL1 = PWM_CLOCK_SOURCE;                //选择PWM0,2时钟源HCLK/12MHz
        PPRA = PWM_PRESCALAE;//选择PWM0,2时钟预分频
CSRA = PWM_CLOCK_DIVIDER;                //选择PWM0,2时钟分频
        CNR0A =CNR2A =PWM_CNR_VALUE;             //PWM0,2计数值PWM_CNR_VALUE
CMR0A =CMR2A = PWM_CMR_VALUE;            //PWM0,2比较值        PWM_CNR_VALUE
        CAPENRA=0x00;                            //禁能捕获功能
        PCRA |= 0x00080008 | PWM_OUTPUT_INVERT ; //PWM0,2自动重装载
        PIERA|=PWMIE2                        //使能PWM0~3中断
                              |PWMIE0;       
        NVIC_ISER |= PWMA_INT;                   //使能PWM0~3中断
        POEA = PWM_OUTPUT_ENABLE;                //PWM输出使能
PCRA |= PWM_ENABLE;                      //PWM使能,启动

liu100149 发表于 2013-6-13 15:14:25

不知是那里还没有配置到呢
页: [1]
查看完整版本: M051的PWM在工作的时候怎么改变其占空比?