diff --git a/firmware/PCB-Heater/Core/Src/app_freertos.c b/firmware/PCB-Heater/Core/Src/app_freertos.c index 2a37698..6f136fb 100644 --- a/firmware/PCB-Heater/Core/Src/app_freertos.c +++ b/firmware/PCB-Heater/Core/Src/app_freertos.c @@ -190,13 +190,13 @@ const presets_t presets[4] = { }; PIDController pid = { - .Kp = 40.0f, - .Ki = 1.0f, - .Kd = 3.0f, + .Kp = 8.0f, + .Ki = 0.2f, + .Kd = 0.5f, .T = 0.25f, //2 times per second .tau = 0.2f, //Low-pass filter (0 - no filter) .limMin = -100.0f, - .limMax = 1000.0f - P_WIDTH - P_DELAY - 1 // 949.0 + .limMax = 100.0f }; /* USER CODE END Variables */ @@ -536,14 +536,13 @@ void clockTick(void *argument) //PID PID_Update(&pid, aimTemperature, Temperature); if (pid.out >= 0.0f) { - pulse = (uint16_t)(pid.limMax - pid.out)+P_DELAY; + pulse = (uint16_t)pid.out; if (fanActive) setFansSpeed(0); } else { - pulse = 1020; + pulse = 0; setFansSpeed((uint8_t)(pid.out * -1)); } - TIM1->ARR = pulse+P_WIDTH; TIM1->CCR2 = pulse; //Draw PID value @@ -930,7 +929,7 @@ void stopHeater(void) { if (osTimerIsRunning(secTimerHandle)) osTimerStop(secTimerHandle); aimTemperature = 0.0f; PID_Init(&pid); - TIM1->CCR2 = 1020; + TIM1->CCR2 = 0; Running = 0; } /* USER CODE END Application */ diff --git a/firmware/PCB-Heater/Core/Src/tim.c b/firmware/PCB-Heater/Core/Src/tim.c index c8f0f47..ee4c71b 100644 --- a/firmware/PCB-Heater/Core/Src/tim.c +++ b/firmware/PCB-Heater/Core/Src/tim.c @@ -38,10 +38,8 @@ void MX_TIM1_Init(void) /* USER CODE END TIM1_Init 0 */ - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_SlaveConfigTypeDef sSlaveConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_IC_InitTypeDef sConfigIC = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; @@ -49,36 +47,23 @@ void MX_TIM1_Init(void) /* USER CODE END TIM1_Init 1 */ htim1.Instance = TIM1; - htim1.Init.Prescaler = 640-1; + htim1.Init.Prescaler = 1; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; - htim1.Init.Period = 1000-1; + htim1.Init.Period = 100-1; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; - htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE; if (HAL_TIM_Base_Init(&htim1) != HAL_OK) { Error_Handler(); } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - if (HAL_TIM_IC_Init(&htim1) != HAL_OK) - { - Error_Handler(); - } if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) { Error_Handler(); } - if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK) - { - Error_Handler(); - } - sSlaveConfig.SlaveMode = TIM_SLAVEMODE_COMBINED_RESETTRIGGER; + sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1; sSlaveConfig.InputTrigger = TIM_TS_TI1FP1; - sSlaveConfig.TriggerPolarity = TIM_INPUTCHANNELPOLARITY_RISING; + sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING; sSlaveConfig.TriggerFilter = 0; if (HAL_TIM_SlaveConfigSynchro(&htim1, &sSlaveConfig) != HAL_OK) { @@ -91,16 +76,8 @@ void MX_TIM1_Init(void) { Error_Handler(); } - sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; - sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; - sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; - sConfigIC.ICFilter = 0; - if (HAL_TIM_IC_ConfigChannel(&htim1, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) - { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM2; - sConfigOC.Pulse = 1020; + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; diff --git a/firmware/PCB-Heater/PCB-Heater.ioc b/firmware/PCB-Heater/PCB-Heater.ioc index c83a4df..5c45ee8 100644 --- a/firmware/PCB-Heater/PCB-Heater.ioc +++ b/firmware/PCB-Heater/PCB-Heater.ioc @@ -69,21 +69,19 @@ Mcu.Pin30=PB9 Mcu.Pin31=VP_FREERTOS_VS_CMSIS_V2 Mcu.Pin32=VP_SYS_VS_tim6 Mcu.Pin33=VP_SYS_VS_DBSignals -Mcu.Pin34=VP_TIM1_VS_ControllerModeCombinedResetTrigger -Mcu.Pin35=VP_TIM1_VS_ClockSourceINT -Mcu.Pin36=VP_TIM1_VS_OPM -Mcu.Pin37=VP_TIM14_VS_ClockSourceINT -Mcu.Pin38=VP_TIM15_VS_ClockSourceINT -Mcu.Pin39=VP_TIM16_VS_ClockSourceINT +Mcu.Pin34=VP_TIM1_VS_ControllerModeClock +Mcu.Pin35=VP_TIM14_VS_ClockSourceINT +Mcu.Pin36=VP_TIM15_VS_ClockSourceINT +Mcu.Pin37=VP_TIM16_VS_ClockSourceINT +Mcu.Pin38=VP_TIM16_VS_OPM +Mcu.Pin39=VP_TIM17_VS_ClockSourceINT Mcu.Pin4=PC1 -Mcu.Pin40=VP_TIM16_VS_OPM -Mcu.Pin41=VP_TIM17_VS_ClockSourceINT Mcu.Pin5=PC2 Mcu.Pin6=PC3 Mcu.Pin7=PA0 Mcu.Pin8=PA1 Mcu.Pin9=PA2 -Mcu.PinsNb=42 +Mcu.PinsNb=40 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32G070RBTx @@ -296,9 +294,8 @@ SH.S_TIM15_CH1.0=TIM15_CH1,PWM Generation1 CH1 SH.S_TIM15_CH1.ConfNb=1 SH.S_TIM17_CH1.0=TIM17_CH1,PWM Generation1 CH1 SH.S_TIM17_CH1.ConfNb=1 -SH.S_TIM1_CH1.0=TIM1_CH1,Input_Capture1_from_TI1 -SH.S_TIM1_CH1.1=TIM1_CH1,TriggerSource_TI1FP1 -SH.S_TIM1_CH1.ConfNb=2 +SH.S_TIM1_CH1.0=TIM1_CH1,TriggerSource_TI1FP1 +SH.S_TIM1_CH1.ConfNb=1 SH.S_TIM1_CH2.0=TIM1_CH2,PWM Generation2 CH2 SH.S_TIM1_CH2.ConfNb=1 SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16 @@ -308,19 +305,17 @@ SPI2.Direction=SPI_DIRECTION_2LINES_RXONLY SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler SPI2.Mode=SPI_MODE_MASTER SPI2.VirtualType=VM_MASTER -TIM1.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE +TIM1.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE TIM1.AutomaticOutput=TIM_AUTOMATICOUTPUT_DISABLE TIM1.BreakState=TIM_BREAK_DISABLE -TIM1.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1 TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 -TIM1.ICPolarity_CH1=TIM_INPUTCHANNELPOLARITY_RISING -TIM1.IPParameters=AutoReloadPreload,Prescaler,Period,BreakState,AutomaticOutput,Channel-Input_Capture1_from_TI1,ICPolarity_CH1,OCPolarity_2,Channel-PWM Generation2 CH2,OCMode_PWM-PWM Generation2 CH2,Pulse-PWM Generation2 CH2,OC2Preload_PWM +TIM1.IPParameters=AutoReloadPreload,Prescaler,Period,BreakState,AutomaticOutput,OCPolarity_2,Channel-PWM Generation2 CH2,OCMode_PWM-PWM Generation2 CH2,Pulse-PWM Generation2 CH2,OC2Preload_PWM TIM1.OC2Preload_PWM=DISABLE -TIM1.OCMode_PWM-PWM\ Generation2\ CH2=TIM_OCMODE_PWM2 +TIM1.OCMode_PWM-PWM\ Generation2\ CH2=TIM_OCMODE_PWM1 TIM1.OCPolarity_2=TIM_OCPOLARITY_HIGH -TIM1.Period=1000-1 -TIM1.Prescaler=640-1 -TIM1.Pulse-PWM\ Generation2\ CH2=1020 +TIM1.Period=100-1 +TIM1.Prescaler=1 +TIM1.Pulse-PWM\ Generation2\ CH2=0 TIM14.Channel=TIM_CHANNEL_1 TIM14.IPParameters=Channel,Prescaler,Period,Pulse TIM14.Period=100-1 @@ -357,12 +352,8 @@ VP_TIM16_VS_OPM.Mode=OPM_bit VP_TIM16_VS_OPM.Signal=TIM16_VS_OPM VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT -VP_TIM1_VS_ClockSourceINT.Mode=Internal -VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT -VP_TIM1_VS_ControllerModeCombinedResetTrigger.Mode=Combined_Reset_Trigger_Mode -VP_TIM1_VS_ControllerModeCombinedResetTrigger.Signal=TIM1_VS_ControllerModeCombinedResetTrigger -VP_TIM1_VS_OPM.Mode=OPM_bit -VP_TIM1_VS_OPM.Signal=TIM1_VS_OPM +VP_TIM1_VS_ControllerModeClock.Mode=Clock Mode +VP_TIM1_VS_ControllerModeClock.Signal=TIM1_VS_ControllerModeClock board=custom rtos.0.ip=FREERTOS isbadioc=false