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.

[参考译文] BQ34Z100-G1:可靠的 Arduino HDQ 代码

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/652622/bq34z100-g1-reliable-arduino-hdq-code

器件型号:BQ34Z100-G1

我正在构建使用 Arduino Nano 与 bz34Z100-G1进行通信的测试装置。  我在网站上找到的示例 HDQ 库取得了不同的成功。  Matthieu Lalonde (网站不再工作)的 HDQ.cpp 似乎是我最成功的,但是,我遇到了一些奇怪的行为,比如我从未得到过一个州 OfCharge ()(好吧,也许不是“永远”,但每500秒只有一次)。

是否有任何人成功使用 Arduino HDQ 代码?  我已经将例程中的时序与数据表进行了比较、一切看起来都很正常。  我曾尝试过调整计时、以防出现一些裕度问题、但我似乎无法对其进行调整、使其始终为我提供我所期望的数据。  我得到的大多数值似乎都是合理的,但一些令人不满意的值似乎不起作用(例如 StateOfCharge ();电压始终是偶数; 当我用块命令读出序列号时、它总是关闭1、但是如果我使用0x28/0x29命令进行读取、它通常是正确的(有时它关闭1)。  有时我读取 PackConfiguration()并获取0x970、有时是0x971。  显然、有关时序的一些问题。

这里本质上是我正在使用的代码。  我似乎对写入或中断没有任何问题、因此我省略了该代码(尽管 可以从 https://github.com/mozzwald/HDQLib 免费获取该代码)

#define HDQ_DELAY_THW1 45 // 32 - 66uS
#define HDQ_DELAY_THW0 120 // 70 - 145 μ S

#define HDQ_DELAY_TDW1 48 // 0.5 - 50us
#define HDQ_DELAY_TDW0 110 // 86 - 145 μ S
#define HDQ_DELAY_TCYCD 205 // 190 min

#define HDQ_DELAY_TB 250 //最小值:190uS */
#define HDQ_DELAY_TBR 70 //最小值:40us */
#define HDQ_DELAY_TCYCH 250/*最小值:190uS 最大值:250US*/

#define HDQ_DELAY_TRSPS_MAX 320 //最大值:320uS */
#define HDQ_DELAY_BIT_TOTAL 200

#define HDQ_State_of 电荷   0x02

#define _HDQ_readPin ()(* inputReg & bitmask)>> pin //将我更改为内联!*/

uint8_t HDQ::读取(uint8_t reg)
 uint8_t 结果= 0;  
 uint8_t maxTries = HDQ_DELAY_FAIL_TESS;//在8MHz 时为~128uS、每个环路有8条指令  
 //单个中断
 HDQ:dodreak();
  
 //写入寄存器进行读取
 HDQ::writeByte ((reg |= HDQ_ADDR_MASK_READ));
  
 对于(uint8_t ii = 0;ii < 8;i++)
 {
  //等待从器件切换为低电平或失败
  maxTries = HDQ_DELAY_FAIL_TESS;
 while (_HDQ_readPin ()!= 0 && maxTries-->0)
  {
   如果(maxTries = 1)返回0xFF;
  }
  
  //等待 Tdsub 和半个或一个位已经通过
 delayMicroseconds ((((HDQ_DELAY_TDW0 - HDQ_DELAY_TDW1)/ 2)+ HDQ_DELAY_TDW1);
  //读取该位
  结果|=_HDQ_readPin ()<ii;
  
  //等待 Tssub 通过
 delayMicroseconds (HDQ_DELAY_TCYCD - HDQ_DELAY_TDW0);
 }
  
 delayMicroseconds (HDQ_DELAY_TB);
  
 返回结果;
获取 StateOfCharge ()的调用是:

currentPercent = HDQ.Read (HDQ_State_of 电荷);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Greg、
    我们在 www.ti.com/.../slva413a.pdf 上提供了 MSP430的示例
    不幸的是、我们没有我在团队中了解的有关 Audino 的直接示例。 我希望其他社区成员也已这样做,可以在这方面有所帮助。
    此致、
    Swami
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Swami,

    是的、我看到了 MSP430示例、但它利用了 MSP430中的硬件功能。 希望其他人对此有一定的经验。

    谢谢、
    Greg