涵潇舒雅 发表于 2017-11-16 16:36:58

新塘N76E003 为何修改PWM频率,需要等待6s以上时间?

本帖最后由 涵潇舒雅 于 2017-11-16 16:38 编辑


如上图所示,当设置完PWM的频率及占空比之后,需要等待至少6s的时间,如黄色箭头所示,我修改2次,等待6S以上,PWM才会有输出,不知道有没有用过的?
set_LOAD;

while(1 == LOAD);

FireHe 发表于 2017-11-16 16:43:16

不可能啊。这个肯定是代码的问题

有些没有细节不够到位的的MCU设计,可能会有一些时钟延时,但任何一家都不可能有6s的,定时器都没这么长的位

leafstamen 发表于 2017-11-16 16:55:17

这是你pwm的duty吧

涵潇舒雅 发表于 2017-11-16 17:31:51

FireHe 发表于 2017-11-16 16:43
不可能啊。这个肯定是代码的问题

有些没有细节不够到位的的MCU设计,可能会有一些时钟延时,但任何一家都 ...

if ( ( fre != frePrev || k_hz != K_HZ ))
    {

      if ( fre == 0 )
      {
            PWM1_Stop();
            flag = 1;
      }
      else
      {
            if ( flag == 1 )
            {
                flag = 0;
                PWM1_Start();
            }

            arrf = ( float ) Afresh_PWM1_Init ( fre, K_HZ ) / fre ;//根据频率计算需要装载的值
            arr = ( u16 ) arrf - 1;
      }

      PWMPH = arr / 256;
      PWMPL = arr % 256;//更新PWM的频率

      dutyPrev = 0;
      frePrev = fre;
      k_hz = K_HZ;
      change_f = 1;
    }

    if ( dutyPrev ^ duty )
    {
      ccr = ( ( u32 ) arr * ( 100 - duty ) ) / 100 ;
      PWM3H = ( ccr / 256 );
      PWM3L = ( ccr % 256 );
      dutyPrev = duty;
      change_f = 2;
    }

    if( change_f != 0)
    {
      set_LOAD;

      while(1 == LOAD);//等待更新完毕
      change_f = 0;
    }

以上是PWM频率及占空比的设置,不知道问题出在哪里~

涵潇舒雅 发表于 2017-11-16 17:35:50

leafstamen 发表于 2017-11-16 16:55
这是你pwm的duty吧


看这个图会明显,确实是需要等待6S~~~{:cry:}

mandey 发表于 2017-11-16 19:14:24

使用不当吧,我用PWM来驱动蜂鸣器,带声调的,即时变频率。

涵潇舒雅 发表于 2017-11-16 20:51:17

mandey 发表于 2017-11-16 19:14
使用不当吧,我用PWM来驱动蜂鸣器,带声调的,即时变频率。

也是新塘N76E003吗?能否看看您怎么做的?

mandey 发表于 2017-11-16 21:23:50

涵潇舒雅 发表于 2017-11-16 20:51
也是新塘N76E003吗?能否看看您怎么做的?

         这里下断点   -〉set_LOAD;

    while(1 == LOAD);//等待更新完毕
   这里下断点   -〉change_f = 0;

看会不会卡在while里,如果不会,那就是其他问题了,因为规格书上写的就是LOAD=1就是下一个波形就生效

lxa0 发表于 2017-11-16 21:31:57

没碰到这种情况~~~~~~~

zqf441775525 发表于 2017-11-16 21:39:31

我用过N76E003,PWM还是很正常的

Ray______ 发表于 2017-11-16 22:47:07

没遇到过。不过想问下楼主知道76E003的外部晶振是怎么接吗,不会是只能接有源吧?

zqf441775525 发表于 2017-11-17 08:39:07

Ray______ 发表于 2017-11-16 22:47
没遇到过。不过想问下楼主知道76E003的外部晶振是怎么接吗,不会是只能接有源吧? ...

根据我的理解,是只能接有源晶振

szxszx 发表于 2017-11-17 09:32:30

用PWM驱动无源蜂鸣器,很正常:
//PWM驱动无源蜂鸣器:PWM frequency = Fpwm/((PWMPH,PWMPL) + 1) = (16MHz/4)/(0x7A0 + 1) = 2048Hz
#define BUZZER_IO_CONFIG    P04_PushPull_Mode;   \
                                             P04 = 0;   \
                                             PWM_IMDEPENDENT_MODE; \
                                             PWM_CLOCK_DIV_4; \
                                             PWMPH = 0x07; \
                                             PWMPL = 0xA0; \
                                             PWM3H = 0x03; \
                                             PWM3L = 0xD0; \
                                             set_LOAD; \
                                             set_PWMRUN
                           
#define BUZZER_ON               PWM3_P04_OUTPUT_ENABLE         //
#define BUZZER_OFF            P04 = 0;PWM3_P04_OUTPUT_DISABLE

wye11083 发表于 2017-11-18 10:47:20

FireHe 发表于 2017-11-16 16:43
不可能啊。这个肯定是代码的问题

有些没有细节不够到位的的MCU设计,可能会有一些时钟延时,但任何一家都 ...

我怎么感觉他主频不会太高,尤其是看到32位除法,10hz,感觉他主频很有可能是几khz,这样计算新pwm值就要花6秒。
页: [1]
查看完整版本: 新塘N76E003 为何修改PWM频率,需要等待6s以上时间?