@ -1,6 +1,8 @@
# include "dbdm_power_ctrl_board.hpp"
using namespace iflytop ;
void DBDMPowerCtrlBoard : : HTIM3_INIT ( ) {
void DBDMPowerCtrlBoard : : INIT_PC8_AS_HTIM3_CH3_PWM_OUTPUT ( ) {
__HAL_RCC_TIM3_CLK_ENABLE ( ) ;
/* USER CODE BEGIN TIM3_Init 0 */
/* USER CODE END TIM3_Init 0 */
@ -13,11 +15,11 @@ void DBDMPowerCtrlBoard::HTIM3_INIT() {
/* USER CODE END TIM3_Init 1 */
htim3 . Instance = TIM3 ;
htim3 . Init . Prescaler = 143 ;
htim3 . Init . Prescaler = 7 1;
htim3 . Init . CounterMode = TIM_COUNTERMODE_UP ;
htim3 . Init . Period = 9 999;
htim3 . Init . Period = 4 999;
htim3 . Init . ClockDivision = TIM_CLOCKDIVISION_DIV1 ;
htim3 . Init . AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DIS ABLE ;
htim3 . Init . AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_EN ABLE ;
if ( HAL_TIM_Base_Init ( & htim3 ) ! = HAL_OK ) {
Error_Handler ( ) ;
}
@ -37,16 +39,18 @@ void DBDMPowerCtrlBoard::HTIM3_INIT() {
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 ) {
Error_Handler ( ) ;
}
/* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */
__HAL_RCC_GPIOC_CLK_ENABLE ( ) ;
/**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 ;
@ -54,4 +58,115 @@ void DBDMPowerCtrlBoard::HTIM3_INIT() {
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 ;
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 ;
HAL_TIM_PWM_ConfigChannel ( & htim3 , & sConfigOC , TIM_CHANNEL_3 ) ;
HAL_TIM_PWM_Stop ( & htim3 , TIM_CHANNEL_3 ) ;
HAL_TIM_PWM_Start ( & htim3 , TIM_CHANNEL_3 ) ;
}
void DBDMPowerCtrlBoard : : INIT_PC6_AS_HTIM8_CH1_PWM_OUTPUT ( ) {
__HAL_RCC_TIM8_CLK_ENABLE ( ) ;
/* USER CODE END TIM8_Init 0 */
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 . CounterMode = TIM_COUNTERMODE_UP ;
htim8 . Init . Period = 99 ;
htim8 . Init . ClockDivision = TIM_CLOCKDIVISION_DIV1 ;
htim8 . Init . RepetitionCounter = 0 ;
htim8 . Init . AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE ;
if ( HAL_TIM_Base_Init ( & htim8 ) ! = HAL_OK ) {
Error_Handler ( ) ;
}
sClockSourceConfig . ClockSource = TIM_CLOCKSOURCE_INTERNAL ;
if ( HAL_TIM_ConfigClockSource ( & htim8 , & sClockSourceConfig ) ! = HAL_OK ) {
Error_Handler ( ) ;
}
if ( HAL_TIM_PWM_Init ( & htim8 ) ! = HAL_OK ) {
Error_Handler ( ) ;
}
sMasterConfig . MasterOutputTrigger = TIM_TRGO_RESET ;
sMasterConfig . MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE ;
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 ) {
Error_Handler ( ) ;
}
sBreakDeadTimeConfig . OffStateRunMode = TIM_OSSR_DISABLE ;
sBreakDeadTimeConfig . OffStateIDLEMode = TIM_OSSI_DISABLE ;
sBreakDeadTimeConfig . LockLevel = TIM_LOCKLEVEL_OFF ;
sBreakDeadTimeConfig . DeadTime = 0 ;
sBreakDeadTimeConfig . BreakState = TIM_BREAK_DISABLE ;
sBreakDeadTimeConfig . BreakPolarity = TIM_BREAKPOLARITY_HIGH ;
sBreakDeadTimeConfig . AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE ;
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 ) ;
}
void DBDMPowerCtrlBoard : : TIM8_CH1_SET_DUTY ( int32_t duty ) {
duty = 100 - duty ;
if ( duty < 0 ) duty = 0 ;
if ( duty > 100 ) duty = 100 ;
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 ;
HAL_TIM_PWM_ConfigChannel ( & htim8 , & sConfigOC , TIM_CHANNEL_1 ) ;
HAL_TIM_PWM_Stop ( & htim8 , TIM_CHANNEL_1 ) ;
HAL_TIM_PWM_Start ( & htim8 , TIM_CHANNEL_1 ) ;
}