|
|
@ -1,7 +1,18 @@ |
|
|
|
#include "dbdm_power_ctrl_board.hpp"
|
|
|
|
using namespace iflytop; |
|
|
|
|
|
|
|
void DBDMPowerCtrlBoard::INIT_PC8_AS_HTIM3_CH3_PWM_OUTPUT() { |
|
|
|
static TIM_OC_InitTypeDef TIM3_CH3_sConfigOC = {0}; |
|
|
|
static bool TIM3_CH3_mirror = false; |
|
|
|
|
|
|
|
void DBDMPowerCtrlBoard::TIM3_CH3_INIT_AS_PWM_OUTPUT_PC8(bool mirror) { |
|
|
|
/**
|
|
|
|
* @brief |
|
|
|
* |
|
|
|
* 200HZ |
|
|
|
* |
|
|
|
*/ |
|
|
|
|
|
|
|
TIM3_CH3_mirror = mirror; |
|
|
|
__HAL_RCC_TIM3_CLK_ENABLE(); |
|
|
|
/* USER CODE BEGIN TIM3_Init 0 */ |
|
|
|
|
|
|
@ -9,7 +20,7 @@ void DBDMPowerCtrlBoard::INIT_PC8_AS_HTIM3_CH3_PWM_OUTPUT() { |
|
|
|
|
|
|
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0}; |
|
|
|
TIM_MasterConfigTypeDef sMasterConfig = {0}; |
|
|
|
TIM_OC_InitTypeDef sConfigOC = {0}; |
|
|
|
// TIM_OC_InitTypeDef sConfigOC = {0};
|
|
|
|
|
|
|
|
/* USER CODE BEGIN TIM3_Init 1 */ |
|
|
|
|
|
|
@ -35,12 +46,14 @@ void DBDMPowerCtrlBoard::INIT_PC8_AS_HTIM3_CH3_PWM_OUTPUT() { |
|
|
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { |
|
|
|
Error_Handler(); |
|
|
|
} |
|
|
|
sConfigOC.OCMode = TIM_OCMODE_PWM1; |
|
|
|
sConfigOC.Pulse = 0; |
|
|
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; |
|
|
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
|
|
|
|
|
|
|
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { |
|
|
|
TIM3_CH3_sConfigOC.OCMode = TIM_OCMODE_PWM1; |
|
|
|
TIM3_CH3_sConfigOC.Pulse = 0; |
|
|
|
TIM3_CH3_sConfigOC.OCPolarity = mirror ? TIM_OCPOLARITY_LOW : TIM_OCPOLARITY_HIGH; |
|
|
|
TIM3_CH3_sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
|
|
|
TIM3_CH3_sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; |
|
|
|
TIM3_CH3_sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; |
|
|
|
|
|
|
|
if (HAL_TIM_PWM_ConfigChannel(&htim3, &TIM3_CH3_sConfigOC, TIM_CHANNEL_3) != HAL_OK) { |
|
|
|
Error_Handler(); |
|
|
|
} |
|
|
|
/* USER CODE BEGIN TIM3_Init 2 */ |
|
|
@ -48,53 +61,59 @@ void DBDMPowerCtrlBoard::INIT_PC8_AS_HTIM3_CH3_PWM_OUTPUT() { |
|
|
|
/**TIM3 GPIO Configuration
|
|
|
|
PC8 ------> TIM3_CH3 |
|
|
|
*/ |
|
|
|
|
|
|
|
__HAL_RCC_GPIOC_CLK_ENABLE(); |
|
|
|
|
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_8; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; |
|
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
|
|
|
|
|
|
|
TIM3_CH3_SET_DUTY(0); |
|
|
|
} |
|
|
|
|
|
|
|
void DBDMPowerCtrlBoard::TIM3_CH3_SET_DUTY(int32_t duty) { |
|
|
|
duty = 100 - duty; |
|
|
|
if (duty < 0) duty = 0; |
|
|
|
if (duty > 100) duty = 100; |
|
|
|
if (duty > 98) duty = 98; |
|
|
|
|
|
|
|
TIM_OC_InitTypeDef sConfigOC = {0}; |
|
|
|
sConfigOC.OCMode = TIM_OCMODE_PWM1; |
|
|
|
sConfigOC.Pulse = duty / 100.0 * __HAL_TIM_GET_AUTORELOAD(&htim3); |
|
|
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; |
|
|
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
|
|
|
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; |
|
|
|
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; |
|
|
|
if (duty == 0) { |
|
|
|
TIM3_CH3_sConfigOC.Pulse = 0; |
|
|
|
} else { |
|
|
|
TIM3_CH3_sConfigOC.Pulse = duty / 100.0 * (__HAL_TIM_GET_AUTORELOAD(&htim3)+1); |
|
|
|
} |
|
|
|
|
|
|
|
HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3); |
|
|
|
HAL_TIM_PWM_ConfigChannel(&htim3, &TIM3_CH3_sConfigOC, TIM_CHANNEL_3); |
|
|
|
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3); |
|
|
|
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3); |
|
|
|
if (duty != 0) { |
|
|
|
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3); |
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_8; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; |
|
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
|
|
|
} else { |
|
|
|
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, TIM3_CH3_mirror ? GPIO_PIN_SET : GPIO_PIN_RESET); |
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_8; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
|
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void DBDMPowerCtrlBoard::INIT_PC6_AS_HTIM8_CH1_PWM_OUTPUT() { |
|
|
|
__HAL_RCC_TIM8_CLK_ENABLE(); |
|
|
|
/***********************************************************************************************************************
|
|
|
|
* HTIM8_CH1 * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
static TIM_OC_InitTypeDef HTIM8_CH1_sConfigOC = {0}; |
|
|
|
static bool HTIM8_CH1_mirror = false; |
|
|
|
|
|
|
|
/* USER CODE END TIM8_Init 0 */ |
|
|
|
void DBDMPowerCtrlBoard::TIM8_CH1_INIT_AS_PWM_OUTPUT_PC6(bool mirror) { |
|
|
|
__HAL_RCC_TIM8_CLK_ENABLE(); |
|
|
|
HTIM8_CH1_mirror = mirror; |
|
|
|
|
|
|
|
TIM_ClockConfigTypeDef sClockSourceConfig = {0}; |
|
|
|
TIM_MasterConfigTypeDef sMasterConfig = {0}; |
|
|
|
TIM_OC_InitTypeDef sConfigOC = {0}; |
|
|
|
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; |
|
|
|
|
|
|
|
/* USER CODE BEGIN TIM8_Init 1 */ |
|
|
|
|
|
|
|
/* USER CODE END TIM8_Init 1 */ |
|
|
|
htim8.Instance = TIM8; |
|
|
|
htim8.Init.Prescaler = 143; |
|
|
|
htim8.Init.Prescaler = 71; |
|
|
|
htim8.Init.CounterMode = TIM_COUNTERMODE_UP; |
|
|
|
htim8.Init.Period = 99; |
|
|
|
htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; |
|
|
@ -115,14 +134,14 @@ void DBDMPowerCtrlBoard::INIT_PC6_AS_HTIM8_CH1_PWM_OUTPUT() { |
|
|
|
if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK) { |
|
|
|
Error_Handler(); |
|
|
|
} |
|
|
|
sConfigOC.OCMode = TIM_OCMODE_PWM1; |
|
|
|
sConfigOC.Pulse = 0; |
|
|
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; |
|
|
|
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; |
|
|
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
|
|
|
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; |
|
|
|
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; |
|
|
|
if (HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { |
|
|
|
HTIM8_CH1_sConfigOC.OCMode = TIM_OCMODE_PWM1; |
|
|
|
HTIM8_CH1_sConfigOC.Pulse = 0; |
|
|
|
HTIM8_CH1_sConfigOC.OCPolarity = mirror ? TIM_OCPOLARITY_LOW : TIM_OCPOLARITY_HIGH; |
|
|
|
HTIM8_CH1_sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; |
|
|
|
HTIM8_CH1_sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
|
|
|
HTIM8_CH1_sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; |
|
|
|
HTIM8_CH1_sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; |
|
|
|
if (HAL_TIM_PWM_ConfigChannel(&htim8, &HTIM8_CH1_sConfigOC, TIM_CHANNEL_1) != HAL_OK) { |
|
|
|
Error_Handler(); |
|
|
|
} |
|
|
|
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; |
|
|
@ -135,38 +154,39 @@ void DBDMPowerCtrlBoard::INIT_PC6_AS_HTIM8_CH1_PWM_OUTPUT() { |
|
|
|
if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, &sBreakDeadTimeConfig) != HAL_OK) { |
|
|
|
Error_Handler(); |
|
|
|
} |
|
|
|
/* USER CODE BEGIN TIM8_Init 2 */ |
|
|
|
|
|
|
|
/* USER CODE END TIM8_Init 2 */ |
|
|
|
// HAL_TIM_MspPostInit(&htim8);
|
|
|
|
|
|
|
|
__HAL_RCC_GPIOC_CLK_ENABLE(); |
|
|
|
/**TIM8 GPIO Configuration
|
|
|
|
PC6 ------> TIM8_CH1 |
|
|
|
*/ |
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_6; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; |
|
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
|
|
|
|
|
|
|
TIM8_CH1_SET_DUTY(0); |
|
|
|
} |
|
|
|
|
|
|
|
void DBDMPowerCtrlBoard::TIM8_CH1_SET_DUTY(int32_t duty) { |
|
|
|
duty = 100 - duty; |
|
|
|
if (duty < 0) duty = 0; |
|
|
|
if (duty > 100) duty = 100; |
|
|
|
if (duty > 98) duty = 98; |
|
|
|
|
|
|
|
TIM_OC_InitTypeDef sConfigOC = {0}; |
|
|
|
sConfigOC.OCMode = TIM_OCMODE_PWM1; |
|
|
|
sConfigOC.Pulse = duty / 100.0 * __HAL_TIM_GET_AUTORELOAD(&htim8); |
|
|
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; |
|
|
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; |
|
|
|
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; |
|
|
|
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; |
|
|
|
if (duty == 0) { |
|
|
|
HTIM8_CH1_sConfigOC.Pulse = 0; |
|
|
|
} else { |
|
|
|
HTIM8_CH1_sConfigOC.Pulse = duty / 100.0 * (__HAL_TIM_GET_AUTORELOAD(&htim8) + 1); |
|
|
|
} |
|
|
|
|
|
|
|
HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_1); |
|
|
|
HAL_TIM_PWM_ConfigChannel(&htim8, &HTIM8_CH1_sConfigOC, TIM_CHANNEL_1); |
|
|
|
HAL_TIM_PWM_Stop(&htim8, TIM_CHANNEL_1); |
|
|
|
HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1); |
|
|
|
if (duty != 0) { |
|
|
|
HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1); |
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_6; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
|
|
|
GPIO_InitStruct.Alternate = GPIO_AF3_TIM8; |
|
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
|
|
|
} else { |
|
|
|
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, HTIM8_CH1_mirror ? GPIO_PIN_SET : GPIO_PIN_RESET); |
|
|
|
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
|
|
|
GPIO_InitStruct.Pin = GPIO_PIN_6; |
|
|
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; |
|
|
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
|
|
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; |
|
|
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); |
|
|
|
} |
|
|
|
} |