微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2541蜂鸣器频率问题,Timer 输出波形不稳定

CC2541蜂鸣器频率问题,Timer 输出波形不稳定

时间:10-02 整理:3721RD 点击:

CC2541上连接无源蜂鸣器的频率问题大家是怎么解决的?我用 Timer1 PWM方式和中断方式均可设定频率,但是声音不稳定,明显感觉到频率在急剧下降,蜂鸣器正常一下迅速到几乎只有轻微的哒哒响。

找了好久发现如果编译时去掉 POWER_SAVING 宏就很正常,不去掉在定时期间系统频率时刻在变化,Timer1没有一个稳定的输入时钟,输出的波形频率与设定值偏差巨大,同时,我用中断方式在中断例程里进行计数来决定结束时间,设定蜂鸣器响1秒,实际上要响90秒,频率降了90倍!而这些在去掉 POWER_SAVING 宏后就不会发生。

去掉POWER_SAVING 宏显然很不现实,改用 CLEAR_SLEEP_MODE();  和 pwrmgr_attribute.pwrmgr_device = PWRMGR_ALWAYS_ON;  禁止睡眠,但响声仍然是“哒哒哒....嘀  哒哒哒....嘀 ...”,显然,哒哒哒是系统时钟切换到了16MHZ,“嘀”时蓝牙启动了广播,系统时钟切换回32MHZ了,晕!

这大概也是以前有些人问为什么设定频率100HZ实测只有50HZ的原因了。

2541 Timer 不能输出稳定的波形吗?随系统时钟频率的切换而输出各种各样的波形?大家是如何解决频率设定的问题的?如何获得稳定的频率?

贴出实验用代码:


void Buzz()
{
//1.
P0DIR |= 0x08; //set P0.3 as output

P0SEL |= 0x08; //set P0.3 as peripheral

//2.
PERCFG = (PERCFG & ~0x40) | 0x03;

P2DIR |= 0xC0; //Give priority to Timer 1

//3.
T1CTL = 0x00; //stop time 1 if it is running

//4.
T1CC0L = 0xC8; // 1480
T1CC0H = 0x05;

T1CC1L = 0xE4; // 740
T1CC1H = 0x02;

T1CCTL1 = 0x34;//

T1CNTL = 0; // Reset timer to 0;
T1CNTH = 0; // Reset timer to 0;

T1CTL = 0x06; // Div = 8, Modulo
}

试试注释掉代码里面的如下函数

  HCI_EXT_ClkDivOnHaltCmd( HCI_EXT_ENABLE_CLK_divIDE_ON_HALT );

用的是SimpleBLEBroadcaster做的实验,项目里没有发现有调用 HCI_EXT_ClkDivOnHaltCmd () 函数的地方

在SimpleBLEBroadcaster_Init添加

HCI_EXT_ClkDivOnHaltCmd( HCI_EXT_DISABLE_CLK_divIDE_ON_HALT );

这行代码试试

cedar_xuesong 你好!

谢谢,试过了,没有看到效果,协议栈在这个问题上似乎欠考虑,pdf上说Timer1的系统时钟源是32MHZ,或16MHZ的OSC,实际上Timer的输入时钟源甚至可以是32.768KHZ的睡眠时钟,且应该在定时过程中随意变换,一次定时过程中没有一个唯一的输入时钟源,用led灯去做实验,亮灭的情况更清楚地看到这一点

不知道你们在做这些事情的时候是用了什么方法。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top