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.

[参考译文] DRV8305:在 InHx 为低电平时出现不必要的栅极电压

Guru**** 2927270 points

Other Parts Discussed in Thread: DRV8305

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1641234/drv8305-unwanted-gate-voltages-when-inhx-is-low

器件型号: DRV8305

我使用 drv8305 驱动程序。 该驱动器通过 6 PWM 方法使 BLDC 电机旋转。 问题在于、例如、GHC 会上升到 15V、然后上升到 25V。 我的问题是、这是正常的吗?

大家可以看到红线表示的电压。

image.png

您可以在随附的文档中查看更多详细信息。

网关 voltages.pdf 

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

    您好:

    您使用的是 6x 梯形换向? 我希望在示波器上看到全部三个 SHA、SHB、SHC 输出、而不是栅极信号。 它可能看起来像这样。

    能否捕获所有 3 个电机输出相位?

    谢谢、

    Joseph

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

    感谢您发送编修。 遗憾的是、我的 OSC 有两个通道用于触发信号。 无法在一个屏幕中显示所有内容。

    是的、我使用   6x 梯形换向。

    e2e.ti.com/.../SHx_5F00_voltages.pdf

    void Read_Hall_State(void)
    {
        uint8_t h1, h2, h3;
    
        h1 = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);   // PA0
        h2 = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4);   // PA4
        h3 = HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_1);   // PC1
    
        hall_state = (h1 << 2) | (h2 << 1) | h3;
    }
    
    void BLDC_Commutate_6PWM(uint8_t step, uint16_t duty)
    {
        switch(step) // 4 5 1 3 2 6
        {
            case 0: //off
                /* -------------------------
                 * 1. Stop all main outputs
                 * ------------------------- */
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);// HB PA8
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);// HC PA9
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);// HA PA10
    
                /* -------------------------
                 * 2. Stop all complementary outputs
                 * ------------------------- */
    
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);// LB PA7
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);// LC PE10
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);// LA PE12
    
                /* -------------------------
                 * 3. Force compare values to zero (optional but safe)
                 * ------------------------- */
    
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 0);
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, 0);
                break;
    
            case 1: //H2L3toH2L1
                /* -------------------------
                 * 1. Disable all outputs (safe state)
                 * ------------------------- */
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);
    
                /* -------------------------
                 * 2. Set compare values (duty cycles)
                 * ------------------------- */
    
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);     // HB OFF
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, duty);  // HC ON
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, 800);   // LA duty
    
                /* -------------------------
                 * 3. Enable required outputs
                 * ------------------------- */
    
                HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);        // HC (CH2 high-side)
                HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);     // LA (CH3N low-side)
                break;
    
            case 2: //H3L1toH3L2
                /* -------------------------
                 * 1. SAFE SHUTDOWN ALL OUTPUTS
                 * ------------------------- */
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);
    
                /* -------------------------
                 * 2. SET DUTY CYCLES
                 * ------------------------- */
    
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty);  // HB (ON)
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 800);     // LC On
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, 0);     // LA OFF
    
                /* -------------------------
                 * 3. ENABLE ONLY REQUIRED OUTPUTS
                 * ------------------------- */
    
                HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);        // HB (CH1) ON
                HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);     // LC (CH2N) ON
                break;
    
            case 3: //H2L1toH3L1
                /* -------------------------
                 * 1. Turn EVERYTHING OFF first (safe state)
                 * ------------------------- */
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);
    
                /* -------------------------
                 * 2. Set duty cycles
                 * ------------------------- */
    
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty);  // HB (CH1)
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 0);     // OFF
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, 800);   // LA (CH3N)
    
                /* -------------------------
                 * 3. Enable ONLY required outputs
                 * ------------------------- */
    
                HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);        // HB ON (CH1)
                HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);     // LA ON (CH3N)
                break;
    
            case 4: //H1L2toH1L3
                /* -------------------------
                 * 1. SAFE TURN OFF ALL OUTPUTS
                 * ------------------------- */
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);
    
                /* -------------------------
                 * 2. SET DUTY CYCLES
                 * ------------------------- */
    
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, duty); // HA (CH3)
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 800);  // LB (CH1N)
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 0);    // OFF
    
                /* -------------------------
                 * 3. ENABLE ONLY REQUIRED OUTPUTS
                 * ------------------------- */
    
                HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);        // HA (CH3)
                HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);     // LB (CH1N)
                break;
    
            case 5: //H1L3toH2L3
                /* -------------------------
                 * 1. SAFE STOP ALL OUTPUTS
                 * ------------------------- */
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);
    
                /* -------------------------
                 * 2. SET DUTY CYCLES
                 * ------------------------- */
    
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, duty);  // HC PWM
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 800);   // LB PWM
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, 0);     // OFF
    
                /* -------------------------
                 * 3. ENABLE ONLY REQUIRED OUTPUTS
                 * ------------------------- */
    
                HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);        // HC (CH2)
                HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);     // LB (CH1N)
                break;
    
            case 6: //H3L2toH1L2
                /* -------------------------
                 * 1. STOP ALL OUTPUTS (safe state)
                 * ------------------------- */
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);
    
                HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);
                HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);
    
                /* -------------------------
                 * 2. SET DUTY CYCLES
                 * ------------------------- */
    
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, duty);  // HA PWM
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 800);   // LC PWM
                __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);     // OFF
    
                /* -------------------------
                 * 3. ENABLE REQUIRED OUTPUTS ONLY
                 * ------------------------- */
    
                HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);        // HA (CH3)
                HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);     // LC (CH2N)
                break;
        }
    }
    

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

    您好:

    您提到没有连接电机。 连接的电机后行为如何变化? 添加电机后问题是否已解决?

    谢谢、

    Joseph

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

    我来解释一下。

    首先、电机未连接到驱动器。 然后我测量了栅极的电压、您已经在 pdf 中看到了栅极的电压。 然后我将电机连接到驱动器、它开始旋转。 然后我再次测量了在栅极和 SHx 中的电压并发送给您。 我不知道在未将电机连接到驱动器时驱动器是否表现出奇怪的行为? 连接电动机后,有另一个奇怪的电压,你在图片中看到。 你怎么看? SHx 处的输出电压正常或者存在一些问题?

    此致 Hussain Khodadadi

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

    我想在电机未连接到驱动器时解释这张图片。 驱动器使用自举电路来导通高侧的 MOSFET。  DRV8305 的电荷泵将 VCPH 电源调节至 PVDD + 10V SHB 为 11V、GHB 为 11 + 10 = 21V。

    但我不明白下面的图片。 INHA 为低电平、而 GHA 为高电平。 我认为这是电容器的预充电。 因为当 GHB 为 21V 时、下一个阶段将为 GHA、然后 drv 将预充电 GHA、以便为开启 GHA 做好准备。 我是对的吗?

    也许我也能解释下一张图片。 红色边框中的电压也是栅极 C 的自举电阻器。您认为什么?

    红色矩形内的电压来自浮动相位。 你怎么看?  

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

    您好:

    该驱动器在电荷泵上工作以提供高侧电压、而不是自举电压

    是的、我认为矩形内的电压来自浮动相位。 但我希望在主切换模式的右侧也能看到相同的行为、如我发布的图像所示。

    谢谢、

    Joseph