|
@@ -51,6 +51,7 @@
|
|
|
TIM_HandleTypeDef htim1;
|
|
|
TIM_HandleTypeDef htim2;
|
|
|
TIM_HandleTypeDef htim3;
|
|
|
+TIM_HandleTypeDef htim4;
|
|
|
|
|
|
/* TIM1 init function */
|
|
|
void MX_TIM1_Init(void)
|
|
@@ -213,6 +214,21 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
|
|
|
|
|
|
/* USER CODE END TIM2_MspInit 1 */
|
|
|
}
|
|
|
+
|
|
|
+ else if(htim_base->Instance==TIM4)
|
|
|
+ {
|
|
|
+ /* USER CODE BEGIN TIM4_MspInit 0 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM4_MspInit 0 */
|
|
|
+ /* Peripheral clock enable */
|
|
|
+ __HAL_RCC_TIM4_CLK_ENABLE();
|
|
|
+ /* TIM4 interrupt Init */
|
|
|
+ HAL_NVIC_SetPriority(TIM4_IRQn, 2, 2);
|
|
|
+ HAL_NVIC_EnableIRQ(TIM4_IRQn);
|
|
|
+ /* USER CODE BEGIN TIM4_MspInit 1 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM4_MspInit 1 */
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
|
@@ -263,6 +279,22 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
|
|
|
|
|
|
/* USER CODE END TIM2_MspDeInit 1 */
|
|
|
}
|
|
|
+
|
|
|
+ if(htim_base->Instance==TIM4)
|
|
|
+ {
|
|
|
+ /* USER CODE BEGIN TIM4_MspDeInit 0 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM4_MspDeInit 0 */
|
|
|
+ /* Peripheral clock disable */
|
|
|
+ __HAL_RCC_TIM4_CLK_DISABLE();
|
|
|
+
|
|
|
+ /* TIM4 interrupt DeInit */
|
|
|
+ HAL_NVIC_DisableIRQ(TIM4_IRQn);
|
|
|
+ /* USER CODE BEGIN TIM4_MspDeInit 1 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM4_MspDeInit 1 */
|
|
|
+ }
|
|
|
+
|
|
|
/* USER CODE BEGIN TIM1_MspDeInit 1 */
|
|
|
|
|
|
/* USER CODE END TIM1_MspDeInit 1 */
|
|
@@ -278,7 +310,7 @@ void MX_TIM3_Init(void)
|
|
|
htim3.Instance = TIM3;
|
|
|
htim3.Init.Prescaler = 0;
|
|
|
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
|
- htim3.Init.Period = 1098 / MC_VirtualPosition.Fren - 1; //电角度频率f = 72MHz / (分频系数 + 1) / 65535
|
|
|
+ htim3.Init.Period = 71;
|
|
|
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
|
|
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
|
|
if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
|
|
@@ -294,7 +326,7 @@ void MX_TIM3_Init(void)
|
|
|
}
|
|
|
|
|
|
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
|
|
- sConfigOC.Pulse = (1098 / MC_VirtualPosition.Fren) >> 1;
|
|
|
+ sConfigOC.Pulse = 36;
|
|
|
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
|
|
|
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
|
|
|
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
|
|
@@ -317,9 +349,7 @@ void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
|
|
|
/* TIM3 clock enable */
|
|
|
__HAL_RCC_TIM3_CLK_ENABLE();
|
|
|
/* USER CODE BEGIN TIM3_MspInit 1 */
|
|
|
- HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
|
|
|
- HAL_NVIC_EnableIRQ(TIM3_IRQn);
|
|
|
- //__HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE);
|
|
|
+
|
|
|
/* USER CODE END TIM3_MspInit 1 */
|
|
|
}
|
|
|
}
|
|
@@ -366,17 +396,49 @@ void HAL_TIM_PWM_MspDeInit(TIM_HandleTypeDef* tim_pwmHandle)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void MX_TIM4_Init(void)
|
|
|
+{
|
|
|
+ /* USER CODE BEGIN TIM4_Init 0 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM4_Init 0 */
|
|
|
+
|
|
|
+ TIM_ClockConfigTypeDef sClockSourceConfig = {0};
|
|
|
+ TIM_MasterConfigTypeDef sMasterConfig = {0};
|
|
|
+
|
|
|
+ /* USER CODE BEGIN TIM4_Init 1 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM4_Init 1 */
|
|
|
+ htim4.Instance = TIM4;
|
|
|
+ htim4.Init.Prescaler = 0;
|
|
|
+ htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
|
|
|
+ htim4.Init.Period = 1098 / MC_VirtualPosition.Fren - 1; //电角度频率f = 72MHz / (分频系数 + 1) / 65535
|
|
|
+ htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
|
|
+ htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
|
|
|
+ if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
|
|
|
+ if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
|
|
|
+ sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
|
|
|
+ if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
|
|
|
+ {
|
|
|
+ Error_Handler();
|
|
|
+ }
|
|
|
+ /* USER CODE BEGIN TIM4_Init 2 */
|
|
|
+
|
|
|
+ /* USER CODE END TIM4_Init 2 */
|
|
|
+}
|
|
|
|
|
|
/* USER CODE BEGIN 1 */
|
|
|
|
|
|
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
|
|
{
|
|
|
- if(htim->Instance == htim3.Instance)
|
|
|
- {
|
|
|
- if(MC_VirtualPosition.SVM_Angle++ >= 65535)
|
|
|
- MC_VirtualPosition.SVM_Angle = 0;
|
|
|
- }
|
|
|
- else if(htim->Instance == htim1.Instance)
|
|
|
+ if(htim->Instance == TIM1)
|
|
|
{
|
|
|
static uint8_t ADC_PreCnt = 0;
|
|
|
static TrueOrFalse_Flag_Struct_t IsPwmEnableFlag = False;
|
|
@@ -412,6 +474,13 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
|
|
MC_HallSensorData.Delta_AngleSum += MC_HallSensorData.Delta_Angle;
|
|
|
}
|
|
|
|
|
|
+ //虚拟角度更新
|
|
|
+ MC_VirtualPosition.SVM_Angle += 32;
|
|
|
+ if(MC_VirtualPosition.SVM_Angle >= 65535)
|
|
|
+ {
|
|
|
+ MC_VirtualPosition.SVM_Angle = 0;
|
|
|
+ }
|
|
|
+
|
|
|
//计算电机转速
|
|
|
MC_RunInfo.MotorSpeed = MotorSpeedCal(MC_HallSensorData.SVM_Angle, MC_HallSensorData.IsStopFlag);
|
|
|
|
|
@@ -450,12 +519,18 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
|
|
{
|
|
|
case MC_AssistRunMode_TORQUE://力矩模式
|
|
|
{
|
|
|
- FOC_Model(MC_CalParam.Ref_Torque, MC_RunInfo.MotorSpeed, MC_HallSensorData.SVM_Angle, False);
|
|
|
+ FOC_Model(MC_CalParam.Ref_Torque, 0, MC_RunInfo.MotorSpeed, MC_HallSensorData.SVM_Angle, False);
|
|
|
break;
|
|
|
}
|
|
|
case MC_AssistRunMode_WALK: case MC_AssistRunMode_CADENCE: case MC_AssistRunMode_GAS://速度模式
|
|
|
{
|
|
|
- FOC_Model(MC_CalParam.Ref_Speed, MC_RunInfo.MotorSpeed, MC_HallSensorData.SVM_Angle, False);
|
|
|
+ #if 0 //正常速度环
|
|
|
+ FOC_Model(MC_CalParam.Ref_Speed, 0, MC_RunInfo.MotorSpeed, MC_HallSensorData.SVM_Angle, False);
|
|
|
+ #elif 1 //If拖动
|
|
|
+ FOC_Model(200, 0, MC_RunInfo.MotorSpeed, MC_VirtualPosition.SVM_Angle, False);
|
|
|
+ #elif 1 //零度
|
|
|
+ FOC_Model(0, 200, MC_RunInfo.MotorSpeed, 0, False);
|
|
|
+ #endif
|
|
|
break;
|
|
|
}
|
|
|
default:break;
|
|
@@ -473,6 +548,21 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void TIM4_Update_Isr(void)
|
|
|
+{
|
|
|
+ if(__HAL_TIM_GET_FLAG(&htim4, TIM_FLAG_UPDATE) != RESET)
|
|
|
+ {
|
|
|
+ if(__HAL_TIM_GET_IT_SOURCE(&htim4, TIM_IT_UPDATE) !=RESET)
|
|
|
+ {
|
|
|
+ __HAL_TIM_CLEAR_IT(&htim4, TIM_IT_UPDATE);
|
|
|
+ MC_VirtualPosition.SVM_Angle += 4;
|
|
|
+ if(MC_VirtualPosition.SVM_Angle >= 65535)
|
|
|
+ {
|
|
|
+ MC_VirtualPosition.SVM_Angle = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
/* USER CODE END 1 */
|
|
|
|
|
|
/**
|