Index: ctrl/firmware/Main/CubeMX/charger.ioc
===================================================================
--- ctrl/firmware/Main/CubeMX/charger.ioc	(revision 97)
+++ ctrl/firmware/Main/CubeMX/charger.ioc	(revision 98)
@@ -285,12 +285,13 @@
 Mcu.IP17=SPI4
 Mcu.IP18=SYS
-Mcu.IP19=TIM3
+Mcu.IP19=TIM1
 Mcu.IP2=CORTEX_M7
-Mcu.IP20=TIM6
-Mcu.IP21=TIM8
-Mcu.IP22=USART2
-Mcu.IP23=USART3
-Mcu.IP24=USART10
-Mcu.IP25=VREFBUF
+Mcu.IP20=TIM3
+Mcu.IP21=TIM6
+Mcu.IP22=TIM8
+Mcu.IP23=USART2
+Mcu.IP24=USART3
+Mcu.IP25=USART10
+Mcu.IP26=VREFBUF
 Mcu.IP3=DAC1
 Mcu.IP4=DEBUG
@@ -300,5 +301,5 @@
 Mcu.IP8=FREERTOS
 Mcu.IP9=I2C1
-Mcu.IPNb=26
+Mcu.IPNb=27
 Mcu.Name=STM32H723ZETx
 Mcu.Package=LQFP144
@@ -310,72 +311,75 @@
 Mcu.Pin13=PG1
 Mcu.Pin14=PE7
-Mcu.Pin15=PE11
-Mcu.Pin16=PE12
-Mcu.Pin17=PE13
-Mcu.Pin18=PE14
-Mcu.Pin19=PE15
+Mcu.Pin15=PE8
+Mcu.Pin16=PE9
+Mcu.Pin17=PE11
+Mcu.Pin18=PE12
+Mcu.Pin19=PE13
 Mcu.Pin2=PE6
-Mcu.Pin20=PB10
-Mcu.Pin21=PB14
-Mcu.Pin22=PB15
-Mcu.Pin23=PD8
-Mcu.Pin24=PD9
-Mcu.Pin25=PD10
-Mcu.Pin26=PD11
-Mcu.Pin27=PD12
-Mcu.Pin28=PD13
-Mcu.Pin29=PC6
+Mcu.Pin20=PE14
+Mcu.Pin21=PE15
+Mcu.Pin22=PB10
+Mcu.Pin23=PB14
+Mcu.Pin24=PB15
+Mcu.Pin25=PD8
+Mcu.Pin26=PD9
+Mcu.Pin27=PD10
+Mcu.Pin28=PD11
+Mcu.Pin29=PD12
 Mcu.Pin3=PC14-OSC32_IN
-Mcu.Pin30=PC7
-Mcu.Pin31=PC8
-Mcu.Pin32=PC9
-Mcu.Pin33=PA8
-Mcu.Pin34=PA13(JTMS/SWDIO)
-Mcu.Pin35=PA14(JTCK/SWCLK)
-Mcu.Pin36=PA15(JTDI)
-Mcu.Pin37=PC10
-Mcu.Pin38=PC11
-Mcu.Pin39=PC12
+Mcu.Pin30=PD13
+Mcu.Pin31=PC6
+Mcu.Pin32=PC7
+Mcu.Pin33=PC8
+Mcu.Pin34=PC9
+Mcu.Pin35=PA8
+Mcu.Pin36=PA13(JTMS/SWDIO)
+Mcu.Pin37=PA14(JTCK/SWCLK)
+Mcu.Pin38=PA15(JTDI)
+Mcu.Pin39=PC10
 Mcu.Pin4=PC15-OSC32_OUT
-Mcu.Pin40=PD2
-Mcu.Pin41=PD3
-Mcu.Pin42=PD4
-Mcu.Pin43=PD5
-Mcu.Pin44=PD6
-Mcu.Pin45=PD7
-Mcu.Pin46=PG9
-Mcu.Pin47=PG10
-Mcu.Pin48=PG11
-Mcu.Pin49=PG12
+Mcu.Pin40=PC11
+Mcu.Pin41=PC12
+Mcu.Pin42=PD2
+Mcu.Pin43=PD3
+Mcu.Pin44=PD4
+Mcu.Pin45=PD5
+Mcu.Pin46=PD6
+Mcu.Pin47=PD7
+Mcu.Pin48=PG9
+Mcu.Pin49=PG10
 Mcu.Pin5=PF0
-Mcu.Pin50=PG13
-Mcu.Pin51=PG14
-Mcu.Pin52=PG15
-Mcu.Pin53=PB4(NJTRST)
-Mcu.Pin54=PB6
-Mcu.Pin55=PB7
-Mcu.Pin56=PB8
-Mcu.Pin57=PB9
-Mcu.Pin58=VP_ADC3_TempSens_Input
-Mcu.Pin59=VP_ADC3_Vref_Input
+Mcu.Pin50=PG11
+Mcu.Pin51=PG12
+Mcu.Pin52=PG13
+Mcu.Pin53=PG14
+Mcu.Pin54=PG15
+Mcu.Pin55=PB4(NJTRST)
+Mcu.Pin56=PB6
+Mcu.Pin57=PB7
+Mcu.Pin58=PB8
+Mcu.Pin59=PB9
 Mcu.Pin6=PF1
-Mcu.Pin60=VP_ADC3_Vbat_Input
-Mcu.Pin61=VP_DTS_VS-DTS
-Mcu.Pin62=VP_FATFS_VS_SDIO
-Mcu.Pin63=VP_FREERTOS_VS_CMSIS_V2
-Mcu.Pin64=VP_RTC_VS_RTC_Activate
-Mcu.Pin65=VP_RTC_VS_RTC_Calendar
-Mcu.Pin66=VP_SYS_VS_tim7
-Mcu.Pin67=VP_TIM3_VS_ClockSourceINT
-Mcu.Pin68=VP_TIM6_VS_ClockSourceINT
-Mcu.Pin69=VP_TIM8_VS_ControllerModeReset
+Mcu.Pin60=VP_ADC3_TempSens_Input
+Mcu.Pin61=VP_ADC3_Vref_Input
+Mcu.Pin62=VP_ADC3_Vbat_Input
+Mcu.Pin63=VP_DTS_VS-DTS
+Mcu.Pin64=VP_FATFS_VS_SDIO
+Mcu.Pin65=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin66=VP_RTC_VS_RTC_Activate
+Mcu.Pin67=VP_RTC_VS_RTC_Calendar
+Mcu.Pin68=VP_SYS_VS_tim7
+Mcu.Pin69=VP_TIM1_VS_ClockSourceINT
 Mcu.Pin7=PH0-OSC_IN
-Mcu.Pin70=VP_TIM8_VS_ClockSourceINT
-Mcu.Pin71=VP_VREFBUF_V_VREFBUF
-Mcu.Pin72=VP_MEMORYMAP_VS_MEMORYMAP
-Mcu.Pin73=VP_STMicroelectronics.X-CUBE-EEPRMA1_VS_BoardOoPartJjEEPROM_5.1.0_5.1.0
+Mcu.Pin70=VP_TIM3_VS_ClockSourceINT
+Mcu.Pin71=VP_TIM6_VS_ClockSourceINT
+Mcu.Pin72=VP_TIM8_VS_ControllerModeReset
+Mcu.Pin73=VP_TIM8_VS_ClockSourceINT
+Mcu.Pin74=VP_VREFBUF_V_VREFBUF
+Mcu.Pin75=VP_MEMORYMAP_VS_MEMORYMAP
+Mcu.Pin76=VP_STMicroelectronics.X-CUBE-EEPRMA1_VS_BoardOoPartJjEEPROM_5.1.0_5.1.0
 Mcu.Pin8=PH1-OSC_OUT
 Mcu.Pin9=PC0
-Mcu.PinsNb=74
+Mcu.PinsNb=77
 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-AZRTOS-H7.3.3.0
 Mcu.ThirdParty1=STMicroelectronics.X-CUBE-EEPRMA1.5.1.0
@@ -588,4 +592,13 @@
 PE7.Locked=true
 PE7.Signal=GPIO_Output
+PE8.GPIOParameters=GPIO_Label
+PE8.GPIO_Label=CHARGE_PWM_L
+PE8.Locked=true
+PE8.Mode=PWM Generation1 CH1 CH1N
+PE8.Signal=TIM1_CH1N
+PE9.GPIOParameters=GPIO_Label
+PE9.GPIO_Label=CHARGE_PWM_H
+PE9.Locked=true
+PE9.Signal=S_TIM1_CH1
 PF0.GPIOParameters=GPIO_Label
 PF0.GPIO_Label=EEPROM_I2C_SDA
@@ -673,5 +686,5 @@
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_BDMA_Init-BDMA-false-HAL-true,4-MX_RTC_Init-RTC-false-HAL-true,5-MX_SPI4_Init-SPI4-false-HAL-true,6-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,7-SystemClock_Config-RCC-false-HAL-false,8-MX_FATFS_Init-FATFS-false-HAL-false,9-MX_TIM8_Init-TIM8-false-HAL-true,10-MX_SPI2_Init-SPI2-false-HAL-true,11-MX_USART2_UART_Init-USART2-false-HAL-true,12-MX_USART10_UART_Init-USART10-false-HAL-true,13-MX_TIM6_Init-TIM6-false-HAL-true,14-MX_I2C2_Init-I2C2-false-HAL-true,15-MX_ADC3_Init-ADC3-false-HAL-true,16-MX_TIM3_Init-TIM3-false-HAL-true,17-MX_I2C1_Init-I2C1-false-HAL-true,18-MX_USART3_UART_Init-USART3-false-HAL-true,19-MX_DTS_Init-DTS-false-HAL-true,20-MX_DAC1_Init-DAC1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,0-MX_VREFBUF_Init-VREFBUF-false-HAL-true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_BDMA_Init-BDMA-false-HAL-true,4-MX_RTC_Init-RTC-false-HAL-true,5-MX_SPI4_Init-SPI4-false-HAL-true,6-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,7-SystemClock_Config-RCC-false-HAL-false,8-MX_FATFS_Init-FATFS-false-HAL-false,9-MX_TIM8_Init-TIM8-false-HAL-true,10-MX_SPI2_Init-SPI2-false-HAL-true,11-MX_USART2_UART_Init-USART2-false-HAL-true,12-MX_USART10_UART_Init-USART10-false-HAL-true,13-MX_TIM6_Init-TIM6-false-HAL-true,14-MX_I2C2_Init-I2C2-false-HAL-true,15-MX_ADC3_Init-ADC3-false-HAL-true,16-MX_TIM3_Init-TIM3-false-HAL-true,17-MX_I2C1_Init-I2C1-false-HAL-true,18-MX_USART3_UART_Init-USART3-false-HAL-true,19-MX_DTS_Init-DTS-false-HAL-true,20-MX_DAC1_Init-DAC1-false-HAL-true,21-MX_TIM1_Init-TIM1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true,0-MX_VREFBUF_Init-VREFBUF-false-HAL-true
 RCC.ADCCLockSelection=RCC_ADCCLKSOURCE_PLL3
 RCC.ADCFreq_Value=60000000
@@ -774,4 +787,6 @@
 SH.GPXTI8.0=GPIO_EXTI8
 SH.GPXTI8.ConfNb=1
+SH.S_TIM1_CH1.0=TIM1_CH1,PWM Generation1 CH1 CH1N
+SH.S_TIM1_CH1.ConfNb=1
 SH.S_TIM3_CH2.0=TIM3_CH2,PWM Generation2 CH2
 SH.S_TIM3_CH2.ConfNb=1
@@ -824,4 +839,18 @@
 STMicroelectronics.X-CUBE-EEPRMA1.5.1.0.IPParameters=EEPROMCcBoardOoPartJjM24JjM24XX,EEPROMCcBoardOoPartJjM24256EAaFJjM24256EAaF
 STMicroelectronics.X-CUBE-EEPRMA1.5.1.0_SwParameter=EEPROMCcBoardOoPartJjM24JjM24XX\:true;EEPROMCcBoardOoPartJjM24256EAaFJjM24256EAaF\:true;
+TIM1.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
+TIM1.AutomaticOutput=TIM_AUTOMATICOUTPUT_ENABLE
+TIM1.BreakState=TIM_BREAK_DISABLE
+TIM1.Channel-PWM\ Generation1\ CH1\ CH1N=TIM_CHANNEL_1
+TIM1.DeadTime=100
+TIM1.IPParameters=Channel-PWM Generation1 CH1 CH1N,Prescaler,Period,AutoReloadPreload,OCNPolarity_1,OCIdleState_1,Pulse-PWM Generation1 CH1 CH1N,BreakState,AutomaticOutput,OffStateRunMode,OffStateIDLEMode,LockLevel,DeadTime
+TIM1.LockLevel=TIM_LOCKLEVEL_1
+TIM1.OCIdleState_1=TIM_OCIDLESTATE_SET
+TIM1.OCNPolarity_1=TIM_OCNPOLARITY_HIGH
+TIM1.OffStateIDLEMode=TIM_OSSI_ENABLE
+TIM1.OffStateRunMode=TIM_OSSR_ENABLE
+TIM1.Period=1600
+TIM1.Prescaler=0
+TIM1.Pulse-PWM\ Generation1\ CH1\ CH1N=100
 TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
 TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
@@ -872,4 +901,6 @@
 VP_SYS_VS_tim7.Mode=TIM7
 VP_SYS_VS_tim7.Signal=SYS_VS_tim7
+VP_TIM1_VS_ClockSourceINT.Mode=Internal
+VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
 VP_TIM3_VS_ClockSourceINT.Mode=Internal
 VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT
