v11.2 changes:

- moved 400ms boot delay to a point AFTER peripherals init
- fixed TIM3 and TIM14 periods
- mvoed light updates to separate function and fixed cuty cylce clamp during dimming process
This commit is contained in:
Anton Mukhin
2024-06-21 15:22:50 +03:00
parent ed9ba49c9c
commit 900f6d7d85
5 changed files with 37 additions and 29 deletions

View File

@@ -6,7 +6,7 @@
#ifndef BOARD_LOGIC_H_
#define BOARD_LOGIC_H_
#define MODBUS_FIRMWARE_VERSION ( /*major*/ 11 + /*minor*/ 1 * 0x100)
#define MODBUS_FIRMWARE_VERSION ( /*major*/ 11 + /*minor*/ 2 * 0x100)
#define MODBUS_BOARD_TYPE (8) //Relay Module board ID
#define REL_MAIN_BIT (1u<<0)

View File

@@ -36,8 +36,8 @@ uint16_t status = 0;
uint16_t motor1_pwm = 0;
uint16_t motor2_pwm = 0;
uint16_t lights_pwm = 0;
uint16_t lights_pwm_target = 0;
int16_t lights_pwm_delta = 0;
volatile uint16_t lights_pwm_target = 0;
volatile int16_t lights_pwm_delta = 0;
uint16_t led_time_act = 0;
void estop_reset(void) {
@@ -88,11 +88,11 @@ void set_pwm(uint8_t unit, uint16_t duty) {
duty = clamp_duty(duty);
if (duty == 0)
HAL_TIM_PWM_Stop(tim, channel);
HAL_TIM_PWM_Stop_IT(tim, channel);
else {
HAL_TIM_PWM_Start(tim, channel);
HAL_TIM_PWM_Start_IT(tim, channel);
__HAL_TIM_SetCompare(tim, channel, duty);
HAL_Delay(5);
//HAL_Delay(1);
}
}
@@ -107,6 +107,23 @@ void set_light(uint16_t duty) {
}
}
void update_light(void) {
static uint32_t count_ms = 0;
// Check if we should change lights pwm for smooth transition
if (lights_pwm != lights_pwm_target) {
// Change pwm only every 20ms (PWM_LIGHTS_STEP)
if(++count_ms == PWM_LIGHTS_STEP) {
count_ms = 0;
lights_pwm = clamp_duty(lights_pwm + lights_pwm_delta);
// Set lights pwm to target if the difference is less than the delta
if (abs(lights_pwm_target - lights_pwm) < abs(lights_pwm_delta))
lights_pwm = lights_pwm_target;
set_pwm(3, lights_pwm);
}
}
}
void loop_iterate()
{
@@ -259,22 +276,9 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
// check if the interrupt comes from TIM1
if(htim->Instance == TIM1) {
static uint32_t count_ms = 0;
update_service_indication();
// Check if we should change lights pwm for smooth transition
if (lights_pwm != lights_pwm_target) {
// Change pwm only every 20ms (PWM_LIGHTS_STEP)
if(++count_ms == PWM_LIGHTS_STEP) {
count_ms = 0;
lights_pwm += lights_pwm_delta;
// Set lights pwm to target if the difference is less than the delta
if (abs(lights_pwm_target - lights_pwm) < abs(lights_pwm_delta))
lights_pwm = lights_pwm_target;
set_pwm(3, lights_pwm);
}
}
update_light();
}
}

View File

@@ -78,6 +78,7 @@ static void MX_TIM14_Init(void);
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
@@ -95,7 +96,7 @@ int main(void)
SystemClock_Config();
/* USER CODE BEGIN SysInit */
HAL_Delay(400);
// HAL_Delay(400);
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
@@ -106,6 +107,7 @@ int main(void)
MX_TIM1_Init();
MX_TIM14_Init();
/* USER CODE BEGIN 2 */
HAL_Delay(400);
board_init();
/* USER CODE END 2 */
@@ -234,7 +236,7 @@ static void MX_TIM3_Init(void)
htim3.Instance = TIM3;
htim3.Init.Prescaler = 240-1;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 255;
htim3.Init.Period = 255-1;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
@@ -286,7 +288,7 @@ static void MX_TIM14_Init(void)
htim14.Instance = TIM14;
htim14.Init.Prescaler = 6-1;
htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
htim14.Init.Period = 255;
htim14.Init.Period = 255-1;
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim14) != HAL_OK)

View File

@@ -78,5 +78,6 @@
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;"/>
<stringAttribute key="process_factory_id" value="com.st.stm32cube.ide.mcu.debug.launch.HardwareDebugProcessFactory"/>
</launchConfiguration>

View File

@@ -66,8 +66,8 @@ Mcu.PinsNb=23
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F030K6Tx
MxCube.Version=6.10.0
MxDb.Version=DB.6.0.100
MxCube.Version=6.11.1
MxDb.Version=DB.6.0.111
NVIC.DMA1_Channel2_3_IRQn=true\:2\:0\:true\:false\:true\:false\:true\:true
NVIC.EXTI0_1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.EXTI4_15_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
@@ -137,8 +137,9 @@ PB1.GPIOParameters=GPIO_Label
PB1.GPIO_Label=LED_ACT
PB1.Locked=true
PB1.Signal=GPIO_Output
PB3.GPIOParameters=GPIO_Label
PB3.GPIOParameters=GPIO_PuPd,GPIO_Label
PB3.GPIO_Label=RL_MAIN
PB3.GPIO_PuPd=GPIO_NOPULL
PB3.Locked=true
PB3.Signal=GPIO_Output
PB4.Locked=true
@@ -158,7 +159,7 @@ ProjectManager.CustomerFirmwarePackage=
ProjectManager.DefaultFWLocation=true
ProjectManager.DeletePrevious=true
ProjectManager.DeviceId=STM32F030K6Tx
ProjectManager.FirmwarePackage=STM32Cube FW_F0 V1.11.4
ProjectManager.FirmwarePackage=STM32Cube FW_F0 V1.11.5
ProjectManager.FreePins=false
ProjectManager.HalAssertFull=false
ProjectManager.HeapSize=0x200
@@ -215,12 +216,12 @@ TIM1.Prescaler=480-1
TIM14.Channel=TIM_CHANNEL_1
TIM14.IPParameters=Channel,Prescaler,Period,OCMode_PWM
TIM14.OCMode_PWM=TIM_OCMODE_PWM1
TIM14.Period=255
TIM14.Period=255-1
TIM14.Prescaler=6-1
TIM3.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
TIM3.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period,Channel-PWM Generation2 CH2
TIM3.Period=255
TIM3.Period=255-1
TIM3.Prescaler=240-1
USART1.BaudRate=9600
USART1.IPParameters=VirtualMode-Asynchronous,BaudRate