BMCL_ParaLoadF1.c 4.6 KB
#include "BMCL_ParaLoadF1.h"
#include "BMCL_Config.h"
#include "ParaMge_F1.h"

#include "motor.h"
#include "math_utils.h"
#include "FOC.h"

#include "stdlib.h"
#include "string.h"

void BMCL_PL_PreLoadALL(void)
{
    BMCL_motorSetting_PreLoad();
    BMCL_motorPID_PreLoad();
    BMCL_filter_PreLoad();
}

int BMCL_PL_LoadPID4ParaMge(void)
{
    __PARAMGE_TEMP_GENPID *pidConfig = malloc(sizeof(__PARAMGE_TEMP_GENPID));
    memset(pidConfig, 0x00, sizeof(__PARAMGE_TEMP_GENPID));
    
    paraMge_GetGenPID(__PARAMGE_INDEX_GENPID_ANGPID, pidConfig);
    motor_GenPID_Set_Needle(__MOTOR_GENPID_INDEX_ANG,&(pidConfig->config));

    memset(pidConfig, 0x00, sizeof(__PARAMGE_TEMP_GENPID));
    paraMge_GetGenPID(__PARAMGE_INDEX_GENPID_VELPID, pidConfig);
    motor_GenPID_Set_Needle(__MOTOR_GENPID_INDEX_VEL,&(pidConfig->config));

    free(pidConfig);
}

int BMCL_PL_WritePID2ParaMge(void)
{
    __PARAMGE_TEMP_GENPID *pidConfig = malloc(sizeof(__PARAMGE_TEMP_GENPID));
    memset(pidConfig, 0x00, sizeof(__PARAMGE_TEMP_GENPID));

    motor_GenPID_Get_Needle(__MOTOR_GENPID_INDEX_ANG,&(pidConfig->config));
    paraMge_WriteGenPID(__PARAMGE_INDEX_GENPID_ANGPID,pidConfig);

    memset(pidConfig, 0x00, sizeof(__PARAMGE_TEMP_GENPID));
    motor_GenPID_Get_Needle(__MOTOR_GENPID_INDEX_VEL,&(pidConfig->config));
    paraMge_WriteGenPID(__PARAMGE_INDEX_GENPID_VELPID,pidConfig);

    free(pidConfig);
}

int BMCL_PL_LoadFilter4ParaMge(void)
{
    __PARAMGE_TEMP_KPF kfpConfig = {0};
    paraMge_GetKPF(__PARAMGE_INDEX_KPF_VEL, &kfpConfig);
    motor_velKFP_Set(kfpConfig.config);

    memset(&kfpConfig, 0x00, sizeof(__PARAMGE_TEMP_KPF));

    paraMge_GetKPF(__PARAMGE_INDEX_KPF_ANG, &kfpConfig);
    motor_angKFP_Set(kfpConfig.config);

    __PARAMGE_TEMP_INTF intfConfig = {0};
    paraMge_GetINIF(__PARAMGE_INDEX_INTF_0, &intfConfig);
    inter_filter_SetRange((uint16_t)intfConfig.inter_Range);

    memset(&intfConfig, 0x00, sizeof(__PARAMGE_TEMP_INTF));

    paraMge_GetINIF(__PARAMGE_INDEX_INTF_1, &intfConfig);
    inter_filterC1_SetRange((uint16_t)intfConfig.inter_Range);
}

int BMCL_PL_WriteFilter2ParaMge(void)
{
    __PARAMGE_TEMP_KPF kfpConfig = {0};
    kfpConfig.config = motor_velKFP_Get();//速度
    paraMge_WriteGenKPF(__PARAMGE_INDEX_KPF_VEL, &kfpConfig);

    memset(&kfpConfig, 0x00, sizeof(__PARAMGE_TEMP_KPF));

    kfpConfig.config = motor_angKFP_Get();//角度
    paraMge_WriteGenKPF(__PARAMGE_INDEX_KPF_ANG, &kfpConfig);

    __PARAMGE_TEMP_INTF intfConfig = {0};
    intfConfig.inter_Range = inter_filter_GetRange();
    paraMge_WriteINIF(__PARAMGE_INDEX_INTF_0, &intfConfig);

    memset(&intfConfig, 0x00, sizeof(__PARAMGE_TEMP_INTF));

    intfConfig.inter_Range = inter_filterC1_GetRange();
    paraMge_WriteINIF(__PARAMGE_INDEX_INTF_1, &intfConfig);
}

int BMCL_PL_LoadMot4ParaMge(void)
{
    __PARAMGE_TEMP_MOT *motConfig = malloc(sizeof(__PARAMGE_TEMP_MOT));
    memset(motConfig, 0x00, sizeof(__PARAMGE_TEMP_MOT));

    paraMge_GetMOT(motConfig);
    
    motor_Set_ZeroEAngleOffset(motConfig->mge_mot_eleAngleOffset);
    motor_SetPP(motConfig->mot_FOC_PP);
    
    mge_Set_abOffset(motConfig->mge_absOffset);
    mge_Set_direction(motConfig->mge_direction);

    motor_SetUpLimit(motConfig->mot_LimitAngle_B);
    motor_SetDownLimit(motConfig->mot_LimitAngle_S);

    FOC_PARA focConfig = {0};
    focConfig.foc_Udc = motConfig->mot_FOC_Udc;
    focConfig.foc_ULimit = motConfig->mot_FOC_ULimitOnUdc;

    foc_para_Set(focConfig);

    free(motConfig);
}


int BMCL_PL_WriteMot2ParaMge(void)
{
    __PARAMGE_TEMP_MOT *motConfig = malloc(sizeof(__PARAMGE_TEMP_MOT));
    memset(motConfig, 0x00, sizeof(__PARAMGE_TEMP_MOT));

    motConfig->mge_Calibration = BMCL_mot_Calibration;
    
    motConfig->mge_mot_eleAngleOffset = motor_Get_ZeroEAngleOffset();
    motConfig->mot_FOC_PP = motor_GetPP();
    
    motConfig->mge_absOffset = mge_Get_abOffset();
    motConfig->mge_direction = mge_Get_direction();

    motConfig->mot_LimitAngle_B = motor_GetUpLimit();
    motConfig->mot_LimitAngle_S = motor_GetDownLimit();

    FOC_PARA focConfig = {0};
    focConfig = foc_para_Get();

    motConfig->mot_FOC_Udc = focConfig.foc_Udc;
    motConfig->mot_FOC_ULimitOnUdc = focConfig.foc_ULimit;

    paraMge_WriteMOT(motConfig);

    free(motConfig);

}

int BMCL_PL_LoadAll4ParaMge(void)
{
    // CUT##        加载PID
    BMCL_PL_LoadPID4ParaMge();
    // CUT##        加载滤波器
    BMCL_PL_LoadFilter4ParaMge();
    // CUT##        加载电机
    BMCL_PL_LoadMot4ParaMge();

}

int BMCL_PL_WriteAll2ParaMge(void)
{
    // CUT##        写入PID
    BMCL_PL_WritePID2ParaMge();
    // CUT##        写入滤波器
    BMCL_PL_WriteFilter2ParaMge();
    // CUT##        写入电机
    BMCL_PL_WriteMot2ParaMge();

}