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.

[参考译文] CCS/DRV8323:CAN't 使驱动程序正常工作

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/968869/ccs-drv8323-can-t-get-the-driver-to-work

器件型号:DRV8323
主题中讨论的其他器件: MSP430FR2355TIDA-00774CSD88584Q5DCTIDA-01516DRV832X

工具/软件:Code Composer Studio

大家好、我使用 DRV8323通过传感1xPWM 模式驱动无刷电机。 我使用 MSP430FR2355微控制器通过 SPI 与驱动器连接。  

我使用 TIDA-00774的 drv8323.h 和 drv8323.c 参考设计来配置驱动器、下面是我使用的代码:  

//DRV8323
P4DIR &=~(BIT3); //输入-故障

P6DIR |=(BIT1); //输出- EN_GATE

P6DIR |=(BIT3); //输出- DIR
P6OUT |= BIT3;

P6DIR |= BIT4; //输出中断
P6OUT |= BIT4;

// DRV8323-SPI 通信的代码 CS:P4.4、SCLK:P4.5、SDI:P4.6、SDO:P4.7
P4DIR |= BIT6; //GPIO-SDI
P4OUT &=~BIT6; //输出 SDI

P4DIR &=~BIT7; //输入 SDO

P4DIR |= BIT5; //输出 SCLK
P4OUT &=~BIT4;

P4DIR |= BIT4; //输出 nSCS
P4OUT |= BIT4;

P4DIR |= BIT2; //输出 DRV_CAL

//代码来启用驱动程序
P6OUT &=~BIT1;
DELAY_us (150);
P6OUT |= BIT1;
delay_us (10);//10us 延迟

//P4.2 DRV_CAL
P4OUT |= BIT1;
DELAY_us (150);
P4OUT &=~BIT1;
delay_us (10);//10us 延迟

//故障中断
P4IES |= BIT3;
P4IE |= BIT3;
P4IFG &=~BIT3;

DRV8x_Analog_Init ();

// DRV8x_Analog_Init ()的代码

void DRV8x_Analog _Init (void)
{
SPI_Write (GATE 驱动器_HS_REG、0x03BF);
DELAY_1ms (1);
SPI_Write (GATE 驱动器_HS_REG、0x03BF);
DELAY_1ms (1);
SPI_Write (ADR_DRV_CTRL_REG、0x0053);
DELAY_1ms (1);
SPI_Write (GATE _DRIVE_LS_REG、 0x06FF);
DELAY_1ms (1);
SPI_Write (OCP_CTRL_REG、0x0160);//0x0160
DELAY_1ms (1);
SPI_Write (CSA_CTRL_REG、0x0083);//0x0683
DELAY_1ms (1);
}

//来自 drv8323.c

的代码 void SPI_Write (uint8_t address、uint16_t value)
{
uint8_t i;
uint16_t command = 0x0000;
address = address & 0x0F_t


~



+命令

+ 0x0001+命令++ 0x0001_(rnf_delay);命令+命令+= 0x0001u_t ++命令+ 0x0001u_t +命令++命令+ 0x0001 (nr);命令+命令+ 0x0001u_t +命令++ 0x0001 +命令+ 0x0001 +命令+++ 0x0001 + 0x0001 ++命令+ 0x0001 ++

对于(i=0; i<16;i++)
{
M1_SCLK_HIGH;
__DELAY_CYCLLES (15);

if (((COMMAND >>(15 - I))& 0x01)= 0x01)
{
M1_SDI_HIGH;
}
否则
{
M1_SDI_LOW;
}
__DELAY_CYCLLES (15);
M1_SCLK_LOW;
_


M1_NSCS (30);}
_DELAY_CYCLS (15);

}

//一些定义
#define M1_SCLK_HIGH(P4OUT |= BIT4)
#define M1_SCLK_LOW(P4OUT &=~


~




~BIT4)#define M1_SDI_HIGH (P4OUT |= BIT6)#define M1_SDI_LOW (P4OUT &= 4)(PITM1 (P4OUT 和= 1)(BITS_4)#define 4 (BITM1 (PITIN_4)(PIT_4)(PITM1 (PITIN_4)) 

我不知道驱动程序的配置是否有问题、我无法使其正常工作。 我附上原理图

我使用的是 csd88584q5dc 半桥电源块、  

我在 Inha 引脚中有 PWM 信号、我通过示波器看到它、并将霍尔传感器输入连接到原理图中的相应引脚。 我使用24V 作为 VM。

我的设计基于 TIDA-00774和 TIDA-01516、 我不是电机驱动器领域的专家、我可以意识到、我不知道很多概念和信息、

我使用的配置是否正常? 如果有任何帮助、我们将不胜感激。 提前感谢。

Diana

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

    您好、Diana、

    感谢您发帖。

    您能否通过使用万用表测量以下电压来确认驾驶员是否正在工作?

    • VM (引脚4)-应为~24V
    • VDRAIN (引脚5)-应为~24V
    • VCP (引脚3)-应为~34V
    • DVDD (引脚33)-应为~3.3V
    • nFAULT (引脚25)-应为~3.3V
    • 使能(引脚30)-应为~3.3V
    • INLc (引脚39)-应为~3.3V

    在访问任何 SPI 寄存器配置之前、我们应该能够使驱动器通电并正常工作。 如果发生故障(nFAULT ~0V)、您能否通过读取 SPI 寄存器来确定存在哪个故障?

    当您执行此命令SPI_Write(ADR_DRV_CTRL_REG, 0x0053);时、看起来您正在设置制动位(地址2h 的位1)、这将阻止驱动器运行、直到该位被清除。 确保在尝试旋转电机之前重置此制动位。

    具有1x PWM 模式的 SPI 接口可能比较复杂。 默认情况下、DRV8323S 将在6x PWM 模式下初始化、如果输入端有任何信号、驱动器将在6x PWM 模式下对其进行解释、然后才能通过 SPI 将 PWM 模式更改为1x PWM。我们建议确保所有 INxx 引脚在您之前都为0 可以通过 SPI 更改 PWM 模式。 使用器件的硬件接口变体(DRV8323H)可更轻松地实现1x PWM、因为 PWM 模式是根据加电时的硬件引脚(而不是通过 SPI 写入)初始化的。

    谢谢、

    Matt

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

    Matt、您好、感谢您的回答。

    我按照您的要求检查了电压、结果如下:

    • VM (引脚4)-应为~24V (正常)
    • VDRAIN (引脚5)-应为~24V (正常)
    • VCP (引脚3)-应为~34V (不正常、我测量0V)
    • DVDD (引脚33)-应为~3.3V (正常)
    • nFAULT (引脚25)-应为~3.3V (不正常、处于低电平状态)
    • 使能(引脚30)-应为~3.3V (正常)
    • INLc (引脚39)-应为~3.3V (正常)

    VCP 中的电压为0V、这是否意味着驱动器损坏?

    谢谢!

    Diana

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

    您好、Diana、

    看起来电荷泵 为低电平、驱动器处于故障状态。 能否对地址0h 和1h 执行 SPI 读取以确定 发生了哪些故障? 我无法判断设备是否只是处于故障状态或实际损坏。

    请确保 DRV8323S 的引脚1、2和3已正确焊接到电路板上、并且您的 VCP-VM 和 CPH-CPL 电容器 也已正确焊接。

    您可以尝试使用新的 DRV8323S 替换 IC、以查看器件本身是否损坏。

    要读取的故障寄存器:

    谢谢、

    Matt

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

    谢谢 Matt、我将尝试更换 IC 以查看器件是否损坏、我将返回告诉您我发现了什么。

    我还有另一个问题、我尝试读取 SPI 寄存器0h 和1h、当我读取1h 时、我得到0x0、但当我读取0h 时、我得到0x400、这不是一个有效值吗?  

    我的读取代码是否正常? 我使用  了 TIDA-00774参考 设计中 drv8323.c 的代码:  

    uint16_t ReadOnce (uint8_t 地址)
    {
    uint8_t i;
    uint16_t 命令= 0x0000;
    uint16_t 读取= 0x0000;
    地址=地址& 0x0F;
    
    命令|= 0x8000;//读取命令
    |=地址<< 11U;//设置地址
    
    M1_SCLK_LOW;
    _ m1_10_cycles
    
    (_ m1_nSCS);延迟_ 10_10_cycles (_ 10_nSCS);
    
    对于(i=0;i<16;i++)
    {
    M1_SCLK_HIGH;
    
    如果((命令>>(15 - I))& 0x01)= 0x01)
    {
    M1_SDI_HIGH;
    }
    否则
    {
    M1_SDI_LOW;
    }
    _DELAY_CYCLKENLES (10);
    DELAY_SCLK_LOW;
    读取|=
    
    
    
    _ M1_SDI_LOW;}(M1_SDM1_LESS_RETURN)
    
    
    ;读数<_ M1_20 (M1_SDM1_RETURN);<_MEN (M1_MEN)<_RETURN (10);<_MEN (M1_SDM1_20)周期(M1_SD
    
    uint16_t SPI_read (uint8_t 地址)
    {
    uint16_t 读取;
    
    读取= ReadOnce (地址);//once
    
    delay_1us (1);
    
    读取= ReadOnce (地址);//返回
    
    读数;
    } 

    谢谢!

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

    您好、Diana、

    0x400应有效、DRV832x 寄存器映射为11位长(整个 SPI 命令为16位)。 看起来您正在获取故障位、但没有设置任何其他诊断位(奇怪的是)。

    尝试将 CLR_FLT (2h 位0)置为有效以清除故障条件并重新读取寄存器0h 和1h。

    谢谢、

    Matt

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

    Matt、您好、我更改了 DRV8323 IC、但现在我具有以下值:

    • VM (引脚4)-应为~24V (正常)
    • VDRAIN (引脚5)-应为~24V (正常)
    • VCP (引脚3)-应为~34V (不正常、我测量0V)
    • DVDD (引脚33)-应为~3.3V (不正常、我测量0V)
    • nFAULT (引脚25)-应为~3.3V (正常)
    • 使能(引脚30)-应为~3.3V (正常)
    • INLc (引脚39)-应为~3.3V (正常)

    我不明白为什么测量值发生了变化,但 现在驱动程序似乎完全不起作用了:( 有任何建议吗?   

    谢谢、

    Diana

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

    大家好、Matt、很抱歉、我想更新最后一个帖子、因为现在我得到了以下错误值:0h 中为0x480、1h 中为0x480

    这意味着我获得了欠压锁定故障条件(0h 寄存器);A 相检测放大器上的过流和过热警告、对吧? 至少现在,我似乎得到了 IC 的响应,不是我想要的那种答案,但这是一个开始:)

    什么会导致过流? 焊接 MOSFET 时遇到问题?

    另一个问题是、我仅使用电流感应放大器 A、并在 CSA 控制寄存器中配置所有正常运行的电流感应放大器、这是否正常? 在硬件中、电流放大器 B 和 C 的输入短接并连接至 GND。

    谢谢、

    Diana

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

    您好、Diana、

    驱动器似乎未运行(DVDD = 0表示器件未通电或处于睡眠模式)

    您能否确保所有焊盘均已正确焊接到电路板上? 尤其是 VM、ENABLE、VCP 和 DVDD 引脚。 电路板的返工对剩余焊料和器件在电路板上平坦接触所有引脚带来了一些挑战。 确保使用施加到电路板底部的热源完全回流焊盘下方的焊料。

    如有疑问、应 移除器件、请使用焊锡芯尽可能多地移除焊料、并尝试焊入新器件。

    谢谢、

    Matt

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

    感谢您的回答 Matt 和您的时间、我决定花时间重新设计电路板、我认为所有焊盘均已正确焊接。

    我在未连接 BLDC 电机的情况下进行了快速测试、现在在使用 SPI 配置驱动器之前、一旦启用使能引脚、 24V 电源的电流几乎为1A、并且会发出某种声音(但也可能是电压源)、 这是可以的吗?  我认为驾驶员现在正在工作、但这种电流可能意味着有问题、请告诉我您对此的看法。

    谢谢、

    Diana

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

    您好、Diana、

    使用 DMM 测量您的电源引脚和电路板上的接地引脚之间的电阻。 听起来好像电路板短路或电流路径会导致电源限制。 所有这些电流都需要在电路板上的某个位置流动。 您提到该测试未连接电机? 您可以(仔细)测试电路板上的任何组件是否发热、以查看电流在何处流动。

    如前所述、具有1x PWM 模式的 SPI 接口可能很复杂、因为 DRV8323S 将以6x PWM 模式进行初始化。 在执行 SPI 写入以将 PWM 模式从6x 更改为1x 之前、您需要确保所有 PWM 输入为0。 DRV8323H 器件的硬件型号可避免这种情况。

    谢谢、

    Matt

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

    Matt、您好!

    我在电路板上发现了短路、这是 MOSFET 中的焊接问题、现在我可以启用驱动器、而不会出现电流过大的问题、但我在0h SPI 寄存器(0x610)中获得了故障代码、 这意味着 VDS 监控过流故障情况、在低侧 MOSFET 上、为什么会发生这种情况?  

    谢谢、

    Diana



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

    您好、Diana、

    驱动器可以根据引脚34-39的状态初始化并随后驱动电流、在这种情况下、您可以打开 A 相的低侧和另一相的高侧。 过流最终将跳闸、因为电流将保持该方向流动;过流将自动重试。

    您的 VDS 电平设置得非常低(0.06V):OCP 控制寄存器地址0x05位3-0。 您可以尝试增大此值以允许更多电流流动。

    谢谢、

    Matt

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

    您好、Matt、非常感谢您的回答、他们非常乐于助人。

    电机现在正在旋转、但24V 电源大幅下降、显示的电流超过2A、我假设它下降是因为电流受限、但我不理解电机为什么消耗过多电流、从而导致它没有负载。 我是否必须更改其他参数才能提高性能。

    谢谢、

    Diana

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

    您好、Diana、

    首先、恭喜您的电机正在旋转!

    在本例中、您将使用什么作为电源? 您的电源是否存在电流限制?

    当电机启动时 、由于加速、浪涌电流会更高。

    如果您从 PWM_LEFT 上非常低的占空比开始(如10%或更低)、电流是否仍然为高电平?

    如果断言 break_left、则电机停止时电流是否减小?

    谢谢、

    Matt

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

    您好、Matt、

    我使用的是直流电源、它会限制电流、但它应仅在启动时限制电流、在我的情况下、电压会在电机旋转时下降。

    我之前使用过另一个控制器运行电机、使用同一个直流电源时电流小于1A。

    我使用调试器逐步运行代码、当我降低 PWM 的占空比时、电机无法启动、我认为驱动器有时会尝试、然后停止尝试。 当它停止调试会话时、即使在最后一个占空比下、它也不会旋转。

    硬件中的某个东西会导致电压降吗?

    谢谢、

    Diana

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

    您好、Diana、

    如果您测量 SOA 上的电压(即流过感应电阻器的电流)、您应该能够判断电流是否流过电机。 否则、电路板上会有单独的电流路径。

    您选择了什么 VDS 设置? 您可能需要进一步降低 VDS 设置(但并非一直到0.06V)、以便 DRV8323在内部限制电机电流。

    您还可以确认霍尔传感器的接线方向正确。 如果换用它们、电机可能无法正常旋转。

    我还建议尝试从您的 MCU 或外部命令100%占空比(PWM_LEFT)、以查看电机是否达到目标最大速度。

    谢谢、

    Matt

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

    Matt、您好、非常感谢您的帮助。  

    我尝试了不同的组合、最后找到了一种组合。 我可以启动电机旋转并停止电机旋转、而我可以更改 PWM 以控制电流、现在它大约为150mA、占空比为20%。

    当我n`t 50%或更多的 PWM 时、我遇到的唯一问题是电流峰值导致微控制器冻结或停止、我在电路板上有一个连接 LED、它停止闪烁、我无法再启动电机旋转、为什么会发生这种情况? 它是否与纹波电流的电解电容器有关?  

    再次感谢

    Diana

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

    您好、Diana、

    您可能会由于电流而导致微控制器欠压。 这主要取决于布局。 如果您的 MCU 与电机驱动器和 MOSFET 位于同一接地层、则来自电机的电流会以 MCU 电压可能会下降的方式流动。 我能看到您的电路板图片以及 MCU 和 MCU 电源电路原理图吗?

    如果您有示波器、请在电机运行时测量 MCU 的 VCC 和 GND、并将 PWM 增加到50%。

    请记住、由于电机速度快速变化、PWM 占空比突然变化会导致大量电流流动。

    谢谢、

    Matt

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

    Matt、您好、感谢您的回答。

    我一直在阅读有关 DRV8323布局的指南: https://www.ti.com/lit/an/slva951/slva951.pdf?ts=1610741050016 

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

    您好、Diana、

    另请看 一下电机驱动器的一般布局指南这里有一个视频讨论了该文档

    谢谢、

    Matt

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

    非常感谢 Matt、借助所有这些信息、我确信我的下一个设计不会出现问题!

    再次感谢、

    Diana