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.

[参考译文] TPS92661-Q1:连接问题

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/919596/tps92661-q1-connections-problems

器件型号:TPS92661-Q1

您好!

我是一名学生、我正在做有关矩阵前照灯的最后一篇论文。 对于该项目、我设计了一个具有12个 LED 的 PCB 和 TPS92661-Q1、并使用实验室电源打开 LED 并为微控制器提供5V 电压。 此外、我还使用 Arduino Uno 作为 MCU。

当我连接 PCB 和 Arduino 并希望通过 UART 协议进行通信时、我在通信中遇到一些问题、而且我无法从 TPS 接收任何内容。 但是、如果我拔下 TX 线缆并重新连接、从 TPS 接收4个字节(0x08 0x08 0x00 0x00 (相反))。 所以、我不知道它能是什么。 就像通信无法正常工作...

另一方面、我仅使用1个 TPS、我没有连接 GND 引脚26、28、30、32和34、我不知道它们是否会产生问题...

从理论上讲、将 Arduino 用作 MCU 是否会带来任何不便?

在下一幅图像中、我展示了我的 PCB 原理图设计、我想请问您是否可以修改设计并告诉我是否存在任何错误。

关于代码、我主要使用数据表中的代码、但更改了一些行以适应 Arduino。 我不知道您是否有一些 Arduino 示例代码。

提前感谢您。

此致、

Gerard Tortajada

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

    Gerard、

    必须连接所有接地引脚。  请先尝试、看看它是否能解决您的问题。  应该可以使用 Arduino、1个 TPS92661器件将能够完美工作。   

    此外、我无法看到您的原理图来对其进行评论。

    -JP

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

    您好 James、

    首先,我感谢你的回答。

    其次,我会把所有的理由都联系起来,希望能够解决问题。

    我再次附上了 PCB 原理图的图像。 我希望您现在可以看到该图像。

    此致、

    Gerard Tortajada

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

    Gerard、

    您的原理图中包含 TPS92662 (而非 TPS92661)。  这些器件是不同的。  您使用的是哪一个?  此外、该原理图非常"基本"。  您是否在尝试将其用于分线板或其他设备?  我希望您有一个实际的 PCB、如果有、请分享布局。  这是一个功率器件、您必须具有良好的热连接才能使用它。  我看到散热焊盘未连接、这种情况绝不会发生。  必须牢固连接到 PCB 覆铜并同时连接到 GND。  

    -JP

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

    您好 James、

    我使用的是 TPS92661、但用于设计 PCB 的软件没有 TPS92661的焊料形状。 但是、它具有 TPS92662的焊料形状、因此、由于它们具有相同的封装、我使用了该封装。 很抱歉以前没有告诉过您。

    另一方面、当然、我设计了一个 PCB。 否则、将无法测试所有组件。 在下一幅图中、我展示了我的 PCB 设计。 我在 TX 引脚和5V 引脚之间插入了一个外部电阻器、而不是在 PCB 中包含100K 欧姆电阻器。 此外、我想您表示的散热焊盘包含 EP 引脚。 如果这是您所指的、在 PCB 中、我将散热焊盘接地。

    另一方面,我在沟通上有问题。 我不知道字节是否未正确发送、或者是什么...当我配置设置时、我在 C1h 寄存器中发送0x01来配置 PWR、但当我必须读取该寄存器时、TPS 似乎没有应答。 我发送缓冲区字节并读取它们的代码显示在下一幅图像中。 我评论 了 ReturnBytes 和  GatheredBytes。

    uint8_t lMM_rd_1_reg (uint8_t LMM、uint8_t regaddr)

    uint8_t TxBuf[4];
    uint16_t i;
    字节 RxBuf[4];
    int i;
    //我们必须首先对请求进行汇编并对其进行 CRC 校验
    TxBuf[0]=(0xC0 | LMM);
    TxBuf[1]= regaddr;
    //恢复 CRC
    I = CRC_16_IBM (TxBuf、2);
    //处理和存储字节
    TxBuf[2]=(I & 0x00FF);// LSByte
    TxBuf[3]=((I >> 8)& 0x00FF);// MSByte
    //还要确保我们准备好从 LMM 接收数据
    // ReturnBytes = 1+1+2;//这是我们预期返回的字节数
    /* 1响应帧初始化+ 1数据+ 2 CRC */
    // GatheredBytes = 0;

    //发送字节
    serial.write (TxBuf、4);

    //接收字节
    while (Serial.available ()=0);
    如果(Serial.Available ()>0){
       serial.readBytes (RxBuf、4);
       serial.println (reverse_byte (RxBuf[0]));
       serial.println (reverse_byte (RxBuf[1]));
       serial.println (reverse_byte (RxBuf[2]));
       serial.println (reverse_byte (RxBuf[3]));


    // while (GatheredBytes!= 4);
    //检查 CRC (应该在 RxBuf[2]和[3]中)
    if (IS _CRC_VALID (RxBuf、2)){
       serial.print ("true");

    否则{ Serial.print ("false"); }


    当我发送这个程序时、代码保持在行"while (Serial.available ()=0);"中。 所以、Arduino 似乎无法接收任何内容。 但是、如果我删除此行和"IF (Serial.Available ()>0"、Arduino 将收到0x00和0x08。  

    您是否有适用于 TPS 的 Arduino 代码示例? 它可能是编程错误、但我不知道它可能是什么。

    此致、

    Gerard Tortajada

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

    Gerard、

    我们没有 Arduino 代码。 我将要求我的同事查看您的代码和评论。  

    -JP

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

    您在哪里设置波特率? 它是您的 PCB 的正确波特率吗?

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

    您好 James、

    我在 Serial.begin(9600中设置波特率)、因此波特率为9600。 除此之外、我还使用代码从 Arduino 生成时钟。 在寻找互联网时、我发现该代码在理论上生成8MHz 的时钟。 我必须使用哪种波特率?

    我发送到 TPS92661的代码如下:

    #将 Arduino 的 CLOCKOUT 10 //引脚10定义为时钟
    //用于生成8MHz 时钟的常数。

    CONST int 预分频= 1;
    const ocrint 2aval = 3;


    void setup(){
    //配置时钟
     引脚模式(CLOCKOUT、输出);

     TCCR2A =((1 << WGM21)|(1 << COM2A0));
     //设置定时器2无预分频(即预分频= 1)
     // CS22:0 = 001:使用没有预分频的 CPU 时钟
     // CS2位2:0都在 TCCR2B 中
     TCCR2B =(1 << cs20);
     //确保禁用 timer2的比较匹配寄存器中断
     TIMSK2=0;
     //此值决定输出频率
     OCR2A = ocr2aval;


     Serial.begin(9600);
     延迟(5000);

     //配置时钟
     LMM_WR_1_reg (0x80、0xc1、0x01);// TPS 0、SYSCFG SCMASTER 1 PWR1


     //读取时钟
     LMM_RD_1_reg (0xc0、0xc1);


     //设置 PCKDIV
     LMM_wr_1_reg (0x80、0xC0、0x03);



    void loop(){

     //设置 LED 1.
     LMM_wr_1_reg (0x80、0xB0、0b00000001);//启用 LED 1
     LMM_wr_1_reg (0x80、0x00、0b00000000);//LED1ON
     LMM_wr_1_reg (0x80、0x20、0b11111111);//LED1OFF
     延迟(20);

    此致、

    Gerard

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

    如果 TPS92661器件的输入时钟实际上为8MHz、则所需的相应波特率为500kbps。 见"表1. UART 波特率示例" https://www.ti.com/lit/ds/symlink/tps92661-q1.pdf?ts=1594312923718&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTPS92661-Q1。 

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

    您好、Lee、

    首先、很抱歉我的回答延迟了。

    关于波特率、我测试了一些时钟频率和一些波特率(与表中所示的频率等效)、但它不起作用。 我还尝试使用外部振荡器生成时钟、但它也不起作用。 因此、我不知道这是什么可能的、因为通过 Arduino 的消息已正确发送(我已验证)。

    我将尝试使用新的原理图电路、以验证它是否是由 PCB 设计引起的。

    Gerard Tortajada

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

    此外、使用'Scope,检查您发送到 TPS92661的信号是否符合规格。 确保您的通信电压电平、上升和下降时间不存在噪声、请参阅规格中的"6.3推荐运行条件"。  https://www.ti.com/lit/ds/symlink/tps92661-q1.pdf? TS=1595265115121&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FTPS92661-Q1 您还可以在此处订购 TPS92661 EVM 并交叉验证 您发送的命令和信号是否有效。  https://www.ti.com/tool/TPS92661EVM-001

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

    好的、我将重新检查我的所有信号、我希望它最终能够工作。

    谢谢!