新塘N76E003 为何修改PWM频率,需要等待6s以上时间?
本帖最后由 涵潇舒雅 于 2017-11-16 16:38 编辑如上图所示,当设置完PWM的频率及占空比之后,需要等待至少6s的时间,如黄色箭头所示,我修改2次,等待6S以上,PWM才会有输出,不知道有没有用过的?
set_LOAD;
while(1 == LOAD); 不可能啊。这个肯定是代码的问题
有些没有细节不够到位的的MCU设计,可能会有一些时钟延时,但任何一家都不可能有6s的,定时器都没这么长的位 这是你pwm的duty吧 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频率及占空比的设置,不知道问题出在哪里~ leafstamen 发表于 2017-11-16 16:55
这是你pwm的duty吧
看这个图会明显,确实是需要等待6S~~~{:cry:} 使用不当吧,我用PWM来驱动蜂鸣器,带声调的,即时变频率。 mandey 发表于 2017-11-16 19:14
使用不当吧,我用PWM来驱动蜂鸣器,带声调的,即时变频率。
也是新塘N76E003吗?能否看看您怎么做的? 涵潇舒雅 发表于 2017-11-16 20:51
也是新塘N76E003吗?能否看看您怎么做的?
这里下断点 -〉set_LOAD;
while(1 == LOAD);//等待更新完毕
这里下断点 -〉change_f = 0;
看会不会卡在while里,如果不会,那就是其他问题了,因为规格书上写的就是LOAD=1就是下一个波形就生效 没碰到这种情况~~~~~~~ 我用过N76E003,PWM还是很正常的 没遇到过。不过想问下楼主知道76E003的外部晶振是怎么接吗,不会是只能接有源吧? Ray______ 发表于 2017-11-16 22:47
没遇到过。不过想问下楼主知道76E003的外部晶振是怎么接吗,不会是只能接有源吧? ...
根据我的理解,是只能接有源晶振 用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 FireHe 发表于 2017-11-16 16:43
不可能啊。这个肯定是代码的问题
有些没有细节不够到位的的MCU设计,可能会有一些时钟延时,但任何一家都 ...
我怎么感觉他主频不会太高,尤其是看到32位除法,10hz,感觉他主频很有可能是几khz,这样计算新pwm值就要花6秒。
页:
[1]