搜索
bottom↓
回复: 6

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

[复制链接]

出0入0汤圆

发表于 2011-1-30 16:48:41 | 显示全部楼层 |阅读模式
我用的是NuTiny-SDK-M051,程序是基于固件库的。按照例程程序写完后用示波器看能看到PWM波形。但是我想要改占空比的话就不行了。我是使用一个定时器,在callback程序中加上了        DrvPWM_SetTimerClk(DRVPWM_TIMER0, &sPt); 函数,但是用示波器看PWM的波形并不随着新的sPt参数而变化。

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 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都是这样的。

出0入0汤圆

 楼主| 发表于 2011-1-30 19:56:31 | 显示全部楼层
谢谢马老师,我的意思是我只是用一个定时器产生中断然后在中断服务里来该变PWM占空比,其实就是想起到一个定时改变占空比的效果,方便用示波器来看效果。

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

再次感谢马老师

出0入0汤圆

发表于 2011-1-30 21:22:37 | 显示全部楼层
你还真的把M051当做8051来使用了。

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

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

出0入0汤圆

发表于 2011-1-31 01:38:01 | 显示全部楼层
在线改变duty cycle 要么用interrupt,要么pwm频率很快的话,只能轮询
当然不在乎pwm忽然来了不确定的周期的话,无所谓,直接改cnr cmr

出0入0汤圆

发表于 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使能,启动

出0入0汤圆

发表于 2013-6-13 15:14:25 | 显示全部楼层
不知是那里还没有配置到呢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 20:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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