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.

[参考译文] TM4C123BH6PGE:单线协议实施期间 TM4C123BH6PGE 中的电流损耗

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1334210/tm4c123bh6pge-current-loss-in-tm4c123bh6pge-during-one-wire-protocol-implementation

器件型号:TM4C123BH6PGE

大家好、我已实现适用于 TM4C123BH6PGE 的单线协议、该协议具有非常快速的输出至输入转换。 当我尝试读取温度时、一切都正常、但我注意到设备上的电流显著下降。 后来、我断开了单线连接、再次测试了代码、结果发现仍然出现电流损失。 我已经将该电流损耗的来源缩小到该特定操作。

unsigned int OneWireReset(void) {
    OneWireSetOutput();
    GPIOPinWrite(ONE_WIRE_PORT, ONE_WIRE_PIN, 0); // Drive the line low
    delayMicroseconds(480); // Reset pulse time
    OneWireSetInput(); // Release the line
    delayMicroseconds(70); // Wait for presence pulse
    unsigned int OW = OneWireRead(); // Read presence pulse
    delayMicroseconds(410); // Wait for end of timeslot
    return OW; // Return presence pulse status
}


我认为我的电流会由于切换到输入模式过快而出现损失。 是否有人以前遇到过类似问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    当我尝试读取温度时,一切都运行正常,

    只是为了确认、尽管存在电流下降、您在所有条件下都读取正确的数据。 是这样吗?

    Unknown 说:
    但我注意到设备上的电流显著下降。 后来,我断开了单线连接,再次测试代码,但发现我仍在经历电流损失。

    你在说什么?" 如果两种情况下的电流消耗均在数据表规格范围内、那么我实际上并不觉得有问题。 您还可以测量复位电流。 当引脚处于输出状态时、您是在拉电流、具体取决于驱动强度和引脚上的负载。 我并不奇怪它是否高于输入模式。  

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

    是的、我可以很好地读取数据、并且我的设备的所有其他功能似乎都运行良好。

    通常、我使用48V 电压为器件供电、可以观察到电流在1.00和0.98之间波动、但现在电流 在1.00和0.93之间快速波动、

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

    我认为1和0.93之间的差值在您的整个系统上、而不仅仅是 MCU 上、对吗? 另外、 电流的单位是多少? 单位圆之外? 如果它是、则差异是70mA。 整个 MCU 在正常情况下甚至不会消耗超过50mA 的电流。 您需要首先调查/隔离 MCU 只消耗的电量、然后在其他元件消耗电流的情况下调查您的设计。  

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

    "是的、我当前遇到0.70 mA 丢失。 我隔离了 MCU、并且在使用单线协议时观察到电流没有下降。 但是、我注意到通过 I2C 连接到 PCA 卡时出现电流损耗。 将引脚状态从输入更改为输出可能会受到 I2C 通信的影响吗?'

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,我当前遇到0.70 mA 丢失。 [/报价]

    是指0.7A 或0.7mA。 如果是0.7mA 、则可以忽略不计。 您需要检查 I2C 引脚上的负载。 默认情况下、SDA 引脚配置为2mA 强度。 如果您具有重负载、则可以尝试增加驱动强度。  

    //*****
    //
    //! 配置引脚以供 I2C 外设用作 SDA。
    //!
    //! \param ui32Port 是 GPIO 端口的基地址。
    //! \param ui8pins 是引脚的位压缩表示。
    //!
    //! 必须正确配置 I2C 引脚、I2C 外设才能使
    //! 正确到位。 该函数可为 SDA 和 SCL 电平的
    //! 引脚。
    //!
    //! 引脚使用位打包字节指定、其中每个位
    //! set 标识要访问的引脚、字节的第0位位于
    //! 代表 GPIO 端口引脚0、位1代表 GPIO 端口引脚1、依此类推。
    //!
    //! \Note 此函数不能用于将任何引脚变为 I2C SDA 引脚;
    //! 仅配置 I2C SDA 引脚以确保正常运行。 请注意、
    //! 还需要 GPIOPinConfigure()函数调用才能正确配置
    //! 以实现 I2C SDA 功能。
    //!
    //! \Note Tiva 器件上 GPIO 引脚的子集、特别是
    //! JTAG/SWD 接口以及任何能够用作 NMI 输入的引脚、
    //! 锁定以防止意外重新配置。 这些引脚必须解锁
    //! 使用对相关 GPIO_O_O_LOCK 和 GPIO_CR 的直接寄存器写入
    //! 寄存器、然后才能调用该函数。 请参阅``GPIO_JTAG''
    //! 所需机制的示例应用、请参阅您的器件
    //! 有关受影响引脚的信息、请参阅数据表。
    //!
    //! \无返回。
    //
    //*****

    GPIOPinTypeI2C (uint32_t ui32Port、uint8_t ui8Pins)
    {
    //
    //检查参数。
    //
    assert (_GPIOBaseValid (ui32Port));

    //
    //使引脚成为外设控制。
    //
    GPIODIRModeSet (ui32Port、ui8Pins、GPIO_DIR_MODE_HW);

    //
    //将用于开漏操作的焊盘设置为弱上拉。
    //
    GPIOPadConfigSet (ui32Port、ui8Pins、GPIO_strength_2mA、GPIO_PIN_TYPE_OD);