最近使用CC1110做了一个433M电路。
硬件电路基本是使用一个26M的外部晶振,没有外部独立的32.768k晶振,使用内部晶振作为休眠时钟。
软件工作流程是上电后初始化完成后进入PM2休眠模式,休眠周期为1秒。每次唤醒后采集并发送一次数据。之后再次进入休眠模式。
小批量调试时,未发现问题。
大批量时(几百只),发现其中至少1/3是无法发送数据的。
针对这一现象,做了以下调试和调整过程:
1.检查时钟切换,过程如下:
全部晶振上电 SLEEP &= ~SLEEP_OSC_PD; 同时等待稳定 while( !(SLEEP & 0x40) );(切换到外部晶振)或while( !(SLEEP & 0x40) );(切换到内部高速RC)
设置时钟源CLKCON = (CLKCON & ~CLKCON_CLKSPD) & (~0x40) ;(外部晶振 )CLKCON = (CLKCON & ~CLKCON_CLKSPD) | CLKCON_OSC | CLKSPD_DIV_4;(内部高速RC)
等待设置成功while ( (CLKCON & CLKCON_OSC) ) ;(晶振)while ( !(CLKCON & CLKCON_OSC) )(高速RC)
2.针对PM2的进入代码检查,代码由TI的示例程序复制而来
3.检查系统其它配置
主while循环中的流程为:
切换时钟到外部晶振
采集数据并计算
将数据转换格式,并通过RF发送
切换时钟到内部晶振(***注一)
休眠
代码修改之后,发现如果没有步骤(***注一)的话,原来的好、坏两类电路板均能够发送数据。但是电流均比较大。
如果加入这一步骤,测试发现坏电路板不能发送数据,功耗比较大,正常时都在3.3V@7mA左右,而原来好的电路板仍然能够发送,在不发送的时候仅为3.3V@6uA,发送时也就是几十上百微安。
请教各位,帮我分析一下这种情况是什么原因导致的?
Viki Shi:
内部RC晶振的缺点是精度不如外部,会影响唤醒时间间隔,你排查下是不是这个原因
wooden mutou:
回复 Viki Shi:
感谢您的回复。
内部晶振虽然是精度不太好,但时间也不会差太多。程序是1秒发送一次并且好板子也是这样运行的,但是坏板子等待几分钟 也不会发送一次数据。个人认为不是精度问题的。
wooden mutou:
回复 wooden mutou:
另外发现有点奇怪的情况:如果供电不使用SmartRF04仿真器的3.3V输出,直接使用3.6V的电池,则能够发送。发送间隔和正常的有些误差,貌似小于2秒大于1秒的样子。
而且将芯片用热风枪吹下来,再焊接上去,温度未完全凉下来前,如果使用3.3V供电则能够发送,而温度下降到室温的话,就又不能发送数据了。
wooden mutou:
回复 Viki Shi:
我们又进一步测试了一下:我们有两批CC1110,其中几个是样品且较早焊接,这些供电测试发现低至1.9V电压仍然能够正常工作,数据也正常发送。而大批量的芯片只有在3.3V才能正常发送,其中好板和坏板实际上仅差0.1V:好板供电3.3V即可正常发送,坏板需要的电压为3.4V才能发送供电3.3V就不行了。以上供电测试时,脱开了所有的其它电路,是使用直流电源直接对CC1110供电的。不知道这种情况是如何造成的,以及是否有针对这种情况的好的解决方案。
Viki Shi:
回复 wooden mutou:
根据描述,怀疑是焊接问题,芯片管脚有虚焊的话会影响功率。建议断开负载测试芯片能否正常输出电压
da qin zheng sheng:
可能是晶振质量?另外低功耗建议使用外部32k晶振!