This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2650MODA:如何使用纽扣电池实现一年的运行时间?

Guru**** 2561400 points
Other Parts Discussed in Thread: CC2640, CC2650MODA, CC2650

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/569373/cc2650moda-how-to-reach-a-year-of-runtime-on-a-coin-cell

器件型号:CC2650MODA
Thread 中讨论的其他部件:CC2640CC2650

您好!

我构建了一些基于 CC2640 4x4模块的电池供电 BLE 开关、这些开关在电池寿命方面似乎按预期工作。
我现在正在过渡到 CC2650MODA、并尝试构建一个简单的接触传感器。 我的 PCB 非常简单、主要由 CC2650MODA 和一个连接在其中一个 GPIO 与 GND 之间的簧片开关组成。
我已经修改了我的现有代码以支持 CC2650MODA (主要为5x5封装提供必要的定义)、现在我将对其进行测试。
在中央侧、我有一个运行基于 Bluez 5.43的应用程序的 Raspberry Pi、该应用程序连接到器件、并根据我的接触传感器特征注册 GATT 通知。

我已经连接了 CR2032、在一天之内、电池电量(由电池监控器服务指示)从100%下降到40%(我的电池服务配置为3V 最大值和2.1V 最小值)。

就连接间隔而言、我具有以下配置:

//可发现器件时的广播间隔(625us、1600=1的单位)
#define DEFAULT_advertising_interval 1600

//如果启用了自动
//参数更新请求
,则最小连接间隔(单位为1.25ms,80=100ms)#define DEFAULT_MILLED_CONN_INTERVAL 80

//如果启用了自动
//参数更新请求
,则最大连接间隔(单位为1.25ms,200=250ms)#define DEFAULT_REGIND_MAX_CONN_INTERVAL 200

//启用自动参数更新请求时使用的从器件延迟
#define DEFAULT_NEXT_SLAVE 3

//如果
启用了自动参数//更新请求
#define DEFAULT_MILLED_CONN_TIMEOUT,则监控超时值(10ms、1000=10s 的单位) 1000 

假设我正确理解了文档、CC2650应每秒唤醒一次(因为它可以跳过250ms 窗口的3倍)、除非它有发送通知。

我附加了自定义电路板文件、并定义了以下符号(以及其他符号):
BOOSTXL_CC2650MA
省电

我没有任何专用工具、例如功率分析仪、甚至是示波器、而只是万用表。
借助它、我可以测量(3V 时)~35uA 的峰值(似乎很低、但可能是由于我的 DMM 的灵敏度或缺乏灵敏度)。
一旦我将磁体放在簧片开关附近、该读数就会上升到相当恒定的~200uA、就好像器件没有进入睡眠状态一样。
我缺少什么吗? 为了使用此设置实现1年的电池寿命、我应该怎么做?

提前感谢、
Assaf

e2e.ti.com/.../2577.board.he2e.ti.com/.../2553.board.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您是否使用与4x4设置相同的连接间隔等?

    -弥敦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Assaf、您好!

    如 Nathan 所示、您需要确认 BlueZ Central 设备实际上正在为您请求的连接参数配置连接。 您可以使用监听器或查看 BlueZ 侧的日志。

    您确实需要一个能够测量~ 1uA 的测量设备。 由于在 BLE 连接事件期间电流会发生变化、因此 DMM 是不够的。 我们建议使用 SWRA478应用手册中的过程。

    作为一个静态测试、你可以注释掉 main.c 中的任务初始化函数、这样在调用 BIOS_start()后、不会创建或启动任何任务。 您应该能够测量~ 1.2uA。 如果没有、则检查 IO 上是否有任何泄漏。

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    @Nathan、是的。 它是完全相同的代码库。 只更改了封装类型定义和引脚定义。

    @jxs、我已经注释掉了 main()函数中的所有内容(甚至预处理器删除的部分)、只剩下对 BIOS_start()的调用。
    我测得的电流为3.14mA。 我还加载了 simple_peripheral_cc2650em_app 示例。 在工程属性中将 CC26XXXXXX 符号更改为 BOOSTXL_CC2650MA,并从 main()中删除了所有内容,但其读数仍然相同。 甚至擦除了整个闪存、以确保堆栈映像不执行任何操作。
    该测试是在裸 CC2650MODA 上执行的、电线直接焊接到所需焊盘上、除复位线路上的8.2k 上拉电阻外、任何其他 GPIO 都不连接。

    我使用 的是 ble_sdk_2_02_01_18和 tirtos_cc13xx_cc26xx_2_20_01_08。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否可以从您那里接收此类映像的预编译版本? 一个除了空闲之外什么也不做的事情、这样我们就可以看到我的问题是构建图像还是测量电流?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    在 main()函数中,还需要调用 PIN_init (BoardGpioInitTable);它会为您初始化电源模块。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗨、Christin、

    谢谢。 我添加了一个空表(仅使用 PIN_TERMINATE)的呼叫。
    测量裸 CC2650MODA 现在可以看到25uA 和30uA 之间的值、因此绝对要好得多。

    我需要做些什么才能达到难以捉摸的1uA?
    如果芯片应该处于待机状态而没有任何计时器/中断来唤醒它、那么为什么电流会随时间变化?

    再次感谢、
    Assaf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在这里、您可以找到更多有关待机模式下再充电脉冲的信息。

    您还需要确保没有泄漏电流通过 IO 到外部组件。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Christin、

    [引用 user="Christin Lee "]在这里、您可以找到有关待机模式下的再充电脉冲的更多信息。
    我已经阅读了该应用手册、但即使充电、我也不应该达到25uA。

    无论如何、经过几次尝试后、我以某种方式达到了在0至2uA 之间波动的测量值、峰值为4uA。 我猜这会像我要得到的那样低。
    现在、在这种状态下、无论何时我将其中一个 GPIO 连接到 GND (正如磁体附近的簧片开关所做的那样)、该数字都上升到200uA。 这是预期吗? 我可以做些什么来保持这个数字较低、因为这通常是正常运行状态。

    谢谢、
    Assaf

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Assaf、

    您的 DMM 无法测量1uA 值对应的平均电流。

    当您观察到200uA 时、您的软件是否会对检测磁场的开关做出任何响应? 此外、有多少电流流经引脚?

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嘿、JXS、

    在器件上刷写的映像包含注释内容、因此不执行任何操作。 GPIO 上甚至没有设置中断。
    我在 GPIO 和 GND 之间测量了~196uA。

    谢谢、
    Assaf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果重要、我的 BoardGpioInitTable 包括:
    Board_contact | PIN_INPUT_EN | PIN_PULLUP | PIN_迟滞、

    我在我的定制 PCB 和独立 CC2650MODA 上测量了相同的电流。 当连接到 GND 时、只有在 BoardGpioInitTable 中定义的 GPIO 会导致电流上升至~200uA。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的 Board_contact 是哪个 IO? 它是否连接到任何其他外部组件?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ioID_0。 无其他连接。
    连接到簧片开关一侧的 GPIO、开关另一侧的 GND。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    IOID_0连接到簧片开关、然后再连接到 GND。 执行测量时、您的开关是打开还是关闭? 如果开关闭合、并且引脚配置为上拉并接地、则肯定会有泄漏电流。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当开关打开时、Get ~1uA、Closed 为~200uA。

    请原谅我在这里的无知,但我有什么办法来处理这个问题?
    如果没有上拉电阻、GPIO 将悬空、对吧?

    我看到传感器标签正在使用下拉电阻器并将簧片开关连接在 GPIO 和 VCC 之间、这在开关关闭时会有多大影响吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Assaf:

    与任何类型的开关一样、当开关因流经拉电阻器的电流而闭合时、电流消耗会增加。 无论开关连接到 VDD 并使用下拉电阻器、还是开关接地并使用上拉电阻器、这都是相同的。 如果您绘制实际电路、应该非常清楚。

    一般的想法是、通常只会在很短的时间内关闭开关、因此电流消耗无关紧要。

    为了降低电流消耗、您可以使用一个较大的外部电阻器进行拉电阻。 或者、如果您的应用要求簧片开关大部分处于关闭状态、并且您需要检测其何时打开、则可以重新配置拉拔方向并以特定的间隔轮询 IO。

    谢谢、
    Fredrik
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Fredrik、

    感谢您提供信息。
    通过查看 CC2650数据表、我可以在第5.25节(直流特性)中看到、一般来说、下拉电流低于上拉电流。 这是否意味着使用下拉会消耗更少的电流?

    我没有找到任何内部拉电阻器电阻的基准、因此我不确定什么会构成"大电阻器"。 1M?

    为了确保我理解您的最终建议、假设我将电路保持原样、将簧片开关连接到 GND。 您建议当开关闭合时、我使用下拉电阻器、并且每 X 毫秒将其设置为上拉并读取 GPIO。 如果 GPIO 为低电平(开关仍然闭合)、我再次设置下拉电阻并等待下一个间隔。 如果它为高电平(开关现在断开)、我应该离开上拉电阻并等待(中断?) 直到它再次变为低电平。
    从传感器控制器而不是应用 CPU 执行该操作是否有意义? 还是不值得努力?

    再次感谢、
    Assaf
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    因此、研究其他解决方案时、SPDT 簧片开关将是理想之选、因为这样我就完全无需使用拉电阻器、但这不会帮助我处理其他类型的类似开关的输入。

    另一种选择是使用类似这样的东西:

    并使数字输出与输入保持同步。 这意味着我可以使用中断、而不是轮询、这总是很有趣的。 只是不确定当开关从闭合位置移至断开位置时会发生什么情况、如果这是我可以检测到的情况并再次启用上拉电阻器的话。