您好!
下面是 IO 扩展器与旋转开关连接的原理图。
IC 仅放置在 PCB 板的底部。
最初、所有旋转开关都处于0位置、IC 主体温度为28摄氏度(通过万用表测量)。 当我们将旋转开关位置的设置从0更改为1时、温度每变化约增加10度。 W 逐个更改旋转开关位置。
当所有旋转开关都处于1位置时、IC 车身的温度为49摄氏度。
此温度变化位是否与 IC 和 IC 功能有关?
请分享您的评论和建议。
此致、
基兰吉特
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.
您好!
下面是 IO 扩展器与旋转开关连接的原理图。
IC 仅放置在 PCB 板的底部。
最初、所有旋转开关都处于0位置、IC 主体温度为28摄氏度(通过万用表测量)。 当我们将旋转开关位置的设置从0更改为1时、温度每变化约增加10度。 W 逐个更改旋转开关位置。
当所有旋转开关都处于1位置时、IC 车身的温度为49摄氏度。
此温度变化位是否与 IC 和 IC 功能有关?
请分享您的评论和建议。
此致、
基兰吉特
您好、Clemens:
原理图中没有位置"0"
下面是开关和真值表的图像:
TCA9555的配置寄存器的值是什么?
能否谈谈温度问题? 这种加热效应是否正常?
请分享一些意见以解决此问题。
谢谢。
Kiran
尊敬的 Kiran:
一般而言、芯片的表面温度表明芯片消耗的电流过大(导致过热)、或者芯片在重负载下工作。
确保不会损坏芯片的方法是获取表面温度、计算器件的结温并将其与数据表中的绝对最大条件进行比较。
TCA9555的绝对最大结温为100°C。 任何高于此值的结温、TI 无法再保证器件性能、也无法保证器件不会受到任何永久性损坏。
其中、
TJ =结温
Tc =最高外壳温度(在中间测量的 IC 表面)
ψJT =结至顶部特征参数
功率=芯片的总功率耗散
从您的意见中、我不知道系统的确切功率耗散、但如果我们要使用最大条件计算、我们会得出
(TJ (max)- ψJT)/Δ t = POWER (max)
(100C - 49C)/ 11.1 C/W = 4.595瓦。
因此、系统中使用的 IC 在采用 TSSOP 封装时、在49C 的温度下最高可消耗4.595瓦的功率、而不会损坏器件。 如果功耗超过计算值、则可能会因超出绝对最大值条件而损坏 IC。
我猜测其中一个 GPIO 引脚已配置为输出、并且某处存在一个输出、用于将高电压驱动至输出端和旋转开关之间的 GND。 我假设旋转开关的导通状态电阻有点小、对 GND 的负载较大。 对于输入、这是可以的、但对于输出、这会消耗大量电流、以至于您见证了可能影响 IC 的表面温度。
请查看 Clemens 对寄存器状态的评论。 如果您可以读取该器件、那么寄存器0x00 - 0x03会从该器件读回什么内容?
此致、
泰勒
尊敬的 Kiran:
我同意克莱门斯的观点。 当 A2/A1/A0 = H 时、从器件地址看起来是正确的、如原理图中所示。
0x8C 不是配置寄存器的正确地址。 若要访问端口0和1的配置寄存器、需要按照数据表中所述将命令字节设置为0x06和0x07。
读取输入端口寄存器(0x00/0x01)将反映引脚的输入逻辑电平、与配置寄存器将引脚定义为输入还是输出无关。
读取输出端口寄存器(0x02/0x03)将反映控制输出选择的触发器内部的值。 而非实际引脚值。
读取极性反转寄存器(0x04/0x05)将显示极性反转寄存器(默认值为0x00)的内容、
读取配置寄存器(0x06/0x07)将显示配置寄存器内的内容、告诉用户将哪些 P 端口配置为输出或输入。 如果是输出、那么相应的位将读为"0"、如果相应的位是输入、读取将产生"1"。
在没有任何器件配置的情况下、在上电时读取配置寄存器应读取值0xFF、因为 p 端口的默认状态是在成功上电复位条件时输入的。
此致、
泰勒
你好、Clemens 和 Tyler、
很抱歉回复延迟。
我们在硬件和固件级别调查了此问题。
原理图如下所示:
突出显示的绿色端口用作输出端口、其余端口用作输入端口。
我们有两块设计相同的 PCB 板。 但一个板具有 TCA9555 IO 扩展器、另一个板具有 CAT9555FYI。
我们在对两个板进行热分析时看到的结果。
请提供您对以下要点的评论:
1.为什么会得到 TCA9555和 CAT9555之间的温差? 但两者使用的设计是相同的吗?
2. Onsemi (CAT9555)和 TI (TCA9555)之间是否存在可能导致这种发热的规格和/或操作差异?
此致、
Kiran
3. TCA9555 I2C 扩展器能够同时支持输入和输出而不会产生发热效应?
您好、Clemens:
感谢您的答复!!
以下是 TCA9555的热分布。
附加代码:
#include "ioc_main.h" #include <stdio.h> #include <string.h> #include <stdbool.h> #include <ti/drivers/GPIO.h> #include "driverlib/sysctl.h" #include <ti/sysbios/knl/Task.h> #include <xdc/runtime/System.h> #include "ioc_debug.h" #include "drivers/i2c/ioc_i2c.h" #include "drivers/led/ioc_led.h" #include "Board.h" #include "../ioc_config.h" #define LEDONE_SLAVEADDRESS 0x27 #define LEDTWO_SLAVEADDRESS 0x26 uint8_t ui8TxBuf[3], ui8RxBuf[3]; volatile bool bModuleLedFlag; /** ******************************************************************************* * @file ioc_led.c * @ingroup led * * @function StatusLEDConfig() * * @brief * This function will be used for configuring digital IO LED's * * * @param Null * * @return Null * ******************************************************************************/ void StatusLEDConfig() { #if(defined USE_DI && defined USE_DO) SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C2); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); GPIOPinConfigure(GPIO_PP5_I2C2SCL); GPIOPinConfigure(GPIO_PN4_I2C2SDA); GPIOPinTypeI2CSCL(GPIO_PORTP_BASE, GPIO_PIN_5); GPIOPinTypeI2C(GPIO_PORTN_BASE, GPIO_PIN_4); I2cStructType stI2cData; /* Configuring Digital input LED as Output pins */ stI2cData.ui32I2cBus = I2C2_BASE; stI2cData.i2cSlaveAddress = LEDONE_SLAVEADDRESS; stI2cData.ui32TxCount = 3; stI2cData.ui32RxCount = 0; stI2cData.pui8DataRx = ui8RxBuf; ui8TxBuf[0] = 0x06; ui8TxBuf[1] = 0x00; ui8TxBuf[2] = 0x00; stI2cData.pui8DataTx = ui8TxBuf; i2cTivaLibTransfer(&stI2cData); ui8TxBuf[0] = 0x02; ui8TxBuf[1] = 0xFF; ui8TxBuf[2] = 0xCF; stI2cData.pui8DataTx = ui8TxBuf; i2cTivaLibTransfer(&stI2cData); SysCtlDelay(1000); /* Configuring Digital output LED as Output pins */ stI2cData.ui32I2cBus = I2C2_BASE; stI2cData.i2cSlaveAddress = LEDTWO_SLAVEADDRESS; stI2cData.ui32TxCount = 3; stI2cData.ui32RxCount = 0; stI2cData.pui8DataRx = ui8RxBuf; ui8TxBuf[0] = 0x06; ui8TxBuf[1] = 0x00; ui8TxBuf[2] = 0x00; stI2cData.pui8DataTx = ui8TxBuf; i2cTivaLibTransfer(&stI2cData); ui8TxBuf[0] = 0x02; ui8TxBuf[1] = 0xFF; ui8TxBuf[2] = 0x0F; stI2cData.pui8DataTx = ui8TxBuf; i2cTivaLibTransfer(&stI2cData); SysCtlDelay(1000); #endif }
#define LED_NETWORKRED 0x0110 #define LED_NETWORKGREEN 0x0120 #define LED_NETWORKAMBER 0x0130 #define LED_MODULERED 0x0140 #define LED_MODULEGREEN 0x0180 #define LED_MODULEAMBER 0x01C0 /*#define MOD_RED 0x40 #define MOD_GREEN 0x80 #define MOD_AMBER 0xC0 #define NET_RED 0x10 #define NET_GREEN 0x20 #define NET_AMBER 0x30 */ #define MOD_RED 0x20 #define MOD_GREEN 0x80 #define MOD_AMBER 0xA0 #define NET_RED 0x10 #define NET_GREEN 0x40 #define NET_AMBER 0x50 #define DI_LED_SLAVEADDRESS 0x27 #define DO_LED_SLAVEADDRESS 0x26 #define CONFIG_DIGITALINPUTLED 0xF000 #define CONFIG_DIGITALOUTPUTLED 0xFFFF /* LED Configuration data Marcos */ #define LED_CONFIG_COMMANDBYTE 0xBC #define LED_CONFIG_DATAVALUE 0x00 #define LED_SLAVEADDRESS 0x27 #define LED_CONFIG_WRITECOUNT 4 #define LED_CONFIG_READCOUNT 0 /* LED Output Register/ Status Read Data Macros */ #define LED_OUTPUTREG_COMMANDBYTE 0x84 #define LED_UPDATE_WRITECOUNT 1 #define LED_UPDATE_READCOUNT 3
请浏览上述信息、如果您有任何其他需要、请告诉我。
提前感谢。
此致、
Kiran
显然、代码会混淆输出端口寄存器(2、3)和配置寄存器(6、7)。
stI2cData.pui8DataRx = ui8RxBuf;
ui8TxBuf[0]= 0x06;
ui8TxBuf[1]= 0x00;
ui8TxBuf[2]= 0x00;
stI2cData.pui8DataTx = ui8TxBuf;
i2cTivaLibTransfer (&stI2cData);
这样可以将所有十六个引脚配置为输出。 但是、您要成为输入的引脚必须配置为1位:
ui8TxBuf[0]= 0x06;
ui8TxBuf[1]= 0xFF;
ui8TxBuf[2]= 0x0F;
(第二个文件中的符号实际上不会被使用。 您应该清理它们。)
您好、Clemens:
抱歉、参考中使用了之前的代码片段、请找到目前正在使用的初始配置的以下代码片段
#define ROTARY_CONFIG_COMMANDBYTE 0x06 #define ROTARY_CONFIG_DATAVALUE 0xFF #define ROTARY_SLAVEADDRESS 0x27 #define ROTARY_I2CBUS 1 #define ROTARY_CONFIG_WRITECOUNT 3 #define ROTARY_CONFIG_READCOUNT 0 /* Rotary Input register Data Macros */ #define ROTARY_INPUTREG_COMMANDBYTE 0x00 #define ROTARY_INPUTREG_WRITECOUNT 1 #define ROTARY_INPUTREG_READCOUNT 2
void ioc_RotaryWriteConfiguration() { i2cConfigbus stI2cConfig; uint8_t aui8TxBuffer[ROTARY_CONFIG_WRITECOUNT]; uint8_t aui8RxBuffer[ROTARY_CONFIG_READCOUNT]; aui8TxBuffer[0] = ROTARY_CONFIG_COMMANDBYTE; aui8TxBuffer[1] = ROTARY_CONFIG_DATAVALUE; aui8TxBuffer[2] = 0x0F; stI2cConfig.pui8txbuffer = aui8TxBuffer; stI2cConfig.vui8I2cBus = Board_I2C1; stI2cConfig.vui8writeCount = ROTARY_CONFIG_WRITECOUNT; stI2cConfig.vui8readCount = ROTARY_CONFIG_READCOUNT; stI2cConfig.pui8RxBuffer = aui8RxBuffer; stI2cConfig.vui8slaveAddress = ROTARY_SLAVEADDRESS; ioc_I2cWrite(&stI2cConfig); }
请分享您的评论/建议。
此致、
基兰吉特
尊敬的 Kiranjit:
在编码 IDE 中,是否可以将读取值存储在变量或 int 中,然后读取 IDE 中的存储容器?
此外、该线程将沿不同的方向运行。
为了解决61C 的问题、它仍处于 TA 温度之下。 只要考虑到 ICC 电流或通过 GPIO 的最大输出电流、此温度对于器件是可以的。 需要注意的主要是电流消耗、并且不会超过绝对值。 条件。
与 ONSEMI 的 CAT9555器件相比、TCA9555可能只是输出强度差异、裸片差异、对于电流消耗为何不同、没有一个明确的答案、除了它们是具有不同设计和相似功能的不同器件。
TCA9555芯片的温度是否对您的系统产生了负面影响、或者您是否只是想知道温度高于 ONSEMI 器件的原因?
此致、
泰勒
您好、Tyler:
感谢您的答复。
在编码 IDE 中,可以将读取值存储在变量或 int 中,然后读取 IDE 中的存储容器吗? [/报价]我会努力的。
TCA9555芯片的温度是否对您的系统产生了负面影响、或者您是否只是想知道温度高于 ONSEMI 器件的原因?
>>如果在较高温度下持续工作、则可能会缩短 IC 寿命并降低功能。
以下是温度 IC 相对于旋转开关位置的变化。 (原理图本身已经共享。)
两个电路板设计相同、仅具有不同的 IO 扩展器 IC。
请分享您的意见、以确定此发热问题的根本原因。
此致、
基兰吉特
尊敬的 Kiranjit:
我没有确切的方法来确定这种发热问题的根本原因。 可能是 CAT9555的器件设计更好、且比 TCA9555的散热更好。 如果此问题是由同一器件但导致不同 IC 温度的两个 TCA9555器件引起的问题、我想知道发生这种情况的原因。
因为它涉及两个不同的厂商生产的两个芯片、所以除了 CAT9555可能是更好的散热设计外、我不确定导致的发热结果。
只需快速了解一下 ABS。 最大规格的规格。 CAT9555的额定温度为150C、TCA9555的额定温度为100C ABS。 最大 除此之外、我相信会导致 ABS 的两款器件之间存在重大内部差异。 最大结温比 TI 器件高50C。
我唯一的建议是使用负载较弱的开关。 旋转开关在某些位置似乎消耗了过多的电流。
此致、
泰勒