esp加入

This commit is contained in:
2025-10-19 19:08:23 +08:00
parent e7b0457fb9
commit 71ef7cdd20
16 changed files with 948 additions and 97 deletions

223
code/power_ctrl.c Normal file
View File

@@ -0,0 +1,223 @@
/*
* power_ctrl.c
*
* Created on: 2025<32><35>10<31><30>17<31><37>
* Author: LHYe200
*/
#include "power_ctrl.h"
#include "zf_driver_pit.h"
#include "power_out.h"
#include "pid.h"
#include "vofa_client.h"
#include "status_led.h"
#include "math.h"
#include "ina226.h"
// PID DC_OUT1_PID;
// PID DC_AMP1_PID;
uint32 timer_counter_1ms = 0;
// low_pass_filter_t vot_set_filter;
// float vot_set_filtered = 0.0f;
// moving_average_filter_t mov_avg_filter;
// Kalman_filter_t kalman_filter;
// Kalman_filter_t unscented_kalman_filter;
// Kalman_filter_t adaptive_kalman_filter;
// float kalman_q = 0.0001f;
// float kalman_r = 0.10f;
void Power_Ctrl_Init(void)
{
Power_Out_Init();
VOFA_Client_Init();
INA226_Init();
// PID_Init(&DC_OUT1_PID, 3.25, 0.00909, 0.0, 500.0, 36000.0, 24000.0);
// PID_Init(&DC_OUT1_PID, 3.25, 0.00909, 0.0, 500.0, 50000.0, -50000.0);
// PID_Init(&DC_AMP1_PID, 0.0, 0.0, 0.0, 10.0, 50000.0, -50000.0);
// Init_lowPass_alpha(&vot_set_filter, 0.2f / 1000.0f, 10.0f);
// Moving_Average_filter_init(&mov_avg_filter, 10);
// Kalman_filter_init(&kalman_filter, kalman_q, kalman_r);
// Unscented_Kalman_filter_init(&unscented_kalman_filter, kalman_q, kalman_r);
// Adaptive_Kalman_filter_init(&adaptive_kalman_filter, kalman_q, kalman_r);
pit_us_init(CCU60_CH0, 1000);
}
void Power_Ctrl_Enable_Output(uint8 out_index, uint8 enable)
{
if(out_index < POWER_OUT_NUM)
{
Power_Out_Enable(&power_outs[out_index], enable);
}
}
void Power_Ctrl_Loop_1ms(void)
{
timer_counter_1ms++;
// power_outs[4].set_voltage_V = Low_pass_filter(&vot_set_filter, vot_set_filtered);
if(timer_counter_1ms % POWER_OUT_READ_TIME_MS == 0)
{
Power_Out_Read();
// Moving_Average_filter(&mov_avg_filter, power_outs[4].config.v_adc);
// Kalman_filter(&kalman_filter, mov_avg_filter.avg);
// Unscented_Kalman_filter(&unscented_kalman_filter, power_outs[4].config.v_adc);
// Adaptive_Kalman_filter(&adaptive_kalman_filter, power_outs[4].config.v_adc);
}
// if(power_outs[4].enabled)
// {
// // float err = power_outs[4].set_voltage_V - power_outs[4].status.voltage_V;
// // float set_vot = (power_outs[4].set_voltage_V - power_outs[4].config.votK[1]) / power_outs[4].config.votK[0];
// // float err = set_vot - power_outs[4].config.vot_adc_filter.lastYn;
// // if(err < 0.0f)
// // {
// // err *= 5.0f;
// // }
// // PID_Loc_Ctrl(&DC_OUT1_PID, err);
// float err = (power_outs[4].set_voltage_V - power_outs[4].config.votK[1]) / power_outs[4].config.votK[0] - kalman_filter.prevData;
// if(fabsf(err) < 10.0f)
// {
// err = 0.0f;
// }
// else if(fabsf(err) < 282.4f)
// {
// err = err/fabsf(err)*(expf(fabsf(err)*0.02f)-1.0f);
// }
// PID_Loc_Ctrl(&DC_OUT1_PID, err);
// // PID_Inc_Ctrl(&DC_OUT1_PID,power_outs[4].set_voltage_V - power_outs[4].status.voltage_V);
// // if(power_outs[4].status.voltage_V > power_outs[4].set_voltage_V * 1.1f)
// // {
// // Power_Out_Set_PWM(&power_outs[4], 10000);
// // }
// // else if(power_outs[4].status.voltage_V < power_outs[4].set_voltage_V * 0.9f)
// // {
// // Power_Out_Set_PWM(&power_outs[4], 50000);
// // }
// // else
// // {
// // Power_Out_Set_PWM(&power_outs[4], 50000 + DC_OUT1_PID.output);
// // }
//
// Power_Out_Set_PWM(&power_outs[4], 50000 + DC_OUT1_PID.output);
//
// // Power_Out_Set_PWM(&power_outs[4], 10000);
// Flash_LED(STATUS_LED_7);
// }
if(timer_counter_1ms % INA226_READ_TIME_MS == 0)
{
INA226_Read();
}
// if(timer_counter_1ms % 3 == 0)
// {
// PID_Loc_Ctrl(&DC_OUT1_PID,power_outs[4].set_voltage_V - power_outs[4].status.voltage_V);
// }
timer_counter_1ms %= (1 * 500);
}
void Power_Status_Upload(void)
{
VOFA_Set_JustFloat_Data(0, power_outs[0].status.voltage_V);
VOFA_Set_JustFloat_Data(1, power_outs[0].status.current_A);
VOFA_Set_JustFloat_Data(2, power_outs[1].status.voltage_V);
VOFA_Set_JustFloat_Data(3, power_outs[1].status.current_A);
VOFA_Set_JustFloat_Data(4, power_outs[2].status.voltage_V);
VOFA_Set_JustFloat_Data(5, power_outs[2].status.current_A);
VOFA_Set_JustFloat_Data(6, power_outs[3].status.voltage_V);
VOFA_Set_JustFloat_Data(7, power_outs[3].status.current_A);
VOFA_Set_JustFloat_Data(8, power_outs[4].status.voltage_V);
VOFA_Set_JustFloat_Data(9, power_outs[4].status.current_A);
VOFA_Set_JustFloat_Data(10, power_outs[5].status.voltage_V);
VOFA_Set_JustFloat_Data(11, power_outs[5].status.current_A);
VOFA_Set_JustFloat_Data(12, power_outs[6].status.voltage_V);
VOFA_Set_JustFloat_Data(13, power_outs[6].status.current_A);
VOFA_Set_JustFloat_Data(14, power_outs[7].status.voltage_V);
VOFA_Set_JustFloat_Data(15, power_outs[7].status.current_A);
VOFA_Set_JustFloat_Data(16,ina226[0].result.voltage_V);
VOFA_Set_JustFloat_Data(17,ina226[0].result.current_A);
VOFA_Set_JustFloat_Data(18,ina226[1].result.voltage_V);
VOFA_Set_JustFloat_Data(19,ina226[1].result.current_A);
VOFA_Set_JustFloat_Data(22,vofa_last_data);
VOFA_Send_Datas(27);
}
// void Power_Status_Upload(void)
// {
// VOFA_Set_JustFloat_Data(0, power_outs[0].status.voltage_V);
// VOFA_Set_JustFloat_Data(1, power_outs[0].status.current_A);
// VOFA_Set_JustFloat_Data(2, power_outs[1].status.voltage_V);
// VOFA_Set_JustFloat_Data(3, power_outs[1].status.current_A);
// VOFA_Set_JustFloat_Data(4, power_outs[2].status.voltage_V);
// VOFA_Set_JustFloat_Data(5, power_outs[2].status.current_A);
// VOFA_Set_JustFloat_Data(6, power_outs[3].status.voltage_V);
// VOFA_Set_JustFloat_Data(7, power_outs[3].status.current_A);
// VOFA_Set_JustFloat_Data(8, power_outs[4].status.voltage_V);
// VOFA_Set_JustFloat_Data(9, power_outs[4].status.current_A);
// VOFA_Set_JustFloat_Data(10, power_outs[5].status.voltage_V);
// VOFA_Set_JustFloat_Data(11, power_outs[5].status.current_A);
// VOFA_Set_JustFloat_Data(12, power_outs[6].status.voltage_V);
// VOFA_Set_JustFloat_Data(13, power_outs[6].status.current_A);
// VOFA_Set_JustFloat_Data(14, power_outs[7].status.voltage_V);
// VOFA_Set_JustFloat_Data(15, power_outs[7].status.current_A);
// VOFA_Set_JustFloat_Data(16,vofa_last_data);
// VOFA_Set_JustFloat_Data(17,DC_OUT1_PID.p_output);
// VOFA_Set_JustFloat_Data(18,DC_OUT1_PID.i_output);
// VOFA_Set_JustFloat_Data(19,DC_OUT1_PID.d_output);
// VOFA_Set_JustFloat_Data(20,power_outs[4].config.vot_adc_filter.lastYn);
// VOFA_Set_JustFloat_Data(21,DC_OUT1_PID.output);
// VOFA_Set_JustFloat_Data(22,mov_avg_filter.avg);
// VOFA_Set_JustFloat_Data(23,kalman_filter.prevData);
// VOFA_Set_JustFloat_Data(24,unscented_kalman_filter.prevData);
// VOFA_Set_JustFloat_Data(25,adaptive_kalman_filter.prevData);
// VOFA_Set_JustFloat_Data(26,power_outs[4].config.v_adc);
// VOFA_Send_Datas(27);
// }
void Power_Vofa_Set(void)
{
// if(vofa_receive_new_data[1])
// {
// vofa_receive_new_data[1] = 0;
// DC_OUT1_PID.kp = vofa_data[1];
// }
// if(vofa_receive_new_data[2])
// {
// vofa_receive_new_data[2] = 0;
// DC_OUT1_PID.ki = vofa_data[2];
// }
// if(vofa_receive_new_data[3])
// {
// vofa_receive_new_data[3] = 0;
// DC_OUT1_PID.kd = vofa_data[3];
// }
// if(vofa_receive_new_data[4])
// {
// vofa_receive_new_data[4] = 0;
// power_outs[4].set_voltage_V = vofa_data[4];
// // vot_set_filtered = vofa_data[4];
// }
// if(vofa_receive_new_data[5])
// {
// vofa_receive_new_data[5] = 0;
// Power_Out_Set_PWM(&power_outs[4], vofa_data[5]);
// }
}