Other Parts Discussed in Thread: DRV8305
器件型号: DRV8305
我使用 drv8305 驱动程序。 该驱动器通过 6 PWM 方法使 BLDC 电机旋转。 问题在于、例如、GHC 会上升到 15V、然后上升到 25V。 我的问题是、这是正常的吗?
大家可以看到红线表示的电压。

您可以在随附的文档中查看更多详细信息。
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.
感谢您发送编修。 遗憾的是、我的 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;
}
}
我来解释一下。
首先、电机未连接到驱动器。 然后我测量了栅极的电压、您已经在 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 的自举电阻器。您认为什么?

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