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.

[参考译文] DRV8353RS-EVM:SPI 答案仍然为空

Guru**** 2513185 points
Other Parts Discussed in Thread: DRV8353, DRV8301

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1537606/drv8353rs-evm-spi-answer-remains-empty

器件型号:DRV8353RS-EVM
主题中讨论的其他器件:DRV8353DRV8301

工具/软件:

您好:  

我与 DRV8353RS 的 SPI 通信存在问题。  

我没有收到驾驶员的任何回答。  

您可以在此处的图片中看到请求和答案。 我希望第一个请求在第二个“假“请求之后得到答复。

我´m 感谢每一个提示。  

BG、

Alex

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

    附加:我喜欢读取寄存器 0x03。 绿色是 SDI、红色是 CLK、蓝色是 SDO、黄色是 SDO。

    I´m 还将 RCp 系统从 speedgoat 连接到使能引脚、用于 MOSFET 的开关信号。  

    SPI 由 Arduino Uno 管理。 我使用了硬件 SPI 引脚和引脚 10 进行芯片选择。  

    以下是所使用的代码:

    #include

    #define CS_PIN 10 //片选引脚 (nSCS)

    void setup(){
     Serial.begin(250000);
     serial.println(“spi-Setup gestarte...“)

     pinMode(CS_PIN,输出);
     digitalWrite (CS_PIN、HIGH); // CS auf 高电平 (inaktiv)

     SPI.begin(); // startet SPI mit default-Einstellungen
     serial.println(“spi-Setup abgeschlossen!“)
    }

    void loop(){
     if (Serial.Available()){
      字符输入= Serial.read ();
      if (input =='s'|| input =='s'){
       serial.println(“ Ausführung beendet!“)
       while (true) // Dauerstopp
      }
     }

     serial.println(“\nLese DRV8353 寄存器 0x03...“)

     // Dummy-Transfer:Antwort wird loviert
     readRegister (0x03);

     // Jetzt kommt die echte Antwert von Register 0x03
     uint16_t regData = readRegister (0x03);

     serial.print(“Inhalt von Register 0x03:0B“)
     printBinary (regData);
     serial.print(“ | 0x“)
     printHex (regData);
     serial.println(“------------------------------------ “)

     延迟 (1000);
    }

    // Funktion zum Lesen eines DRV8353-Registers
    uint16_t readRegister (uint8_t reg){
     Uint16_t readCmd = 0x8000 |(reg << 11); // R/W = 1 (lesen)、广播位 14:11

     SPI.beginTransaction(SPISettings(50000、MSBFIRST、SPI_MODE1);

     // 1。 Befehl senden(安特沃尔特维尼耶伦)
     digitalWrite (CS_PIN、LOW);
     delayMicroseconds (10);
     spi.transfer16 (readCmd);
     delayMicroseconds (10);
     digitalWrite(CS_PIN,高电平);
     delayMicroseconds (10);

     // 2. Antworth empfangen
     digitalWrite (CS_PIN、LOW);
     delayMicroseconds (10);
     Uint16_t 响应= spi.transfer16 (0x0000); //虚拟 schreiben、Antwortt kommt
     delayMicroseconds (10);
     digitalWrite(CS_PIN,高电平);

     spi.endTransaction()

     serial.print(“Antwert erhalten:0x“)
     serial.println(响应,十六进制);

     回复;
    }

    // Ausgabe als 16 位 Binärstring
    void printBinary (uint16_t value){
     for (int i =15;i >= 0;i--){
      serial.print ((value >> i)& 0x01);
     }
     serial.print (“);
    }

    // Ausgabe mit führenden Nullen im hex 格式
    void printHex (uint16_t value){
     if (value < 0x1000) Serial.print(“0")“);
     如果(值< 0x0100)Serial.print(“0")“);
     if (value < 0x0010) Serial.print(“0")“);
     serial.println (value、hex);
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Alex、

    我已经查看了波形、您用于读取寄存器 0x03 的命令看起来是正确的。 问题必须在其他地方解决。

    我想知道、器件附近是否进行了波形测量? 尖峰和噪声看起来非常高。

    此外、在执行这些 SPI 命令时输入是否已切换?  

    您能否尝试降低波特率并看看这样是否有任何改善?

    最后、我想知道、您是否可以正确执行写入命令? 您可以写入寄存器、并观察器件是否根据写入命令改变行为、以测试是否只是回读不起作用。

    谢谢、

    Joseph

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

    您好、Joseph:  

    首先感谢您的回答。  

    是的、波形是在器件附近测量的、噪声来自开关频率。  

    我还将开关频率降低至 100Hz(以便我有一个“清除“SPI 读取命令)、但没有任何变化、答案仍然为空。

    我还降低了 SPI 波特率、没有变化。  

    直到现在,我只试图写命令,并在写命令后读取它。 我今天将测试设备是否会改变行为。

    谢谢、祝您好运!

    Alex

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

    您好 Alex、

    请告诉我测试是如何进行的、以及是否能够看到 SPI 写入引起的行为变化。  

    我还想确认、SDO 线路上是否有上拉电阻器? 我可以在波形中的 SPI 事务之前看到它是高电平、但我只是想进行检查。

    谢谢、

    Joseph

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

    您好、Joseph:  

    我试过没有成功。

    我目前正在研究一个小的解决方法。 我下载了 GUI Composer 并使用 ISO-F28027F 电路板进行 SPI 通信、但开关信号将来自 speedgoat 上的 RCP 硬件。  

    我目前正努力使用寄存器 0x03 和 0x04。 我想更改 IDRIVE 电流值。 我可以更改 GUI 中除这些值之外的所有内容。  

    谢谢!

    Alex

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

    我见过´s 中编写的、我只能将其用于此 IDRIVE 值。  

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

    我的新问题是:

    当其中一个相电流超过 0.5A 时、DRV 会锁存故障。  

    我已将以下电线从我的 speedgoat 目标机器连接到 EVM 板:

    来自 J1:

    VSENVM、Enable、GND

    来自 J2:

    INHA、INLA、INHB、INLB、INHC、 INLC、GND

    我不知道为什么、因为使用该板应该有更大的电流。 ´s 由于接口中的一些引脚未连接、可能会导致电流为 0 μ A?  

    我希望有人比我更有经验。

    谢谢!

    Alex

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

    您好 Alex、

    我可以想象、VDS_LVL 设置过低、导致在电机电流变高时触发故障。

    您能否将寄存器 0x05 中的 VDS_LVL 设置更改为更高的值、看看这样是否解决了故障问题?

    此外、0x03 寄存器上有一个锁、是否确保在尝试更改 IDRIVE 值之前解锁寄存器?

    谢谢、

    Joseph

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

    您好 Joseph、很抱歉耽误了回答。  

    您的答案似乎是对的、但通过我的“权变措施“写入 SPI 寄存器的效果不是很好。  

    因此、我的优先事项仍然是让 Arduino 板的 SPI 写入工作。  

    一周前、我使用 DRV8301 和评估板 TI_DRV8301-HC-C2-KIT 进行了测试、结果非常好。  

    那么、除了与 SPI 通信相关的寄存器数量之外、是否有任何重大差异?

    这是´令人沮丧,我得到了一些时间压力下,因为这个问题.

    此致、  

    Alex

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

    您好 Alex、

    SPI 格式和时序应该相同、因此唯一的主要区别应该是寄存器的数量及其内容。  

    我理解挫折、我将尽力帮助找出问题的根源。

    您能否详细说明一下您在“解决方法“中看到的问题? 您提到它以前似乎在运行、但是什么导致它停止工作?

    GUI 的信号与 Arduino 的信号相比如何? 您能否将它们并排发布、以便我们进行比较来发现差异?

    谢谢您、

    Joseph

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

    您好 Joseph、

    非常感谢您对此问题的快速响应和帮助。


    我的权变措施存在的问题是、我依赖于该电路板主动连接到 C2000、否则寄存器编程将丢失。 例如、使能引脚应该从我的 Speedgoat RCP 硬件而不是从 C2000 模块激活。

    来自 GUI 的信号看起来有所不同、因为读取寄存器时的响应似乎出现在与请求相同的 SPI 周期中(当然,我也尝试了此操作但没有成功)、并且始终同时查询所有寄存器。

    使用 DRV8301 时、对读取命令的响应始终在下一个 SPI 帧中。
    明天我可以向您发送两种方法 (Arduino 和 GUI) 的示波图。

    谢谢、  

    Alex

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

    您好 Alex、

    感谢您的解释、我了解解决问题的方法。  

    我认为查看示波器捕获将非常有帮助。 我们明天就可以看看。

    此外、除了在同一个周期内的响应之外、Arduino 和 GUI 之间的时序是否相似? 例如、Arduino 遵循数据表中概述的保持时间要求?

    由于您在使用 Arduino 时没有看到响应(我引用了此线程上发布的初始示波器捕获)、这使我认为问题可能涉及时序、因为 SDO 输出上未显示任何内容。  

    此外、我无法分辨、因为我看不到您的负载、但 SDO 线路上是否有上拉电阻器? 我认为这是正常运行所必需的、应该也安装在 EVM 上、或许可以解释其中的差异?  

    谢谢、

    Joseph

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

    您好、Joseph:  

    这里承诺的图片:

    第一个显示 GUI 读取命令:

    下面显示了 Arduino 读取命令:

    在我看来、信号应足以得到答复。

    当我使用一个更快的时钟与 Arduino 然后信号得到 Bader,这是原因较低的时钟频率。  

    我还在 Arduino 的输出级添加了一个上拉电阻。 但我认为 EVM 模块的电阻器应该足够了

    谢谢、  

    Alex

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

    您好 Alex、

    我同意信号看起来足以进行响应。

    您是否使用同一器件进行两次测试、或者它们是否使用两个单独的 DRV8353? 如果他们是两个不同的设备,我想知道是否 Arduino 设备损坏

    您能否仔细检查电压 是否与数据表中的绝对最大值规格表保持一致? 一些信号似乎接近 5.75V 阈值、 可能会损坏这些引脚。

    不过、如果您使用同一器件进行这两个测试、则可以忽略这些点。  

    它看起来像设置和保持时间,它也适用于 Arduino 信号。  

    谢谢、

    Joseph

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

    您好、Joseph:  

    我使用一个器件进行两项测试。  

    输入电压电平约为 3、3V、我正在使用 Arduino 之后的双向电平转换器来获得正确的电压。 在图中为 5V/div、因此所有电压都小于 5V。

    我还有第二个设备我正在测试,它表现出相同的行为。

    我正在慢慢地耗尽想法,是什么原因导致这个问题。  

    谢谢、  

    Alex

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

    您好 Alex、

    您能否提供有关系统物理设置的更多信息或图像? Arduino 提供了哪些连接、它将使用哪种类型的电路板? 您是使用 DRV 或定制电路板从 Arduino 连接到 EVM 吗? 来自  ISO-F28027F 的 MCU 是否仍然连接、可能会导致问题?

    除了 SPI 之外、来自 Arduino 的所有信号都是什么? 它们的行为是否正确?

    我猜这是与硬件相关的设置、因为我现在提醒大家、器件不会根据我之前要求您检查的写入命令修改其行为。  

    这些线路上的某处可能存在一些争用、导致一条或多条 SPI 线路被错误地下拉/失去连接到器件的电压。

    由于您的波形看起来正确、因此我下次猜这可能是什么问题。 此外、软件是否有可能以某种方式将 SDO 拉低?  

    谢谢、

    Joseph

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

    您好、Joseph:  

    感谢您的支持。
    我们 现在将 ISO-F28027F 板用作编程器、并构建了一个小型适配器 PCB、因此还可以使用来自 RCP 硬件的开关信号。  

    这是很好的工作,这对我们来说是可以的。  

    最后一个问题、因为我认为您对 DRV 非常了解。 我们目前只存在一些问题、我们的相电流看起来有点奇怪、我认为 DRV 会在定义的时间内停止开关。 在我´s 它是一个或自我保护功能。 我尝试了几件事、但无法改变 DRV 的行为。  

    这就是全部三个相位中的相电流情况。 开关不循环的时间在相位之间发生偏移。

    y 轴以安培为单位显示电流、x 轴以秒为单位显示时间。

     

    谢谢、  

    Alex

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

    您好 Alex、

    感谢您的更新。  

    在此期间、您是否读取到 DRV 上的任何故障? 最好看到具有 4 个信号 Inha、GHA、SHA 和 Nfault 的波形。

    我也很好奇、您是否能够将所有三个相电流都放在同一个图上? 寄存器来进行调试

    此外、您是否确保您的输入看起来正确?

    谢谢您、

    Joseph

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

    嘿、Joseph、  

    感谢您的回答。  

    我将在´m 记录信号,我在实验室再次.

    所有三个相电流在不同的时间都具有该低相、但看起来与我发送给您的相位完全相同、我也会进行记录。

    输入信号看起来正确。

    谢谢你

    Alex

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

    您好 Alex、

    它可能是器件保护之一。 因此我想看看 nFAULT 是否被拉低、以及是否被锁存。

    周一返回实验室时、我会等待您发送波形。

    谢谢!

    Joseph

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

    您好 Joseph、  

    以下是电机旋转时所有三相电流的图片、显示了这些低相:

    在这些低相位中、开关暂停、我认为由于 DRV 报告的问题。

    Fault_pin 不会锁存、电机将不停地旋转。 但故障指示灯的振荡速度非常快。

    DRV 以 EVM 板的默认设置运行。

    旋转后出现故障、LED 在电机停止后熄灭(未锁存)。

    谢谢、  

    Alex

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

    您好 Alex、

    感谢您提供的信息。  

    从这些信息可以看出您遇到了 UVLO 故障、即 VM 引脚上发生欠压。 我怀疑您的 VM 振荡在 8~9V 左右、这会持续触发进入和退出所看到的 UVLO 保护。

    如前所述、这不是锁存故障。 仅当存在 VM 欠压情况时、才会存在此故障。

    如果您能够稳定 VM 上的电源、则可能会解决您的问题。 您能否确保 VM 具有足够的大容量电容、或者电源能够提供电机所消耗的适当电流量?  

    这几乎是肯定的问题。 请告诉我您的想法

    谢谢、

    Joseph