求助:CC2541利用IO口测量电容放电时间的奇怪问题。
尊敬的TI工程师:
您好!我有个问题想向你们请教。
我用CC2541的IO口测量电容放电时间。
P12、P13先为高,然后置P12为AD输入,然后置P13为0,启动定时器1。P12会缓慢下降,下降至低电平阈值时触发定时器中断,从而计算放电时间。
这是一个非常常用的方法。但是在测试时我发现一个奇怪的问题:
我在整个程序中有两个地方触发测量,这里分别叫A处和B处。按理来说,A处和B处应该测出来的值是一样的,因为触发测量后,都是定时器在计量时间。
当R=1M,C=620pF时,A处测出来值为0x0250左右,十分稳定,大约1%的抖动;B处测出来值也为0x0250左右,十分稳定,大约1%的抖动。
而当R=1M,C=10nF时,A处测出来值为0x1C00左右,数值抖动有些大,大约有10%的抖动范围;但B处测出来值却在0x1100和0x1900之间来回跳动,像0x11XX、0x11XX、0x19XX这样,大约2:1的出现概率。抖动范围非常大,并且和A处测出来的值大相径庭。
我感觉就是定时器1的计时时间一长,就会有这个问题。求教高手,可能是什么原因?
会不会是定时器计时时间长了以后,与OSAL的运行哪里出现了冲突?
上述测量是我用电池供电情况下测的。而当我用USB仿真器插着我的板子供电时,即使R=1M,C=620pF,B处测出来的值也会在B处测出来值却在0x1100和0x1900之间来回跳动,与上面不同的是,值是从0x11XX逐渐增大到0x19XX,然后再下降到0x11XX。
电池供电和仿真器供电的区别,应该是仿真器供电,cc2541就不进入休眠吧。为何会这样呢?
求高手帮助!十分感谢!
不好意思,拜读两边没太看懂:-)
但不管怎样,P13加个FET,通过沟道开关应该是更稳定的。
另,P口电压都是3V吗?(两种工作状态下)可以用示波器看看纹波啥的,而且也可以检测一下放点曲线的区别。
AZ,
非常感谢回复!
我确认了,放电波形没有问题。
我定位了我问题的原因,只要禁止休眠测量值就正确且稳定了。
因为当外部时间达到10ms时,启动定时器计数一段时间后,OSAL让MCU进入了休眠PM2模式,定时器被关闭了。造成测量不准。
我现在在每次测量时,先关闭休眠,测量完再打开就OK了。不过这样就是测量时不能休眠,比较费电,我电池能用的时间缩短了很多。
有什么办法,既可以让MCU休眠,又可以让定时器在休眠时继续计数吗?
或者有什么其他建议?
非常感谢!
Frank